@drivy/cobalt 0.39.0 → 0.40.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 (38) hide show
  1. package/cjs/tokens/theme.js +171 -171
  2. package/components/Alerter/index.js.map +1 -1
  3. package/components/BasicCell/index.js.map +1 -1
  4. package/components/Buttons/helpers.js.map +1 -1
  5. package/components/Calendar/CalendarDayPicker/CalendarDayPicker.js.map +1 -1
  6. package/components/Calendar/CalendarDayPicker/CalendarDayPickerMonth.js.map +1 -1
  7. package/components/Calendar/CalendarRangePicker/CalendarRangePicker.js.map +1 -1
  8. package/components/Calendar/CalendarRangePicker/CalendarRangePickerMonth.js.map +1 -1
  9. package/components/Calendar/CalendarView/CalendarViewMonth.js.map +1 -1
  10. package/components/Calendar/utils.js.map +1 -1
  11. package/components/Chip/index.js.map +1 -1
  12. package/components/Form/Autocomplete/index.js.map +1 -1
  13. package/components/Form/Hint.js.map +1 -1
  14. package/components/Form/Stepper.js.map +1 -1
  15. package/components/Form/TextArea.js.map +1 -1
  16. package/components/Modal/index.js.map +1 -1
  17. package/components/PhotoDropzone/index.js.map +1 -1
  18. package/components/Rating/RatingIcons.js.map +1 -1
  19. package/components/Tabs/index.js.map +1 -1
  20. package/components/utils/Timer.js.map +1 -1
  21. package/components/utils/validateFile.js.map +1 -1
  22. package/hooks/useBreakpoint.js.map +1 -1
  23. package/hooks/useElementHeight.js.map +1 -1
  24. package/package.json +31 -32
  25. package/styles/components/Layout/{Layout.scss → Components/index.scss} +31 -16
  26. package/styles/components/Layout/Surfaces/index.scss +55 -0
  27. package/styles/components.scss +2 -1
  28. package/styles/core/palette.scss +0 -25
  29. package/styles/core/text.scss +1 -1
  30. package/tokens/theme.js +171 -171
  31. package/types/components/Layout/{LayoutCard.d.ts → Components/LayoutCard.d.ts} +2 -1
  32. package/types/components/Layout/{LayoutSection.d.ts → Components/LayoutSection.d.ts} +2 -1
  33. package/types/components/Layout/{LayoutStack.d.ts → Components/LayoutStack.d.ts} +4 -3
  34. package/types/components/Layout/Components/index.d.ts +4 -0
  35. package/types/components/Layout/Surfaces/index.d.ts +25 -0
  36. package/utilities.css +5 -30
  37. package/types/components/Layout/LayoutPageTitle.d.ts +0 -5
  38. /package/types/components/Layout/{LayoutSectionTitle.d.ts → Components/LayoutSectionTitle.d.ts} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarRangePickerMonth.js","sources":["../../../../src/components/Calendar/CalendarRangePicker/CalendarRangePickerMonth.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\"\nimport { CalendarRangePickerDay } from \"./CalendarRangePickerDay\"\nimport classNames from \"classnames\"\nimport { format, isSameDay, differenceInCalendarDays } from \"date-fns\"\nimport { getMonthDaysByWeeks, getWeekDays } from \"../utils\"\nimport {\n CalendarRangePickerPropsType,\n DayStatusInterface,\n RangeConstraintsInterface,\n} from \"./CalendarRangePicker\"\n\ntype CalendarRangePickerMonthPropsType = {\n date: Date\n startDate?: Date\n endDate?: Date\n onSelectDate: (date: Date, isOutOfRange?: boolean) => void\n onChangeDate: (date: Date, status: DayStatusInterface) => void\n onLeaveDate?: (date: Date) => void\n isEditingStartDate?: boolean\n isEditingEndDate?: boolean\n firstAvailableDate: Date\n lastAvailableDate?: Date\n isDayDisabledFn?: CalendarRangePickerPropsType[\"isDayDisabledFn\"]\n hasDayNotificationFn?: CalendarRangePickerPropsType[\"hasDayNotificationFn\"]\n isDayInvalidForSelectionFn?: CalendarRangePickerPropsType[\"isDayInvalidForSelectionFn\"]\n rangeConstraints?: RangeConstraintsInterface\n isSundayFirstDayOfWeek?: boolean\n locale: any\n}\n\nfunction isDisabled(\n day: Date,\n firstAvailableDate: Date,\n lastAvailableDate: Date | undefined\n) {\n return (\n day.getTime() < firstAvailableDate.getTime() ||\n (lastAvailableDate != null && day.getTime() > lastAvailableDate.getTime())\n )\n}\n\nfunction isInvalidOppositeBound({\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n startDate,\n endDate,\n}: {\n startDate: Date | undefined\n endDate: Date | undefined\n isEditingStartDate: boolean | undefined\n isEditingEndDate: boolean | undefined\n isStartDay: boolean\n isEndDay: boolean\n}) {\n return (\n startDate != null &&\n endDate != null &&\n startDate > endDate &&\n ((isEditingStartDate && isEndDay) || (isEditingEndDate && isStartDay))\n )\n}\n\nfunction isDayOutOfRange({\n day,\n rangeConstraints,\n startDate,\n}: {\n day: Date\n startDate: Date | undefined\n rangeConstraints: RangeConstraintsInterface | undefined\n}) {\n return (\n rangeConstraints != null &&\n rangeConstraints.max != null &&\n startDate != null &&\n differenceInCalendarDays(day, startDate) >= rangeConstraints.max.value\n )\n}\n\nfunction isDayInvalid({\n day,\n isDaySelected,\n rangeConstraints,\n rangeTooShort,\n rangeExceeded,\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n isDayInvalidForSelectionFn,\n startDate,\n endDate,\n}: {\n day: Date\n isDaySelected: boolean\n startDate: Date | undefined\n endDate: Date | undefined\n rangeConstraints: RangeConstraintsInterface | undefined\n rangeTooShort: boolean\n rangeExceeded: boolean\n isEditingStartDate: boolean | undefined\n isEditingEndDate: boolean | undefined\n isStartDay: boolean\n isEndDay: boolean\n isDayInvalidForSelectionFn?: CalendarRangePickerPropsType[\"isDayInvalidForSelectionFn\"]\n}) {\n if (!isDaySelected) return false\n\n let isInvalid = false\n if (!isEditingStartDate && !isEditingEndDate) {\n isInvalid = rangeTooShort || rangeExceeded\n } else if (rangeTooShort && (!isStartDay || isEndDay)) {\n isInvalid = true\n } else if (\n isInvalidOppositeBound({\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n startDate,\n endDate,\n })\n ) {\n isInvalid = true\n } else {\n isInvalid = isDayOutOfRange({\n day,\n rangeConstraints,\n startDate,\n })\n }\n\n if (\n !isInvalid &&\n isDayInvalidForSelectionFn &&\n ((isEditingStartDate && isStartDay) || (isEditingEndDate && isEndDay))\n ) {\n isInvalid = isDayInvalidForSelectionFn(day)\n }\n\n return isInvalid\n}\n\nfunction isSelected({\n day,\n startDate,\n endDate,\n isStartDay,\n isEndDay,\n isOutOfRangeStartDate,\n rangeTooShort,\n isEditingStartDate,\n isEditingEndDate,\n}: {\n day: Date\n startDate: Date | undefined\n endDate: Date | undefined\n isStartDay: boolean\n isEndDay: boolean\n isOutOfRangeStartDate: boolean\n rangeTooShort: boolean\n isEditingStartDate: boolean\n isEditingEndDate: boolean\n}) {\n return !!(\n isStartDay ||\n isEndDay ||\n ((!rangeTooShort || (!isEditingStartDate && !isEditingEndDate)) &&\n !isOutOfRangeStartDate &&\n endDate &&\n day.getTime() <= endDate.getTime() &&\n startDate &&\n day.getTime() > startDate.getTime())\n )\n}\n\nfunction isRangeExceeded(rangeInDays: number, rangeLimit: number | undefined) {\n return rangeLimit != null && rangeInDays > rangeLimit\n}\n\nfunction isRangeTooShort(rangeInDays: number, rangeLimit: number | undefined) {\n return rangeInDays <= 0\n ? false\n : rangeLimit != null && rangeInDays < rangeLimit\n}\n\nfunction buildTooltipMessage({\n rangeInDays,\n isEditingStartDate,\n isStartDay,\n isEditingEndDate,\n isEndDay,\n rangeConstraints,\n}: {\n rangeInDays: number\n isEditingStartDate: boolean\n isStartDay: boolean\n isEditingEndDate: boolean\n isEndDay: boolean\n rangeConstraints?: RangeConstraintsInterface\n}) {\n let tooltipMessage\n if (\n rangeConstraints &&\n rangeInDays >= 0 &&\n ((isEditingStartDate && isStartDay) || (isEditingEndDate && isEndDay))\n ) {\n if (isRangeTooShort(rangeInDays, rangeConstraints.min?.value)) {\n tooltipMessage = rangeConstraints?.min?.message\n } else if (isRangeExceeded(rangeInDays, rangeConstraints.max?.value)) {\n tooltipMessage = rangeConstraints?.max?.message\n }\n }\n\n return tooltipMessage\n}\n\nfunction getRangeInDays(range: {\n startDate: Date | undefined\n endDate: Date | undefined\n}) {\n return range.startDate && range.endDate\n ? differenceInCalendarDays(range.endDate, range.startDate) + 1\n : 0\n}\n\nexport function CalendarRangePickerMonth({\n date,\n onSelectDate,\n onChangeDate,\n onLeaveDate,\n startDate,\n endDate,\n isEditingStartDate = false,\n isEditingEndDate = false,\n firstAvailableDate,\n lastAvailableDate,\n isDayDisabledFn,\n isDayInvalidForSelectionFn,\n hasDayNotificationFn,\n rangeConstraints,\n isSundayFirstDayOfWeek,\n locale,\n}: CalendarRangePickerMonthPropsType) {\n const byWeeks = useMemo(\n () => getMonthDaysByWeeks(date, isSundayFirstDayOfWeek),\n []\n )\n\n // we use a state for the selected Date to allow the onSelect event to be memoized then still triggering some logic with updated data thanks to the setter+useEffect dependency mechanism\n const [selectedDate, setSelectedDate] = useState<Date | null>(null)\n\n const today = new Date().setHours(0, 0, 0, 0)\n\n const weekdays: Date[] = useMemo(\n () => getWeekDays(isSundayFirstDayOfWeek),\n []\n )\n\n const rangeInDays = getRangeInDays({ startDate, endDate })\n\n const rangeExceeded = isRangeExceeded(\n rangeInDays,\n rangeConstraints?.max?.value\n )\n\n const rangeTooShort = isRangeTooShort(\n rangeInDays,\n rangeConstraints?.min?.value\n )\n\n const isOutOfRangeStartDate = isEditingStartDate && rangeExceeded\n\n const onMouseEnter = (day: Date, disabled: boolean) => {\n const status: DayStatusInterface = {}\n\n if (disabled) {\n status.isDisabled = true\n }\n\n if (!disabled) {\n const currentRange = isEditingStartDate\n ? { startDate: day, endDate: endDate! }\n : { startDate: startDate!, endDate: day }\n\n const currentRangeInDays = getRangeInDays({\n startDate: currentRange.startDate,\n endDate: currentRange.endDate,\n })\n\n const currentRangeExceeded = isRangeExceeded(\n currentRangeInDays,\n rangeConstraints?.max?.value\n )\n\n if (currentRangeExceeded) {\n status.isRangeExceeded = true\n } else {\n const currentRangeTooShort = isRangeTooShort(\n currentRangeInDays,\n rangeConstraints?.min?.value\n )\n\n if (currentRangeTooShort) {\n status.isRangeTooShort = true\n } else {\n status.isCustomInvalid =\n isDayInvalidForSelectionFn != null &&\n isDayInvalidForSelectionFn(day)\n }\n }\n }\n\n onChangeDate(day, status)\n }\n\n useEffect(() => {\n // on Date selection...\n if (selectedDate) {\n if (isEditingStartDate) {\n onSelectDate(\n selectedDate,\n isRangeExceeded(\n getRangeInDays({ startDate: selectedDate, endDate }),\n rangeConstraints?.max?.value\n )\n )\n } else {\n onSelectDate(\n selectedDate,\n isRangeExceeded(\n getRangeInDays({ startDate, endDate: selectedDate }),\n rangeConstraints?.max?.value\n )\n )\n }\n }\n }, [selectedDate])\n\n return (\n <div\n className={classNames(\"cobalt-CalendarRangePicker__month\", {\n \"cobalt-CalendarRangePicker__month--invalid\":\n rangeExceeded && !isEditingStartDate,\n })}\n data-month={format(date, \"yyyy-MM\")}\n >\n <div className=\"cobalt-CalendarRangePicker__month-header\">\n {format(date, \"MMMM yyyy\", { locale })}\n </div>\n <div className=\"cobalt-CalendarRangePicker__month__weeks-container\">\n <div className=\"cobalt-CalendarRangePicker__month__week-header\">\n {weekdays.map((weekday) => (\n <div\n key={weekday.getTime()}\n className=\"cobalt-CalendarRangePicker__month__day-header\"\n >\n {format(weekday, \"iiiiii\", { locale })}\n </div>\n ))}\n </div>\n {byWeeks.map((week, index) => (\n <div key={index} className=\"cobalt-CalendarRangePicker__month__week\">\n {week.map((day) => {\n const isStartDay = startDate != null && isSameDay(day, startDate)\n const isEndDay = endDate != null && isSameDay(day, endDate)\n\n const disabled =\n isDisabled(day, firstAvailableDate, lastAvailableDate) ||\n (isDayDisabledFn && isDayDisabledFn(day))\n\n const hasNotification =\n !disabled &&\n hasDayNotificationFn != null &&\n hasDayNotificationFn(day)\n\n const isRange =\n rangeInDays !== 0 &&\n (isStartDay || isEndDay) &&\n (!rangeTooShort || (!isEditingStartDate && !isEditingEndDate))\n\n const isDaySelected = isSelected({\n day,\n startDate,\n endDate,\n isStartDay,\n isEndDay,\n isOutOfRangeStartDate,\n rangeTooShort,\n isEditingStartDate,\n isEditingEndDate,\n })\n\n return (\n <CalendarRangePickerDay\n key={day.getTime()}\n date={day}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onLeaveDate}\n onSelect={setSelectedDate}\n isToday={isSameDay(day, today)}\n isActive={\n (isEditingStartDate && isStartDay) ||\n (isEditingEndDate && isEndDay)\n }\n isStartDay={isStartDay}\n isEndDay={isEndDay}\n isRange={isRange}\n isEditingStartDate={isEditingStartDate}\n isEditingEndDate={isEditingEndDate}\n isInvalid={isDayInvalid({\n day,\n isDayInvalidForSelectionFn,\n isDaySelected,\n startDate,\n rangeConstraints,\n rangeTooShort,\n rangeExceeded,\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n endDate,\n })}\n hasNotification={hasNotification}\n isDisabled={disabled}\n tooltipMessage={buildTooltipMessage({\n rangeInDays,\n isEditingStartDate: !!isEditingStartDate,\n isEditingEndDate: !!isEditingEndDate,\n isStartDay,\n isEndDay,\n rangeConstraints,\n })}\n isSelected={isDaySelected}\n />\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],"names":["classNames","CalendarRangePickerDay"],"mappings":"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"}
