@codecademy/gamut
68.2.268.2.3-alpha.93a7da.0
dist/DatePicker/types.d.ts+
dist/DatePicker/types.d.tsNew file+159
Index: package/dist/DatePicker/types.d.ts
===================================================================
--- package/dist/DatePicker/types.d.ts
+++ package/dist/DatePicker/types.d.ts
@@ -0,0 +1,159 @@
+import { ComponentProps } from 'react';
+import { Input } from '../Form/inputs/Input';
+import { CalendarQuickAction, DatePickerSharedProps } from './sharedTypes';
+import { DatePickerTranslations } from './utils/translations';
+interface DatePickerBaseProps<Mode extends 'single' | 'range'> extends DatePickerSharedProps {
+ /** Discriminator: set to `"single"` or `"range"`; both are required on `DatePicker`. */
+ mode: Mode;
+ /** When provided, only the provider is rendered and children compose Input + Calendar. */
+ children?: React.ReactNode;
+ /** Override default UI strings for internationalization.
+ *
+ * @default DEFAULT_DATE_PICKER_TRANSLATIONS
+ * @see {@link DatePickerTranslations} for the shape of the translations and default values
+ * @example
+ * ```tsx
+ * <DatePicker
+ * mode="single"
+ * translations={{
+ * dateLabel: 'Choose a date',
+ * }}
+ * />
+ * ```
+ */
+ translations?: DatePickerTranslations;
+ /** Size of the input.
+ * @default "base"
+ * @see `size` on {@link Input}
+ */
+ inputSize?: ComponentProps<typeof Input>['size'];
+ /**
+ * Calendar footer quick actions. Default values are provided based on the mode, but you can pass your own. Only the first 3 quick actions will be displayed.
+ * Pass `null` to omit quick actions.
+ *
+ * @default for single mode: Yesterday, Today, Tomorrow
+ * for range mode: Last 7 days, Last 30 days, Last 90 days
+ *
+ * @see {@link CalendarQuickAction} for the shape of the quick actions.
+ *
+ * @example single mode:
+ * ```tsx
+ * <DatePicker
+ * mode="single"
+ * quickActions={[
+ * { num: -1, timePeriod: 'day', displayText: 'Yesterday' },
+ * { num: 0, timePeriod: 'day', displayText: 'Today' },
+ * { num: 1, timePeriod: 'day', displayText: 'Tomorrow' },
+ * ]}
+ * />
+ * ```
+ * @example range mode:
+ * ```tsx
+ * <DatePicker
+ * mode="range"
+ * quickActions={[
+ * { num: -7, timePeriod: 'day', displayText: 'Last 7 days' },
+ * { num: -30, timePeriod: 'day', displayText: 'Last 30 days' },
+ * { num: -90, timePeriod: 'day', displayText: 'Last 90 days' },
+ * ]}
+ * ```
+ */
+ quickActions?: CalendarQuickAction[] | null;
+}
+export interface DatePickerSingleProps extends DatePickerBaseProps<'single'> {
+ /** Controlled selected date. Pass `null` to not have a default selected date. Pass a `Date` to have a default selected date.
+ *
+ * @example
+ * ```tsx
+ * const [selectedDate, setSelectedDate] = useState<Date | null>(null);
+ * <DatePicker
+ * mode="single"
+ * selectedDate={selectedDate}
+ * onSelected={setSelectedDate}
+ * />
+ * ```
+ */
+ selectedDate: Date | null;
+ /** Callback called when the user selects a date. Pass the new date to the callback so the component can update the state.
+ *
+ * @example
+ * ```tsx
+ * const [selectedDate, setSelectedDate] = useState<Date | null>(null);
+ * <DatePicker
+ * mode="single"
+ * selectedDate={selectedDate}
+ * onSelected={setSelectedDate}
+ * />
+ * ```
+ */
+ onSelected: (date: Date | null) => void;
+}
+export interface DatePickerRangeProps extends DatePickerBaseProps<'range'> {
+ /** Controlled start date. Pass `null` to not have a default start date. Pass a `Date` to have a default start date.
+ *
+ * @example
+ * ```tsx
+ * const [startDate, setStartDate] = useState<Date | null>(null);
+ * const [endDate, setEndDate] = useState<Date | null>(null);
+ *
+ * <DatePicker
+ * mode="range"
+ * startDate={startDate}
+ * onStartSelected={setStartDate}
+ * endDate={endDate}
+ * onEndSelected={setEndDate}
+ * />
+ * ```
+ */
+ startDate: Date | null;
+ /** Controlled end date. Pass `null` to not have a default end date. Pass a `Date` to have a default end date.
+ *
+ * @example
+ * ```tsx
+ * const [endDate, setEndDate] = useState<Date | null>(null);
+ * const [startDate, setStartDate] = useState<Date | null>(null);
+ * <DatePicker
+ * mode="range"
+ * endDate={endDate}
+ * onEndSelected={setEndDate}
+ * startDate={startDate}
+ * onStartSelected={setStartDate}
+ * />
+ * ```
+ */
+ endDate: Date | null;
+ /** Callback called when the user changes the start date. Pass the new start date to the callback so the component can update the state.
+ *
+ * @example
+ * ```tsx
+ * const [startDate, setStartDate] = useState<Date | null>(null);
+ * const [endDate, setEndDate] = useState<Date | null>(null);
+ * <DatePicker
+ * mode="range"
+ * startDate={startDate}
+ * onStartSelected={setStartDate}
+ * endDate={endDate}
+ * onEndSelected={setEndDate}
+ * />
+ * ```
+ */
+ onStartSelected: (date: Date | null) => void;
+ /** Callback called when the user changes the end date. Pass the new end date to the callback so the component can update the state.
+ *
+ * @example
+ * ```tsx
+ * const [endDate, setEndDate] = useState<Date | null>(null);
+ * const [startDate, setStartDate] = useState<Date | null>(null);
+ * <DatePicker
+ * mode="range"
+ * endDate={endDate}
+ * onEndSelected={setEndDate}
+ * startDate={startDate}
+ * onStartSelected={setStartDate}
+ * />
+ * ```
+ */
+ onEndSelected: (date: Date | null) => void;
+}
+export type DatePickerProps = DatePickerSingleProps | DatePickerRangeProps;
+export {};