jaci-ui 0.2.0 → 0.4.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 (172) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/README.md +95 -0
  3. package/dist/components/button-group/button-group.cjs +22 -0
  4. package/dist/components/button-group/button-group.cjs.map +1 -0
  5. package/dist/components/button-group/button-group.d.cts +12 -0
  6. package/dist/components/button-group/button-group.d.ts +12 -0
  7. package/dist/components/button-group/button-group.js +21 -0
  8. package/dist/components/button-group/button-group.js.map +1 -0
  9. package/dist/components/button-group/index.d.cts +2 -0
  10. package/dist/components/button-group/index.d.ts +2 -0
  11. package/dist/components/calendar/calendar.cjs +377 -0
  12. package/dist/components/calendar/calendar.cjs.map +1 -0
  13. package/dist/components/calendar/calendar.d.cts +56 -0
  14. package/dist/components/calendar/calendar.d.ts +56 -0
  15. package/dist/components/calendar/calendar.js +368 -0
  16. package/dist/components/calendar/calendar.js.map +1 -0
  17. package/dist/components/calendar/index.d.cts +2 -0
  18. package/dist/components/calendar/index.d.ts +2 -0
  19. package/dist/components/combobox/combobox.cjs +13 -1
  20. package/dist/components/combobox/combobox.cjs.map +1 -1
  21. package/dist/components/combobox/combobox.d.cts +7 -2
  22. package/dist/components/combobox/combobox.d.ts +7 -2
  23. package/dist/components/combobox/combobox.js +13 -2
  24. package/dist/components/combobox/combobox.js.map +1 -1
  25. package/dist/components/combobox/index.d.cts +2 -2
  26. package/dist/components/combobox/index.d.ts +2 -2
  27. package/dist/components/controls/input.cjs +26 -5
  28. package/dist/components/controls/input.cjs.map +1 -1
  29. package/dist/components/controls/input.d.cts +5 -2
  30. package/dist/components/controls/input.d.ts +5 -2
  31. package/dist/components/controls/input.js +28 -7
  32. package/dist/components/controls/input.js.map +1 -1
  33. package/dist/components/controls/textarea.cjs +26 -5
  34. package/dist/components/controls/textarea.cjs.map +1 -1
  35. package/dist/components/controls/textarea.d.cts +5 -2
  36. package/dist/components/controls/textarea.d.ts +5 -2
  37. package/dist/components/controls/textarea.js +28 -7
  38. package/dist/components/controls/textarea.js.map +1 -1
  39. package/dist/components/date-picker/date-picker.cjs +9 -9
  40. package/dist/components/date-picker/date-picker.cjs.map +1 -1
  41. package/dist/components/date-picker/date-picker.d.cts +3 -1
  42. package/dist/components/date-picker/date-picker.d.ts +3 -1
  43. package/dist/components/date-picker/date-picker.js +9 -9
  44. package/dist/components/date-picker/date-picker.js.map +1 -1
  45. package/dist/components/date-range-picker/date-range-picker.cjs +589 -0
  46. package/dist/components/date-range-picker/date-range-picker.cjs.map +1 -0
  47. package/dist/components/date-range-picker/date-range-picker.d.cts +134 -0
  48. package/dist/components/date-range-picker/date-range-picker.d.ts +134 -0
  49. package/dist/components/date-range-picker/date-range-picker.js +568 -0
  50. package/dist/components/date-range-picker/date-range-picker.js.map +1 -0
  51. package/dist/components/date-range-picker/index.d.cts +2 -0
  52. package/dist/components/date-range-picker/index.d.ts +2 -0
  53. package/dist/components/empty-state/empty-state.cjs +62 -0
  54. package/dist/components/empty-state/empty-state.cjs.map +1 -0
  55. package/dist/components/empty-state/empty-state.d.cts +18 -0
  56. package/dist/components/empty-state/empty-state.d.ts +18 -0
  57. package/dist/components/empty-state/empty-state.js +57 -0
  58. package/dist/components/empty-state/empty-state.js.map +1 -0
  59. package/dist/components/empty-state/index.d.cts +2 -0
  60. package/dist/components/empty-state/index.d.ts +2 -0
  61. package/dist/components/field/field.cjs +106 -11
  62. package/dist/components/field/field.cjs.map +1 -1
  63. package/dist/components/field/field.d.cts +22 -4
  64. package/dist/components/field/field.d.ts +22 -4
  65. package/dist/components/field/field.js +107 -13
  66. package/dist/components/field/field.js.map +1 -1
  67. package/dist/components/field/index.d.cts +2 -2
  68. package/dist/components/field/index.d.ts +2 -2
  69. package/dist/components/icon-button/icon-button.cjs +40 -0
  70. package/dist/components/icon-button/icon-button.cjs.map +1 -0
  71. package/dist/components/icon-button/icon-button.d.cts +12 -0
  72. package/dist/components/icon-button/icon-button.d.ts +12 -0
  73. package/dist/components/icon-button/icon-button.js +40 -0
  74. package/dist/components/icon-button/icon-button.js.map +1 -0
  75. package/dist/components/icon-button/index.d.cts +2 -0
  76. package/dist/components/icon-button/index.d.ts +2 -0
  77. package/dist/components/input-group/index.d.cts +2 -0
  78. package/dist/components/input-group/index.d.ts +2 -0
  79. package/dist/components/input-group/input-group.cjs +32 -0
  80. package/dist/components/input-group/input-group.cjs.map +1 -0
  81. package/dist/components/input-group/input-group.d.cts +15 -0
  82. package/dist/components/input-group/input-group.d.ts +15 -0
  83. package/dist/components/input-group/input-group.js +30 -0
  84. package/dist/components/input-group/input-group.js.map +1 -0
  85. package/dist/components/pin-input/index.d.cts +2 -0
  86. package/dist/components/pin-input/index.d.ts +2 -0
  87. package/dist/components/pin-input/pin-input.cjs +266 -0
  88. package/dist/components/pin-input/pin-input.cjs.map +1 -0
  89. package/dist/components/pin-input/pin-input.d.cts +46 -0
  90. package/dist/components/pin-input/pin-input.d.ts +46 -0
  91. package/dist/components/pin-input/pin-input.js +258 -0
  92. package/dist/components/pin-input/pin-input.js.map +1 -0
  93. package/dist/components/select/index.d.cts +2 -2
  94. package/dist/components/select/index.d.ts +2 -2
  95. package/dist/components/select/select.cjs +80 -3
  96. package/dist/components/select/select.cjs.map +1 -1
  97. package/dist/components/select/select.d.cts +18 -3
  98. package/dist/components/select/select.d.ts +18 -3
  99. package/dist/components/select/select.js +78 -5
  100. package/dist/components/select/select.js.map +1 -1
  101. package/dist/components/tags-input/tags-input.cjs +83 -5
  102. package/dist/components/tags-input/tags-input.cjs.map +1 -1
  103. package/dist/components/tags-input/tags-input.d.cts +3 -0
  104. package/dist/components/tags-input/tags-input.d.ts +3 -0
  105. package/dist/components/tags-input/tags-input.js +83 -5
  106. package/dist/components/tags-input/tags-input.js.map +1 -1
  107. package/dist/components/upload/index.d.cts +2 -2
  108. package/dist/components/upload/index.d.ts +2 -2
  109. package/dist/components/upload/upload.cjs +90 -10
  110. package/dist/components/upload/upload.cjs.map +1 -1
  111. package/dist/components/upload/upload.d.cts +25 -2
  112. package/dist/components/upload/upload.d.ts +25 -2
  113. package/dist/components/upload/upload.js +89 -11
  114. package/dist/components/upload/upload.js.map +1 -1
  115. package/dist/index.cjs +70 -0
  116. package/dist/index.d.cts +21 -5
  117. package/dist/index.d.ts +21 -5
  118. package/dist/index.js +13 -5
  119. package/dist/styled-system/recipes/button-group.cjs +30 -0
  120. package/dist/styled-system/recipes/button-group.cjs.map +1 -0
  121. package/dist/styled-system/recipes/button-group.js +30 -0
  122. package/dist/styled-system/recipes/button-group.js.map +1 -0
  123. package/dist/styled-system/recipes/calendar.cjs +43 -0
  124. package/dist/styled-system/recipes/calendar.cjs.map +1 -0
  125. package/dist/styled-system/recipes/calendar.js +43 -0
  126. package/dist/styled-system/recipes/calendar.js.map +1 -0
  127. package/dist/styled-system/recipes/combobox.cjs +1 -0
  128. package/dist/styled-system/recipes/combobox.cjs.map +1 -1
  129. package/dist/styled-system/recipes/combobox.js +1 -0
  130. package/dist/styled-system/recipes/combobox.js.map +1 -1
  131. package/dist/styled-system/recipes/date-range-picker.cjs +52 -0
  132. package/dist/styled-system/recipes/date-range-picker.cjs.map +1 -0
  133. package/dist/styled-system/recipes/date-range-picker.js +52 -0
  134. package/dist/styled-system/recipes/date-range-picker.js.map +1 -0
  135. package/dist/styled-system/recipes/empty-state.cjs +36 -0
  136. package/dist/styled-system/recipes/empty-state.cjs.map +1 -0
  137. package/dist/styled-system/recipes/empty-state.js +36 -0
  138. package/dist/styled-system/recipes/empty-state.js.map +1 -0
  139. package/dist/styled-system/recipes/icon-button.cjs +40 -0
  140. package/dist/styled-system/recipes/icon-button.cjs.map +1 -0
  141. package/dist/styled-system/recipes/icon-button.js +40 -0
  142. package/dist/styled-system/recipes/icon-button.js.map +1 -0
  143. package/dist/styled-system/recipes/input-group.cjs +30 -0
  144. package/dist/styled-system/recipes/input-group.cjs.map +1 -0
  145. package/dist/styled-system/recipes/input-group.js +30 -0
  146. package/dist/styled-system/recipes/input-group.js.map +1 -0
  147. package/dist/styled-system/recipes/pin-input.cjs +39 -0
  148. package/dist/styled-system/recipes/pin-input.cjs.map +1 -0
  149. package/dist/styled-system/recipes/pin-input.js +39 -0
  150. package/dist/styled-system/recipes/pin-input.js.map +1 -0
  151. package/dist/styled-system/recipes/select.cjs +5 -1
  152. package/dist/styled-system/recipes/select.cjs.map +1 -1
  153. package/dist/styled-system/recipes/select.js +5 -1
  154. package/dist/styled-system/recipes/select.js.map +1 -1
  155. package/dist/styled-system/recipes/upload.cjs +2 -0
  156. package/dist/styled-system/recipes/upload.cjs.map +1 -1
  157. package/dist/styled-system/recipes/upload.js +2 -0
  158. package/dist/styled-system/recipes/upload.js.map +1 -1
  159. package/dist/styles/theme.cjs +15 -0
  160. package/dist/styles/theme.cjs.map +1 -1
  161. package/dist/styles/theme.js +15 -0
  162. package/dist/styles/theme.js.map +1 -1
  163. package/dist/styles.css +901 -46
  164. package/dist/theme/index.d.cts +2 -0
  165. package/dist/theme/index.d.ts +2 -0
  166. package/dist/theme/theme-provider.cjs +86 -0
  167. package/dist/theme/theme-provider.cjs.map +1 -0
  168. package/dist/theme/theme-provider.d.cts +66 -0
  169. package/dist/theme/theme-provider.d.ts +66 -0
  170. package/dist/theme/theme-provider.js +85 -0
  171. package/dist/theme/theme-provider.js.map +1 -0
  172. package/package.json +3 -2
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.cjs","names":["startOfMonth","calendar","createCalendarDate","isBeforeDay","isAfterDay","addMonths","addDays","dateKey","formatMonthLabel","cx","isSameDay","getCalendarDays","getWeekdayLabels"],"sources":["../../../src/components/calendar/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { calendar } from \"../../styled-system/recipes\";\nimport {\n addDays,\n addMonths,\n createCalendarDate,\n dateKey,\n formatMonthLabel,\n getCalendarDays,\n getWeekdayLabels,\n isAfterDay,\n isBeforeDay,\n isSameDay,\n startOfMonth,\n} from \"../date-picker/date-utils\";\n\nexport interface CalendarYearRange {\n start: number;\n end: number;\n}\n\nexport interface CalendarRootProps\n extends Omit<ComponentPropsWithoutRef<\"section\">, \"children\" | \"defaultValue\" | \"value\"> {\n value?: Date | null;\n defaultValue?: Date | null;\n onValueChange?: (value: Date | null) => void;\n referenceDate?: Date;\n locale?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (date: Date) => boolean;\n yearRange?: CalendarYearRange;\n disabled?: boolean;\n children?: ReactNode;\n}\n\ninterface CalendarContextValue {\n calendarId: string;\n dateDisabled: (date: Date) => boolean;\n disabled: boolean;\n focusedDate: Date;\n focusDate: (date: Date, direction?: number) => void;\n locale: string;\n month: Date;\n monthDisabled: (date: Date) => boolean;\n onSelect: (date: Date) => void;\n selected: Date | null;\n setMonth: (date: Date) => void;\n styles: ReturnType<typeof calendar>;\n today: Date;\n weekStartsOn: number;\n yearRange: CalendarYearRange;\n canNavigate: (amount: number) => boolean;\n selectMonth: (month: number) => void;\n selectYear: (year: number) => void;\n registerDay: (key: string, node: HTMLButtonElement | null) => void;\n}\n\nimport { createContext, useContext } from \"react\";\n\nconst CalendarContext = createContext<CalendarContextValue | null>(null);\n\nfunction useCalendarContext() {\n const context = useContext(CalendarContext);\n if (!context) throw new Error(\"Calendar parts must be rendered inside Calendar.Root.\");\n return context;\n}\n\nfunction sameMonth(left: Date, right: Date) {\n return left.getFullYear() === right.getFullYear() && left.getMonth() === right.getMonth();\n}\n\nexport const CalendarRoot = forwardRef<HTMLElement, CalendarRootProps>(function CalendarRoot(\n {\n children,\n className,\n defaultValue = null,\n disabled = false,\n isDateDisabled,\n locale = \"pt-BR\",\n maxDate,\n minDate,\n onValueChange,\n referenceDate,\n value: controlledValue,\n weekStartsOn = 0,\n yearRange: configuredYearRange,\n ...props\n },\n ref,\n) {\n const initialDate = controlledValue ?? defaultValue ?? referenceDate ?? new Date();\n const [uncontrolledValue, setUncontrolledValue] = useState<Date | null>(defaultValue);\n const selected = controlledValue === undefined ? uncontrolledValue : controlledValue;\n const [month, setMonthState] = useState(() => startOfMonth(initialDate));\n const [focusedDate, setFocusedDate] = useState(selected ?? initialDate);\n const dayRefs = useRef(new Map<string, HTMLButtonElement>());\n const calendarId = useId();\n const styles = calendar();\n const today = useMemo(\n () =>\n createCalendarDate(\n (referenceDate ?? new Date()).getFullYear(),\n (referenceDate ?? new Date()).getMonth(),\n (referenceDate ?? new Date()).getDate(),\n ),\n [referenceDate],\n );\n const minMonth = minDate ? startOfMonth(minDate) : undefined;\n const maxMonth = maxDate ? startOfMonth(maxDate) : undefined;\n const yearRange = useMemo(() => {\n const start = configuredYearRange?.start ?? today.getFullYear() - 100;\n const end = configuredYearRange?.end ?? today.getFullYear() + 20;\n const years = [selected?.getFullYear(), minDate?.getFullYear(), maxDate?.getFullYear()].filter(\n (year): year is number => year !== undefined,\n );\n return { start: Math.min(start, end, ...years), end: Math.max(start, end, ...years) };\n }, [configuredYearRange?.end, configuredYearRange?.start, maxDate, minDate, selected, today]);\n\n const dateDisabled = useCallback(\n (date: Date) =>\n Boolean(\n (minDate && isBeforeDay(date, minDate)) ||\n (maxDate && isAfterDay(date, maxDate)) ||\n isDateDisabled?.(date),\n ),\n [isDateDisabled, maxDate, minDate],\n );\n const monthDisabled = useCallback(\n (date: Date) => {\n const first = startOfMonth(date);\n const last = createCalendarDate(date.getFullYear(), date.getMonth() + 1, 0);\n return Boolean(\n (minDate && isBeforeDay(last, minDate)) || (maxDate && isAfterDay(first, maxDate)),\n );\n },\n [maxDate, minDate],\n );\n const clampMonth = useCallback(\n (date: Date) => {\n const normalized = startOfMonth(date);\n if (minMonth && isBeforeDay(normalized, minMonth)) return minMonth;\n if (maxMonth && isAfterDay(normalized, maxMonth)) return maxMonth;\n return normalized;\n },\n [maxMonth, minMonth],\n );\n const setMonth = useCallback((date: Date) => setMonthState(clampMonth(date)), [clampMonth]);\n const canNavigate = useCallback(\n (amount: number) => {\n const next = addMonths(month, amount);\n return (\n !(minMonth && isBeforeDay(next, minMonth)) && !(maxMonth && isAfterDay(next, maxMonth))\n );\n },\n [maxMonth, minMonth, month],\n );\n const setValue = useCallback(\n (nextValue: Date | null) => {\n if (controlledValue === undefined) setUncontrolledValue(nextValue);\n onValueChange?.(nextValue);\n },\n [controlledValue, onValueChange],\n );\n const onSelect = useCallback(\n (date: Date) => {\n if (disabled || dateDisabled(date)) return;\n const next = createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());\n setValue(next);\n setFocusedDate(next);\n setMonth(next);\n },\n [dateDisabled, disabled, setMonth, setValue],\n );\n const focusDate = useCallback(\n (date: Date, direction = 1) => {\n let next = createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());\n const step = direction < 0 ? -1 : 1;\n let attempts = 0;\n while (dateDisabled(next) && attempts < 366) {\n next = addDays(next, step);\n attempts += 1;\n }\n setFocusedDate(next);\n setMonth(next);\n const focusTarget = () => dayRefs.current.get(dateKey(next))?.focus();\n focusTarget();\n queueMicrotask(focusTarget);\n },\n [dateDisabled, setMonth],\n );\n const selectMonth = useCallback(\n (monthIndex: number) => setMonth(createCalendarDate(month.getFullYear(), monthIndex, 1)),\n [month, setMonth],\n );\n const selectYear = useCallback(\n (year: number) => setMonth(createCalendarDate(year, month.getMonth(), 1)),\n [month, setMonth],\n );\n const registerDay = useCallback((key: string, node: HTMLButtonElement | null) => {\n if (node) dayRefs.current.set(key, node);\n else dayRefs.current.delete(key);\n }, []);\n\n useEffect(() => {\n if (!selected) return;\n setFocusedDate(selected);\n setMonthState((current) => (sameMonth(current, selected) ? current : clampMonth(selected)));\n }, [clampMonth, selected]);\n\n const context: CalendarContextValue = {\n calendarId,\n canNavigate,\n dateDisabled,\n disabled,\n focusedDate,\n focusDate,\n locale,\n month,\n monthDisabled,\n onSelect,\n registerDay,\n selected,\n selectMonth,\n selectYear,\n setMonth,\n styles,\n today,\n weekStartsOn,\n yearRange,\n };\n\n return (\n <CalendarContext.Provider value={context}>\n <section\n {...props}\n aria-label={props[\"aria-label\"] ?? formatMonthLabel(month, locale)}\n className={cx(styles.root, className)}\n data-jaci-component=\"calendar\"\n data-slot=\"calendar\"\n ref={ref}\n >\n {children ?? (\n <>\n <CalendarHeader>\n <CalendarPrevious />\n <CalendarCaption />\n <CalendarNext />\n </CalendarHeader>\n <CalendarGrid />\n </>\n )}\n </section>\n </CalendarContext.Provider>\n );\n});\n\nexport type CalendarHeaderProps = ComponentPropsWithoutRef<\"div\">;\nexport const CalendarHeader = forwardRef<HTMLDivElement, CalendarHeaderProps>(\n function CalendarHeader({ className, ...props }, ref) {\n const { styles } = useCalendarContext();\n return (\n <div\n {...props}\n className={cx(styles.header, className)}\n data-slot=\"calendar-header\"\n ref={ref}\n />\n );\n },\n);\n\nexport type CalendarCaptionProps = ComponentPropsWithoutRef<\"span\">;\nexport const CalendarCaption = forwardRef<HTMLSpanElement, CalendarCaptionProps>(\n function CalendarCaption({ children, className, ...props }, ref) {\n const { locale, month, styles } = useCalendarContext();\n return (\n <span\n {...props}\n className={cx(styles.caption, className)}\n data-slot=\"calendar-caption\"\n ref={ref}\n >\n {children ?? formatMonthLabel(month, locale)}\n </span>\n );\n },\n);\n\nexport interface CalendarNavigationProps extends ComponentPropsWithoutRef<\"button\"> {\n amount?: number;\n}\n\nconst CalendarNavigationButton = forwardRef<HTMLButtonElement, CalendarNavigationProps>(\n function CalendarNavigationButton({ amount = 1, children, className, onClick, ...props }, ref) {\n const { canNavigate, month, setMonth, styles } = useCalendarContext();\n const isDisabled = props.disabled || !canNavigate(amount);\n return (\n <button\n {...props}\n aria-label={props[\"aria-label\"] ?? (amount < 0 ? \"Previous month\" : \"Next month\")}\n className={cx(styles.navigation, className)}\n data-slot={amount < 0 ? \"calendar-previous\" : \"calendar-next\"}\n disabled={isDisabled}\n onClick={(event) => {\n if (!isDisabled) setMonth(addMonths(month, amount));\n onClick?.(event);\n }}\n ref={ref}\n type=\"button\"\n >\n {children ?? (amount < 0 ? \"‹\" : \"›\")}\n </button>\n );\n },\n);\n\nexport const CalendarPrevious = forwardRef<HTMLButtonElement, CalendarNavigationProps>(\n function CalendarPrevious(props, ref) {\n return <CalendarNavigationButton {...props} amount={-1} ref={ref} />;\n },\n);\nexport const CalendarNext = forwardRef<HTMLButtonElement, CalendarNavigationProps>(\n function CalendarNext(props, ref) {\n return <CalendarNavigationButton {...props} amount={1} ref={ref} />;\n },\n);\n\nexport type CalendarMonthSelectProps = Omit<\n ComponentPropsWithoutRef<\"select\">,\n \"children\" | \"onChange\" | \"value\"\n>;\nexport const CalendarMonthSelect = forwardRef<HTMLSelectElement, CalendarMonthSelectProps>(\n function CalendarMonthSelect({ className, ...props }, ref) {\n const { locale, month, monthDisabled, selectMonth, styles } = useCalendarContext();\n const labels = Array.from({ length: 12 }, (_, index) =>\n new Intl.DateTimeFormat(locale, { month: \"long\" }).format(createCalendarDate(2024, index, 1)),\n );\n return (\n <select\n {...props}\n aria-label={props[\"aria-label\"] ?? \"Select month\"}\n className={cx(styles.monthSelect, className)}\n data-slot=\"calendar-month-select\"\n onChange={(event) => selectMonth(Number(event.currentTarget.value))}\n ref={ref}\n value={month.getMonth()}\n >\n {labels.map((label, index) => (\n <option\n disabled={monthDisabled(createCalendarDate(month.getFullYear(), index, 1))}\n key={label}\n value={index}\n >\n {label}\n </option>\n ))}\n </select>\n );\n },\n);\n\nexport type CalendarYearSelectProps = Omit<\n ComponentPropsWithoutRef<\"select\">,\n \"children\" | \"onChange\" | \"value\"\n>;\nexport const CalendarYearSelect = forwardRef<HTMLSelectElement, CalendarYearSelectProps>(\n function CalendarYearSelect({ className, ...props }, ref) {\n const { month, monthDisabled, selectYear, styles, yearRange } = useCalendarContext();\n const years = Array.from(\n { length: yearRange.end - yearRange.start + 1 },\n (_, index) => yearRange.start + index,\n );\n return (\n <select\n {...props}\n aria-label={props[\"aria-label\"] ?? \"Select year\"}\n className={cx(styles.yearSelect, className)}\n data-slot=\"calendar-year-select\"\n onChange={(event) => selectYear(Number(event.currentTarget.value))}\n ref={ref}\n value={month.getFullYear()}\n >\n {years.map((year) => (\n <option\n disabled={monthDisabled(createCalendarDate(year, month.getMonth(), 1))}\n key={year}\n value={year}\n >\n {year}\n </option>\n ))}\n </select>\n );\n },\n);\n\nexport interface CalendarDayProps extends Omit<ComponentPropsWithoutRef<\"button\">, \"value\"> {\n date: Date;\n}\n\nexport const CalendarDay = forwardRef<HTMLButtonElement, CalendarDayProps>(function CalendarDay(\n { children, className, date, disabled, onClick, onKeyDown, ...props },\n ref,\n) {\n const {\n dateDisabled,\n disabled: calendarDisabled,\n focusDate,\n focusedDate,\n locale,\n month,\n onSelect,\n registerDay,\n selected,\n styles,\n today,\n weekStartsOn,\n } = useCalendarContext();\n const key = dateKey(date);\n const outsideMonth = !sameMonth(date, month);\n const isDisabled = Boolean(disabled || calendarDisabled || dateDisabled(date));\n const isSelected = isSameDay(date, selected);\n const isFocused = isSameDay(date, focusedDate);\n const isToday = isSameDay(date, today);\n return (\n // biome-ignore lint/a11y/useSemanticElements: the roving button is the interactive grid cell.\n <button\n {...props}\n aria-label={\n props[\"aria-label\"] ?? new Intl.DateTimeFormat(locale, { dateStyle: \"full\" }).format(date)\n }\n aria-current={isToday ? \"date\" : undefined}\n aria-selected={isSelected}\n className={cx(styles.day, className)}\n data-date={key}\n data-disabled={isDisabled || undefined}\n data-outside-month={outsideMonth || undefined}\n data-selected={isSelected || undefined}\n data-slot=\"calendar-day\"\n data-today={isToday || undefined}\n disabled={isDisabled}\n onClick={(event) => {\n onSelect(date);\n onClick?.(event);\n }}\n onKeyDown={(event) => {\n if (!event.defaultPrevented) {\n let nextDate: Date | undefined;\n switch (event.key) {\n case \"ArrowLeft\":\n nextDate = addDays(date, -1);\n break;\n case \"ArrowRight\":\n nextDate = addDays(date, 1);\n break;\n case \"ArrowUp\":\n nextDate = addDays(date, -7);\n break;\n case \"ArrowDown\":\n nextDate = addDays(date, 7);\n break;\n case \"Home\":\n nextDate = addDays(date, -((date.getDay() - weekStartsOn + 7) % 7));\n break;\n case \"End\":\n nextDate = addDays(date, 6 - ((date.getDay() - weekStartsOn + 7) % 7));\n break;\n case \"PageUp\":\n nextDate = addMonths(date, event.shiftKey ? -12 : -1);\n break;\n case \"PageDown\":\n nextDate = addMonths(date, event.shiftKey ? 12 : 1);\n break;\n case \"Enter\":\n case \" \":\n if (!isDisabled) {\n event.preventDefault();\n onSelect(date);\n }\n break;\n }\n if (nextDate) {\n event.preventDefault();\n focusDate(nextDate, nextDate < date ? -1 : 1);\n }\n }\n onKeyDown?.(event);\n }}\n ref={(node) => {\n registerDay(key, node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"gridcell\"\n tabIndex={isFocused && !isDisabled ? 0 : -1}\n type=\"button\"\n >\n {children ?? date.getDate()}\n </button>\n );\n});\n\nexport interface CalendarGridProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"children\"> {\n \"aria-label\"?: string;\n}\n\nexport const CalendarGrid = forwardRef<HTMLDivElement, CalendarGridProps>(function CalendarGrid(\n { \"aria-label\": ariaLabel, className, ...props },\n ref,\n) {\n const { locale, month, styles, weekStartsOn } = useCalendarContext();\n const days = useMemo(() => getCalendarDays(month, weekStartsOn), [month, weekStartsOn]);\n const weeks = useMemo(\n () =>\n Array.from({ length: Math.ceil(days.length / 7) }, (_, index) =>\n days.slice(index * 7, index * 7 + 7),\n ),\n [days],\n );\n const weekdays = useMemo(() => getWeekdayLabels(locale, weekStartsOn), [locale, weekStartsOn]);\n return (\n <div {...props} className={cx(styles.calendar, className)} data-slot=\"calendar-grid\" ref={ref}>\n <div aria-hidden=\"true\" className={styles.weekdays} data-slot=\"calendar-weekdays\">\n {weekdays.map((weekday) => (\n <span className={styles.weekday} data-slot=\"calendar-weekday\" key={weekday}>\n {weekday}\n </span>\n ))}\n </div>\n {/* biome-ignore lint/a11y/useSemanticElements: the calendar uses the ARIA grid pattern. */}\n <div\n aria-label={ariaLabel ?? formatMonthLabel(month, locale)}\n className={styles.grid}\n data-slot=\"calendar-day-grid\"\n role=\"grid\"\n >\n {weeks.map((week, index) => (\n // biome-ignore lint/a11y/useSemanticElements: Calendar rows use ARIA grid semantics while the day controls remain buttons.\n <div\n aria-rowindex={index + 1}\n className={styles.row}\n data-slot=\"calendar-week\"\n key={week.map(dateKey).join(\"-\")}\n role=\"row\"\n tabIndex={-1}\n >\n {week.map((date) => (\n <CalendarDay date={date} key={dateKey(date)} />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n});\n\nexport const Calendar = {\n Root: CalendarRoot,\n Header: CalendarHeader,\n Caption: CalendarCaption,\n Previous: CalendarPrevious,\n Next: CalendarNext,\n MonthSelect: CalendarMonthSelect,\n YearSelect: CalendarYearSelect,\n Grid: CalendarGrid,\n Day: CalendarDay,\n};\n"],"mappings":"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"}
@@ -0,0 +1,56 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from "react";
2
+ //#region src/components/calendar/calendar.d.ts
3
+ interface CalendarYearRange {
4
+ start: number;
5
+ end: number;
6
+ }
7
+ interface CalendarRootProps extends Omit<ComponentPropsWithoutRef<"section">, "children" | "defaultValue" | "value"> {
8
+ value?: Date | null;
9
+ defaultValue?: Date | null;
10
+ onValueChange?: (value: Date | null) => void;
11
+ referenceDate?: Date;
12
+ locale?: string;
13
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
14
+ minDate?: Date;
15
+ maxDate?: Date;
16
+ isDateDisabled?: (date: Date) => boolean;
17
+ yearRange?: CalendarYearRange;
18
+ disabled?: boolean;
19
+ children?: ReactNode;
20
+ }
21
+ declare const CalendarRoot: import("react").ForwardRefExoticComponent<CalendarRootProps & import("react").RefAttributes<HTMLElement>>;
22
+ type CalendarHeaderProps = ComponentPropsWithoutRef<"div">;
23
+ declare const CalendarHeader: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
24
+ type CalendarCaptionProps = ComponentPropsWithoutRef<"span">;
25
+ declare const CalendarCaption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
26
+ interface CalendarNavigationProps extends ComponentPropsWithoutRef<"button"> {
27
+ amount?: number;
28
+ }
29
+ declare const CalendarPrevious: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
30
+ declare const CalendarNext: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
31
+ type CalendarMonthSelectProps = Omit<ComponentPropsWithoutRef<"select">, "children" | "onChange" | "value">;
32
+ declare const CalendarMonthSelect: import("react").ForwardRefExoticComponent<CalendarMonthSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
33
+ type CalendarYearSelectProps = Omit<ComponentPropsWithoutRef<"select">, "children" | "onChange" | "value">;
34
+ declare const CalendarYearSelect: import("react").ForwardRefExoticComponent<CalendarYearSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
35
+ interface CalendarDayProps extends Omit<ComponentPropsWithoutRef<"button">, "value"> {
36
+ date: Date;
37
+ }
38
+ declare const CalendarDay: import("react").ForwardRefExoticComponent<CalendarDayProps & import("react").RefAttributes<HTMLButtonElement>>;
39
+ interface CalendarGridProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
40
+ "aria-label"?: string;
41
+ }
42
+ declare const CalendarGrid: import("react").ForwardRefExoticComponent<CalendarGridProps & import("react").RefAttributes<HTMLDivElement>>;
43
+ declare const Calendar: {
44
+ Root: import("react").ForwardRefExoticComponent<CalendarRootProps & import("react").RefAttributes<HTMLElement>>;
45
+ Header: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
46
+ Caption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
47
+ Previous: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
48
+ Next: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
49
+ MonthSelect: import("react").ForwardRefExoticComponent<CalendarMonthSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
50
+ YearSelect: import("react").ForwardRefExoticComponent<CalendarYearSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
51
+ Grid: import("react").ForwardRefExoticComponent<CalendarGridProps & import("react").RefAttributes<HTMLDivElement>>;
52
+ Day: import("react").ForwardRefExoticComponent<CalendarDayProps & import("react").RefAttributes<HTMLButtonElement>>;
53
+ };
54
+ //#endregion
55
+ export { Calendar, CalendarCaption, CalendarCaptionProps, CalendarDay, CalendarDayProps, CalendarGrid, CalendarGridProps, CalendarHeader, CalendarHeaderProps, CalendarMonthSelect, CalendarMonthSelectProps, CalendarNavigationProps, CalendarNext, CalendarPrevious, CalendarRoot, CalendarRootProps, CalendarYearRange, CalendarYearSelect, CalendarYearSelectProps };
56
+ //# sourceMappingURL=calendar.d.cts.map
@@ -0,0 +1,56 @@
1
+ import { ComponentPropsWithoutRef, ReactNode } from "react";
2
+ //#region src/components/calendar/calendar.d.ts
3
+ interface CalendarYearRange {
4
+ start: number;
5
+ end: number;
6
+ }
7
+ interface CalendarRootProps extends Omit<ComponentPropsWithoutRef<"section">, "children" | "defaultValue" | "value"> {
8
+ value?: Date | null;
9
+ defaultValue?: Date | null;
10
+ onValueChange?: (value: Date | null) => void;
11
+ referenceDate?: Date;
12
+ locale?: string;
13
+ weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;
14
+ minDate?: Date;
15
+ maxDate?: Date;
16
+ isDateDisabled?: (date: Date) => boolean;
17
+ yearRange?: CalendarYearRange;
18
+ disabled?: boolean;
19
+ children?: ReactNode;
20
+ }
21
+ declare const CalendarRoot: import("react").ForwardRefExoticComponent<CalendarRootProps & import("react").RefAttributes<HTMLElement>>;
22
+ type CalendarHeaderProps = ComponentPropsWithoutRef<"div">;
23
+ declare const CalendarHeader: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
24
+ type CalendarCaptionProps = ComponentPropsWithoutRef<"span">;
25
+ declare const CalendarCaption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
26
+ interface CalendarNavigationProps extends ComponentPropsWithoutRef<"button"> {
27
+ amount?: number;
28
+ }
29
+ declare const CalendarPrevious: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
30
+ declare const CalendarNext: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
31
+ type CalendarMonthSelectProps = Omit<ComponentPropsWithoutRef<"select">, "children" | "onChange" | "value">;
32
+ declare const CalendarMonthSelect: import("react").ForwardRefExoticComponent<CalendarMonthSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
33
+ type CalendarYearSelectProps = Omit<ComponentPropsWithoutRef<"select">, "children" | "onChange" | "value">;
34
+ declare const CalendarYearSelect: import("react").ForwardRefExoticComponent<CalendarYearSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
35
+ interface CalendarDayProps extends Omit<ComponentPropsWithoutRef<"button">, "value"> {
36
+ date: Date;
37
+ }
38
+ declare const CalendarDay: import("react").ForwardRefExoticComponent<CalendarDayProps & import("react").RefAttributes<HTMLButtonElement>>;
39
+ interface CalendarGridProps extends Omit<ComponentPropsWithoutRef<"div">, "children"> {
40
+ "aria-label"?: string;
41
+ }
42
+ declare const CalendarGrid: import("react").ForwardRefExoticComponent<CalendarGridProps & import("react").RefAttributes<HTMLDivElement>>;
43
+ declare const Calendar: {
44
+ Root: import("react").ForwardRefExoticComponent<CalendarRootProps & import("react").RefAttributes<HTMLElement>>;
45
+ Header: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLDivElement>, HTMLDivElement>, "ref"> & import("react").RefAttributes<HTMLDivElement>>;
46
+ Caption: import("react").ForwardRefExoticComponent<Omit<import("react").DetailedHTMLProps<import("react").HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "ref"> & import("react").RefAttributes<HTMLSpanElement>>;
47
+ Previous: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
48
+ Next: import("react").ForwardRefExoticComponent<CalendarNavigationProps & import("react").RefAttributes<HTMLButtonElement>>;
49
+ MonthSelect: import("react").ForwardRefExoticComponent<CalendarMonthSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
50
+ YearSelect: import("react").ForwardRefExoticComponent<CalendarYearSelectProps & import("react").RefAttributes<HTMLSelectElement>>;
51
+ Grid: import("react").ForwardRefExoticComponent<CalendarGridProps & import("react").RefAttributes<HTMLDivElement>>;
52
+ Day: import("react").ForwardRefExoticComponent<CalendarDayProps & import("react").RefAttributes<HTMLButtonElement>>;
53
+ };
54
+ //#endregion
55
+ export { Calendar, CalendarCaption, CalendarCaptionProps, CalendarDay, CalendarDayProps, CalendarGrid, CalendarGridProps, CalendarHeader, CalendarHeaderProps, CalendarMonthSelect, CalendarMonthSelectProps, CalendarNavigationProps, CalendarNext, CalendarPrevious, CalendarRoot, CalendarRootProps, CalendarYearRange, CalendarYearSelect, CalendarYearSelectProps };
56
+ //# sourceMappingURL=calendar.d.ts.map
@@ -0,0 +1,368 @@
1
+ "use client";
2
+ import { cx } from "../../styled-system/css/cx.js";
3
+ import { calendar } from "../../styled-system/recipes/calendar.js";
4
+ import { addDays, addMonths, createCalendarDate, dateKey, formatMonthLabel, getCalendarDays, getWeekdayLabels, isAfterDay, isBeforeDay, isSameDay, startOfMonth } from "../date-picker/date-utils.js";
5
+ import { createContext, forwardRef, useCallback, useContext, useEffect, useId, useMemo, useRef, useState } from "react";
6
+ import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ //#region src/components/calendar/calendar.tsx
8
+ const CalendarContext = createContext(null);
9
+ function useCalendarContext() {
10
+ const context = useContext(CalendarContext);
11
+ if (!context) throw new Error("Calendar parts must be rendered inside Calendar.Root.");
12
+ return context;
13
+ }
14
+ function sameMonth(left, right) {
15
+ return left.getFullYear() === right.getFullYear() && left.getMonth() === right.getMonth();
16
+ }
17
+ const CalendarRoot = forwardRef(function CalendarRoot({ children, className, defaultValue = null, disabled = false, isDateDisabled, locale = "pt-BR", maxDate, minDate, onValueChange, referenceDate, value: controlledValue, weekStartsOn = 0, yearRange: configuredYearRange, ...props }, ref) {
18
+ const initialDate = controlledValue ?? defaultValue ?? referenceDate ?? /* @__PURE__ */ new Date();
19
+ const [uncontrolledValue, setUncontrolledValue] = useState(defaultValue);
20
+ const selected = controlledValue === void 0 ? uncontrolledValue : controlledValue;
21
+ const [month, setMonthState] = useState(() => startOfMonth(initialDate));
22
+ const [focusedDate, setFocusedDate] = useState(selected ?? initialDate);
23
+ const dayRefs = useRef(/* @__PURE__ */ new Map());
24
+ const calendarId = useId();
25
+ const styles = calendar();
26
+ const today = useMemo(() => createCalendarDate((referenceDate ?? /* @__PURE__ */ new Date()).getFullYear(), (referenceDate ?? /* @__PURE__ */ new Date()).getMonth(), (referenceDate ?? /* @__PURE__ */ new Date()).getDate()), [referenceDate]);
27
+ const minMonth = minDate ? startOfMonth(minDate) : void 0;
28
+ const maxMonth = maxDate ? startOfMonth(maxDate) : void 0;
29
+ const yearRange = useMemo(() => {
30
+ const start = configuredYearRange?.start ?? today.getFullYear() - 100;
31
+ const end = configuredYearRange?.end ?? today.getFullYear() + 20;
32
+ const years = [
33
+ selected?.getFullYear(),
34
+ minDate?.getFullYear(),
35
+ maxDate?.getFullYear()
36
+ ].filter((year) => year !== void 0);
37
+ return {
38
+ start: Math.min(start, end, ...years),
39
+ end: Math.max(start, end, ...years)
40
+ };
41
+ }, [
42
+ configuredYearRange?.end,
43
+ configuredYearRange?.start,
44
+ maxDate,
45
+ minDate,
46
+ selected,
47
+ today
48
+ ]);
49
+ const dateDisabled = useCallback((date) => Boolean(minDate && isBeforeDay(date, minDate) || maxDate && isAfterDay(date, maxDate) || isDateDisabled?.(date)), [
50
+ isDateDisabled,
51
+ maxDate,
52
+ minDate
53
+ ]);
54
+ const monthDisabled = useCallback((date) => {
55
+ const first = startOfMonth(date);
56
+ const last = createCalendarDate(date.getFullYear(), date.getMonth() + 1, 0);
57
+ return Boolean(minDate && isBeforeDay(last, minDate) || maxDate && isAfterDay(first, maxDate));
58
+ }, [maxDate, minDate]);
59
+ const clampMonth = useCallback((date) => {
60
+ const normalized = startOfMonth(date);
61
+ if (minMonth && isBeforeDay(normalized, minMonth)) return minMonth;
62
+ if (maxMonth && isAfterDay(normalized, maxMonth)) return maxMonth;
63
+ return normalized;
64
+ }, [maxMonth, minMonth]);
65
+ const setMonth = useCallback((date) => setMonthState(clampMonth(date)), [clampMonth]);
66
+ const canNavigate = useCallback((amount) => {
67
+ const next = addMonths(month, amount);
68
+ return !(minMonth && isBeforeDay(next, minMonth)) && !(maxMonth && isAfterDay(next, maxMonth));
69
+ }, [
70
+ maxMonth,
71
+ minMonth,
72
+ month
73
+ ]);
74
+ const setValue = useCallback((nextValue) => {
75
+ if (controlledValue === void 0) setUncontrolledValue(nextValue);
76
+ onValueChange?.(nextValue);
77
+ }, [controlledValue, onValueChange]);
78
+ const onSelect = useCallback((date) => {
79
+ if (disabled || dateDisabled(date)) return;
80
+ const next = createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());
81
+ setValue(next);
82
+ setFocusedDate(next);
83
+ setMonth(next);
84
+ }, [
85
+ dateDisabled,
86
+ disabled,
87
+ setMonth,
88
+ setValue
89
+ ]);
90
+ const focusDate = useCallback((date, direction = 1) => {
91
+ let next = createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());
92
+ const step = direction < 0 ? -1 : 1;
93
+ let attempts = 0;
94
+ while (dateDisabled(next) && attempts < 366) {
95
+ next = addDays(next, step);
96
+ attempts += 1;
97
+ }
98
+ setFocusedDate(next);
99
+ setMonth(next);
100
+ const focusTarget = () => dayRefs.current.get(dateKey(next))?.focus();
101
+ focusTarget();
102
+ queueMicrotask(focusTarget);
103
+ }, [dateDisabled, setMonth]);
104
+ const selectMonth = useCallback((monthIndex) => setMonth(createCalendarDate(month.getFullYear(), monthIndex, 1)), [month, setMonth]);
105
+ const selectYear = useCallback((year) => setMonth(createCalendarDate(year, month.getMonth(), 1)), [month, setMonth]);
106
+ const registerDay = useCallback((key, node) => {
107
+ if (node) dayRefs.current.set(key, node);
108
+ else dayRefs.current.delete(key);
109
+ }, []);
110
+ useEffect(() => {
111
+ if (!selected) return;
112
+ setFocusedDate(selected);
113
+ setMonthState((current) => sameMonth(current, selected) ? current : clampMonth(selected));
114
+ }, [clampMonth, selected]);
115
+ const context = {
116
+ calendarId,
117
+ canNavigate,
118
+ dateDisabled,
119
+ disabled,
120
+ focusedDate,
121
+ focusDate,
122
+ locale,
123
+ month,
124
+ monthDisabled,
125
+ onSelect,
126
+ registerDay,
127
+ selected,
128
+ selectMonth,
129
+ selectYear,
130
+ setMonth,
131
+ styles,
132
+ today,
133
+ weekStartsOn,
134
+ yearRange
135
+ };
136
+ return /* @__PURE__ */ jsx(CalendarContext.Provider, {
137
+ value: context,
138
+ children: /* @__PURE__ */ jsx("section", {
139
+ ...props,
140
+ "aria-label": props["aria-label"] ?? formatMonthLabel(month, locale),
141
+ className: cx(styles.root, className),
142
+ "data-jaci-component": "calendar",
143
+ "data-slot": "calendar",
144
+ ref,
145
+ children: children ?? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsxs(CalendarHeader, { children: [
146
+ /* @__PURE__ */ jsx(CalendarPrevious, {}),
147
+ /* @__PURE__ */ jsx(CalendarCaption, {}),
148
+ /* @__PURE__ */ jsx(CalendarNext, {})
149
+ ] }), /* @__PURE__ */ jsx(CalendarGrid, {})] })
150
+ })
151
+ });
152
+ });
153
+ const CalendarHeader = forwardRef(function CalendarHeader({ className, ...props }, ref) {
154
+ const { styles } = useCalendarContext();
155
+ return /* @__PURE__ */ jsx("div", {
156
+ ...props,
157
+ className: cx(styles.header, className),
158
+ "data-slot": "calendar-header",
159
+ ref
160
+ });
161
+ });
162
+ const CalendarCaption = forwardRef(function CalendarCaption({ children, className, ...props }, ref) {
163
+ const { locale, month, styles } = useCalendarContext();
164
+ return /* @__PURE__ */ jsx("span", {
165
+ ...props,
166
+ className: cx(styles.caption, className),
167
+ "data-slot": "calendar-caption",
168
+ ref,
169
+ children: children ?? formatMonthLabel(month, locale)
170
+ });
171
+ });
172
+ const CalendarNavigationButton = forwardRef(function CalendarNavigationButton({ amount = 1, children, className, onClick, ...props }, ref) {
173
+ const { canNavigate, month, setMonth, styles } = useCalendarContext();
174
+ const isDisabled = props.disabled || !canNavigate(amount);
175
+ return /* @__PURE__ */ jsx("button", {
176
+ ...props,
177
+ "aria-label": props["aria-label"] ?? (amount < 0 ? "Previous month" : "Next month"),
178
+ className: cx(styles.navigation, className),
179
+ "data-slot": amount < 0 ? "calendar-previous" : "calendar-next",
180
+ disabled: isDisabled,
181
+ onClick: (event) => {
182
+ if (!isDisabled) setMonth(addMonths(month, amount));
183
+ onClick?.(event);
184
+ },
185
+ ref,
186
+ type: "button",
187
+ children: children ?? (amount < 0 ? "‹" : "›")
188
+ });
189
+ });
190
+ const CalendarPrevious = forwardRef(function CalendarPrevious(props, ref) {
191
+ return /* @__PURE__ */ jsx(CalendarNavigationButton, {
192
+ ...props,
193
+ amount: -1,
194
+ ref
195
+ });
196
+ });
197
+ const CalendarNext = forwardRef(function CalendarNext(props, ref) {
198
+ return /* @__PURE__ */ jsx(CalendarNavigationButton, {
199
+ ...props,
200
+ amount: 1,
201
+ ref
202
+ });
203
+ });
204
+ const CalendarMonthSelect = forwardRef(function CalendarMonthSelect({ className, ...props }, ref) {
205
+ const { locale, month, monthDisabled, selectMonth, styles } = useCalendarContext();
206
+ const labels = Array.from({ length: 12 }, (_, index) => new Intl.DateTimeFormat(locale, { month: "long" }).format(createCalendarDate(2024, index, 1)));
207
+ return /* @__PURE__ */ jsx("select", {
208
+ ...props,
209
+ "aria-label": props["aria-label"] ?? "Select month",
210
+ className: cx(styles.monthSelect, className),
211
+ "data-slot": "calendar-month-select",
212
+ onChange: (event) => selectMonth(Number(event.currentTarget.value)),
213
+ ref,
214
+ value: month.getMonth(),
215
+ children: labels.map((label, index) => /* @__PURE__ */ jsx("option", {
216
+ disabled: monthDisabled(createCalendarDate(month.getFullYear(), index, 1)),
217
+ value: index,
218
+ children: label
219
+ }, label))
220
+ });
221
+ });
222
+ const CalendarYearSelect = forwardRef(function CalendarYearSelect({ className, ...props }, ref) {
223
+ const { month, monthDisabled, selectYear, styles, yearRange } = useCalendarContext();
224
+ const years = Array.from({ length: yearRange.end - yearRange.start + 1 }, (_, index) => yearRange.start + index);
225
+ return /* @__PURE__ */ jsx("select", {
226
+ ...props,
227
+ "aria-label": props["aria-label"] ?? "Select year",
228
+ className: cx(styles.yearSelect, className),
229
+ "data-slot": "calendar-year-select",
230
+ onChange: (event) => selectYear(Number(event.currentTarget.value)),
231
+ ref,
232
+ value: month.getFullYear(),
233
+ children: years.map((year) => /* @__PURE__ */ jsx("option", {
234
+ disabled: monthDisabled(createCalendarDate(year, month.getMonth(), 1)),
235
+ value: year,
236
+ children: year
237
+ }, year))
238
+ });
239
+ });
240
+ const CalendarDay = forwardRef(function CalendarDay({ children, className, date, disabled, onClick, onKeyDown, ...props }, ref) {
241
+ const { dateDisabled, disabled: calendarDisabled, focusDate, focusedDate, locale, month, onSelect, registerDay, selected, styles, today, weekStartsOn } = useCalendarContext();
242
+ const key = dateKey(date);
243
+ const outsideMonth = !sameMonth(date, month);
244
+ const isDisabled = Boolean(disabled || calendarDisabled || dateDisabled(date));
245
+ const isSelected = isSameDay(date, selected);
246
+ const isFocused = isSameDay(date, focusedDate);
247
+ const isToday = isSameDay(date, today);
248
+ return /* @__PURE__ */ jsx("button", {
249
+ ...props,
250
+ "aria-label": props["aria-label"] ?? new Intl.DateTimeFormat(locale, { dateStyle: "full" }).format(date),
251
+ "aria-current": isToday ? "date" : void 0,
252
+ "aria-selected": isSelected,
253
+ className: cx(styles.day, className),
254
+ "data-date": key,
255
+ "data-disabled": isDisabled || void 0,
256
+ "data-outside-month": outsideMonth || void 0,
257
+ "data-selected": isSelected || void 0,
258
+ "data-slot": "calendar-day",
259
+ "data-today": isToday || void 0,
260
+ disabled: isDisabled,
261
+ onClick: (event) => {
262
+ onSelect(date);
263
+ onClick?.(event);
264
+ },
265
+ onKeyDown: (event) => {
266
+ if (!event.defaultPrevented) {
267
+ let nextDate;
268
+ switch (event.key) {
269
+ case "ArrowLeft":
270
+ nextDate = addDays(date, -1);
271
+ break;
272
+ case "ArrowRight":
273
+ nextDate = addDays(date, 1);
274
+ break;
275
+ case "ArrowUp":
276
+ nextDate = addDays(date, -7);
277
+ break;
278
+ case "ArrowDown":
279
+ nextDate = addDays(date, 7);
280
+ break;
281
+ case "Home":
282
+ nextDate = addDays(date, -((date.getDay() - weekStartsOn + 7) % 7));
283
+ break;
284
+ case "End":
285
+ nextDate = addDays(date, 6 - (date.getDay() - weekStartsOn + 7) % 7);
286
+ break;
287
+ case "PageUp":
288
+ nextDate = addMonths(date, event.shiftKey ? -12 : -1);
289
+ break;
290
+ case "PageDown":
291
+ nextDate = addMonths(date, event.shiftKey ? 12 : 1);
292
+ break;
293
+ case "Enter":
294
+ case " ":
295
+ if (!isDisabled) {
296
+ event.preventDefault();
297
+ onSelect(date);
298
+ }
299
+ break;
300
+ }
301
+ if (nextDate) {
302
+ event.preventDefault();
303
+ focusDate(nextDate, nextDate < date ? -1 : 1);
304
+ }
305
+ }
306
+ onKeyDown?.(event);
307
+ },
308
+ ref: (node) => {
309
+ registerDay(key, node);
310
+ if (typeof ref === "function") ref(node);
311
+ else if (ref) ref.current = node;
312
+ },
313
+ role: "gridcell",
314
+ tabIndex: isFocused && !isDisabled ? 0 : -1,
315
+ type: "button",
316
+ children: children ?? date.getDate()
317
+ });
318
+ });
319
+ const CalendarGrid = forwardRef(function CalendarGrid({ "aria-label": ariaLabel, className, ...props }, ref) {
320
+ const { locale, month, styles, weekStartsOn } = useCalendarContext();
321
+ const days = useMemo(() => getCalendarDays(month, weekStartsOn), [month, weekStartsOn]);
322
+ const weeks = useMemo(() => Array.from({ length: Math.ceil(days.length / 7) }, (_, index) => days.slice(index * 7, index * 7 + 7)), [days]);
323
+ const weekdays = useMemo(() => getWeekdayLabels(locale, weekStartsOn), [locale, weekStartsOn]);
324
+ return /* @__PURE__ */ jsxs("div", {
325
+ ...props,
326
+ className: cx(styles.calendar, className),
327
+ "data-slot": "calendar-grid",
328
+ ref,
329
+ children: [/* @__PURE__ */ jsx("div", {
330
+ "aria-hidden": "true",
331
+ className: styles.weekdays,
332
+ "data-slot": "calendar-weekdays",
333
+ children: weekdays.map((weekday) => /* @__PURE__ */ jsx("span", {
334
+ className: styles.weekday,
335
+ "data-slot": "calendar-weekday",
336
+ children: weekday
337
+ }, weekday))
338
+ }), /* @__PURE__ */ jsx("div", {
339
+ "aria-label": ariaLabel ?? formatMonthLabel(month, locale),
340
+ className: styles.grid,
341
+ "data-slot": "calendar-day-grid",
342
+ role: "grid",
343
+ children: weeks.map((week, index) => /* @__PURE__ */ jsx("div", {
344
+ "aria-rowindex": index + 1,
345
+ className: styles.row,
346
+ "data-slot": "calendar-week",
347
+ role: "row",
348
+ tabIndex: -1,
349
+ children: week.map((date) => /* @__PURE__ */ jsx(CalendarDay, { date }, dateKey(date)))
350
+ }, week.map(dateKey).join("-")))
351
+ })]
352
+ });
353
+ });
354
+ const Calendar = {
355
+ Root: CalendarRoot,
356
+ Header: CalendarHeader,
357
+ Caption: CalendarCaption,
358
+ Previous: CalendarPrevious,
359
+ Next: CalendarNext,
360
+ MonthSelect: CalendarMonthSelect,
361
+ YearSelect: CalendarYearSelect,
362
+ Grid: CalendarGrid,
363
+ Day: CalendarDay
364
+ };
365
+ //#endregion
366
+ export { Calendar, CalendarCaption, CalendarDay, CalendarGrid, CalendarHeader, CalendarMonthSelect, CalendarNext, CalendarPrevious, CalendarRoot, CalendarYearSelect };
367
+
368
+ //# sourceMappingURL=calendar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"calendar.js","names":[],"sources":["../../../src/components/calendar/calendar.tsx"],"sourcesContent":["\"use client\";\n\nimport { forwardRef, useCallback, useEffect, useId, useMemo, useRef, useState } from \"react\";\nimport type { ComponentPropsWithoutRef, ReactNode } from \"react\";\n\nimport { cx } from \"../../styled-system/css\";\nimport { calendar } from \"../../styled-system/recipes\";\nimport {\n addDays,\n addMonths,\n createCalendarDate,\n dateKey,\n formatMonthLabel,\n getCalendarDays,\n getWeekdayLabels,\n isAfterDay,\n isBeforeDay,\n isSameDay,\n startOfMonth,\n} from \"../date-picker/date-utils\";\n\nexport interface CalendarYearRange {\n start: number;\n end: number;\n}\n\nexport interface CalendarRootProps\n extends Omit<ComponentPropsWithoutRef<\"section\">, \"children\" | \"defaultValue\" | \"value\"> {\n value?: Date | null;\n defaultValue?: Date | null;\n onValueChange?: (value: Date | null) => void;\n referenceDate?: Date;\n locale?: string;\n weekStartsOn?: 0 | 1 | 2 | 3 | 4 | 5 | 6;\n minDate?: Date;\n maxDate?: Date;\n isDateDisabled?: (date: Date) => boolean;\n yearRange?: CalendarYearRange;\n disabled?: boolean;\n children?: ReactNode;\n}\n\ninterface CalendarContextValue {\n calendarId: string;\n dateDisabled: (date: Date) => boolean;\n disabled: boolean;\n focusedDate: Date;\n focusDate: (date: Date, direction?: number) => void;\n locale: string;\n month: Date;\n monthDisabled: (date: Date) => boolean;\n onSelect: (date: Date) => void;\n selected: Date | null;\n setMonth: (date: Date) => void;\n styles: ReturnType<typeof calendar>;\n today: Date;\n weekStartsOn: number;\n yearRange: CalendarYearRange;\n canNavigate: (amount: number) => boolean;\n selectMonth: (month: number) => void;\n selectYear: (year: number) => void;\n registerDay: (key: string, node: HTMLButtonElement | null) => void;\n}\n\nimport { createContext, useContext } from \"react\";\n\nconst CalendarContext = createContext<CalendarContextValue | null>(null);\n\nfunction useCalendarContext() {\n const context = useContext(CalendarContext);\n if (!context) throw new Error(\"Calendar parts must be rendered inside Calendar.Root.\");\n return context;\n}\n\nfunction sameMonth(left: Date, right: Date) {\n return left.getFullYear() === right.getFullYear() && left.getMonth() === right.getMonth();\n}\n\nexport const CalendarRoot = forwardRef<HTMLElement, CalendarRootProps>(function CalendarRoot(\n {\n children,\n className,\n defaultValue = null,\n disabled = false,\n isDateDisabled,\n locale = \"pt-BR\",\n maxDate,\n minDate,\n onValueChange,\n referenceDate,\n value: controlledValue,\n weekStartsOn = 0,\n yearRange: configuredYearRange,\n ...props\n },\n ref,\n) {\n const initialDate = controlledValue ?? defaultValue ?? referenceDate ?? new Date();\n const [uncontrolledValue, setUncontrolledValue] = useState<Date | null>(defaultValue);\n const selected = controlledValue === undefined ? uncontrolledValue : controlledValue;\n const [month, setMonthState] = useState(() => startOfMonth(initialDate));\n const [focusedDate, setFocusedDate] = useState(selected ?? initialDate);\n const dayRefs = useRef(new Map<string, HTMLButtonElement>());\n const calendarId = useId();\n const styles = calendar();\n const today = useMemo(\n () =>\n createCalendarDate(\n (referenceDate ?? new Date()).getFullYear(),\n (referenceDate ?? new Date()).getMonth(),\n (referenceDate ?? new Date()).getDate(),\n ),\n [referenceDate],\n );\n const minMonth = minDate ? startOfMonth(minDate) : undefined;\n const maxMonth = maxDate ? startOfMonth(maxDate) : undefined;\n const yearRange = useMemo(() => {\n const start = configuredYearRange?.start ?? today.getFullYear() - 100;\n const end = configuredYearRange?.end ?? today.getFullYear() + 20;\n const years = [selected?.getFullYear(), minDate?.getFullYear(), maxDate?.getFullYear()].filter(\n (year): year is number => year !== undefined,\n );\n return { start: Math.min(start, end, ...years), end: Math.max(start, end, ...years) };\n }, [configuredYearRange?.end, configuredYearRange?.start, maxDate, minDate, selected, today]);\n\n const dateDisabled = useCallback(\n (date: Date) =>\n Boolean(\n (minDate && isBeforeDay(date, minDate)) ||\n (maxDate && isAfterDay(date, maxDate)) ||\n isDateDisabled?.(date),\n ),\n [isDateDisabled, maxDate, minDate],\n );\n const monthDisabled = useCallback(\n (date: Date) => {\n const first = startOfMonth(date);\n const last = createCalendarDate(date.getFullYear(), date.getMonth() + 1, 0);\n return Boolean(\n (minDate && isBeforeDay(last, minDate)) || (maxDate && isAfterDay(first, maxDate)),\n );\n },\n [maxDate, minDate],\n );\n const clampMonth = useCallback(\n (date: Date) => {\n const normalized = startOfMonth(date);\n if (minMonth && isBeforeDay(normalized, minMonth)) return minMonth;\n if (maxMonth && isAfterDay(normalized, maxMonth)) return maxMonth;\n return normalized;\n },\n [maxMonth, minMonth],\n );\n const setMonth = useCallback((date: Date) => setMonthState(clampMonth(date)), [clampMonth]);\n const canNavigate = useCallback(\n (amount: number) => {\n const next = addMonths(month, amount);\n return (\n !(minMonth && isBeforeDay(next, minMonth)) && !(maxMonth && isAfterDay(next, maxMonth))\n );\n },\n [maxMonth, minMonth, month],\n );\n const setValue = useCallback(\n (nextValue: Date | null) => {\n if (controlledValue === undefined) setUncontrolledValue(nextValue);\n onValueChange?.(nextValue);\n },\n [controlledValue, onValueChange],\n );\n const onSelect = useCallback(\n (date: Date) => {\n if (disabled || dateDisabled(date)) return;\n const next = createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());\n setValue(next);\n setFocusedDate(next);\n setMonth(next);\n },\n [dateDisabled, disabled, setMonth, setValue],\n );\n const focusDate = useCallback(\n (date: Date, direction = 1) => {\n let next = createCalendarDate(date.getFullYear(), date.getMonth(), date.getDate());\n const step = direction < 0 ? -1 : 1;\n let attempts = 0;\n while (dateDisabled(next) && attempts < 366) {\n next = addDays(next, step);\n attempts += 1;\n }\n setFocusedDate(next);\n setMonth(next);\n const focusTarget = () => dayRefs.current.get(dateKey(next))?.focus();\n focusTarget();\n queueMicrotask(focusTarget);\n },\n [dateDisabled, setMonth],\n );\n const selectMonth = useCallback(\n (monthIndex: number) => setMonth(createCalendarDate(month.getFullYear(), monthIndex, 1)),\n [month, setMonth],\n );\n const selectYear = useCallback(\n (year: number) => setMonth(createCalendarDate(year, month.getMonth(), 1)),\n [month, setMonth],\n );\n const registerDay = useCallback((key: string, node: HTMLButtonElement | null) => {\n if (node) dayRefs.current.set(key, node);\n else dayRefs.current.delete(key);\n }, []);\n\n useEffect(() => {\n if (!selected) return;\n setFocusedDate(selected);\n setMonthState((current) => (sameMonth(current, selected) ? current : clampMonth(selected)));\n }, [clampMonth, selected]);\n\n const context: CalendarContextValue = {\n calendarId,\n canNavigate,\n dateDisabled,\n disabled,\n focusedDate,\n focusDate,\n locale,\n month,\n monthDisabled,\n onSelect,\n registerDay,\n selected,\n selectMonth,\n selectYear,\n setMonth,\n styles,\n today,\n weekStartsOn,\n yearRange,\n };\n\n return (\n <CalendarContext.Provider value={context}>\n <section\n {...props}\n aria-label={props[\"aria-label\"] ?? formatMonthLabel(month, locale)}\n className={cx(styles.root, className)}\n data-jaci-component=\"calendar\"\n data-slot=\"calendar\"\n ref={ref}\n >\n {children ?? (\n <>\n <CalendarHeader>\n <CalendarPrevious />\n <CalendarCaption />\n <CalendarNext />\n </CalendarHeader>\n <CalendarGrid />\n </>\n )}\n </section>\n </CalendarContext.Provider>\n );\n});\n\nexport type CalendarHeaderProps = ComponentPropsWithoutRef<\"div\">;\nexport const CalendarHeader = forwardRef<HTMLDivElement, CalendarHeaderProps>(\n function CalendarHeader({ className, ...props }, ref) {\n const { styles } = useCalendarContext();\n return (\n <div\n {...props}\n className={cx(styles.header, className)}\n data-slot=\"calendar-header\"\n ref={ref}\n />\n );\n },\n);\n\nexport type CalendarCaptionProps = ComponentPropsWithoutRef<\"span\">;\nexport const CalendarCaption = forwardRef<HTMLSpanElement, CalendarCaptionProps>(\n function CalendarCaption({ children, className, ...props }, ref) {\n const { locale, month, styles } = useCalendarContext();\n return (\n <span\n {...props}\n className={cx(styles.caption, className)}\n data-slot=\"calendar-caption\"\n ref={ref}\n >\n {children ?? formatMonthLabel(month, locale)}\n </span>\n );\n },\n);\n\nexport interface CalendarNavigationProps extends ComponentPropsWithoutRef<\"button\"> {\n amount?: number;\n}\n\nconst CalendarNavigationButton = forwardRef<HTMLButtonElement, CalendarNavigationProps>(\n function CalendarNavigationButton({ amount = 1, children, className, onClick, ...props }, ref) {\n const { canNavigate, month, setMonth, styles } = useCalendarContext();\n const isDisabled = props.disabled || !canNavigate(amount);\n return (\n <button\n {...props}\n aria-label={props[\"aria-label\"] ?? (amount < 0 ? \"Previous month\" : \"Next month\")}\n className={cx(styles.navigation, className)}\n data-slot={amount < 0 ? \"calendar-previous\" : \"calendar-next\"}\n disabled={isDisabled}\n onClick={(event) => {\n if (!isDisabled) setMonth(addMonths(month, amount));\n onClick?.(event);\n }}\n ref={ref}\n type=\"button\"\n >\n {children ?? (amount < 0 ? \"‹\" : \"›\")}\n </button>\n );\n },\n);\n\nexport const CalendarPrevious = forwardRef<HTMLButtonElement, CalendarNavigationProps>(\n function CalendarPrevious(props, ref) {\n return <CalendarNavigationButton {...props} amount={-1} ref={ref} />;\n },\n);\nexport const CalendarNext = forwardRef<HTMLButtonElement, CalendarNavigationProps>(\n function CalendarNext(props, ref) {\n return <CalendarNavigationButton {...props} amount={1} ref={ref} />;\n },\n);\n\nexport type CalendarMonthSelectProps = Omit<\n ComponentPropsWithoutRef<\"select\">,\n \"children\" | \"onChange\" | \"value\"\n>;\nexport const CalendarMonthSelect = forwardRef<HTMLSelectElement, CalendarMonthSelectProps>(\n function CalendarMonthSelect({ className, ...props }, ref) {\n const { locale, month, monthDisabled, selectMonth, styles } = useCalendarContext();\n const labels = Array.from({ length: 12 }, (_, index) =>\n new Intl.DateTimeFormat(locale, { month: \"long\" }).format(createCalendarDate(2024, index, 1)),\n );\n return (\n <select\n {...props}\n aria-label={props[\"aria-label\"] ?? \"Select month\"}\n className={cx(styles.monthSelect, className)}\n data-slot=\"calendar-month-select\"\n onChange={(event) => selectMonth(Number(event.currentTarget.value))}\n ref={ref}\n value={month.getMonth()}\n >\n {labels.map((label, index) => (\n <option\n disabled={monthDisabled(createCalendarDate(month.getFullYear(), index, 1))}\n key={label}\n value={index}\n >\n {label}\n </option>\n ))}\n </select>\n );\n },\n);\n\nexport type CalendarYearSelectProps = Omit<\n ComponentPropsWithoutRef<\"select\">,\n \"children\" | \"onChange\" | \"value\"\n>;\nexport const CalendarYearSelect = forwardRef<HTMLSelectElement, CalendarYearSelectProps>(\n function CalendarYearSelect({ className, ...props }, ref) {\n const { month, monthDisabled, selectYear, styles, yearRange } = useCalendarContext();\n const years = Array.from(\n { length: yearRange.end - yearRange.start + 1 },\n (_, index) => yearRange.start + index,\n );\n return (\n <select\n {...props}\n aria-label={props[\"aria-label\"] ?? \"Select year\"}\n className={cx(styles.yearSelect, className)}\n data-slot=\"calendar-year-select\"\n onChange={(event) => selectYear(Number(event.currentTarget.value))}\n ref={ref}\n value={month.getFullYear()}\n >\n {years.map((year) => (\n <option\n disabled={monthDisabled(createCalendarDate(year, month.getMonth(), 1))}\n key={year}\n value={year}\n >\n {year}\n </option>\n ))}\n </select>\n );\n },\n);\n\nexport interface CalendarDayProps extends Omit<ComponentPropsWithoutRef<\"button\">, \"value\"> {\n date: Date;\n}\n\nexport const CalendarDay = forwardRef<HTMLButtonElement, CalendarDayProps>(function CalendarDay(\n { children, className, date, disabled, onClick, onKeyDown, ...props },\n ref,\n) {\n const {\n dateDisabled,\n disabled: calendarDisabled,\n focusDate,\n focusedDate,\n locale,\n month,\n onSelect,\n registerDay,\n selected,\n styles,\n today,\n weekStartsOn,\n } = useCalendarContext();\n const key = dateKey(date);\n const outsideMonth = !sameMonth(date, month);\n const isDisabled = Boolean(disabled || calendarDisabled || dateDisabled(date));\n const isSelected = isSameDay(date, selected);\n const isFocused = isSameDay(date, focusedDate);\n const isToday = isSameDay(date, today);\n return (\n // biome-ignore lint/a11y/useSemanticElements: the roving button is the interactive grid cell.\n <button\n {...props}\n aria-label={\n props[\"aria-label\"] ?? new Intl.DateTimeFormat(locale, { dateStyle: \"full\" }).format(date)\n }\n aria-current={isToday ? \"date\" : undefined}\n aria-selected={isSelected}\n className={cx(styles.day, className)}\n data-date={key}\n data-disabled={isDisabled || undefined}\n data-outside-month={outsideMonth || undefined}\n data-selected={isSelected || undefined}\n data-slot=\"calendar-day\"\n data-today={isToday || undefined}\n disabled={isDisabled}\n onClick={(event) => {\n onSelect(date);\n onClick?.(event);\n }}\n onKeyDown={(event) => {\n if (!event.defaultPrevented) {\n let nextDate: Date | undefined;\n switch (event.key) {\n case \"ArrowLeft\":\n nextDate = addDays(date, -1);\n break;\n case \"ArrowRight\":\n nextDate = addDays(date, 1);\n break;\n case \"ArrowUp\":\n nextDate = addDays(date, -7);\n break;\n case \"ArrowDown\":\n nextDate = addDays(date, 7);\n break;\n case \"Home\":\n nextDate = addDays(date, -((date.getDay() - weekStartsOn + 7) % 7));\n break;\n case \"End\":\n nextDate = addDays(date, 6 - ((date.getDay() - weekStartsOn + 7) % 7));\n break;\n case \"PageUp\":\n nextDate = addMonths(date, event.shiftKey ? -12 : -1);\n break;\n case \"PageDown\":\n nextDate = addMonths(date, event.shiftKey ? 12 : 1);\n break;\n case \"Enter\":\n case \" \":\n if (!isDisabled) {\n event.preventDefault();\n onSelect(date);\n }\n break;\n }\n if (nextDate) {\n event.preventDefault();\n focusDate(nextDate, nextDate < date ? -1 : 1);\n }\n }\n onKeyDown?.(event);\n }}\n ref={(node) => {\n registerDay(key, node);\n if (typeof ref === \"function\") ref(node);\n else if (ref) ref.current = node;\n }}\n role=\"gridcell\"\n tabIndex={isFocused && !isDisabled ? 0 : -1}\n type=\"button\"\n >\n {children ?? date.getDate()}\n </button>\n );\n});\n\nexport interface CalendarGridProps extends Omit<ComponentPropsWithoutRef<\"div\">, \"children\"> {\n \"aria-label\"?: string;\n}\n\nexport const CalendarGrid = forwardRef<HTMLDivElement, CalendarGridProps>(function CalendarGrid(\n { \"aria-label\": ariaLabel, className, ...props },\n ref,\n) {\n const { locale, month, styles, weekStartsOn } = useCalendarContext();\n const days = useMemo(() => getCalendarDays(month, weekStartsOn), [month, weekStartsOn]);\n const weeks = useMemo(\n () =>\n Array.from({ length: Math.ceil(days.length / 7) }, (_, index) =>\n days.slice(index * 7, index * 7 + 7),\n ),\n [days],\n );\n const weekdays = useMemo(() => getWeekdayLabels(locale, weekStartsOn), [locale, weekStartsOn]);\n return (\n <div {...props} className={cx(styles.calendar, className)} data-slot=\"calendar-grid\" ref={ref}>\n <div aria-hidden=\"true\" className={styles.weekdays} data-slot=\"calendar-weekdays\">\n {weekdays.map((weekday) => (\n <span className={styles.weekday} data-slot=\"calendar-weekday\" key={weekday}>\n {weekday}\n </span>\n ))}\n </div>\n {/* biome-ignore lint/a11y/useSemanticElements: the calendar uses the ARIA grid pattern. */}\n <div\n aria-label={ariaLabel ?? formatMonthLabel(month, locale)}\n className={styles.grid}\n data-slot=\"calendar-day-grid\"\n role=\"grid\"\n >\n {weeks.map((week, index) => (\n // biome-ignore lint/a11y/useSemanticElements: Calendar rows use ARIA grid semantics while the day controls remain buttons.\n <div\n aria-rowindex={index + 1}\n className={styles.row}\n data-slot=\"calendar-week\"\n key={week.map(dateKey).join(\"-\")}\n role=\"row\"\n tabIndex={-1}\n >\n {week.map((date) => (\n <CalendarDay date={date} key={dateKey(date)} />\n ))}\n </div>\n ))}\n </div>\n </div>\n );\n});\n\nexport const Calendar = {\n Root: CalendarRoot,\n Header: CalendarHeader,\n Caption: CalendarCaption,\n Previous: CalendarPrevious,\n Next: CalendarNext,\n MonthSelect: CalendarMonthSelect,\n YearSelect: CalendarYearSelect,\n Grid: CalendarGrid,\n Day: CalendarDay,\n};\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Calendar, CalendarCaption, CalendarCaptionProps, CalendarDay, CalendarDayProps, CalendarGrid, CalendarGridProps, CalendarHeader, CalendarHeaderProps, CalendarMonthSelect, CalendarMonthSelectProps, CalendarNavigationProps, CalendarNext, CalendarPrevious, CalendarRoot, CalendarRootProps, CalendarYearRange, CalendarYearSelect, CalendarYearSelectProps } from "./calendar.cjs";
2
+ export { Calendar, CalendarCaption, type CalendarCaptionProps, CalendarDay, type CalendarDayProps, CalendarGrid, type CalendarGridProps, CalendarHeader, type CalendarHeaderProps, CalendarMonthSelect, type CalendarMonthSelectProps, type CalendarNavigationProps, CalendarNext, CalendarPrevious, CalendarRoot, type CalendarRootProps, type CalendarYearRange, CalendarYearSelect, type CalendarYearSelectProps };
@@ -0,0 +1,2 @@
1
+ import { Calendar, CalendarCaption, CalendarCaptionProps, CalendarDay, CalendarDayProps, CalendarGrid, CalendarGridProps, CalendarHeader, CalendarHeaderProps, CalendarMonthSelect, CalendarMonthSelectProps, CalendarNavigationProps, CalendarNext, CalendarPrevious, CalendarRoot, CalendarRootProps, CalendarYearRange, CalendarYearSelect, CalendarYearSelectProps } from "./calendar.js";
2
+ export { Calendar, CalendarCaption, type CalendarCaptionProps, CalendarDay, type CalendarDayProps, CalendarGrid, type CalendarGridProps, CalendarHeader, type CalendarHeaderProps, CalendarMonthSelect, type CalendarMonthSelectProps, type CalendarNavigationProps, CalendarNext, CalendarPrevious, CalendarRoot, type CalendarRootProps, type CalendarYearRange, CalendarYearSelect, type CalendarYearSelectProps };