1
+ {"version":3,"file":"CalendarRangePickerMonth.js","sources":["../../../../src/components/Calendar/CalendarRangePicker/CalendarRangePickerMonth.tsx"],"sourcesContent":["import React, { useEffect, useMemo, useState } from \"react\"\nimport { CalendarRangePickerDay } from \"./CalendarRangePickerDay\"\nimport classNames from \"classnames\"\nimport { format, isSameDay, differenceInCalendarDays } from \"date-fns\"\nimport { getMonthDaysByWeeks, getWeekDays } from \"../utils\"\nimport {\n CalendarRangePickerPropsType,\n DayStatusInterface,\n RangeConstraintsInterface,\n} from \"./CalendarRangePicker\"\n\ntype CalendarRangePickerMonthPropsType = {\n date: Date\n startDate?: Date\n endDate?: Date\n onSelectDate: (date: Date, isOutOfRange?: boolean) => void\n onChangeDate: (date: Date, status: DayStatusInterface) => void\n onLeaveDate?: (date: Date) => void\n isEditingStartDate?: boolean\n isEditingEndDate?: boolean\n firstAvailableDate: Date\n lastAvailableDate?: Date\n isDayDisabledFn?: CalendarRangePickerPropsType[\"isDayDisabledFn\"]\n hasDayNotificationFn?: CalendarRangePickerPropsType[\"hasDayNotificationFn\"]\n isDayInvalidForSelectionFn?: CalendarRangePickerPropsType[\"isDayInvalidForSelectionFn\"]\n rangeConstraints?: RangeConstraintsInterface\n isSundayFirstDayOfWeek?: boolean\n locale: any\n}\n\nfunction isDisabled(\n day: Date,\n firstAvailableDate: Date,\n lastAvailableDate: Date | undefined\n) {\n return (\n day.getTime() < firstAvailableDate.getTime() ||\n (lastAvailableDate != null && day.getTime() > lastAvailableDate.getTime())\n )\n}\n\nfunction isInvalidOppositeBound({\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n startDate,\n endDate,\n}: {\n startDate: Date | undefined\n endDate: Date | undefined\n isEditingStartDate: boolean | undefined\n isEditingEndDate: boolean | undefined\n isStartDay: boolean\n isEndDay: boolean\n}) {\n return (\n startDate != null &&\n endDate != null &&\n startDate > endDate &&\n ((isEditingStartDate && isEndDay) || (isEditingEndDate && isStartDay))\n )\n}\n\nfunction isDayOutOfRange({\n day,\n rangeConstraints,\n startDate,\n}: {\n day: Date\n startDate: Date | undefined\n rangeConstraints: RangeConstraintsInterface | undefined\n}) {\n return (\n rangeConstraints != null &&\n rangeConstraints.max != null &&\n startDate != null &&\n differenceInCalendarDays(day, startDate) >= rangeConstraints.max.value\n )\n}\n\nfunction isDayInvalid({\n day,\n isDaySelected,\n rangeConstraints,\n rangeTooShort,\n rangeExceeded,\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n isDayInvalidForSelectionFn,\n startDate,\n endDate,\n}: {\n day: Date\n isDaySelected: boolean\n startDate: Date | undefined\n endDate: Date | undefined\n rangeConstraints: RangeConstraintsInterface | undefined\n rangeTooShort: boolean\n rangeExceeded: boolean\n isEditingStartDate: boolean | undefined\n isEditingEndDate: boolean | undefined\n isStartDay: boolean\n isEndDay: boolean\n isDayInvalidForSelectionFn?: CalendarRangePickerPropsType[\"isDayInvalidForSelectionFn\"]\n}) {\n if (!isDaySelected) return false\n\n let isInvalid = false\n if (!isEditingStartDate && !isEditingEndDate) {\n isInvalid = rangeTooShort || rangeExceeded\n } else if (rangeTooShort && (!isStartDay || isEndDay)) {\n isInvalid = true\n } else if (\n isInvalidOppositeBound({\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n startDate,\n endDate,\n })\n ) {\n isInvalid = true\n } else {\n isInvalid = isDayOutOfRange({\n day,\n rangeConstraints,\n startDate,\n })\n }\n\n if (\n !isInvalid &&\n isDayInvalidForSelectionFn &&\n ((isEditingStartDate && isStartDay) || (isEditingEndDate && isEndDay))\n ) {\n isInvalid = isDayInvalidForSelectionFn(day)\n }\n\n return isInvalid\n}\n\nfunction isSelected({\n day,\n startDate,\n endDate,\n isStartDay,\n isEndDay,\n isOutOfRangeStartDate,\n rangeTooShort,\n isEditingStartDate,\n isEditingEndDate,\n}: {\n day: Date\n startDate: Date | undefined\n endDate: Date | undefined\n isStartDay: boolean\n isEndDay: boolean\n isOutOfRangeStartDate: boolean\n rangeTooShort: boolean\n isEditingStartDate: boolean\n isEditingEndDate: boolean\n}) {\n return !!(\n isStartDay ||\n isEndDay ||\n ((!rangeTooShort || (!isEditingStartDate && !isEditingEndDate)) &&\n !isOutOfRangeStartDate &&\n endDate &&\n day.getTime() <= endDate.getTime() &&\n startDate &&\n day.getTime() > startDate.getTime())\n )\n}\n\nfunction isRangeExceeded(rangeInDays: number, rangeLimit: number | undefined) {\n return rangeLimit != null && rangeInDays > rangeLimit\n}\n\nfunction isRangeTooShort(rangeInDays: number, rangeLimit: number | undefined) {\n return rangeInDays <= 0\n ? false\n : rangeLimit != null && rangeInDays < rangeLimit\n}\n\nfunction buildTooltipMessage({\n rangeInDays,\n isEditingStartDate,\n isStartDay,\n isEditingEndDate,\n isEndDay,\n rangeConstraints,\n}: {\n rangeInDays: number\n isEditingStartDate: boolean\n isStartDay: boolean\n isEditingEndDate: boolean\n isEndDay: boolean\n rangeConstraints?: RangeConstraintsInterface\n}) {\n let tooltipMessage\n if (\n rangeConstraints &&\n rangeInDays >= 0 &&\n ((isEditingStartDate && isStartDay) || (isEditingEndDate && isEndDay))\n ) {\n if (isRangeTooShort(rangeInDays, rangeConstraints.min?.value)) {\n tooltipMessage = rangeConstraints?.min?.message\n } else if (isRangeExceeded(rangeInDays, rangeConstraints.max?.value)) {\n tooltipMessage = rangeConstraints?.max?.message\n }\n }\n\n return tooltipMessage\n}\n\nfunction getRangeInDays(range: {\n startDate: Date | undefined\n endDate: Date | undefined\n}) {\n return range.startDate && range.endDate\n ? differenceInCalendarDays(range.endDate, range.startDate) + 1\n : 0\n}\n\nexport function CalendarRangePickerMonth({\n date,\n onSelectDate,\n onChangeDate,\n onLeaveDate,\n startDate,\n endDate,\n isEditingStartDate = false,\n isEditingEndDate = false,\n firstAvailableDate,\n lastAvailableDate,\n isDayDisabledFn,\n isDayInvalidForSelectionFn,\n hasDayNotificationFn,\n rangeConstraints,\n isSundayFirstDayOfWeek,\n locale,\n}: CalendarRangePickerMonthPropsType) {\n const byWeeks = useMemo(\n () => getMonthDaysByWeeks(date, isSundayFirstDayOfWeek),\n []\n )\n\n // we use a state for the selected Date to allow the onSelect event to be memoized then still triggering some logic with updated data thanks to the setter+useEffect dependency mechanism\n const [selectedDate, setSelectedDate] = useState<Date | null>(null)\n\n const today = new Date().setHours(0, 0, 0, 0)\n\n const weekdays: Date[] = useMemo(\n () => getWeekDays(isSundayFirstDayOfWeek),\n []\n )\n\n const rangeInDays = getRangeInDays({ startDate, endDate })\n\n const rangeExceeded = isRangeExceeded(\n rangeInDays,\n rangeConstraints?.max?.value\n )\n\n const rangeTooShort = isRangeTooShort(\n rangeInDays,\n rangeConstraints?.min?.value\n )\n\n const isOutOfRangeStartDate = isEditingStartDate && rangeExceeded\n\n const onMouseEnter = (day: Date, disabled: boolean) => {\n const status: DayStatusInterface = {}\n\n if (disabled) {\n status.isDisabled = true\n }\n\n if (!disabled) {\n const currentRange = isEditingStartDate\n ? { startDate: day, endDate: endDate! }\n : { startDate: startDate!, endDate: day }\n\n const currentRangeInDays = getRangeInDays({\n startDate: currentRange.startDate,\n endDate: currentRange.endDate,\n })\n\n const currentRangeExceeded = isRangeExceeded(\n currentRangeInDays,\n rangeConstraints?.max?.value\n )\n\n if (currentRangeExceeded) {\n status.isRangeExceeded = true\n } else {\n const currentRangeTooShort = isRangeTooShort(\n currentRangeInDays,\n rangeConstraints?.min?.value\n )\n\n if (currentRangeTooShort) {\n status.isRangeTooShort = true\n } else {\n status.isCustomInvalid =\n isDayInvalidForSelectionFn != null &&\n isDayInvalidForSelectionFn(day)\n }\n }\n }\n\n onChangeDate(day, status)\n }\n\n useEffect(() => {\n // on Date selection...\n if (selectedDate) {\n if (isEditingStartDate) {\n onSelectDate(\n selectedDate,\n isRangeExceeded(\n getRangeInDays({ startDate: selectedDate, endDate }),\n rangeConstraints?.max?.value\n )\n )\n } else {\n onSelectDate(\n selectedDate,\n isRangeExceeded(\n getRangeInDays({ startDate, endDate: selectedDate }),\n rangeConstraints?.max?.value\n )\n )\n }\n }\n }, [selectedDate])\n\n return (\n <div\n className={classNames(\"cobalt-CalendarRangePicker__month\", {\n \"cobalt-CalendarRangePicker__month--invalid\":\n rangeExceeded && !isEditingStartDate,\n })}\n data-month={format(date, \"yyyy-MM\")}\n >\n <div className=\"cobalt-CalendarRangePicker__month-header\">\n {format(date, \"MMMM yyyy\", { locale })}\n </div>\n <div className=\"cobalt-CalendarRangePicker__month__weeks-container\">\n <div className=\"cobalt-CalendarRangePicker__month__week-header\">\n {weekdays.map((weekday) => (\n <div\n key={weekday.getTime()}\n className=\"cobalt-CalendarRangePicker__month__day-header\"\n >\n {format(weekday, \"iiiiii\", { locale })}\n </div>\n ))}\n </div>\n {byWeeks.map((week, index) => (\n <div key={index} className=\"cobalt-CalendarRangePicker__month__week\">\n {week.map((day) => {\n const isStartDay = startDate != null && isSameDay(day, startDate)\n const isEndDay = endDate != null && isSameDay(day, endDate)\n\n const disabled =\n isDisabled(day, firstAvailableDate, lastAvailableDate) ||\n (isDayDisabledFn && isDayDisabledFn(day))\n\n const hasNotification =\n !disabled &&\n hasDayNotificationFn != null &&\n hasDayNotificationFn(day)\n\n const isRange =\n rangeInDays !== 0 &&\n (isStartDay || isEndDay) &&\n (!rangeTooShort || (!isEditingStartDate && !isEditingEndDate))\n\n const isDaySelected = isSelected({\n day,\n startDate,\n endDate,\n isStartDay,\n isEndDay,\n isOutOfRangeStartDate,\n rangeTooShort,\n isEditingStartDate,\n isEditingEndDate,\n })\n\n return (\n <CalendarRangePickerDay\n key={day.getTime()}\n date={day}\n onMouseEnter={onMouseEnter}\n onMouseLeave={onLeaveDate}\n onSelect={setSelectedDate}\n isToday={isSameDay(day, today)}\n isActive={\n (isEditingStartDate && isStartDay) ||\n (isEditingEndDate && isEndDay)\n }\n isStartDay={isStartDay}\n isEndDay={isEndDay}\n isRange={isRange}\n isEditingStartDate={isEditingStartDate}\n isEditingEndDate={isEditingEndDate}\n isInvalid={isDayInvalid({\n day,\n isDayInvalidForSelectionFn,\n isDaySelected,\n startDate,\n rangeConstraints,\n rangeTooShort,\n rangeExceeded,\n isEditingStartDate,\n isEditingEndDate,\n isStartDay,\n isEndDay,\n endDate,\n })}\n hasNotification={hasNotification}\n isDisabled={disabled}\n tooltipMessage={buildTooltipMessage({\n rangeInDays,\n isEditingStartDate: !!isEditingStartDate,\n isEditingEndDate: !!isEditingEndDate,\n isStartDay,\n isEndDay,\n rangeConstraints,\n })}\n isSelected={isDaySelected}\n />\n )\n })}\n </div>\n ))}\n </div>\n </div>\n )\n}\n"],"names":["classNames","CalendarRangePickerDay"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"CalendarViewMonth.js","sources":["../../../../src/components/Calendar/CalendarView/CalendarViewMonth.tsx"],"sourcesContent":["import React, { useMemo } from \"react\"\nimport {\n setDate,\n getISODay,\n getDaysInMonth,\n endOfMonth,\n differenceInCalendarWeeks,\n isPast,\n isToday,\n format,\n} from \"date-fns\"\nimport cx from \"classnames\"\nimport {\n CalendarViewMonthType,\n MonthType,\n CalendarViewDateType,\n DateType,\n} from \"./types\"\n\ntype Props = MonthType\n\nconst CalendarViewMonth = ({\n monthName,\n monthStart,\n statusByDate = {},\n isSundayFirstDayOfWeek = false,\n}: Props) => {\n const getMonthByWeek = (): CalendarViewMonthType => {\n const daysInMonth = getDaysInMonth(monthStart)\n const weeksInMonth =\n differenceInCalendarWeeks(endOfMonth(monthStart), monthStart, {\n weekStartsOn: isSundayFirstDayOfWeek ? 0 : 1,\n }) + 1\n const weekDay = isSundayFirstDayOfWeek\n ? (getISODay(monthStart) % 7) + 1\n : getISODay(monthStart)\n const month: CalendarViewDateType[][] = []\n let cursor = 0\n let date = 0\n\n for (let week = 0; week < weeksInMonth; week++) {\n month[week] = []\n for (let day = 0; day < 7; day++) {\n month[week][day] = { date: null }\n\n if (cursor >= weekDay - 1 && date < daysInMonth) {\n month[week][day].date = ++date as DateType\n\n const currentDate = setDate(monthStart, date)\n\n month[week][day].status =\n isPast(currentDate) && !isToday(currentDate)\n ? \"past\"\n : statusByDate[format(currentDate, \"yyyy-MM-dd\")]\n }\n cursor++\n }\n }\n return month\n }\n\n const monthByWeek = useMemo(() => getMonthByWeek(), [])\n\n return (\n <div className=\"cobalt-CalendarView__month\">\n <div className=\"cobalt-CalendarView__monthName\">{monthName}</div>\n {monthByWeek.map((week, weekIndex) => (\n <div key={weekIndex} className=\"cobalt-CalendarView__week\">\n {week.map((day, dayIndex) => (\n <div\n key={weekIndex + 1 * dayIndex + 1}\n className={cx(\"cobalt-CalendarView__day\", {\n [`cobalt-CalendarView__day--${day.status}`]: day.status,\n })}\n >\n {day.date}\n </div>\n ))}\n </div>\n ))}\n </div>\n )\n}\n\nCalendarViewMonth.displayName = \"CalendarViewMonth\"\n\nexport default CalendarViewMonth\n"],"names":[],"mappings":";;;;AAqBA,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,UAAU,EACV,YAAY,GAAG,EAAE,EACjB,sBAAsB,GAAG,KAAK,GACxB,KAAI;IACV,MAAM,cAAc,GAAG,MAA4B;AACjD,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,YAAY,GAChB,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE;YAC5D,YAAY,EAAE,sBAAsB,GAAG,CAAC,GAAG,CAAC;SAC7C,CAAC,GAAG,CAAC,CAAA;QACR,MAAM,OAAO,GAAG,sBAAsB;cAClC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,cAAE,SAAS,CAAC,UAAU,CAAC,CAAA;QACzB,MAAM,KAAK,GAA6B,EAAE,CAAA;QAC1C,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,IAAI,GAAG,CAAC,CAAA;QAEZ,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE,IAAI,EAAE,EAAE;AAC9C,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;YAChB,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;AAChC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;gBAEjC,IAAI,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,WAAW,EAAE;oBAC/C,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,IAAgB,CAAA;oBAE1C,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAE7C,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;wBACrB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1C,8BAAE,MAAM;8BACN,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;AACtD,iBAAA;AACD,gBAAA,MAAM,EAAE,CAAA;AACT,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAA;AACd,KAAC,CAAA;AAED,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,cAAc,EAAE,EAAE,EAAE,CAAC,CAAA;AAEvD,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA;AACzC,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,EAAE,SAAS,CAAO;QAChE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,MAC/B,6BAAK,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,2BAA2B,EAAA,EACvD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,MACtB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,EACjC,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE;gBACxC,CAAC,CAAA,0BAAA,EAA6B,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM;AACxD,aAAA,CAAC,EAED,EAAA,GAAG,CAAC,IAAI,CACL,CACP,CAAC,CACE,CACP,CAAC,CACE,EACP;AACH,EAAC;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;;;"}
1
+ {"version":3,"file":"CalendarViewMonth.js","sources":["../../../../src/components/Calendar/CalendarView/CalendarViewMonth.tsx"],"sourcesContent":["import React, { useMemo } from \"react\"\nimport {\n setDate,\n getISODay,\n getDaysInMonth,\n endOfMonth,\n differenceInCalendarWeeks,\n isPast,\n isToday,\n format,\n} from \"date-fns\"\nimport cx from \"classnames\"\nimport {\n CalendarViewMonthType,\n MonthType,\n CalendarViewDateType,\n DateType,\n} from \"./types\"\n\ntype Props = MonthType\n\nconst CalendarViewMonth = ({\n monthName,\n monthStart,\n statusByDate = {},\n isSundayFirstDayOfWeek = false,\n}: Props) => {\n const getMonthByWeek = (): CalendarViewMonthType => {\n const daysInMonth = getDaysInMonth(monthStart)\n const weeksInMonth =\n differenceInCalendarWeeks(endOfMonth(monthStart), monthStart, {\n weekStartsOn: isSundayFirstDayOfWeek ? 0 : 1,\n }) + 1\n const weekDay = isSundayFirstDayOfWeek\n ? (getISODay(monthStart) % 7) + 1\n : getISODay(monthStart)\n const month: CalendarViewDateType[][] = []\n let cursor = 0\n let date = 0\n\n for (let week = 0; week < weeksInMonth; week++) {\n month[week] = []\n for (let day = 0; day < 7; day++) {\n month[week][day] = { date: null }\n\n if (cursor >= weekDay - 1 && date < daysInMonth) {\n month[week][day].date = ++date as DateType\n\n const currentDate = setDate(monthStart, date)\n\n month[week][day].status =\n isPast(currentDate) && !isToday(currentDate)\n ? \"past\"\n : statusByDate[format(currentDate, \"yyyy-MM-dd\")]\n }\n cursor++\n }\n }\n return month\n }\n\n const monthByWeek = useMemo(() => getMonthByWeek(), [])\n\n return (\n <div className=\"cobalt-CalendarView__month\">\n <div className=\"cobalt-CalendarView__monthName\">{monthName}</div>\n {monthByWeek.map((week, weekIndex) => (\n <div key={weekIndex} className=\"cobalt-CalendarView__week\">\n {week.map((day, dayIndex) => (\n <div\n key={weekIndex + 1 * dayIndex + 1}\n className={cx(\"cobalt-CalendarView__day\", {\n [`cobalt-CalendarView__day--${day.status}`]: day.status,\n })}\n >\n {day.date}\n </div>\n ))}\n </div>\n ))}\n </div>\n )\n}\n\nCalendarViewMonth.displayName = \"CalendarViewMonth\"\n\nexport default CalendarViewMonth\n"],"names":[],"mappings":";;;;AAqBA,MAAM,iBAAiB,GAAG,CAAC,EACzB,SAAS,EACT,UAAU,EACV,YAAY,GAAG,EAAE,EACjB,sBAAsB,GAAG,KAAK,GACxB,KAAI;IACV,MAAM,cAAc,GAAG,MAA4B;AACjD,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,UAAU,CAAC,CAAA;QAC9C,MAAM,YAAY,GAChB,yBAAyB,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,UAAU,EAAE;YAC5D,YAAY,EAAE,sBAAsB,GAAG,CAAC,GAAG,CAAC;SAC7C,CAAC,GAAG,CAAC,CAAA;QACR,MAAM,OAAO,GAAG,sBAAsB;cAClC,CAAC,SAAS,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;AACjC,cAAE,SAAS,CAAC,UAAU,CAAC,CAAA;QACzB,MAAM,KAAK,GAA6B,EAAE,CAAA;QAC1C,IAAI,MAAM,GAAG,CAAC,CAAA;QACd,IAAI,IAAI,GAAG,CAAC,CAAA;AAEZ,QAAA,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,YAAY,EAAE,IAAI,EAAE,EAAE;AAC9C,YAAA,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAA;AAChB,YAAA,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,CAAC,EAAE,GAAG,EAAE,EAAE;AAChC,gBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,CAAA;gBAEjC,IAAI,MAAM,IAAI,OAAO,GAAG,CAAC,IAAI,IAAI,GAAG,WAAW,EAAE;oBAC/C,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,GAAG,EAAE,IAAgB,CAAA;oBAE1C,MAAM,WAAW,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;AAE7C,oBAAA,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM;wBACrB,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;AAC1C,8BAAE,MAAM;8BACN,YAAY,CAAC,MAAM,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAA;iBACtD;AACD,gBAAA,MAAM,EAAE,CAAA;aACT;SACF;AACD,QAAA,OAAO,KAAK,CAAA;AACd,KAAC,CAAA;AAED,IAAA,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,cAAc,EAAE,EAAE,EAAE,CAAC,CAAA;AAEvD,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,4BAA4B,EAAA;AACzC,QAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,gCAAgC,EAAA,EAAE,SAAS,CAAO;QAChE,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,SAAS,MAC/B,6BAAK,GAAG,EAAE,SAAS,EAAE,SAAS,EAAC,2BAA2B,EAAA,EACvD,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,QAAQ,MACtB,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,GAAG,EAAE,SAAS,GAAG,CAAC,GAAG,QAAQ,GAAG,CAAC,EACjC,SAAS,EAAE,EAAE,CAAC,0BAA0B,EAAE;gBACxC,CAAC,CAAA,0BAAA,EAA6B,GAAG,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,MAAM;AACxD,aAAA,CAAC,EAED,EAAA,GAAG,CAAC,IAAI,CACL,CACP,CAAC,CACE,CACP,CAAC,CACE,EACP;AACH,EAAC;AAED,iBAAiB,CAAC,WAAW,GAAG,mBAAmB;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sources":["../../../src/components/Calendar/utils.ts"],"sourcesContent":["import setISODay from \"date-fns/setISODay\"\nimport startOfMonth from \"date-fns/startOfMonth\"\nimport getDay from \"date-fns/getDay\"\nimport endOfMonth from \"date-fns/endOfMonth\"\nimport eachDayOfInterval from \"date-fns/eachDayOfInterval\"\n\nexport const getWeekDays = (isSundayFirstDayOfWeek = false) => {\n const extraIndex = isSundayFirstDayOfWeek ? 0 : 1\n const now = new Date().setHours(0, 0, 0, 0)\n return [...Array(7).keys()].map((index) => setISODay(now, index + extraIndex))\n}\n\nexport const getMonthDaysByWeeks = (\n monthDate: Date,\n isSundayFirstDayOfWeek = false\n): Date[][] => {\n const extraOffset = isSundayFirstDayOfWeek ? 0 : 1\n const firstDayOfMonth = startOfMonth(monthDate)\n const firstDayOfMonthOffset = getDay(firstDayOfMonth) - extraOffset\n const lastDayOfMonth = endOfMonth(monthDate)\n const days = eachDayOfInterval({\n start: firstDayOfMonth,\n end: lastDayOfMonth,\n })\n\n return days.reduce((acc: Date[][], day, index) => {\n if (index === 0 || (index + firstDayOfMonthOffset) % 7 === 0) {\n acc.push([])\n }\n acc[acc.length - 1].push(day)\n return acc\n }, [])\n}\n"],"names":[],"mappings":";;;;;;MAMa,WAAW,GAAG,CAAC,sBAAsB,GAAG,KAAK,KAAI;IAC5D,MAAM,UAAU,GAAG,sBAAsB,GAAG,CAAC,GAAG,CAAC,CAAA;AACjD,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC,CAAA;AAChF,EAAC;AAEY,MAAA,mBAAmB,GAAG,CACjC,SAAe,EACf,sBAAsB,GAAG,KAAK,KAClB;IACZ,MAAM,WAAW,GAAG,sBAAsB,GAAG,CAAC,GAAG,CAAC,CAAA;AAClD,IAAA,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,WAAW,CAAA;AACnE,IAAA,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC7B,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,GAAG,EAAE,cAAc;AACpB,KAAA,CAAC,CAAA;IAEF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAa,EAAE,GAAG,EAAE,KAAK,KAAI;AAC/C,QAAA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,qBAAqB,IAAI,CAAC,KAAK,CAAC,EAAE;AAC5D,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;AACb,SAAA;AACD,QAAA,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,QAAA,OAAO,GAAG,CAAA;KACX,EAAE,EAAE,CAAC,CAAA;AACR;;;;"}
1
+ {"version":3,"file":"utils.js","sources":["../../../src/components/Calendar/utils.ts"],"sourcesContent":["import setISODay from \"date-fns/setISODay\"\nimport startOfMonth from \"date-fns/startOfMonth\"\nimport getDay from \"date-fns/getDay\"\nimport endOfMonth from \"date-fns/endOfMonth\"\nimport eachDayOfInterval from \"date-fns/eachDayOfInterval\"\n\nexport const getWeekDays = (isSundayFirstDayOfWeek = false) => {\n const extraIndex = isSundayFirstDayOfWeek ? 0 : 1\n const now = new Date().setHours(0, 0, 0, 0)\n return [...Array(7).keys()].map((index) => setISODay(now, index + extraIndex))\n}\n\nexport const getMonthDaysByWeeks = (\n monthDate: Date,\n isSundayFirstDayOfWeek = false\n): Date[][] => {\n const extraOffset = isSundayFirstDayOfWeek ? 0 : 1\n const firstDayOfMonth = startOfMonth(monthDate)\n const firstDayOfMonthOffset = getDay(firstDayOfMonth) - extraOffset\n const lastDayOfMonth = endOfMonth(monthDate)\n const days = eachDayOfInterval({\n start: firstDayOfMonth,\n end: lastDayOfMonth,\n })\n\n return days.reduce((acc: Date[][], day, index) => {\n if (index === 0 || (index + firstDayOfMonthOffset) % 7 === 0) {\n acc.push([])\n }\n acc[acc.length - 1].push(day)\n return acc\n }, [])\n}\n"],"names":[],"mappings":";;;;;;MAMa,WAAW,GAAG,CAAC,sBAAsB,GAAG,KAAK,KAAI;IAC5D,MAAM,UAAU,GAAG,sBAAsB,GAAG,CAAC,GAAG,CAAC,CAAA;AACjD,IAAA,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;IAC3C,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,KAAK,SAAS,CAAC,GAAG,EAAE,KAAK,GAAG,UAAU,CAAC,CAAC,CAAA;AAChF,EAAC;AAEY,MAAA,mBAAmB,GAAG,CACjC,SAAe,EACf,sBAAsB,GAAG,KAAK,KAClB;IACZ,MAAM,WAAW,GAAG,sBAAsB,GAAG,CAAC,GAAG,CAAC,CAAA;AAClD,IAAA,MAAM,eAAe,GAAG,YAAY,CAAC,SAAS,CAAC,CAAA;IAC/C,MAAM,qBAAqB,GAAG,MAAM,CAAC,eAAe,CAAC,GAAG,WAAW,CAAA;AACnE,IAAA,MAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;IAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC;AAC7B,QAAA,KAAK,EAAE,eAAe;AACtB,QAAA,GAAG,EAAE,cAAc;AACpB,KAAA,CAAC,CAAA;IAEF,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,GAAa,EAAE,GAAG,EAAE,KAAK,KAAI;AAC/C,QAAA,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,qBAAqB,IAAI,CAAC,KAAK,CAAC,EAAE;AAC5D,YAAA,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;SACb;AACD,QAAA,GAAG,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAC7B,QAAA,OAAO,GAAG,CAAA;KACX,EAAE,EAAE,CAAC,CAAA;AACR;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Chip/index.tsx"],"sourcesContent":["import React from \"react\"\nimport cx from \"classnames\"\n\nexport interface ChipProps {\n onClick?(): void\n text: string\n image: string\n size?: \"large\"\n disabled?: boolean\n active?: boolean\n}\n\nexport interface ChipWrapperProps {\n onClick?(): void\n children: React.ReactElement\n disabled?: boolean\n className: string\n}\n\nconst ChipWrapper = (props: ChipWrapperProps) => {\n if (props.onClick) {\n return (\n <button {...props} type=\"button\" disabled={props.disabled}>\n {props.children}\n </button>\n )\n } else {\n return <div {...props}>{props.children}</div>\n }\n}\n\nexport const Chip = ({\n onClick,\n text,\n image,\n size,\n disabled,\n active,\n}: ChipProps) => {\n return (\n <ChipWrapper\n onClick={onClick}\n disabled={disabled}\n className={cx(\"cobalt-Chip\", {\n \"cobalt-Chip--large\": size === \"large\",\n \"cobalt-Chip--disabled\": disabled,\n \"cobalt-Chip--interactive\": !!onClick,\n \"cobalt-Chip--active\": active,\n })}\n >\n <div className=\"cobalt-Chip__Content\">\n <div\n className=\"cobalt-Chip__Image\"\n style={{ backgroundImage: `url(${image})` }}\n />\n <div className=\"cobalt-Chip__Text\">{text}</div>\n </div>\n </ChipWrapper>\n )\n}\n"],"names":[],"mappings":";;;AAmBA,MAAM,WAAW,GAAG,CAAC,KAAuB,KAAI;IAC9C,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,QAAA,QACE,KAAY,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,GAAA,KAAK,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACtD,EAAA,KAAK,CAAC,QAAQ,CACR,EACV;AACF,KAAA;AAAM,SAAA;AACL,QAAA,OAAO,gCAAS,KAAK,EAAA,EAAG,KAAK,CAAC,QAAQ,CAAO,CAAA;AAC9C,KAAA;AACH,CAAC,CAAA;AAEY,MAAA,IAAI,GAAG,CAAC,EACnB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,GACI,KAAI;AACd,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,WAAW,EACV,EAAA,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE;YAC3B,oBAAoB,EAAE,IAAI,KAAK,OAAO;AACtC,YAAA,uBAAuB,EAAE,QAAQ;YACjC,0BAA0B,EAAE,CAAC,CAAC,OAAO;AACrC,YAAA,qBAAqB,EAAE,MAAM;SAC9B,CAAC,EAAA;QAEF,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA;AACnC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,EAAE,eAAe,EAAE,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,CAAG,EAAE,EAC3C,CAAA;YACF,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,mBAAmB,EAAA,EAAE,IAAI,CAAO,CAC3C,CACM,EACf;AACH;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Chip/index.tsx"],"sourcesContent":["import React from \"react\"\nimport cx from \"classnames\"\n\nexport interface ChipProps {\n onClick?(): void\n text: string\n image: string\n size?: \"large\"\n disabled?: boolean\n active?: boolean\n}\n\nexport interface ChipWrapperProps {\n onClick?(): void\n children: React.ReactElement\n disabled?: boolean\n className: string\n}\n\nconst ChipWrapper = (props: ChipWrapperProps) => {\n if (props.onClick) {\n return (\n <button {...props} type=\"button\" disabled={props.disabled}>\n {props.children}\n </button>\n )\n } else {\n return <div {...props}>{props.children}</div>\n }\n}\n\nexport const Chip = ({\n onClick,\n text,\n image,\n size,\n disabled,\n active,\n}: ChipProps) => {\n return (\n <ChipWrapper\n onClick={onClick}\n disabled={disabled}\n className={cx(\"cobalt-Chip\", {\n \"cobalt-Chip--large\": size === \"large\",\n \"cobalt-Chip--disabled\": disabled,\n \"cobalt-Chip--interactive\": !!onClick,\n \"cobalt-Chip--active\": active,\n })}\n >\n <div className=\"cobalt-Chip__Content\">\n <div\n className=\"cobalt-Chip__Image\"\n style={{ backgroundImage: `url(${image})` }}\n />\n <div className=\"cobalt-Chip__Text\">{text}</div>\n </div>\n </ChipWrapper>\n )\n}\n"],"names":[],"mappings":";;;AAmBA,MAAM,WAAW,GAAG,CAAC,KAAuB,KAAI;AAC9C,IAAA,IAAI,KAAK,CAAC,OAAO,EAAE;AACjB,QAAA,QACE,KAAY,CAAA,aAAA,CAAA,QAAA,EAAA,EAAA,GAAA,KAAK,EAAE,IAAI,EAAC,QAAQ,EAAC,QAAQ,EAAE,KAAK,CAAC,QAAQ,EACtD,EAAA,KAAK,CAAC,QAAQ,CACR,EACV;KACF;SAAM;AACL,QAAA,OAAO,gCAAS,KAAK,EAAA,EAAG,KAAK,CAAC,QAAQ,CAAO,CAAA;KAC9C;AACH,CAAC,CAAA;AAEY,MAAA,IAAI,GAAG,CAAC,EACnB,OAAO,EACP,IAAI,EACJ,KAAK,EACL,IAAI,EACJ,QAAQ,EACR,MAAM,GACI,KAAI;AACd,IAAA,QACE,KAAC,CAAA,aAAA,CAAA,WAAW,EACV,EAAA,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,EAAE,CAAC,aAAa,EAAE;YAC3B,oBAAoB,EAAE,IAAI,KAAK,OAAO;AACtC,YAAA,uBAAuB,EAAE,QAAQ;YACjC,0BAA0B,EAAE,CAAC,CAAC,OAAO;AACrC,YAAA,qBAAqB,EAAE,MAAM;SAC9B,CAAC,EAAA;QAEF,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA;AACnC,YAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,oBAAoB,EAC9B,KAAK,EAAE,EAAE,eAAe,EAAE,CAAA,IAAA,EAAO,KAAK,CAAA,CAAA,CAAG,EAAE,EAC3C,CAAA;YACF,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,mBAAmB,EAAA,EAAE,IAAI,CAAO,CAC3C,CACM,EACf;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../src/components/Form/Autocomplete/index.tsx"],"sourcesContent":["import React, { useEffect, useRef, ElementType } from \"react\"\nimport { useState } from \"react\"\nimport classNames from \"classnames\"\n\nimport {\n Combobox,\n ComboboxInput,\n ComboboxPopover,\n ComboboxList,\n ComboboxOption,\n ComboboxOptionText,\n} from \"@reach/combobox\"\n\nimport { Icon, IconSources } from \"../../Icon\"\n\nimport { withFieldLabelAndHint } from \"../field\"\nimport { TextInputWrapper } from \"../TextInput\"\nimport { FormElement } from \"../form\"\n\nexport interface AutocompleteItem {\n [x: string]: any\n}\n\ntype ComboboxPopoverType = ElementType<\"div\"> & HTMLDivElement\ntype ComboboxOptionType = HTMLLIElement & React.ElementType<\"li\">\ntype ComboboxOptionMouseEventType = React.MouseEvent<\n ComboboxOptionType,\n MouseEvent\n>\n\ntype Props = {\n icon?: IconSources\n items: (AutocompleteItem | string)[]\n minQueryLength?: number\n autoFilter?: boolean\n selectedItem?: AutocompleteItem\n focusOnInit?: boolean\n autocomplete?: boolean\n valueKey?: string\n inputRef?: React.RefObject<HTMLInputElement>\n autocompleteRef?: React.RefObject<HTMLDivElement>\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void\n onQueryChange?: (term: string) => void\n onSelectItem?: (item: AutocompleteItem, term: string) => boolean\n renderItem?: (item: AutocompleteItem, term: string) => React.ReactNode\n} & FormElement &\n React.InputHTMLAttributes<HTMLInputElement>\n\nfunction filterMatchingItems(\n items: AutocompleteItem[],\n term: string,\n minLength: number,\n valueKey: string\n) {\n const [matchingItems, setMatchingItems] = useState<AutocompleteItem[]>([])\n\n useEffect(() => {\n term.length >= minLength\n ? setMatchingItems(\n items.filter((item: AutocompleteItem) => {\n return item[valueKey].toLowerCase().indexOf(term.toLowerCase()) > -1\n })\n )\n : setMatchingItems([])\n }, [items, term, valueKey])\n\n return matchingItems\n}\n\nfunction sanitizeItems(items: (AutocompleteItem | string)[], valueKey: string) {\n const [sanitizedItems, setSanitizedItems] = useState<AutocompleteItem[]>([])\n useEffect(() => {\n setSanitizedItems(\n items.map((item) =>\n typeof item === \"string\" ? { [valueKey]: item } : item\n )\n )\n }, [items])\n return sanitizedItems\n}\n\nfunction Autocomplete({\n id,\n icon,\n status,\n items,\n selectedItem,\n autoFilter = true,\n minQueryLength = 1,\n focusOnInit = false,\n onKeyDown,\n onFocus,\n onBlur,\n onQueryChange,\n onSelectItem,\n renderItem,\n inputRef,\n autocompleteRef,\n valueKey = \"value\",\n ...inputProps\n}: Props) {\n const [term, setTerm] = useState(\"\")\n\n const [hasFocus, setHasFocus] = useState(false)\n\n let ignoreFocus = false // extra flag to ignore programmatical focus triggered by click on item\n\n const results = autoFilter\n ? filterMatchingItems(\n sanitizeItems(items, valueKey),\n term,\n minQueryLength,\n valueKey\n )\n : sanitizeItems(items, valueKey)\n\n const comboboxEl = autocompleteRef || useRef<HTMLDivElement>(null)\n\n const inputEl = inputRef || useRef<HTMLInputElement>(null)\n\n const popoverEl = useRef<ComboboxPopoverType>(null)\n\n const giveInputFocus = () => {\n inputEl.current && inputEl.current.focus()\n }\n\n const isMounted = useRef(true)\n const forceIdTimer = useRef<any>()\n const focusTimer = useRef<any>()\n const blurTimer = useRef<any>()\n const clearInputTimer = useRef<any>()\n\n function forceId() {\n // id is overriden by Reach ui Combobox\n forceIdTimer.current = setTimeout(() => {\n id && inputEl.current && inputEl.current.setAttribute(\"id\", id)\n })\n }\n\n useEffect(() => {\n // on mount ...\n focusOnInit && giveInputFocus()\n\n return () => {\n isMounted.current = false\n forceIdTimer.current && clearTimeout(forceIdTimer.current)\n focusTimer.current && clearTimeout(focusTimer.current)\n blurTimer.current && clearTimeout(blurTimer.current)\n clearInputTimer.current && clearTimeout(clearInputTimer.current)\n }\n }, [])\n\n useEffect(() => {\n forceId()\n }, [id])\n\n useEffect(() => {\n setTerm(selectedItem ? \"\" + selectedItem[valueKey] : \"\")\n }, [selectedItem])\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n !ignoreFocus && onFocus && onFocus(event)\n ignoreFocus = false\n focusTimer.current = setTimeout(() => {\n // required by \"forceDisplayResults\" mechanism\n isMounted.current && setHasFocus(true)\n }, 100)\n }\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n // blur interceptor required by \"forceDisplayResults\" mechanism\n onBlur && onBlur(event)\n blurTimer.current = setTimeout(() => {\n isMounted.current && setHasFocus(false)\n }, 100)\n }\n\n const handleChange = (event: React.FocusEvent<HTMLInputElement>) => {\n const inputValue = (event.target as HTMLInputElement).value\n if (inputValue.trim().length || term.length) {\n // to prevent starting with a space character\n setTerm(inputValue)\n onQueryChange && onQueryChange(inputValue)\n }\n }\n\n const handleClearInput = () => {\n setTerm(\"\")\n onQueryChange && onQueryChange(\"\")\n\n clearInputTimer.current = setTimeout(giveInputFocus) //timeout to trigger openOnFocus\n }\n\n const handleSelectItem = (\n item: AutocompleteItem,\n e: ComboboxOptionMouseEventType | React.KeyboardEvent<HTMLElement>\n ) => {\n // item click interceptor to enable custom select cancellation\n const processSelection = onSelectItem\n ? onSelectItem(item, term) !== false\n : true\n\n if (processSelection) {\n setTerm(item[valueKey])\n } else if (e) {\n e.preventDefault()\n ignoreFocus = true\n giveInputFocus()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n onKeyDown && onKeyDown(e)\n\n // ENTER key down interceptor to enable custom select cancellation\n const KEY_CODE_ENTER = 13\n\n // BACKSPACE key down interceptor to synchonize react input value and dom input value in some edge case (Comnbobox autocomplete = true)\n const KEY_CODE_BACKSPACE = 8\n\n if (e.keyCode === KEY_CODE_ENTER) {\n if (!popoverEl.current) return\n\n const options = Array.from(\n popoverEl.current.querySelectorAll(\"[data-reach-combobox-option]\")\n )\n\n const selectedItemIndex = options.findIndex(\n (el) => el.getAttribute(\"aria-selected\") === \"true\"\n )\n\n selectedItemIndex >= 0 && handleSelectItem(results[selectedItemIndex], e)\n } else if (e.keyCode === KEY_CODE_BACKSPACE) {\n if (!inputEl.current) return\n if (inputEl.current.value.slice(0, -1) === term) {\n setTerm(inputEl.current.value)\n }\n }\n }\n\n const shouldDisplayItemsOnEmptyQuery = () => {\n return !autoFilter && results.length > 0 && term.length === 0 && hasFocus\n }\n\n const handleMouseDown = (\n item: AutocompleteItem,\n e: ComboboxOptionMouseEventType\n ) => {\n // In a specific case, we force the popover to display (results available, empty input using backspace)\n // But doing so, reach ui component is not ready for this case and will raise an error\n // We need to prevent the error and to force the selection\n if (\n shouldDisplayItemsOnEmptyQuery() &&\n popoverEl.current &&\n popoverEl.current.getAttribute(\"hidden\") != null\n ) {\n e.preventDefault() // it will prevent reach ui combobox to raise an error\n handleSelectItem(item, e) // we force the selection to be processed\n }\n }\n\n return (\n <Combobox\n className={classNames(\"cobalt-Autocomplete\", {\n \"cobalt-Autocomplete--forceDisplayResults\":\n shouldDisplayItemsOnEmptyQuery(), // Combobox Component, by design, hide the popover when the input is empty (on change) even if there are some results.\n })}\n as=\"div\"\n openOnFocus={true}\n ref={comboboxEl}\n >\n {results.length > 0 && (\n <ComboboxPopover\n className=\"cobalt-Autocomplete__popover\"\n portal={false}\n ref={popoverEl}\n >\n <ComboboxList\n className=\"cobalt-Autocomplete__list\"\n aria-label=\"Autocomplete option\"\n >\n {results.map((item, index) => (\n <ComboboxOption\n className=\"cobalt-Autocomplete__item\"\n key={index}\n value={item[valueKey]}\n onMouseDown={(e: ComboboxOptionMouseEventType) => {\n handleMouseDown(item, e)\n }}\n onClick={(e: ComboboxOptionMouseEventType) => {\n handleSelectItem(item, e)\n }}\n >\n {renderItem ? (\n renderItem(item, term)\n ) : (\n <span className=\"cobalt-Autocomplete__item-wrapper\">\n {icon && (\n <span className=\"cobalt-Autocomplete__item-icon\">\n <Icon source={icon} color=\"accent\" />\n </span>\n )}\n\n <span className=\"cobalt-Autocomplete__item-value\">\n <ComboboxOptionText />\n </span>\n </span>\n )}\n </ComboboxOption>\n ))}\n </ComboboxList>\n </ComboboxPopover>\n )}\n <div className=\"cobalt-Autocomplete__input-wrapper\">\n <TextInputWrapper\n icon={icon}\n status={status}\n render={(className) => {\n return (\n <ComboboxInput\n {...inputProps}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label=\"autocomplete input\"\n type=\"text\"\n value={term}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n ref={inputEl}\n className={className}\n />\n )\n }}\n />\n\n {term && (\n <div\n className=\"cobalt-Autocomplete__clear-button\"\n role=\"clear\"\n onClick={handleClearInput}\n >\n <Icon source=\"close\" size={16} />\n </div>\n )}\n </div>\n </Combobox>\n )\n}\n\nconst wrappedComponent = withFieldLabelAndHint(Autocomplete)\nwrappedComponent.displayName = \"Autocomplete\"\n\nexport { wrappedComponent as Autocomplete }\n"],"names":["classNames"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../../src/components/Form/Autocomplete/index.tsx"],"sourcesContent":["import React, { useEffect, useRef, ElementType } from \"react\"\nimport { useState } from \"react\"\nimport classNames from \"classnames\"\n\nimport {\n Combobox,\n ComboboxInput,\n ComboboxPopover,\n ComboboxList,\n ComboboxOption,\n ComboboxOptionText,\n} from \"@reach/combobox\"\n\nimport { Icon, IconSources } from \"../../Icon\"\n\nimport { withFieldLabelAndHint } from \"../field\"\nimport { TextInputWrapper } from \"../TextInput\"\nimport { FormElement } from \"../form\"\n\nexport interface AutocompleteItem {\n [x: string]: any\n}\n\ntype ComboboxPopoverType = ElementType<\"div\"> & HTMLDivElement\ntype ComboboxOptionType = HTMLLIElement & React.ElementType<\"li\">\ntype ComboboxOptionMouseEventType = React.MouseEvent<\n ComboboxOptionType,\n MouseEvent\n>\n\ntype Props = {\n icon?: IconSources\n items: (AutocompleteItem | string)[]\n minQueryLength?: number\n autoFilter?: boolean\n selectedItem?: AutocompleteItem\n focusOnInit?: boolean\n autocomplete?: boolean\n valueKey?: string\n inputRef?: React.RefObject<HTMLInputElement>\n autocompleteRef?: React.RefObject<HTMLDivElement>\n onKeyDown?: (event: React.KeyboardEvent<HTMLElement>) => void\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void\n onQueryChange?: (term: string) => void\n onSelectItem?: (item: AutocompleteItem, term: string) => boolean\n renderItem?: (item: AutocompleteItem, term: string) => React.ReactNode\n} & FormElement &\n React.InputHTMLAttributes<HTMLInputElement>\n\nfunction filterMatchingItems(\n items: AutocompleteItem[],\n term: string,\n minLength: number,\n valueKey: string\n) {\n const [matchingItems, setMatchingItems] = useState<AutocompleteItem[]>([])\n\n useEffect(() => {\n term.length >= minLength\n ? setMatchingItems(\n items.filter((item: AutocompleteItem) => {\n return item[valueKey].toLowerCase().indexOf(term.toLowerCase()) > -1\n })\n )\n : setMatchingItems([])\n }, [items, term, valueKey])\n\n return matchingItems\n}\n\nfunction sanitizeItems(items: (AutocompleteItem | string)[], valueKey: string) {\n const [sanitizedItems, setSanitizedItems] = useState<AutocompleteItem[]>([])\n useEffect(() => {\n setSanitizedItems(\n items.map((item) =>\n typeof item === \"string\" ? { [valueKey]: item } : item\n )\n )\n }, [items])\n return sanitizedItems\n}\n\nfunction Autocomplete({\n id,\n icon,\n status,\n items,\n selectedItem,\n autoFilter = true,\n minQueryLength = 1,\n focusOnInit = false,\n onKeyDown,\n onFocus,\n onBlur,\n onQueryChange,\n onSelectItem,\n renderItem,\n inputRef,\n autocompleteRef,\n valueKey = \"value\",\n ...inputProps\n}: Props) {\n const [term, setTerm] = useState(\"\")\n\n const [hasFocus, setHasFocus] = useState(false)\n\n let ignoreFocus = false // extra flag to ignore programmatical focus triggered by click on item\n\n const results = autoFilter\n ? filterMatchingItems(\n sanitizeItems(items, valueKey),\n term,\n minQueryLength,\n valueKey\n )\n : sanitizeItems(items, valueKey)\n\n const comboboxEl = autocompleteRef || useRef<HTMLDivElement>(null)\n\n const inputEl = inputRef || useRef<HTMLInputElement>(null)\n\n const popoverEl = useRef<ComboboxPopoverType>(null)\n\n const giveInputFocus = () => {\n inputEl.current && inputEl.current.focus()\n }\n\n const isMounted = useRef(true)\n const forceIdTimer = useRef<any>()\n const focusTimer = useRef<any>()\n const blurTimer = useRef<any>()\n const clearInputTimer = useRef<any>()\n\n function forceId() {\n // id is overriden by Reach ui Combobox\n forceIdTimer.current = setTimeout(() => {\n id && inputEl.current && inputEl.current.setAttribute(\"id\", id)\n })\n }\n\n useEffect(() => {\n // on mount ...\n focusOnInit && giveInputFocus()\n\n return () => {\n isMounted.current = false\n forceIdTimer.current && clearTimeout(forceIdTimer.current)\n focusTimer.current && clearTimeout(focusTimer.current)\n blurTimer.current && clearTimeout(blurTimer.current)\n clearInputTimer.current && clearTimeout(clearInputTimer.current)\n }\n }, [])\n\n useEffect(() => {\n forceId()\n }, [id])\n\n useEffect(() => {\n setTerm(selectedItem ? \"\" + selectedItem[valueKey] : \"\")\n }, [selectedItem])\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n !ignoreFocus && onFocus && onFocus(event)\n ignoreFocus = false\n focusTimer.current = setTimeout(() => {\n // required by \"forceDisplayResults\" mechanism\n isMounted.current && setHasFocus(true)\n }, 100)\n }\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n // blur interceptor required by \"forceDisplayResults\" mechanism\n onBlur && onBlur(event)\n blurTimer.current = setTimeout(() => {\n isMounted.current && setHasFocus(false)\n }, 100)\n }\n\n const handleChange = (event: React.FocusEvent<HTMLInputElement>) => {\n const inputValue = (event.target as HTMLInputElement).value\n if (inputValue.trim().length || term.length) {\n // to prevent starting with a space character\n setTerm(inputValue)\n onQueryChange && onQueryChange(inputValue)\n }\n }\n\n const handleClearInput = () => {\n setTerm(\"\")\n onQueryChange && onQueryChange(\"\")\n\n clearInputTimer.current = setTimeout(giveInputFocus) //timeout to trigger openOnFocus\n }\n\n const handleSelectItem = (\n item: AutocompleteItem,\n e: ComboboxOptionMouseEventType | React.KeyboardEvent<HTMLElement>\n ) => {\n // item click interceptor to enable custom select cancellation\n const processSelection = onSelectItem\n ? onSelectItem(item, term) !== false\n : true\n\n if (processSelection) {\n setTerm(item[valueKey])\n } else if (e) {\n e.preventDefault()\n ignoreFocus = true\n giveInputFocus()\n }\n }\n\n const handleKeyDown = (e: React.KeyboardEvent<HTMLElement>) => {\n onKeyDown && onKeyDown(e)\n\n // ENTER key down interceptor to enable custom select cancellation\n const KEY_CODE_ENTER = 13\n\n // BACKSPACE key down interceptor to synchonize react input value and dom input value in some edge case (Comnbobox autocomplete = true)\n const KEY_CODE_BACKSPACE = 8\n\n if (e.keyCode === KEY_CODE_ENTER) {\n if (!popoverEl.current) return\n\n const options = Array.from(\n popoverEl.current.querySelectorAll(\"[data-reach-combobox-option]\")\n )\n\n const selectedItemIndex = options.findIndex(\n (el) => el.getAttribute(\"aria-selected\") === \"true\"\n )\n\n selectedItemIndex >= 0 && handleSelectItem(results[selectedItemIndex], e)\n } else if (e.keyCode === KEY_CODE_BACKSPACE) {\n if (!inputEl.current) return\n if (inputEl.current.value.slice(0, -1) === term) {\n setTerm(inputEl.current.value)\n }\n }\n }\n\n const shouldDisplayItemsOnEmptyQuery = () => {\n return !autoFilter && results.length > 0 && term.length === 0 && hasFocus\n }\n\n const handleMouseDown = (\n item: AutocompleteItem,\n e: ComboboxOptionMouseEventType\n ) => {\n // In a specific case, we force the popover to display (results available, empty input using backspace)\n // But doing so, reach ui component is not ready for this case and will raise an error\n // We need to prevent the error and to force the selection\n if (\n shouldDisplayItemsOnEmptyQuery() &&\n popoverEl.current &&\n popoverEl.current.getAttribute(\"hidden\") != null\n ) {\n e.preventDefault() // it will prevent reach ui combobox to raise an error\n handleSelectItem(item, e) // we force the selection to be processed\n }\n }\n\n return (\n <Combobox\n className={classNames(\"cobalt-Autocomplete\", {\n \"cobalt-Autocomplete--forceDisplayResults\":\n shouldDisplayItemsOnEmptyQuery(), // Combobox Component, by design, hide the popover when the input is empty (on change) even if there are some results.\n })}\n as=\"div\"\n openOnFocus={true}\n ref={comboboxEl}\n >\n {results.length > 0 && (\n <ComboboxPopover\n className=\"cobalt-Autocomplete__popover\"\n portal={false}\n ref={popoverEl}\n >\n <ComboboxList\n className=\"cobalt-Autocomplete__list\"\n aria-label=\"Autocomplete option\"\n >\n {results.map((item, index) => (\n <ComboboxOption\n className=\"cobalt-Autocomplete__item\"\n key={index}\n value={item[valueKey]}\n onMouseDown={(e: ComboboxOptionMouseEventType) => {\n handleMouseDown(item, e)\n }}\n onClick={(e: ComboboxOptionMouseEventType) => {\n handleSelectItem(item, e)\n }}\n >\n {renderItem ? (\n renderItem(item, term)\n ) : (\n <span className=\"cobalt-Autocomplete__item-wrapper\">\n {icon && (\n <span className=\"cobalt-Autocomplete__item-icon\">\n <Icon source={icon} color=\"accent\" />\n </span>\n )}\n\n <span className=\"cobalt-Autocomplete__item-value\">\n <ComboboxOptionText />\n </span>\n </span>\n )}\n </ComboboxOption>\n ))}\n </ComboboxList>\n </ComboboxPopover>\n )}\n <div className=\"cobalt-Autocomplete__input-wrapper\">\n <TextInputWrapper\n icon={icon}\n status={status}\n render={(className) => {\n return (\n <ComboboxInput\n {...inputProps}\n autoComplete=\"off\"\n autoCorrect=\"off\"\n autoCapitalize=\"off\"\n spellCheck={false}\n aria-label=\"autocomplete input\"\n type=\"text\"\n value={term}\n onChange={handleChange}\n onBlur={handleBlur}\n onFocus={handleFocus}\n onKeyDown={handleKeyDown}\n ref={inputEl}\n className={className}\n />\n )\n }}\n />\n\n {term && (\n <div\n className=\"cobalt-Autocomplete__clear-button\"\n role=\"clear\"\n onClick={handleClearInput}\n >\n <Icon source=\"close\" size={16} />\n </div>\n )}\n </div>\n </Combobox>\n )\n}\n\nconst wrappedComponent = withFieldLabelAndHint(Autocomplete)\nwrappedComponent.displayName = \"Autocomplete\"\n\nexport { wrappedComponent as Autocomplete }\n"],"names":["classNames"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Hint.js","sources":["../../../src/components/Form/Hint.tsx"],"sourcesContent":["import React from \"react\"\nimport classNames from \"classnames\"\nimport { Icon } from \"../Icon\"\nimport { FormElementStatus } from \"./form\"\n\nexport interface HintPropsType {\n className?: string\n children: React.ReactNode\n status?: FormElementStatus\n}\n\nconst ICON_SIZE = 16\n\nconst getIcon = (status: FormElementStatus | undefined) => {\n switch (status) {\n case \"success\": {\n return \"checkCircle\"\n }\n case \"error\": {\n return \"contextualWarningCircleFilled\"\n }\n default: {\n return \"info\"\n }\n }\n}\n\nconst getIconColor = (status: FormElementStatus | undefined) => {\n switch (status) {\n case \"success\": {\n return \"green\"\n }\n case \"error\": {\n return \"red\"\n }\n default: {\n return \"graphiteLight\"\n }\n }\n}\n\nexport const Hint = ({ children, status, className }: HintPropsType) => {\n return (\n <div\n className={classNames(\"cobalt-Hint\", className, {\n \"cobalt-Hint--success\": status === \"success\",\n \"cobalt-Hint--error\": status === \"error\",\n })}\n >\n <span className=\"cobalt-Hint__Icon\">\n <Icon\n source={getIcon(status)}\n size={ICON_SIZE}\n color={getIconColor(status)}\n />\n </span>\n <span className=\"cobalt-Hint__Message\">{children}</span>\n </div>\n )\n}\n"],"names":["classNames"],"mappings":";;;;AAWA,MAAM,SAAS,GAAG,EAAE,CAAA;AAEpB,MAAM,OAAO,GAAG,CAAC,MAAqC,KAAI;AACxD,IAAA,QAAQ,MAAM;QACZ,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,aAAa,CAAA;AACrB,SAAA;QACD,KAAK,OAAO,EAAE;AACZ,YAAA,OAAO,+BAA+B,CAAA;AACvC,SAAA;AACD,QAAA,SAAS;AACP,YAAA,OAAO,MAAM,CAAA;AACd,SAAA;AACF,KAAA;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAqC,KAAI;AAC7D,IAAA,QAAQ,MAAM;QACZ,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,OAAO,CAAA;AACf,SAAA;QACD,KAAK,OAAO,EAAE;AACZ,YAAA,OAAO,KAAK,CAAA;AACb,SAAA;AACD,QAAA,SAAS;AACP,YAAA,OAAO,eAAe,CAAA;AACvB,SAAA;AACF,KAAA;AACH,CAAC,CAAA;AAEM,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAiB,KAAI;IACrE,QACE,6BACE,SAAS,EAAEA,EAAU,CAAC,aAAa,EAAE,SAAS,EAAE;YAC9C,sBAAsB,EAAE,MAAM,KAAK,SAAS;YAC5C,oBAAoB,EAAE,MAAM,KAAK,OAAO;SACzC,CAAC,EAAA;QAEF,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,mBAAmB,EAAA;YACjC,KAAC,CAAA,aAAA,CAAA,IAAI,IACH,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EACvB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,GAC3B,CACG;QACP,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA,EAAE,QAAQ,CAAQ,CACpD,EACP;AACH;;;;"}
1
+ {"version":3,"file":"Hint.js","sources":["../../../src/components/Form/Hint.tsx"],"sourcesContent":["import React from \"react\"\nimport classNames from \"classnames\"\nimport { Icon } from \"../Icon\"\nimport { FormElementStatus } from \"./form\"\n\nexport interface HintPropsType {\n className?: string\n children: React.ReactNode\n status?: FormElementStatus\n}\n\nconst ICON_SIZE = 16\n\nconst getIcon = (status: FormElementStatus | undefined) => {\n switch (status) {\n case \"success\": {\n return \"checkCircle\"\n }\n case \"error\": {\n return \"contextualWarningCircleFilled\"\n }\n default: {\n return \"info\"\n }\n }\n}\n\nconst getIconColor = (status: FormElementStatus | undefined) => {\n switch (status) {\n case \"success\": {\n return \"green\"\n }\n case \"error\": {\n return \"red\"\n }\n default: {\n return \"graphiteLight\"\n }\n }\n}\n\nexport const Hint = ({ children, status, className }: HintPropsType) => {\n return (\n <div\n className={classNames(\"cobalt-Hint\", className, {\n \"cobalt-Hint--success\": status === \"success\",\n \"cobalt-Hint--error\": status === \"error\",\n })}\n >\n <span className=\"cobalt-Hint__Icon\">\n <Icon\n source={getIcon(status)}\n size={ICON_SIZE}\n color={getIconColor(status)}\n />\n </span>\n <span className=\"cobalt-Hint__Message\">{children}</span>\n </div>\n )\n}\n"],"names":["classNames"],"mappings":";;;;AAWA,MAAM,SAAS,GAAG,EAAE,CAAA;AAEpB,MAAM,OAAO,GAAG,CAAC,MAAqC,KAAI;IACxD,QAAQ,MAAM;QACZ,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,aAAa,CAAA;SACrB;QACD,KAAK,OAAO,EAAE;AACZ,YAAA,OAAO,+BAA+B,CAAA;SACvC;QACD,SAAS;AACP,YAAA,OAAO,MAAM,CAAA;SACd;KACF;AACH,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,MAAqC,KAAI;IAC7D,QAAQ,MAAM;QACZ,KAAK,SAAS,EAAE;AACd,YAAA,OAAO,OAAO,CAAA;SACf;QACD,KAAK,OAAO,EAAE;AACZ,YAAA,OAAO,KAAK,CAAA;SACb;QACD,SAAS;AACP,YAAA,OAAO,eAAe,CAAA;SACvB;KACF;AACH,CAAC,CAAA;AAEM,MAAM,IAAI,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAiB,KAAI;IACrE,QACE,6BACE,SAAS,EAAEA,EAAU,CAAC,aAAa,EAAE,SAAS,EAAE;YAC9C,sBAAsB,EAAE,MAAM,KAAK,SAAS;YAC5C,oBAAoB,EAAE,MAAM,KAAK,OAAO;SACzC,CAAC,EAAA;QAEF,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,mBAAmB,EAAA;YACjC,KAAC,CAAA,aAAA,CAAA,IAAI,IACH,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,EACvB,IAAI,EAAE,SAAS,EACf,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,GAC3B,CACG;QACP,KAAM,CAAA,aAAA,CAAA,MAAA,EAAA,EAAA,SAAS,EAAC,sBAAsB,EAAA,EAAE,QAAQ,CAAQ,CACpD,EACP;AACH;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Stepper.js","sources":["../../../src/components/Form/Stepper.tsx"],"sourcesContent":["import React, { PureComponent } from \"react\"\nimport classNames from \"classnames\"\nimport { FormElement } from \"./form\"\nimport { withFieldLabelAndHint } from \"./field\"\nimport DefaultButton from \"../Buttons/DefaultButton\"\n\nconst AUTO_CHANGE_TIMEOUT_IN_MS = 750\nconst AUTO_CHANGE_INTERVAL_IN_MS = 150\n\nconst enforceInRange = (\n value: number,\n min: number | undefined,\n max: number | undefined\n) => {\n let enforcedValue = value\n if (typeof max !== \"undefined\") {\n enforcedValue = Math.min(enforcedValue, max)\n }\n if (typeof min !== \"undefined\") {\n enforcedValue = Math.max(enforcedValue, min)\n }\n return enforcedValue\n}\n\ntype Props = {\n value: number\n name?: string\n disabled?: boolean\n min?: number\n max?: number\n step: number\n onChange?: (value: number) => void\n children?: (value: number) => React.ReactNode\n} & FormElement\n\ntype State = {\n value: number\n}\n\nclass Stepper extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props)\n\n if (props.step < 0)\n throw new Error(\"Incorrect step value. Can't be below zero\")\n\n this.onDecrement = this.onDecrement.bind(this)\n this.onIncrement = this.onIncrement.bind(this)\n this.changeValue = this.changeValue.bind(this)\n this.onPointerDown = this.onPointerDown.bind(this)\n this.onPointerUp = this.onPointerUp.bind(this)\n\n this.state = {\n value: enforceInRange(props.value, props.min, props.max),\n }\n }\n\n timeout: ReturnType<typeof setTimeout> | null = null\n interval: ReturnType<typeof setInterval> | null = null\n\n componentDidUpdate(_prevProps: Props, prevState: State) {\n if (prevState.value !== this.state.value) {\n this.changeValue(this.state.value)\n } else if (this.props.value !== this.state.value) {\n this.changeValue(this.props.value)\n }\n }\n\n onDecrement = () => {\n ;(this.props.min !== null || this.state.value > this.props.min) &&\n this.changeValue(\n parseFloat((this.state.value - this.props.step).toFixed(10))\n )\n }\n\n onIncrement = () => {\n ;(this.props.max !== null || this.state.value < this.props.max) &&\n this.changeValue(\n parseFloat((this.state.value + this.props.step).toFixed(10))\n )\n }\n\n onPointerDown = (callback: () => void) => {\n callback()\n this.timeout && clearTimeout(this.timeout)\n this.timeout = setTimeout(() => {\n this.interval && clearInterval(this.interval)\n this.interval = setInterval(callback, AUTO_CHANGE_INTERVAL_IN_MS)\n }, AUTO_CHANGE_TIMEOUT_IN_MS)\n }\n\n onPointerUp = () => {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n this.timeout && clearTimeout(this.timeout)\n }\n\n changeValue = (value: number) => {\n this.setState(\n {\n value: enforceInRange(value, this.props.min, this.props.max),\n },\n () => {\n this.props.onChange && this.props.onChange(this.state.value)\n }\n )\n }\n\n render() {\n const { name, status, disabled, min, max, children } = this.props\n\n return (\n <div\n className={classNames(\"cobalt-Stepper\", {\n \"cobalt-Stepper--disabled\": disabled,\n \"cobalt-Stepper--success\": status === \"success\",\n \"cobalt-Stepper--error\": status === \"error\",\n })}\n >\n <div className=\"cobalt-Stepper__Wrapper\">\n <DefaultButton\n className=\"cobalt-Stepper__ActionButton\"\n disabled={disabled || this.state.value === min}\n onPointerDown={() => this.onPointerDown(this.onDecrement)}\n onPointerUp={this.onPointerUp}\n onPointerLeave={this.onPointerUp}\n type={\"button\"}\n >\n -\n </DefaultButton>\n <div className=\"cobalt-Stepper__ContentWrapper\">\n {children ? children(this.state.value) : this.state.value}\n <input type=\"hidden\" name={name} value={this.state.value} />\n </div>\n <DefaultButton\n className=\"cobalt-Stepper__ActionButton\"\n disabled={disabled || this.state.value === max}\n onPointerDown={() => this.onPointerDown(this.onIncrement)}\n onPointerUp={this.onPointerUp}\n onPointerLeave={this.onPointerUp}\n type={\"button\"}\n >\n +\n </DefaultButton>\n </div>\n </div>\n )\n }\n}\n\nconst wrappedComponent = withFieldLabelAndHint(Stepper)\nwrappedComponent.displayName = \"Stepper\"\n\nexport { wrappedComponent as Stepper }\n\ntype StepperMetaProps = {\n children: React.ReactNode\n}\nconst StepperMeta = ({ children }: StepperMetaProps) => {\n return <div className=\"cobalt-Stepper__Meta\">{children}</div>\n}\n\nexport { StepperMeta }\n"],"names":["classNames"],"mappings":"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"}
1
+ {"version":3,"file":"Stepper.js","sources":["../../../src/components/Form/Stepper.tsx"],"sourcesContent":["import React, { PureComponent } from \"react\"\nimport classNames from \"classnames\"\nimport { FormElement } from \"./form\"\nimport { withFieldLabelAndHint } from \"./field\"\nimport DefaultButton from \"../Buttons/DefaultButton\"\n\nconst AUTO_CHANGE_TIMEOUT_IN_MS = 750\nconst AUTO_CHANGE_INTERVAL_IN_MS = 150\n\nconst enforceInRange = (\n value: number,\n min: number | undefined,\n max: number | undefined\n) => {\n let enforcedValue = value\n if (typeof max !== \"undefined\") {\n enforcedValue = Math.min(enforcedValue, max)\n }\n if (typeof min !== \"undefined\") {\n enforcedValue = Math.max(enforcedValue, min)\n }\n return enforcedValue\n}\n\ntype Props = {\n value: number\n name?: string\n disabled?: boolean\n min?: number\n max?: number\n step: number\n onChange?: (value: number) => void\n children?: (value: number) => React.ReactNode\n} & FormElement\n\ntype State = {\n value: number\n}\n\nclass Stepper extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props)\n\n if (props.step < 0)\n throw new Error(\"Incorrect step value. Can't be below zero\")\n\n this.onDecrement = this.onDecrement.bind(this)\n this.onIncrement = this.onIncrement.bind(this)\n this.changeValue = this.changeValue.bind(this)\n this.onPointerDown = this.onPointerDown.bind(this)\n this.onPointerUp = this.onPointerUp.bind(this)\n\n this.state = {\n value: enforceInRange(props.value, props.min, props.max),\n }\n }\n\n timeout: ReturnType<typeof setTimeout> | null = null\n interval: ReturnType<typeof setInterval> | null = null\n\n componentDidUpdate(_prevProps: Props, prevState: State) {\n if (prevState.value !== this.state.value) {\n this.changeValue(this.state.value)\n } else if (this.props.value !== this.state.value) {\n this.changeValue(this.props.value)\n }\n }\n\n onDecrement = () => {\n ;(this.props.min !== null || this.state.value > this.props.min) &&\n this.changeValue(\n parseFloat((this.state.value - this.props.step).toFixed(10))\n )\n }\n\n onIncrement = () => {\n ;(this.props.max !== null || this.state.value < this.props.max) &&\n this.changeValue(\n parseFloat((this.state.value + this.props.step).toFixed(10))\n )\n }\n\n onPointerDown = (callback: () => void) => {\n callback()\n this.timeout && clearTimeout(this.timeout)\n this.timeout = setTimeout(() => {\n this.interval && clearInterval(this.interval)\n this.interval = setInterval(callback, AUTO_CHANGE_INTERVAL_IN_MS)\n }, AUTO_CHANGE_TIMEOUT_IN_MS)\n }\n\n onPointerUp = () => {\n if (this.interval) {\n clearInterval(this.interval)\n this.interval = null\n }\n this.timeout && clearTimeout(this.timeout)\n }\n\n changeValue = (value: number) => {\n this.setState(\n {\n value: enforceInRange(value, this.props.min, this.props.max),\n },\n () => {\n this.props.onChange && this.props.onChange(this.state.value)\n }\n )\n }\n\n render() {\n const { name, status, disabled, min, max, children } = this.props\n\n return (\n <div\n className={classNames(\"cobalt-Stepper\", {\n \"cobalt-Stepper--disabled\": disabled,\n \"cobalt-Stepper--success\": status === \"success\",\n \"cobalt-Stepper--error\": status === \"error\",\n })}\n >\n <div className=\"cobalt-Stepper__Wrapper\">\n <DefaultButton\n className=\"cobalt-Stepper__ActionButton\"\n disabled={disabled || this.state.value === min}\n onPointerDown={() => this.onPointerDown(this.onDecrement)}\n onPointerUp={this.onPointerUp}\n onPointerLeave={this.onPointerUp}\n type={\"button\"}\n >\n -\n </DefaultButton>\n <div className=\"cobalt-Stepper__ContentWrapper\">\n {children ? children(this.state.value) : this.state.value}\n <input type=\"hidden\" name={name} value={this.state.value} />\n </div>\n <DefaultButton\n className=\"cobalt-Stepper__ActionButton\"\n disabled={disabled || this.state.value === max}\n onPointerDown={() => this.onPointerDown(this.onIncrement)}\n onPointerUp={this.onPointerUp}\n onPointerLeave={this.onPointerUp}\n type={\"button\"}\n >\n +\n </DefaultButton>\n </div>\n </div>\n )\n }\n}\n\nconst wrappedComponent = withFieldLabelAndHint(Stepper)\nwrappedComponent.displayName = \"Stepper\"\n\nexport { wrappedComponent as Stepper }\n\ntype StepperMetaProps = {\n children: React.ReactNode\n}\nconst StepperMeta = ({ children }: StepperMetaProps) => {\n return <div className=\"cobalt-Stepper__Meta\">{children}</div>\n}\n\nexport { StepperMeta }\n"],"names":["classNames"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"TextArea.js","sources":["../../../src/components/Form/TextArea.tsx"],"sourcesContent":["import React, { PureComponent } from \"react\"\nimport cx from \"classnames\"\nimport { FormElement } from \"./form\"\nimport { withFieldLabelAndHint } from \"./field\"\n\ntype Props = {\n maxLength?: number\n className?: string\n inputClassName?: string\n autosize?: boolean\n onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void\n} & FormElement &\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n\ntype State = {\n length: number\n height: number\n}\n\nclass TextArea extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props)\n this.handleChange = this.handleChange.bind(this)\n\n this.state = {\n length: 0,\n height: 0,\n }\n }\n\n handleChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n if (this.props.autosize || this.props.maxLength) {\n this.setState({\n length: event.target.value.length,\n height: event.target.scrollHeight + 2,\n })\n }\n this.props.onChange && this.props.onChange(event)\n }\n\n render() {\n const {\n autosize,\n className,\n inputClassName,\n status,\n maxLength,\n ...nativeProps\n } = this.props\n\n return (\n <div\n className={cx(\"cobalt-TextAreaField\", className, {\n \"cobalt-TextAreaField--withLimit\": maxLength && maxLength > 0,\n \"cobalt-TextAreaField--success\": status === \"success\",\n \"cobalt-TextAreaField--error\": status === \"error\",\n })}\n >\n <textarea\n {...nativeProps}\n maxLength={maxLength}\n style={\n autosize\n ? {\n height: this.state.height + \"px\",\n }\n : {}\n }\n onChange={this.handleChange}\n className={cx(\"cobalt-TextAreaField__Input\", inputClassName)}\n />\n {this.state.length > 0 && maxLength && maxLength > 0 && (\n <div className=\"cobalt-TextAreaField__RemainingChars\">\n {maxLength - this.state.length} remaining characters\n </div>\n )}\n </div>\n )\n }\n}\n\nconst wrappedComponent = withFieldLabelAndHint(TextArea)\nwrappedComponent.displayName = \"TextArea\"\n\nexport { wrappedComponent as TextArea }\n"],"names":[],"mappings":";;;;AAmBA,MAAM,QAAS,SAAQ,aAA2B,CAAA;AAChD,IAAA,WAAA,CAAY,KAAY,EAAA;QACtB,KAAK,CAAC,KAAK,CAAC,CAAA;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhD,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE,CAAC;SACV,CAAA;KACF;AAED,IAAA,YAAY,CAAC,KAA6C,EAAA;QACxD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC;AACZ,gBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AACjC,gBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;AACtC,aAAA,CAAC,CAAA;AACH,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;KAClD;IAED,MAAM,GAAA;AACJ,QAAA,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,cAAc,EACd,MAAM,EACN,SAAS,EACT,GAAG,WAAW,EACf,GAAG,IAAI,CAAC,KAAK,CAAA;QAEd,QACE,6BACE,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,EAAE;AAC/C,gBAAA,iCAAiC,EAAE,SAAS,IAAI,SAAS,GAAG,CAAC;gBAC7D,+BAA+B,EAAE,MAAM,KAAK,SAAS;gBACrD,6BAA6B,EAAE,MAAM,KAAK,OAAO;aAClD,CAAC,EAAA;YAEF,KACM,CAAA,aAAA,CAAA,UAAA,EAAA,EAAA,GAAA,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,EACH,QAAQ;AACN,sBAAE;AACE,wBAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AACjC,qBAAA;AACH,sBAAE,EAAE,EAER,QAAQ,EAAE,IAAI,CAAC,YAAY,EAC3B,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,cAAc,CAAC,EAC5D,CAAA;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC,KAClD,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,sCAAsC,EAAA;AAClD,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;wCAC1B,CACP,CACG,EACP;KACF;AACF,CAAA;AAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,EAAC;AACxD,gBAAgB,CAAC,WAAW,GAAG,UAAU;;;;"}
1
+ {"version":3,"file":"TextArea.js","sources":["../../../src/components/Form/TextArea.tsx"],"sourcesContent":["import React, { PureComponent } from \"react\"\nimport cx from \"classnames\"\nimport { FormElement } from \"./form\"\nimport { withFieldLabelAndHint } from \"./field\"\n\ntype Props = {\n maxLength?: number\n className?: string\n inputClassName?: string\n autosize?: boolean\n onChange?: (event: React.ChangeEvent<HTMLTextAreaElement>) => void\n} & FormElement &\n React.TextareaHTMLAttributes<HTMLTextAreaElement>\n\ntype State = {\n length: number\n height: number\n}\n\nclass TextArea extends PureComponent<Props, State> {\n constructor(props: Props) {\n super(props)\n this.handleChange = this.handleChange.bind(this)\n\n this.state = {\n length: 0,\n height: 0,\n }\n }\n\n handleChange(event: React.ChangeEvent<HTMLTextAreaElement>) {\n if (this.props.autosize || this.props.maxLength) {\n this.setState({\n length: event.target.value.length,\n height: event.target.scrollHeight + 2,\n })\n }\n this.props.onChange && this.props.onChange(event)\n }\n\n render() {\n const {\n autosize,\n className,\n inputClassName,\n status,\n maxLength,\n ...nativeProps\n } = this.props\n\n return (\n <div\n className={cx(\"cobalt-TextAreaField\", className, {\n \"cobalt-TextAreaField--withLimit\": maxLength && maxLength > 0,\n \"cobalt-TextAreaField--success\": status === \"success\",\n \"cobalt-TextAreaField--error\": status === \"error\",\n })}\n >\n <textarea\n {...nativeProps}\n maxLength={maxLength}\n style={\n autosize\n ? {\n height: this.state.height + \"px\",\n }\n : {}\n }\n onChange={this.handleChange}\n className={cx(\"cobalt-TextAreaField__Input\", inputClassName)}\n />\n {this.state.length > 0 && maxLength && maxLength > 0 && (\n <div className=\"cobalt-TextAreaField__RemainingChars\">\n {maxLength - this.state.length} remaining characters\n </div>\n )}\n </div>\n )\n }\n}\n\nconst wrappedComponent = withFieldLabelAndHint(TextArea)\nwrappedComponent.displayName = \"TextArea\"\n\nexport { wrappedComponent as TextArea }\n"],"names":[],"mappings":";;;;AAmBA,MAAM,QAAS,SAAQ,aAA2B,CAAA;AAChD,IAAA,WAAA,CAAY,KAAY,EAAA;QACtB,KAAK,CAAC,KAAK,CAAC,CAAA;QACZ,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QAEhD,IAAI,CAAC,KAAK,GAAG;AACX,YAAA,MAAM,EAAE,CAAC;AACT,YAAA,MAAM,EAAE,CAAC;SACV,CAAA;KACF;AAED,IAAA,YAAY,CAAC,KAA6C,EAAA;AACxD,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE;YAC/C,IAAI,CAAC,QAAQ,CAAC;AACZ,gBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM;AACjC,gBAAA,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,YAAY,GAAG,CAAC;AACtC,aAAA,CAAC,CAAA;SACH;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;KAClD;IAED,MAAM,GAAA;AACJ,QAAA,MAAM,EACJ,QAAQ,EACR,SAAS,EACT,cAAc,EACd,MAAM,EACN,SAAS,EACT,GAAG,WAAW,EACf,GAAG,IAAI,CAAC,KAAK,CAAA;QAEd,QACE,6BACE,SAAS,EAAE,EAAE,CAAC,sBAAsB,EAAE,SAAS,EAAE;AAC/C,gBAAA,iCAAiC,EAAE,SAAS,IAAI,SAAS,GAAG,CAAC;gBAC7D,+BAA+B,EAAE,MAAM,KAAK,SAAS;gBACrD,6BAA6B,EAAE,MAAM,KAAK,OAAO;aAClD,CAAC,EAAA;YAEF,KACM,CAAA,aAAA,CAAA,UAAA,EAAA,EAAA,GAAA,WAAW,EACf,SAAS,EAAE,SAAS,EACpB,KAAK,EACH,QAAQ;AACN,sBAAE;AACE,wBAAA,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI;AACjC,qBAAA;AACH,sBAAE,EAAE,EAER,QAAQ,EAAE,IAAI,CAAC,YAAY,EAC3B,SAAS,EAAE,EAAE,CAAC,6BAA6B,EAAE,cAAc,CAAC,EAC5D,CAAA;AACD,YAAA,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,IAAI,SAAS,GAAG,CAAC,KAClD,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,sCAAsC,EAAA;AAClD,gBAAA,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM;wCAC1B,CACP,CACG,EACP;KACF;AACF,CAAA;AAED,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,QAAQ,EAAC;AACxD,gBAAgB,CAAC,WAAW,GAAG,UAAU;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/Modal/index.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef } from \"react\"\nimport cx from \"classnames\"\nimport { DialogOverlay, DialogContent } from \"@reach/dialog\"\nimport { useTransition, animated } from \"@react-spring/web\"\n\nimport useBreakpoint from \"../../hooks/useBreakpoint\"\nimport ModalHeader from \"./ModalHeader\"\nimport ModalBody from \"./ModalBody\"\nimport ModalFooter, { ModalFooterPropsType } from \"./ModalFooter\"\nimport { getScrollbarWidth } from \"../utils/\"\n\nexport type ModalPropsType = {\n /**\n * mandatory for A11y\n */\n [\"aria-label\"]: string\n /**\n * Function called to close the modal, providing it make the modal closeable\n */\n close?: () => void\n /**\n * React.ref of the element to focus first when the modal opens\n */\n initialFocusRef?: React.RefObject<HTMLElement>\n /**\n * State to show or hide the modal/dialog\n */\n isOpen: boolean\n /**\n * Custom css classes to add to the modal\n */\n className?: string\n /**\n * Action to fire if the user try to dismiss when the modal is not closeable\n */\n onDismissAttempt?: () => void\n /**\n * Listener called when the modal has been fully hidden\n */\n onHidden?: () => void\n /**\n * Listener called when the modal begins to show\n */\n onShow?: () => void\n /**\n * Modal title\n */\n title?: string\n /**\n * Disable/Enable body paddings (enabled by default)\n */\n bodySpacing?: boolean\n /**\n * Disable/Enable hidding overflowing absolute elements (enabled by default)\n */\n overflowHidden?: boolean\n /**\n * Disable enter/leave animation (animation enabled by default)\n */\n skipAnimation?: {\n enter: boolean\n leave: boolean\n }\n /**\n * Disable modal max-width limit\n */\n fullWidth?: boolean\n /**\n * Always take the full height of the screen\n */\n fullHeight?: boolean\n /**\n * Modal body content\n */\n children: React.ReactNode\n}\n\n// Only for the API, render nothing, we use ModalFooterInternal internally\nexport const ModalFooterAPI = (_props: ModalFooterPropsType) => null\n\nexport const isModalFooterAPIComponent = (\n component: React.ReactNode\n): component is React.ReactElement<ModalFooterPropsType> =>\n React.isValidElement(component) && component.type === ModalFooterAPI\n\nconst _Modal = forwardRef<HTMLDivElement, ModalPropsType>(\n (\n {\n [\"aria-label\"]: ariaLabel,\n children,\n isOpen,\n className,\n close,\n overflowHidden = true,\n initialFocusRef,\n bodySpacing,\n onDismissAttempt,\n onHidden,\n onShow,\n title,\n skipAnimation = { enter: false, leave: false },\n fullHeight,\n fullWidth,\n }: ModalPropsType,\n ref\n ) => {\n const defaultBodyStyle = useRef({\n paddingRight: document.body.style.paddingRight,\n overflow: document.body.style.overflow,\n isRestored: false,\n })\n\n const restoreDefaultBodyStyle = () => {\n if (defaultBodyStyle.current && !defaultBodyStyle.current.isRestored) {\n const { overflow, paddingRight } = defaultBodyStyle.current\n\n document.body.style.overflow = overflow\n document.body.style.paddingRight = paddingRight\n\n defaultBodyStyle.current.isRestored = true\n }\n }\n\n useEffect(() => {\n // disable / enable body scroll\n // default reach ui solution to lock body scroll is broken with range inputs on mobile (no drag)\n // https://github.com/reach/reach-ui/issues/678\n // dangerouslyBypassScrollLock is used to disabled it\n // + fake scrollbar width to avoid visual layout shift\n if (isOpen) {\n defaultBodyStyle.current.isRestored = false\n\n document.body.style.paddingRight = `${\n getScrollbarWidth() +\n parseInt(window.getComputedStyle(document.body).paddingRight, 10)\n }px` // to avoid visual shift due to removing an existing scrollbar\n\n document.body.style.overflow = \"hidden\"\n }\n return () => {\n isOpen && restoreDefaultBodyStyle()\n }\n }, [isOpen])\n\n const { isMobile } = useBreakpoint()\n\n const transformTransitionOut = isMobile ? 500 : -20\n\n const springConfig = { tension: 300, friction: 30, clamp: true }\n\n const transition = useTransition(isOpen, {\n from: {\n overlayOpacity: 0,\n modalTransform: transformTransitionOut,\n },\n enter: {\n immediate: skipAnimation.enter,\n overlayOpacity: 1,\n modalTransform: 0,\n config: springConfig,\n },\n leave: {\n immediate: skipAnimation.leave,\n overlayOpacity: 0,\n modalTransform: transformTransitionOut,\n config: springConfig,\n },\n onStart: (_a: unknown, _b: unknown, isReady: boolean) => {\n isReady && isOpen && onShow && onShow()\n },\n onDestroyed: (isTransitioned) => {\n !isOpen && restoreDefaultBodyStyle()\n if (onHidden && isTransitioned) onHidden()\n },\n })\n\n const AnimatedDialogOverlay = animated(DialogOverlay)\n const AnimatedDialogContent = animated(DialogContent)\n\n const modalFooter = React.Children.toArray(children).find((c) =>\n isModalFooterAPIComponent(c)\n )\n\n let header: React.ReactNode = null\n if (title || close) {\n header = <ModalHeader title={title} {...(close ? { close } : {})} />\n }\n const hasHeader = !!title || !!close\n\n let footer: React.ReactNode = null\n if (React.isValidElement(modalFooter)) {\n footer = <ModalFooter {...modalFooter.props} />\n }\n\n const getDismissHandler = (onClose?: ModalPropsType[\"close\"]) => {\n if (onClose) return onClose\n if (onDismissAttempt) return onDismissAttempt\n return\n }\n\n return (\n <>\n {transition(\n (styles, isOpenState) =>\n isOpenState && (\n <AnimatedDialogOverlay\n initialFocusRef={initialFocusRef}\n onDismiss={getDismissHandler(close)}\n className=\"cobalt-modal__overlay\"\n style={{ opacity: styles.overlayOpacity }}\n onTouchEnd={(e) => e.stopPropagation()}\n onMouseUp={(e) => e.stopPropagation()}\n dangerouslyBypassScrollLock\n >\n <AnimatedDialogContent\n className={cx(\"cobalt-modal\", className, {\n \"cobalt-modal--desktop\": !isMobile,\n \"cobalt-modal--mobile\": isMobile,\n \"cobalt-modal--overflowHidden\": overflowHidden,\n \"cobalt-modal--fullHeight\": fullHeight,\n \"cobalt-modal--fullWidth\": fullWidth,\n })}\n aria-label={ariaLabel}\n style={{ translateY: styles.modalTransform }}\n ref={ref}\n >\n {header}\n <ModalBody\n bodySpacing={bodySpacing}\n hasHeader={hasHeader}\n hasFooter={!!footer}\n >\n {children}\n </ModalBody>\n {footer}\n </AnimatedDialogContent>\n </AnimatedDialogOverlay>\n )\n )}\n </>\n )\n }\n)\n\n_Modal.displayName = \"Modal\"\n\nconst Modal = Object.assign(_Modal, { Footer: ModalFooterAPI })\n\nexport default Modal\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/Modal/index.tsx"],"sourcesContent":["import React, { forwardRef, useEffect, useRef } from \"react\"\nimport cx from \"classnames\"\nimport { DialogOverlay, DialogContent } from \"@reach/dialog\"\nimport { useTransition, animated } from \"@react-spring/web\"\n\nimport useBreakpoint from \"../../hooks/useBreakpoint\"\nimport ModalHeader from \"./ModalHeader\"\nimport ModalBody from \"./ModalBody\"\nimport ModalFooter, { ModalFooterPropsType } from \"./ModalFooter\"\nimport { getScrollbarWidth } from \"../utils/\"\n\nexport type ModalPropsType = {\n /**\n * mandatory for A11y\n */\n [\"aria-label\"]: string\n /**\n * Function called to close the modal, providing it make the modal closeable\n */\n close?: () => void\n /**\n * React.ref of the element to focus first when the modal opens\n */\n initialFocusRef?: React.RefObject<HTMLElement>\n /**\n * State to show or hide the modal/dialog\n */\n isOpen: boolean\n /**\n * Custom css classes to add to the modal\n */\n className?: string\n /**\n * Action to fire if the user try to dismiss when the modal is not closeable\n */\n onDismissAttempt?: () => void\n /**\n * Listener called when the modal has been fully hidden\n */\n onHidden?: () => void\n /**\n * Listener called when the modal begins to show\n */\n onShow?: () => void\n /**\n * Modal title\n */\n title?: string\n /**\n * Disable/Enable body paddings (enabled by default)\n */\n bodySpacing?: boolean\n /**\n * Disable/Enable hidding overflowing absolute elements (enabled by default)\n */\n overflowHidden?: boolean\n /**\n * Disable enter/leave animation (animation enabled by default)\n */\n skipAnimation?: {\n enter: boolean\n leave: boolean\n }\n /**\n * Disable modal max-width limit\n */\n fullWidth?: boolean\n /**\n * Always take the full height of the screen\n */\n fullHeight?: boolean\n /**\n * Modal body content\n */\n children: React.ReactNode\n}\n\n// Only for the API, render nothing, we use ModalFooterInternal internally\nexport const ModalFooterAPI = (_props: ModalFooterPropsType) => null\n\nexport const isModalFooterAPIComponent = (\n component: React.ReactNode\n): component is React.ReactElement<ModalFooterPropsType> =>\n React.isValidElement(component) && component.type === ModalFooterAPI\n\nconst _Modal = forwardRef<HTMLDivElement, ModalPropsType>(\n (\n {\n [\"aria-label\"]: ariaLabel,\n children,\n isOpen,\n className,\n close,\n overflowHidden = true,\n initialFocusRef,\n bodySpacing,\n onDismissAttempt,\n onHidden,\n onShow,\n title,\n skipAnimation = { enter: false, leave: false },\n fullHeight,\n fullWidth,\n }: ModalPropsType,\n ref\n ) => {\n const defaultBodyStyle = useRef({\n paddingRight: document.body.style.paddingRight,\n overflow: document.body.style.overflow,\n isRestored: false,\n })\n\n const restoreDefaultBodyStyle = () => {\n if (defaultBodyStyle.current && !defaultBodyStyle.current.isRestored) {\n const { overflow, paddingRight } = defaultBodyStyle.current\n\n document.body.style.overflow = overflow\n document.body.style.paddingRight = paddingRight\n\n defaultBodyStyle.current.isRestored = true\n }\n }\n\n useEffect(() => {\n // disable / enable body scroll\n // default reach ui solution to lock body scroll is broken with range inputs on mobile (no drag)\n // https://github.com/reach/reach-ui/issues/678\n // dangerouslyBypassScrollLock is used to disabled it\n // + fake scrollbar width to avoid visual layout shift\n if (isOpen) {\n defaultBodyStyle.current.isRestored = false\n\n document.body.style.paddingRight = `${\n getScrollbarWidth() +\n parseInt(window.getComputedStyle(document.body).paddingRight, 10)\n }px` // to avoid visual shift due to removing an existing scrollbar\n\n document.body.style.overflow = \"hidden\"\n }\n return () => {\n isOpen && restoreDefaultBodyStyle()\n }\n }, [isOpen])\n\n const { isMobile } = useBreakpoint()\n\n const transformTransitionOut = isMobile ? 500 : -20\n\n const springConfig = { tension: 300, friction: 30, clamp: true }\n\n const transition = useTransition(isOpen, {\n from: {\n overlayOpacity: 0,\n modalTransform: transformTransitionOut,\n },\n enter: {\n immediate: skipAnimation.enter,\n overlayOpacity: 1,\n modalTransform: 0,\n config: springConfig,\n },\n leave: {\n immediate: skipAnimation.leave,\n overlayOpacity: 0,\n modalTransform: transformTransitionOut,\n config: springConfig,\n },\n onStart: (_a: unknown, _b: unknown, isReady: boolean) => {\n isReady && isOpen && onShow && onShow()\n },\n onDestroyed: (isTransitioned) => {\n !isOpen && restoreDefaultBodyStyle()\n if (onHidden && isTransitioned) onHidden()\n },\n })\n\n const AnimatedDialogOverlay = animated(DialogOverlay)\n const AnimatedDialogContent = animated(DialogContent)\n\n const modalFooter = React.Children.toArray(children).find((c) =>\n isModalFooterAPIComponent(c)\n )\n\n let header: React.ReactNode = null\n if (title || close) {\n header = <ModalHeader title={title} {...(close ? { close } : {})} />\n }\n const hasHeader = !!title || !!close\n\n let footer: React.ReactNode = null\n if (React.isValidElement(modalFooter)) {\n footer = <ModalFooter {...modalFooter.props} />\n }\n\n const getDismissHandler = (onClose?: ModalPropsType[\"close\"]) => {\n if (onClose) return onClose\n if (onDismissAttempt) return onDismissAttempt\n return\n }\n\n return (\n <>\n {transition(\n (styles, isOpenState) =>\n isOpenState && (\n <AnimatedDialogOverlay\n initialFocusRef={initialFocusRef}\n onDismiss={getDismissHandler(close)}\n className=\"cobalt-modal__overlay\"\n style={{ opacity: styles.overlayOpacity }}\n onTouchEnd={(e) => e.stopPropagation()}\n onMouseUp={(e) => e.stopPropagation()}\n dangerouslyBypassScrollLock\n >\n <AnimatedDialogContent\n className={cx(\"cobalt-modal\", className, {\n \"cobalt-modal--desktop\": !isMobile,\n \"cobalt-modal--mobile\": isMobile,\n \"cobalt-modal--overflowHidden\": overflowHidden,\n \"cobalt-modal--fullHeight\": fullHeight,\n \"cobalt-modal--fullWidth\": fullWidth,\n })}\n aria-label={ariaLabel}\n style={{ translateY: styles.modalTransform }}\n ref={ref}\n >\n {header}\n <ModalBody\n bodySpacing={bodySpacing}\n hasHeader={hasHeader}\n hasFooter={!!footer}\n >\n {children}\n </ModalBody>\n {footer}\n </AnimatedDialogContent>\n </AnimatedDialogOverlay>\n )\n )}\n </>\n )\n }\n)\n\n_Modal.displayName = \"Modal\"\n\nconst Modal = Object.assign(_Modal, { Footer: ModalFooterAPI })\n\nexport default Modal\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../src/components/PhotoDropzone/index.tsx"],"sourcesContent":["import VisuallyHidden from \"@reach/visually-hidden\"\nimport React, {\n useState,\n DragEvent as ReactDragEvent,\n useRef,\n TouchEvent as ReactTouchEvent,\n ChangeEvent as ReactChangeEvent,\n MouseEvent as ReactMouseEvent,\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n} from \"react\"\nimport cx from \"classnames\"\nimport {\n PlusIcon,\n BinIcon,\n LoadingIcon,\n ContextualWarningCircleFilledIcon,\n} from \"../Icon\"\nimport { validateFile } from \"../utils/validateFile\"\nimport Popover from \"../Popover\"\n\nconst ACCEPTED_MAX_SIZE_MB = 10\nconst ACCEPTED_PHOTOS_TYPES = [\"jpg\", \"jpeg\", \"png\", \"gif\"]\nconst ERROR_DISPLAY_TIME = 6000\nconst ACCEPTED_TYPES_LOCALE_STRING = ACCEPTED_PHOTOS_TYPES.join(\", \")\n\nexport type PhotoDropzonePropsType = {\n className?: string\n description: string\n deletePopoverContent: (onDelete: () => void, close: () => void) => ReactNode\n errorContent: (acceptedTypes: string, maxFileSize: number) => ReactNode\n onDropped: (file: File) => Promise<void> | void\n onPhotoDelete?: () => void\n initialImageUrl?: string\n}\n\nconst preventEventDefaults = (\n e: ReactDragEvent | ReactMouseEvent | ReactKeyboardEvent | ReactTouchEvent\n) => {\n e.preventDefault && e.preventDefault()\n e.stopPropagation && e.stopPropagation()\n}\n\nconst isEnterOrSpaceKey = (event: ReactKeyboardEvent) =>\n event.key === \"Enter\" || event.key === \" \"\n\nconst PhotoDropzone = ({\n className,\n description,\n deletePopoverContent,\n errorContent,\n onDropped,\n onPhotoDelete,\n initialImageUrl = \"\",\n}: PhotoDropzonePropsType) => {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const deleteButtonRef = useRef<HTMLButtonElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const [isErrored, setIsErrored] = useState(false)\n const [imagePreviewUrl, setImagePreviewUrl] = useState(initialImageUrl)\n const [displayDeletion, setDisplayDeletion] = useState(false)\n const [showDeletePopover, setShowDeletePopover] = useState(false)\n\n const openDeletePopover = (\n event?: ReactMouseEvent | ReactKeyboardEvent | ReactTouchEvent\n ) => {\n event && preventEventDefaults(event)\n setShowDeletePopover(true)\n }\n const closeDeletePopover = (event?: ReactMouseEvent | ReactTouchEvent) => {\n event && preventEventDefaults(event)\n setShowDeletePopover(false)\n }\n\n const onDropzoneMouseEnter = (event?: ReactMouseEvent) => {\n event && preventEventDefaults(event)\n if (imagePreviewUrl) setDisplayDeletion(true)\n }\n\n const onDropzoneMouseLeave = (event?: ReactMouseEvent) => {\n event && preventEventDefaults(event)\n if (displayDeletion && !showDeletePopover) setDisplayDeletion(false)\n }\n\n const onDropzoneClick = (event?: ReactMouseEvent | ReactTouchEvent) => {\n event && preventEventDefaults(event)\n if (isLoading) return\n if (isErrored) setIsErrored(false)\n if (imagePreviewUrl) {\n if (showDeletePopover) closeDeletePopover()\n return setDisplayDeletion(!displayDeletion)\n }\n fileInputRef.current?.click()\n }\n\n const onDropzoneKey = (event: ReactKeyboardEvent) => {\n if (showDeletePopover) return\n if (isEnterOrSpaceKey(event)) {\n onDropzoneClick()\n }\n }\n\n const onDeleteKey = (event: ReactKeyboardEvent) => {\n if (isEnterOrSpaceKey(event)) {\n openDeletePopover(event)\n }\n }\n\n const onDelete = () => {\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n closeDeletePopover()\n setImagePreviewUrl(\"\")\n onPhotoDelete && onPhotoDelete()\n }\n\n const onDragEnter = (event: ReactDragEvent) => {\n preventEventDefaults(event)\n if (isErrored) setIsErrored(false)\n !imagePreviewUrl && setIsDragging(true)\n }\n\n const onDragLeave = (event: ReactDragEvent) => {\n preventEventDefaults(event)\n setIsDragging(false)\n }\n\n const processFile = async (fileToProcess: File) => {\n setIsDragging(false)\n setIsErrored(false)\n setIsLoading(true)\n\n const isValidFile = await validateFile(\n fileToProcess,\n (fileToValidate, extension) => {\n const maxFileSize = ACCEPTED_MAX_SIZE_MB * 1000 * 1000\n const acceptedFileTypes = ACCEPTED_PHOTOS_TYPES\n\n if (fileToValidate.size > maxFileSize) {\n return false\n } else if (!extension || !acceptedFileTypes.includes(extension)) {\n return false\n } else {\n return true\n }\n }\n )\n\n if (isValidFile) {\n const imageSrc = URL.createObjectURL(fileToProcess)\n setImagePreviewUrl(imageSrc)\n await onDropped(fileToProcess)\n setIsLoading(false)\n } else {\n setIsLoading(false)\n setIsErrored(true)\n setTimeout(() => {\n setIsErrored(false)\n }, ERROR_DISPLAY_TIME)\n }\n }\n\n const onFileInputChanged = (event: ReactChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.length) {\n processFile(event.target.files[0])\n }\n }\n\n const onDrop = (event: ReactDragEvent<HTMLDivElement>) => {\n preventEventDefaults(event)\n if (event.dataTransfer?.files?.length && !imagePreviewUrl) {\n processFile(event.dataTransfer.files[0])\n }\n }\n\n const onDeleteButtonClick = showDeletePopover\n ? closeDeletePopover\n : openDeletePopover\n\n return (\n <div\n tabIndex={0}\n className={cx(\"cobalt-photo-dropzone\", className, {\n \"cobalt-photo-dropzone--filled\": imagePreviewUrl,\n \"cobalt-photo-dropzone--dragging\": isDragging,\n \"cobalt-photo-dropzone--loading\": isLoading,\n \"cobalt-photo-dropzone--errored\": isErrored,\n })}\n onMouseEnter={onDropzoneMouseEnter}\n onMouseLeave={onDropzoneMouseLeave}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n // Not on click because we also use mouseEnter listener\n onMouseUp={onDropzoneClick}\n onTouchEnd={onDropzoneClick}\n onKeyUp={onDropzoneKey}\n onDrop={onDrop}\n // Need to reset those listeners to avoid default browser behaviour\n onDragStart={preventEventDefaults}\n onDragEnd={preventEventDefaults}\n onDragOver={preventEventDefaults}\n >\n {isErrored && (\n <div className=\"cobalt-photo-dropzone__description\">\n <ContextualWarningCircleFilledIcon color=\"red\" />\n {errorContent(ACCEPTED_TYPES_LOCALE_STRING, ACCEPTED_MAX_SIZE_MB)}\n </div>\n )}\n {isLoading && (\n <div className=\"cobalt-photo-dropzone__description\">\n <LoadingIcon />\n </div>\n )}\n {!isLoading &&\n !isErrored &&\n (imagePreviewUrl ? (\n <>\n <img\n className=\"cobalt-photo-dropzone__preview\"\n src={imagePreviewUrl}\n />\n <div>\n <button\n className={cx(\"cobalt-photo-dropzone__delete-button\", {\n \"cobalt-photo-dropzone__delete-button--triggered\":\n displayDeletion,\n })}\n ref={deleteButtonRef}\n // Must follow the click listeners on the dropzone,\n // in order to have the correct events bubbling\n onTouchEnd={onDeleteButtonClick}\n onMouseUp={onDeleteButtonClick}\n onKeyUp={onDeleteKey}\n >\n <VisuallyHidden>Delete</VisuallyHidden>\n <BinIcon color=\"indigo\" />\n </button>\n <Popover\n targetRef={deleteButtonRef}\n isOpen={showDeletePopover}\n close={closeDeletePopover}\n placement=\"left-start\"\n distance={12}\n bodySpacing={false}\n arrow\n >\n {deletePopoverContent(onDelete, closeDeletePopover)}\n </Popover>\n </div>\n </>\n ) : (\n <div className=\"cobalt-photo-dropzone__description cobalt-photo-dropzone__description--strong\">\n <p>{description}</p>\n <PlusIcon />\n </div>\n ))}\n <VisuallyHidden>\n <input\n ref={fileInputRef}\n type=\"file\"\n onChange={onFileInputChanged}\n accept={ACCEPTED_PHOTOS_TYPES.map((ext) => `.${ext}`).join(\",\")}\n multiple={false}\n />\n </VisuallyHidden>\n </div>\n )\n}\n\nexport default PhotoDropzone\n"],"names":[],"mappings":";;;;;;;;;;;AAqBA,MAAM,oBAAoB,GAAG,EAAE,CAAA;AAC/B,MAAM,qBAAqB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,CAAA;AAC3D,MAAM,kBAAkB,GAAG,IAAI,CAAA;AAC/B,MAAM,4BAA4B,GAAG,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAYrE,MAAM,oBAAoB,GAAG,CAC3B,CAA0E,KACxE;AACF,IAAA,CAAC,CAAC,cAAc,IAAI,CAAC,CAAC,cAAc,EAAE,CAAA;AACtC,IAAA,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,eAAe,EAAE,CAAA;AAC1C,CAAC,CAAA;AAED,MAAM,iBAAiB,GAAG,CAAC,KAAyB,KAClD,KAAK,CAAC,GAAG,KAAK,OAAO,IAAI,KAAK,CAAC,GAAG,KAAK,GAAG,CAAA;AAEtC,MAAA,aAAa,GAAG,CAAC,EACrB,SAAS,EACT,WAAW,EACX,oBAAoB,EACpB,YAAY,EACZ,SAAS,EACT,aAAa,EACb,eAAe,GAAG,EAAE,GACG,KAAI;AAC3B,IAAA,MAAM,YAAY,GAAG,MAAM,CAAmB,IAAI,CAAC,CAAA;AACnD,IAAA,MAAM,eAAe,GAAG,MAAM,CAAoB,IAAI,CAAC,CAAA;IACvD,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACnD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,SAAS,EAAE,YAAY,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IACjD,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,eAAe,CAAC,CAAA;IACvE,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7D,MAAM,CAAC,iBAAiB,EAAE,oBAAoB,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAA;AAEjE,IAAA,MAAM,iBAAiB,GAAG,CACxB,KAA8D,KAC5D;AACF,QAAA,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACpC,oBAAoB,CAAC,IAAI,CAAC,CAAA;AAC5B,KAAC,CAAA;AACD,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAyC,KAAI;AACvE,QAAA,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACpC,oBAAoB,CAAC,KAAK,CAAC,CAAA;AAC7B,KAAC,CAAA;AAED,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAuB,KAAI;AACvD,QAAA,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;AACpC,QAAA,IAAI,eAAe;YAAE,kBAAkB,CAAC,IAAI,CAAC,CAAA;AAC/C,KAAC,CAAA;AAED,IAAA,MAAM,oBAAoB,GAAG,CAAC,KAAuB,KAAI;AACvD,QAAA,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;QACpC,IAAI,eAAe,IAAI,CAAC,iBAAiB;YAAE,kBAAkB,CAAC,KAAK,CAAC,CAAA;AACtE,KAAC,CAAA;AAED,IAAA,MAAM,eAAe,GAAG,CAAC,KAAyC,KAAI;;AACpE,QAAA,KAAK,IAAI,oBAAoB,CAAC,KAAK,CAAC,CAAA;AACpC,QAAA,IAAI,SAAS;YAAE,OAAM;AACrB,QAAA,IAAI,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAA;AAClC,QAAA,IAAI,eAAe,EAAE;AACnB,YAAA,IAAI,iBAAiB;AAAE,gBAAA,kBAAkB,EAAE,CAAA;AAC3C,YAAA,OAAO,kBAAkB,CAAC,CAAC,eAAe,CAAC,CAAA;AAC5C,SAAA;AACD,QAAA,CAAA,EAAA,GAAA,YAAY,CAAC,OAAO,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,EAAE,CAAA;AAC/B,KAAC,CAAA;AAED,IAAA,MAAM,aAAa,GAAG,CAAC,KAAyB,KAAI;AAClD,QAAA,IAAI,iBAAiB;YAAE,OAAM;AAC7B,QAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;AAC5B,YAAA,eAAe,EAAE,CAAA;AAClB,SAAA;AACH,KAAC,CAAA;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,KAAyB,KAAI;AAChD,QAAA,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;YAC5B,iBAAiB,CAAC,KAAK,CAAC,CAAA;AACzB,SAAA;AACH,KAAC,CAAA;IAED,MAAM,QAAQ,GAAG,MAAK;QACpB,IAAI,YAAY,CAAC,OAAO;AAAE,YAAA,YAAY,CAAC,OAAO,CAAC,KAAK,GAAG,EAAE,CAAA;AACzD,QAAA,kBAAkB,EAAE,CAAA;QACpB,kBAAkB,CAAC,EAAE,CAAC,CAAA;QACtB,aAAa,IAAI,aAAa,EAAE,CAAA;AAClC,KAAC,CAAA;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,KAAqB,KAAI;QAC5C,oBAAoB,CAAC,KAAK,CAAC,CAAA;AAC3B,QAAA,IAAI,SAAS;YAAE,YAAY,CAAC,KAAK,CAAC,CAAA;AAClC,QAAA,CAAC,eAAe,IAAI,aAAa,CAAC,IAAI,CAAC,CAAA;AACzC,KAAC,CAAA;AAED,IAAA,MAAM,WAAW,GAAG,CAAC,KAAqB,KAAI;QAC5C,oBAAoB,CAAC,KAAK,CAAC,CAAA;QAC3B,aAAa,CAAC,KAAK,CAAC,CAAA;AACtB,KAAC,CAAA;AAED,IAAA,MAAM,WAAW,GAAG,OAAO,aAAmB,KAAI;QAChD,aAAa,CAAC,KAAK,CAAC,CAAA;QACpB,YAAY,CAAC,KAAK,CAAC,CAAA;QACnB,YAAY,CAAC,IAAI,CAAC,CAAA;AAElB,QAAA,MAAM,WAAW,GAAG,MAAM,YAAY,CACpC,aAAa,EACb,CAAC,cAAc,EAAE,SAAS,KAAI;AAC5B,YAAA,MAAM,WAAW,GAAG,oBAAoB,GAAG,IAAI,GAAG,IAAI,CAAA;YACtD,MAAM,iBAAiB,GAAG,qBAAqB,CAAA;AAE/C,YAAA,IAAI,cAAc,CAAC,IAAI,GAAG,WAAW,EAAE;AACrC,gBAAA,OAAO,KAAK,CAAA;AACb,aAAA;iBAAM,IAAI,CAAC,SAAS,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE;AAC/D,gBAAA,OAAO,KAAK,CAAA;AACb,aAAA;AAAM,iBAAA;AACL,gBAAA,OAAO,IAAI,CAAA;AACZ,aAAA;AACH,SAAC,CACF,CAAA;AAED,QAAA,IAAI,WAAW,EAAE;YACf,MAAM,QAAQ,GAAG,GAAG,CAAC,eAAe,CAAC,aAAa,CAAC,CAAA;YACnD,kBAAkB,CAAC,QAAQ,CAAC,CAAA;AAC5B,YAAA,MAAM,SAAS,CAAC,aAAa,CAAC,CAAA;YAC9B,YAAY,CAAC,KAAK,CAAC,CAAA;AACpB,SAAA;AAAM,aAAA;YACL,YAAY,CAAC,KAAK,CAAC,CAAA;YACnB,YAAY,CAAC,IAAI,CAAC,CAAA;YAClB,UAAU,CAAC,MAAK;gBACd,YAAY,CAAC,KAAK,CAAC,CAAA;aACpB,EAAE,kBAAkB,CAAC,CAAA;AACvB,SAAA;AACH,KAAC,CAAA;AAED,IAAA,MAAM,kBAAkB,GAAG,CAAC,KAAyC,KAAI;;QACvE,IAAI,CAAA,EAAA,GAAA,KAAK,CAAC,MAAM,CAAC,KAAK,MAAA,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAE,MAAM,EAAE;YAC9B,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACnC,SAAA;AACH,KAAC,CAAA;AAED,IAAA,MAAM,MAAM,GAAG,CAAC,KAAqC,KAAI;;QACvD,oBAAoB,CAAC,KAAK,CAAC,CAAA;AAC3B,QAAA,IAAI,CAAA,CAAA,EAAA,GAAA,CAAA,EAAA,GAAA,KAAK,CAAC,YAAY,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,KAAK,MAAE,IAAA,IAAA,EAAA,KAAA,KAAA,CAAA,GAAA,KAAA,CAAA,GAAA,EAAA,CAAA,MAAM,KAAI,CAAC,eAAe,EAAE;YACzD,WAAW,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAA;AACzC,SAAA;AACH,KAAC,CAAA;IAED,MAAM,mBAAmB,GAAG,iBAAiB;AAC3C,UAAE,kBAAkB;UAClB,iBAAiB,CAAA;AAErB,IAAA,QACE,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,QAAQ,EAAE,CAAC,EACX,SAAS,EAAE,EAAE,CAAC,uBAAuB,EAAE,SAAS,EAAE;AAChD,YAAA,+BAA+B,EAAE,eAAe;AAChD,YAAA,iCAAiC,EAAE,UAAU;AAC7C,YAAA,gCAAgC,EAAE,SAAS;AAC3C,YAAA,gCAAgC,EAAE,SAAS;AAC5C,SAAA,CAAC,EACF,YAAY,EAAE,oBAAoB,EAClC,YAAY,EAAE,oBAAoB,EAClC,WAAW,EAAE,WAAW,EACxB,WAAW,EAAE,WAAW;;AAExB,QAAA,SAAS,EAAE,eAAe,EAC1B,UAAU,EAAE,eAAe,EAC3B,OAAO,EAAE,aAAa,EACtB,MAAM,EAAE,MAAM;;QAEd,WAAW,EAAE,oBAAoB,EACjC,SAAS,EAAE,oBAAoB,EAC/B,UAAU,EAAE,oBAAoB,EAAA;AAE/B,QAAA,SAAS,KACR,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,oCAAoC,EAAA;AACjD,YAAA,KAAA,CAAA,aAAA,CAAC,iCAAiC,EAAA,EAAC,KAAK,EAAC,KAAK,EAAG,CAAA;AAChD,YAAA,YAAY,CAAC,4BAA4B,EAAE,oBAAoB,CAAC,CAC7D,CACP;AACA,QAAA,SAAS,KACR,KAAK,CAAA,aAAA,CAAA,KAAA,EAAA,EAAA,SAAS,EAAC,oCAAoC,EAAA;YACjD,KAAC,CAAA,aAAA,CAAA,WAAW,EAAG,IAAA,CAAA,CACX,CACP;AACA,QAAA,CAAC,SAAS;AACT,YAAA,CAAC,SAAS;AACV,aAAC,eAAe,IACd,KAAA,CAAA,aAAA,CAAA,KAAA,CAAA,QAAA,EAAA,IAAA;AACE,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EACE,SAAS,EAAC,gCAAgC,EAC1C,GAAG,EAAE,eAAe,EACpB,CAAA;AACF,gBAAA,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,IAAA;AACE,oBAAA,KAAA,CAAA,aAAA,CAAA,QAAA,EAAA,EACE,SAAS,EAAE,EAAE,CAAC,sCAAsC,EAAE;AACpD,4BAAA,iDAAiD,EAC/C,eAAe;yBAClB,CAAC,EACF,GAAG,EAAE,eAAe;;;wBAGpB,UAAU,EAAE,mBAAmB,EAC/B,SAAS,EAAE,mBAAmB,EAC9B,OAAO,EAAE,WAAW,EAAA;AAEpB,wBAAA,KAAA,CAAA,aAAA,CAAC,cAAc,EAAwB,IAAA,EAAA,QAAA,CAAA;AACvC,wBAAA,KAAA,CAAA,aAAA,CAAC,OAAO,EAAC,EAAA,KAAK,EAAC,QAAQ,GAAG,CACnB;oBACT,KAAC,CAAA,aAAA,CAAA,OAAO,IACN,SAAS,EAAE,eAAe,EAC1B,MAAM,EAAE,iBAAiB,EACzB,KAAK,EAAE,kBAAkB,EACzB,SAAS,EAAC,YAAY,EACtB,QAAQ,EAAE,EAAE,EACZ,WAAW,EAAE,KAAK,EAClB,KAAK,EAAA,IAAA,EAAA,EAEJ,oBAAoB,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAC3C,CACN,CACL,KAEH,KAAA,CAAA,aAAA,CAAA,KAAA,EAAA,EAAK,SAAS,EAAC,+EAA+E,EAAA;AAC5F,gBAAA,KAAA,CAAA,aAAA,CAAA,GAAA,EAAA,IAAA,EAAI,WAAW,CAAK;AACpB,gBAAA,KAAA,CAAA,aAAA,CAAC,QAAQ,EAAA,IAAA,CAAG,CACR,CACP,CAAC;AACJ,QAAA,KAAA,CAAA,aAAA,CAAC,cAAc,EAAA,IAAA;AACb,YAAA,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EACE,GAAG,EAAE,YAAY,EACjB,IAAI,EAAC,MAAM,EACX,QAAQ,EAAE,kBAAkB,EAC5B,MAAM,EAAE,qBAAqB,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,CAAI,CAAA,EAAA,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAC/D,QAAQ,EAAE,KAAK,GACf,CACa,CACb,EACP;AACH;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../src/components/PhotoDropzone/index.tsx"],"sourcesContent":["import VisuallyHidden from \"@reach/visually-hidden\"\nimport React, {\n useState,\n DragEvent as ReactDragEvent,\n useRef,\n TouchEvent as ReactTouchEvent,\n ChangeEvent as ReactChangeEvent,\n MouseEvent as ReactMouseEvent,\n KeyboardEvent as ReactKeyboardEvent,\n ReactNode,\n} from \"react\"\nimport cx from \"classnames\"\nimport {\n PlusIcon,\n BinIcon,\n LoadingIcon,\n ContextualWarningCircleFilledIcon,\n} from \"../Icon\"\nimport { validateFile } from \"../utils/validateFile\"\nimport Popover from \"../Popover\"\n\nconst ACCEPTED_MAX_SIZE_MB = 10\nconst ACCEPTED_PHOTOS_TYPES = [\"jpg\", \"jpeg\", \"png\", \"gif\"]\nconst ERROR_DISPLAY_TIME = 6000\nconst ACCEPTED_TYPES_LOCALE_STRING = ACCEPTED_PHOTOS_TYPES.join(\", \")\n\nexport type PhotoDropzonePropsType = {\n className?: string\n description: string\n deletePopoverContent: (onDelete: () => void, close: () => void) => ReactNode\n errorContent: (acceptedTypes: string, maxFileSize: number) => ReactNode\n onDropped: (file: File) => Promise<void> | void\n onPhotoDelete?: () => void\n initialImageUrl?: string\n}\n\nconst preventEventDefaults = (\n e: ReactDragEvent | ReactMouseEvent | ReactKeyboardEvent | ReactTouchEvent\n) => {\n e.preventDefault && e.preventDefault()\n e.stopPropagation && e.stopPropagation()\n}\n\nconst isEnterOrSpaceKey = (event: ReactKeyboardEvent) =>\n event.key === \"Enter\" || event.key === \" \"\n\nconst PhotoDropzone = ({\n className,\n description,\n deletePopoverContent,\n errorContent,\n onDropped,\n onPhotoDelete,\n initialImageUrl = \"\",\n}: PhotoDropzonePropsType) => {\n const fileInputRef = useRef<HTMLInputElement>(null)\n const deleteButtonRef = useRef<HTMLButtonElement>(null)\n const [isDragging, setIsDragging] = useState(false)\n const [isLoading, setIsLoading] = useState(false)\n const [isErrored, setIsErrored] = useState(false)\n const [imagePreviewUrl, setImagePreviewUrl] = useState(initialImageUrl)\n const [displayDeletion, setDisplayDeletion] = useState(false)\n const [showDeletePopover, setShowDeletePopover] = useState(false)\n\n const openDeletePopover = (\n event?: ReactMouseEvent | ReactKeyboardEvent | ReactTouchEvent\n ) => {\n event && preventEventDefaults(event)\n setShowDeletePopover(true)\n }\n const closeDeletePopover = (event?: ReactMouseEvent | ReactTouchEvent) => {\n event && preventEventDefaults(event)\n setShowDeletePopover(false)\n }\n\n const onDropzoneMouseEnter = (event?: ReactMouseEvent) => {\n event && preventEventDefaults(event)\n if (imagePreviewUrl) setDisplayDeletion(true)\n }\n\n const onDropzoneMouseLeave = (event?: ReactMouseEvent) => {\n event && preventEventDefaults(event)\n if (displayDeletion && !showDeletePopover) setDisplayDeletion(false)\n }\n\n const onDropzoneClick = (event?: ReactMouseEvent | ReactTouchEvent) => {\n event && preventEventDefaults(event)\n if (isLoading) return\n if (isErrored) setIsErrored(false)\n if (imagePreviewUrl) {\n if (showDeletePopover) closeDeletePopover()\n return setDisplayDeletion(!displayDeletion)\n }\n fileInputRef.current?.click()\n }\n\n const onDropzoneKey = (event: ReactKeyboardEvent) => {\n if (showDeletePopover) return\n if (isEnterOrSpaceKey(event)) {\n onDropzoneClick()\n }\n }\n\n const onDeleteKey = (event: ReactKeyboardEvent) => {\n if (isEnterOrSpaceKey(event)) {\n openDeletePopover(event)\n }\n }\n\n const onDelete = () => {\n if (fileInputRef.current) fileInputRef.current.value = \"\"\n closeDeletePopover()\n setImagePreviewUrl(\"\")\n onPhotoDelete && onPhotoDelete()\n }\n\n const onDragEnter = (event: ReactDragEvent) => {\n preventEventDefaults(event)\n if (isErrored) setIsErrored(false)\n !imagePreviewUrl && setIsDragging(true)\n }\n\n const onDragLeave = (event: ReactDragEvent) => {\n preventEventDefaults(event)\n setIsDragging(false)\n }\n\n const processFile = async (fileToProcess: File) => {\n setIsDragging(false)\n setIsErrored(false)\n setIsLoading(true)\n\n const isValidFile = await validateFile(\n fileToProcess,\n (fileToValidate, extension) => {\n const maxFileSize = ACCEPTED_MAX_SIZE_MB * 1000 * 1000\n const acceptedFileTypes = ACCEPTED_PHOTOS_TYPES\n\n if (fileToValidate.size > maxFileSize) {\n return false\n } else if (!extension || !acceptedFileTypes.includes(extension)) {\n return false\n } else {\n return true\n }\n }\n )\n\n if (isValidFile) {\n const imageSrc = URL.createObjectURL(fileToProcess)\n setImagePreviewUrl(imageSrc)\n await onDropped(fileToProcess)\n setIsLoading(false)\n } else {\n setIsLoading(false)\n setIsErrored(true)\n setTimeout(() => {\n setIsErrored(false)\n }, ERROR_DISPLAY_TIME)\n }\n }\n\n const onFileInputChanged = (event: ReactChangeEvent<HTMLInputElement>) => {\n if (event.target.files?.length) {\n processFile(event.target.files[0])\n }\n }\n\n const onDrop = (event: ReactDragEvent<HTMLDivElement>) => {\n preventEventDefaults(event)\n if (event.dataTransfer?.files?.length && !imagePreviewUrl) {\n processFile(event.dataTransfer.files[0])\n }\n }\n\n const onDeleteButtonClick = showDeletePopover\n ? closeDeletePopover\n : openDeletePopover\n\n return (\n <div\n tabIndex={0}\n className={cx(\"cobalt-photo-dropzone\", className, {\n \"cobalt-photo-dropzone--filled\": imagePreviewUrl,\n \"cobalt-photo-dropzone--dragging\": isDragging,\n \"cobalt-photo-dropzone--loading\": isLoading,\n \"cobalt-photo-dropzone--errored\": isErrored,\n })}\n onMouseEnter={onDropzoneMouseEnter}\n onMouseLeave={onDropzoneMouseLeave}\n onDragEnter={onDragEnter}\n onDragLeave={onDragLeave}\n // Not on click because we also use mouseEnter listener\n onMouseUp={onDropzoneClick}\n onTouchEnd={onDropzoneClick}\n onKeyUp={onDropzoneKey}\n onDrop={onDrop}\n // Need to reset those listeners to avoid default browser behaviour\n onDragStart={preventEventDefaults}\n onDragEnd={preventEventDefaults}\n onDragOver={preventEventDefaults}\n >\n {isErrored && (\n <div className=\"cobalt-photo-dropzone__description\">\n <ContextualWarningCircleFilledIcon color=\"red\" />\n {errorContent(ACCEPTED_TYPES_LOCALE_STRING, ACCEPTED_MAX_SIZE_MB)}\n </div>\n )}\n {isLoading && (\n <div className=\"cobalt-photo-dropzone__description\">\n <LoadingIcon />\n </div>\n )}\n {!isLoading &&\n !isErrored &&\n (imagePreviewUrl ? (\n <>\n <img\n className=\"cobalt-photo-dropzone__preview\"\n src={imagePreviewUrl}\n />\n <div>\n <button\n className={cx(\"cobalt-photo-dropzone__delete-button\", {\n \"cobalt-photo-dropzone__delete-button--triggered\":\n displayDeletion,\n })}\n ref={deleteButtonRef}\n // Must follow the click listeners on the dropzone,\n // in order to have the correct events bubbling\n onTouchEnd={onDeleteButtonClick}\n onMouseUp={onDeleteButtonClick}\n onKeyUp={onDeleteKey}\n >\n <VisuallyHidden>Delete</VisuallyHidden>\n <BinIcon color=\"indigo\" />\n </button>\n <Popover\n targetRef={deleteButtonRef}\n isOpen={showDeletePopover}\n close={closeDeletePopover}\n placement=\"left-start\"\n distance={12}\n bodySpacing={false}\n arrow\n >\n {deletePopoverContent(onDelete, closeDeletePopover)}\n </Popover>\n </div>\n </>\n ) : (\n <div className=\"cobalt-photo-dropzone__description cobalt-photo-dropzone__description--strong\">\n <p>{description}</p>\n <PlusIcon />\n </div>\n ))}\n <VisuallyHidden>\n <input\n ref={fileInputRef}\n type=\"file\"\n onChange={onFileInputChanged}\n accept={ACCEPTED_PHOTOS_TYPES.map((ext) => `.${ext}`).join(\",\")}\n multiple={false}\n />\n </VisuallyHidden>\n </div>\n )\n}\n\nexport default PhotoDropzone\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"RatingIcons.js","sources":["../../../src/components/Rating/RatingIcons.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from \"react\"\nimport { nanoid } from \"nanoid\"\nimport cx from \"classnames\"\nimport { IconProps, StarIcon } from \"../Icon\"\n\nexport type RatingIconsPropsType = {\n className?: string\n max?: 5 | 10\n value: number\n size?: IconProps[\"size\"] | 48\n editable?: boolean\n disabled?: boolean\n onChange?: (newValue: number) => void\n icon?: JSX.Element | JSX.Element[]\n}\n\nexport type RatingIconPropsType = {\n icon: JSX.Element\n status?: \"full\" | \"half\" | \"empty\"\n size?: RatingIconsPropsType[\"size\"]\n}\n\nexport const defaultRatingIcon = <StarIcon color=\"infoAlt\" />\nconst itemEmptyColor: IconProps[\"color\"] = \"disabled\"\n\nexport function roundHalf(num: number) {\n const temp = num * 2\n return temp % 1 === 0.5 ? Math.floor(temp) / 2 : Math.round(temp) / 2\n}\n\nexport function computeItemStatus(\n ratingValue: number,\n itemValue: number,\n icon: RatingIconsPropsType[\"icon\"]\n): RatingIconPropsType[\"status\"] {\n let itemStatus: RatingIconPropsType[\"status\"] = \"empty\"\n if (!Array.isArray(icon)) {\n // gauge\n const isHalfItem = itemValue > ratingValue && ratingValue > itemValue - 1\n if (isHalfItem) {\n itemStatus = \"half\"\n } else if (itemValue <= ratingValue) {\n itemStatus = \"full\"\n }\n } else if (itemValue === ratingValue) {\n // radio\n itemStatus = \"full\"\n }\n\n return itemStatus\n}\n\nexport const RatingIcon = ({\n icon,\n status = \"full\",\n size = 24,\n}: RatingIconPropsType) => {\n if (status === \"half\") {\n return (\n <>\n {React.cloneElement(icon, {\n color: itemEmptyColor,\n size,\n })}\n <div className=\"cobalt-rating-icons__icon-half-container\">\n {React.cloneElement(icon, { size })}\n </div>\n </>\n )\n } else {\n const iconColor: IconProps[\"color\"] =\n status === \"empty\" ? itemEmptyColor : icon.props.color\n\n return React.cloneElement(icon, {\n color: iconColor,\n size,\n })\n }\n}\n\nexport const RatingIcons = ({\n className,\n max = 5,\n value,\n size = 24,\n editable = false,\n onChange,\n icon = defaultRatingIcon,\n}: RatingIconsPropsType) => {\n const name = useRef(nanoid())\n\n const items = useRef(\n Array.from(new Array(Array.isArray(icon) ? icon.length : max))\n )\n\n const [ratingValue, setRatingValue] = useState(() =>\n editable ? Math.floor(value) : roundHalf(value)\n )\n const [selectedIndex, setSelectedIndex] = useState(-1) // used to enforce selection effect (icon scale reset)\n\n const resetSelection = useCallback(() => {\n setSelectedIndex(-1)\n }, [])\n\n const itemSize = size === 48 ? 16 : size\n\n // input element is used for a11y purpose ( focus feedback and keyboard selection )\n return (\n <div\n className={cx(\"cobalt-rating-icons\", className, {\n \"cobalt-rating-icons--icon-size-48\": size === 48,\n })}\n onPointerLeave={() => {\n if (editable) {\n ;(document.activeElement as HTMLInputElement).blur()\n }\n }}\n >\n {items.current.map((_value, idx) => {\n const itemValue = idx + 1\n\n const itemStatus = computeItemStatus(ratingValue, itemValue, icon)\n\n return (\n <label\n className={cx(\"cobalt-rating-icons__icon-wrapper\", {\n \"cobalt-rating-icons__icon-wrapper--selected\":\n selectedIndex === idx,\n })}\n key={idx}\n onClick={() => {\n if (editable) {\n setRatingValue(itemValue)\n setSelectedIndex(idx)\n }\n }}\n onMouseEnter={(e) => {\n if (editable) {\n ;(e.target as HTMLElement).focus()\n\n resetSelection()\n }\n }}\n >\n <input\n tabIndex={\n editable &&\n (ratingValue === itemValue ||\n (ratingValue === 0 && itemValue === 1))\n ? 0\n : -1\n }\n name={name.current}\n type=\"radio\"\n value={itemValue}\n onChange={() => {\n onChange && onChange(itemValue)\n }}\n disabled={!editable}\n />\n {\n <RatingIcon\n icon={Array.isArray(icon) ? icon[idx] : icon}\n status={itemStatus}\n size={itemSize}\n />\n }\n </label>\n )\n })}\n </div>\n )\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RatingIcons.js","sources":["../../../src/components/Rating/RatingIcons.tsx"],"sourcesContent":["import React, { useState, useRef, useCallback } from \"react\"\nimport { nanoid } from \"nanoid\"\nimport cx from \"classnames\"\nimport { IconProps, StarIcon } from \"../Icon\"\n\nexport type RatingIconsPropsType = {\n className?: string\n max?: 5 | 10\n value: number\n size?: IconProps[\"size\"] | 48\n editable?: boolean\n disabled?: boolean\n onChange?: (newValue: number) => void\n icon?: JSX.Element | JSX.Element[]\n}\n\nexport type RatingIconPropsType = {\n icon: JSX.Element\n status?: \"full\" | \"half\" | \"empty\"\n size?: RatingIconsPropsType[\"size\"]\n}\n\nexport const defaultRatingIcon = <StarIcon color=\"infoAlt\" />\nconst itemEmptyColor: IconProps[\"color\"] = \"disabled\"\n\nexport function roundHalf(num: number) {\n const temp = num * 2\n return temp % 1 === 0.5 ? Math.floor(temp) / 2 : Math.round(temp) / 2\n}\n\nexport function computeItemStatus(\n ratingValue: number,\n itemValue: number,\n icon: RatingIconsPropsType[\"icon\"]\n): RatingIconPropsType[\"status\"] {\n let itemStatus: RatingIconPropsType[\"status\"] = \"empty\"\n if (!Array.isArray(icon)) {\n // gauge\n const isHalfItem = itemValue > ratingValue && ratingValue > itemValue - 1\n if (isHalfItem) {\n itemStatus = \"half\"\n } else if (itemValue <= ratingValue) {\n itemStatus = \"full\"\n }\n } else if (itemValue === ratingValue) {\n // radio\n itemStatus = \"full\"\n }\n\n return itemStatus\n}\n\nexport const RatingIcon = ({\n icon,\n status = \"full\",\n size = 24,\n}: RatingIconPropsType) => {\n if (status === \"half\") {\n return (\n <>\n {React.cloneElement(icon, {\n color: itemEmptyColor,\n size,\n })}\n <div className=\"cobalt-rating-icons__icon-half-container\">\n {React.cloneElement(icon, { size })}\n </div>\n </>\n )\n } else {\n const iconColor: IconProps[\"color\"] =\n status === \"empty\" ? itemEmptyColor : icon.props.color\n\n return React.cloneElement(icon, {\n color: iconColor,\n size,\n })\n }\n}\n\nexport const RatingIcons = ({\n className,\n max = 5,\n value,\n size = 24,\n editable = false,\n onChange,\n icon = defaultRatingIcon,\n}: RatingIconsPropsType) => {\n const name = useRef(nanoid())\n\n const items = useRef(\n Array.from(new Array(Array.isArray(icon) ? icon.length : max))\n )\n\n const [ratingValue, setRatingValue] = useState(() =>\n editable ? Math.floor(value) : roundHalf(value)\n )\n const [selectedIndex, setSelectedIndex] = useState(-1) // used to enforce selection effect (icon scale reset)\n\n const resetSelection = useCallback(() => {\n setSelectedIndex(-1)\n }, [])\n\n const itemSize = size === 48 ? 16 : size\n\n // input element is used for a11y purpose ( focus feedback and keyboard selection )\n return (\n <div\n className={cx(\"cobalt-rating-icons\", className, {\n \"cobalt-rating-icons--icon-size-48\": size === 48,\n })}\n onPointerLeave={() => {\n if (editable) {\n ;(document.activeElement as HTMLInputElement).blur()\n }\n }}\n >\n {items.current.map((_value, idx) => {\n const itemValue = idx + 1\n\n const itemStatus = computeItemStatus(ratingValue, itemValue, icon)\n\n return (\n <label\n className={cx(\"cobalt-rating-icons__icon-wrapper\", {\n \"cobalt-rating-icons__icon-wrapper--selected\":\n selectedIndex === idx,\n })}\n key={idx}\n onClick={() => {\n if (editable) {\n setRatingValue(itemValue)\n setSelectedIndex(idx)\n }\n }}\n onMouseEnter={(e) => {\n if (editable) {\n ;(e.target as HTMLElement).focus()\n\n resetSelection()\n }\n }}\n >\n <input\n tabIndex={\n editable &&\n (ratingValue === itemValue ||\n (ratingValue === 0 && itemValue === 1))\n ? 0\n : -1\n }\n name={name.current}\n type=\"radio\"\n value={itemValue}\n onChange={() => {\n onChange && onChange(itemValue)\n }}\n disabled={!editable}\n />\n {\n <RatingIcon\n icon={Array.isArray(icon) ? icon[idx] : icon}\n status={itemStatus}\n size={itemSize}\n />\n }\n </label>\n )\n })}\n </div>\n )\n}\n"],"names":[],"mappings":"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"}