@yamada-ui/calendar
Version:
Yamada UI calendar component
1 lines • 14 kB
Source Map (JSON)
{"version":3,"sources":["../src/month.tsx"],"sourcesContent":["import type { ButtonProps } from \"@yamada-ui/button\"\nimport type { CSSUIObject, FC, HTMLUIProps } from \"@yamada-ui/core\"\nimport type { CalendarHeaderProps } from \"./calendar-header\"\nimport { Button } from \"@yamada-ui/button\"\nimport { ui } from \"@yamada-ui/core\"\nimport {\n cx,\n dataAttr,\n filterUndefined,\n isBoolean,\n isNull,\n isUndefined,\n} from \"@yamada-ui/utils\"\nimport dayjs from \"dayjs\"\nimport { useMemo } from \"react\"\nimport { CalendarHeader } from \"./calendar-header\"\nimport { getFormattedLabel, getMonthDays, getWeekdays } from \"./calendar-utils\"\nimport { useCalendarContext } from \"./use-calendar\"\nimport { useMonth } from \"./use-month\"\n\ninterface MonthTableProps extends HTMLUIProps<\"table\"> {\n tbody?: HTMLUIProps<\"tbody\">\n td?: HTMLUIProps<\"td\">\n th?: HTMLUIProps<\"th\">\n thead?: HTMLUIProps<\"thead\">\n tr?: HTMLUIProps<\"tr\">\n}\n\ninterface MonthOptions {\n /**\n * Props for calendar day button element.\n */\n dayProps?: { component?: FC<DayProps> } & ButtonProps\n /**\n * Props for calendar header element.\n */\n headerProps?: HTMLUIProps\n /**\n * Props for calendar month table element.\n */\n tableProps?: MonthTableProps\n /**\n * Props for calendar weekday element.\n */\n weekdayProps?: { component?: FC<WeekdayProps> } & HTMLUIProps\n}\n\nexport interface MonthProps\n extends HTMLUIProps,\n Omit<CalendarHeaderProps, \"index\" | \"label\">,\n MonthOptions {}\n\nexport const Month: FC<MonthProps> = ({\n className,\n controlProps,\n dayProps,\n headerProps,\n labelProps,\n nextProps,\n prevProps,\n tableProps,\n weekdayProps,\n ...rest\n}) => {\n const {\n amountOfMonths,\n dateFormat,\n firstDayOfWeek,\n locale,\n month: selectedMonth,\n styles,\n weekdayFormat,\n withWeekdays,\n } = useCalendarContext()\n const { getButtonProps, getGridProps } = useMonth()\n\n const { component: customWeekday = Weekday, ...computedWeekdayProps } =\n weekdayProps ?? {}\n const { component: customDay = Day, ...computedDayProps } = dayProps ?? {}\n const {\n tbody: tbodyProps,\n td: tdProps,\n th: thProps,\n thead: theadProps,\n tr: trProps,\n ...computedTableProps\n } = tableProps ?? {}\n\n const weekdays = useMemo(\n () => getWeekdays(locale, firstDayOfWeek, weekdayFormat),\n [firstDayOfWeek, locale, weekdayFormat],\n )\n\n const w = rest.w ?? rest.width\n const minW = rest.minW ?? rest.minWidth\n const maxW = rest.maxW ?? rest.maxWidth\n const h = rest.h ?? rest.height\n const minH = rest.minH ?? rest.minHeight\n const maxH = rest.maxH ?? rest.maxHeight\n\n return (\n <>\n {Array(amountOfMonths)\n .fill(0)\n .map((_, index) => {\n const month = dayjs(selectedMonth).add(index, \"months\").toDate()\n const days = getMonthDays(month, firstDayOfWeek)\n\n const formattedLabel = getFormattedLabel(month, locale, dateFormat)\n\n return (\n <ui.div\n key={index}\n __css={{ ...styles.content }}\n {...filterUndefined(rest)}\n >\n <CalendarHeader\n {...{\n ...headerProps,\n index,\n label: formattedLabel,\n controlProps,\n labelProps,\n nextProps,\n prevProps,\n }}\n />\n\n <ui.table\n className={cx(\"ui-calendar__month\", className)}\n __css={{\n h: styles.content?.h ?? styles.content?.height,\n maxH: styles.content?.maxH ?? styles.content?.maxHeight,\n maxW: styles.content?.maxW ?? styles.content?.maxWidth,\n minH: styles.content?.minH ?? styles.content?.minHeight,\n minW: styles.content?.minW ?? styles.content?.minWidth,\n w: styles.content?.w ?? styles.content?.width,\n ...styles.date,\n }}\n {...getGridProps({\n month,\n ...filterUndefined({\n h,\n maxH,\n maxW,\n minH,\n minW,\n w,\n ...computedTableProps,\n }),\n })}\n >\n {withWeekdays ? (\n <ui.thead {...theadProps}>\n <ui.tr __css={{ ...styles.row }} {...trProps}>\n {weekdays.map((weekday, index) => (\n <ui.th\n key={index}\n __css={{\n fontWeight: \"normal\",\n ...styles.cell,\n }}\n {...thProps}\n >\n <ui.div\n className=\"ui-calendar__month__weekday\"\n __css={{\n display: \"flex\",\n w: \"100%\",\n ...styles.weekday,\n }}\n {...computedWeekdayProps}\n >\n {customWeekday({ index, weekday })}\n </ui.div>\n </ui.th>\n ))}\n </ui.tr>\n </ui.thead>\n ) : null}\n\n <ui.tbody {...tbodyProps}>\n {days.map((cells, row) => {\n return (\n <ui.tr key={row} __css={{ ...styles.row }} {...trProps}>\n {cells.map((date, col) => {\n const {\n between,\n end,\n hidden,\n outside,\n selected,\n start,\n weekend,\n ...props\n } = getButtonProps({\n ...computedDayProps,\n index,\n month,\n value: date,\n })\n\n const day = customDay({\n col,\n date,\n outside,\n row,\n selected,\n weekday: weekdays[col]!,\n weekend,\n })\n\n const displayed =\n !isNull(day) && !isUndefined(day) && !isBoolean(day)\n\n const css: CSSUIObject = {\n display:\n hidden || !displayed ? \"none\" : \"inline-flex\",\n fontSize: undefined,\n fontWeight: \"normal\",\n h: \"auto\",\n minW: \"auto\",\n p: 0,\n _ripple: {\n display: \"block\",\n },\n ...styles.day,\n }\n\n return (\n <ui.td\n key={col}\n data-between={dataAttr(between)}\n data-end={dataAttr(end)}\n data-start={dataAttr(start)}\n __css={{ ...styles.cell }}\n {...tdProps}\n >\n <Button\n className=\"ui-calendar__month__day\"\n variant=\"unstyled\"\n __css={css}\n {...props}\n >\n {day}\n </Button>\n </ui.td>\n )\n })}\n </ui.tr>\n )\n })}\n </ui.tbody>\n </ui.table>\n </ui.div>\n )\n })}\n </>\n )\n}\n\nMonth.displayName = \"Month\"\nMonth.__ui__ = \"Month\"\n\nexport interface WeekdayProps {\n index: number\n weekday: string\n}\n\nexport const Weekday: FC<WeekdayProps> = ({ weekday }) => {\n return (\n <ui.span className=\"ui-calendar__month__weekday__label\">{weekday}</ui.span>\n )\n}\n\nWeekday.displayName = \"Weekday\"\nWeekday.__ui__ = \"Weekday\"\n\nexport interface DayProps {\n col: number\n date: Date\n outside: boolean\n row: number\n selected: boolean\n weekday: string\n weekend: boolean\n /**\n * @deprecated Use `outside` instead.\n */\n isOutside?: boolean\n /**\n * @deprecated Use `selected` instead.\n */\n isSelected?: boolean\n /**\n * @deprecated Use `weekend` instead.\n */\n isWeekend?: boolean\n}\n\nexport const Day: FC<DayProps> = ({ date }) => {\n return (\n <ui.span className=\"ui-calendar__month__day__label\">\n {date.getDate()}\n </ui.span>\n )\n}\n\nDay.displayName = \"Day\"\nDay.__ui__ = \"Day\"\n"],"mappings":"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","names":["_a","_b","_c","_d","_e","_f","index"]}