@transferwise/components 0.0.0-experimental-11565f2 → 0.0.0-experimental-d0addc4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.js","sources":["../../src/dateInput/DateInput.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport Body from '../body';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputOptionContent,\n type SelectInputProps,\n} from '../inputs/SelectInput';\nimport {\n DateMode,\n MonthFormat,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n Typography,\n} from '../common';\nimport { MDY, YMD, getMonthNames, isDateValid, isMonthAndYearFormat } from '../common/dateUtils';\nimport { useInputAttributes } from '../inputs/contexts';\nimport messages from './DateInput.messages';\nimport { convertToLocalMidnight } from './utils';\n\nexport interface DateInputProps {\n /** @deprecated Use `Field` wrapper or the `aria-labelledby` attribute instead. */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n disabled?: boolean;\n size?: SizeSmall | SizeMedium | SizeLarge;\n value?: Date | string;\n onChange: (value: string | null) => void;\n onFocus?: React.FocusEventHandler<HTMLDivElement>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n dayLabel?: string;\n dayAutoComplete?: string;\n monthLabel?: string;\n yearLabel?: string;\n yearAutoComplete?: string;\n monthFormat?: `${MonthFormat}`;\n mode?: `${DateMode}`;\n placeholders?: {\n day?: string;\n month?: string;\n year?: string;\n };\n id?: string;\n selectProps?: Partial<SelectInputProps<number | null>>;\n}\n\nconst DateInput = ({\n 'aria-labelledby': ariaLabelledByProp,\n 'aria-label': ariaLabel,\n disabled = false,\n size = Size.MEDIUM,\n value,\n dayLabel,\n dayAutoComplete,\n monthLabel,\n yearLabel,\n yearAutoComplete,\n monthFormat = MonthFormat.LONG,\n mode = DateMode.DAY_MONTH_YEAR,\n onChange,\n onFocus,\n onBlur,\n placeholders,\n id: idProp,\n selectProps = {},\n}: DateInputProps) => {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes['aria-labelledby'];\n\n const { locale, formatMessage } = useIntl();\n\n const getDateObject = (): Date | undefined => {\n if (value && isDateValid(value)) {\n return typeof value === 'string' ? convertToLocalMidnight(value) : value;\n }\n return undefined;\n };\n\n const getInitialDate = (unit: 'year' | 'month' | 'day'): number | null => {\n if (value && isDateValid(value)) {\n const dateObject = getDateObject();\n\n if (typeof value === 'string' && isMonthAndYearFormat(value) && unit === 'day') {\n return null;\n }\n\n if (dateObject !== undefined) {\n switch (unit) {\n case 'year':\n return dateObject.getFullYear();\n case 'month':\n return dateObject.getMonth();\n case 'day':\n return dateObject.getDate();\n default:\n return null;\n }\n }\n }\n return null;\n };\n\n const [day, setDay] = useState(() => getInitialDate('day'));\n const [displayDay, setDisplayDay] = useState(day?.toString());\n const [month, setMonth] = useState(() => getInitialDate('month'));\n const [year, setYear] = useState(() => getInitialDate('year'));\n const [displayYear, setDisplayYear] = useState(year?.toString());\n const [lastBroadcastedValue, setLastBroadcastedValue] = useState<Date | null | undefined>(\n getDateObject,\n );\n const monthNames = getMonthNames(locale, monthFormat);\n\n dayLabel ||= formatMessage(messages.dayLabel);\n monthLabel ||= formatMessage(messages.monthLabel);\n yearLabel ||= formatMessage(messages.yearLabel);\n placeholders = {\n day: placeholders?.day || formatMessage(messages.dayPlaceholder),\n month: placeholders?.month || formatMessage(messages.monthLabel),\n year: placeholders?.year || formatMessage(messages.yearPlaceholder),\n };\n\n const getDateAsString = (date: Date) => {\n if (!isDateValid(date)) {\n return '';\n }\n switch (mode) {\n case DateMode.MONTH_YEAR:\n return [date.getFullYear(), `0${date.getMonth() + 1}`.slice(-2)].join('-');\n case DateMode.DAY_MONTH_YEAR:\n default:\n return [\n date.getFullYear(),\n `0${date.getMonth() + 1}`.slice(-2),\n `0${date.getDate()}`.slice(-2),\n ].join('-');\n }\n };\n\n const getSelectElement = () => {\n return (\n <label className=\"d-flex flex-column\">\n <Body type={Typography.BODY_DEFAULT}>{monthLabel}</Body>\n <SelectInput\n id={`${id}:month`}\n name=\"month\"\n disabled={disabled}\n placeholder={placeholders?.month}\n items={Array.from({ length: 12 }, (_, index) => ({ type: 'option', value: index }))}\n size={size}\n value={month}\n renderValue={(selectedValue) => (\n <SelectInputOptionContent title={monthNames[selectedValue]} />\n )}\n onChange={(selectedValue) => handleMonthChange(selectedValue)}\n {...selectProps}\n />\n </label>\n );\n };\n\n const isDayValid = (newDay: number, newMonth: number, newYear: number) => {\n const maxDay = new Date(newYear, newMonth + 1, 0).getDate();\n return newDay <= maxDay;\n };\n\n const handleInternalValue = (newDay = day, newMonth = month, newYear = year) => {\n if (newDay == null || newDay === 0 || newMonth == null || newYear == null || newYear === 0) {\n broadcastNewValue(null);\n return;\n }\n if (!isDayValid(newDay, newMonth, newYear)) {\n broadcastNewValue(null);\n return;\n }\n\n const dateValue = new Date(newYear, newMonth, newDay);\n if (newYear < 100) {\n dateValue.setFullYear(newYear);\n }\n\n if (!isDateValid(dateValue)) {\n broadcastNewValue(null);\n return;\n }\n\n if (mode === DateMode.MONTH_YEAR) {\n if (newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n } else if (newDay !== day || newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n };\n\n const handleDayChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDayString = event.target.value.replace(/\\D/g, '');\n const newDayNumber = Number.parseInt(newDayString, 10);\n\n setDay(newDayNumber);\n setDisplayDay(newDayString);\n handleInternalValue(newDayNumber, month, year);\n };\n\n const handleMonthChange = (selectedMonth: number | null) => {\n if (selectedMonth === null) {\n setMonth(null);\n handleInternalValue(day, null, year);\n return;\n }\n setMonth(selectedMonth);\n handleInternalValue(day, selectedMonth, year);\n };\n\n const handleYearChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newYearString = event.target.value.replace(/\\D/g, '');\n const newYearNumber = Number.parseInt(newYearString, 10);\n\n if (newYearString.length >= 4 && newYearString.length <= 6) {\n setYear(newYearNumber);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, newYearNumber);\n } else {\n setYear(null);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, null);\n }\n };\n\n const broadcastNewValue = (newValue: Date | null) => {\n if (newValue !== lastBroadcastedValue) {\n setLastBroadcastedValue(newValue);\n onChange(newValue != null ? getDateAsString(newValue) : null);\n }\n };\n\n const monthYearOnly = mode === DateMode.MONTH_YEAR;\n\n const monthWidth = clsx({\n 'col-sm-8 tw-date--month': monthYearOnly,\n 'col-sm-5 tw-date--month': !monthYearOnly,\n });\n\n const getMonth = () => {\n return <div className={monthWidth}>{getSelectElement()}</div>;\n };\n\n const getDay = () => {\n return (\n <div className=\"col-sm-3 tw-date--day\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{dayLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:day`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"day\"\n autoComplete={dayAutoComplete}\n value={displayDay || ''}\n placeholder={placeholders?.day}\n disabled={disabled}\n min={1}\n max={31}\n maxLength={2}\n onChange={(event) => handleDayChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n\n const getYear = () => {\n return (\n <div className=\"col-sm-4 tw-date--year\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{yearLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:year`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"year\"\n autoComplete={yearAutoComplete}\n placeholder={placeholders?.year}\n value={displayYear || ''}\n disabled={disabled}\n min={0}\n max={9999}\n maxLength={6}\n onChange={(event) => handleYearChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n const monthBeforeDay = MDY.has(locale);\n const yearFirst = YMD.has(locale);\n\n return (\n <div\n className=\"tw-date\"\n {...inputAttributes}\n id={id}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel}\n role=\"group\" // Add role attribute to indicate container for interactive elements\n onFocus={(event) =>\n shouldPropagateOnFocus(event) ? onFocus?.(event) : event.stopPropagation()\n }\n onBlur={(event) =>\n shouldPropagateOnBlur(event) ? onBlur?.(event) : event.stopPropagation()\n }\n >\n <div className=\"row\">\n {(() => {\n if (monthYearOnly) {\n return (\n <>\n {!yearFirst && getMonth()}\n {getYear()}\n {yearFirst && getMonth()}\n </>\n );\n }\n if (monthBeforeDay) {\n return (\n <>\n {getMonth()}\n {getDay()}\n {getYear()}\n </>\n );\n }\n if (yearFirst) {\n return (\n <>\n {getYear()}\n {getMonth()}\n {getDay()}\n </>\n );\n }\n return (\n <>\n {getDay()}\n {getMonth()}\n {getYear()}\n </>\n );\n })()}\n </div>\n </div>\n );\n};\n\n// Should only propagate if the relatedTarget is not part of this DateInput component.\nfunction shouldPropagateOnFocus({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const targetParent = target.closest('.tw-date');\n const relatedParent = relatedTarget && relatedTarget.closest('.tw-date');\n return targetParent !== relatedParent;\n}\n\n// Should only propagate if the relatedTarget or the activeElement is not part of this DateInput component.\nfunction shouldPropagateOnBlur({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const blurElementParent = target.closest('.tw-date');\n // Even though FocusEvent.relatedTarget is supported by IE\n // (https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/relatedTarget)\n // \"IE11 sets document.activeElement to the next focused element before the blur event is called.\"\n // (https://stackoverflow.com/a/49325196/986241)\n // Therefore if the relatedTarget is null, we try the document.activeElement,\n // which may contain the HTML element that is gaining focus\n const focusElement =\n relatedTarget || (document.activeElement !== target ? document.activeElement : null);\n const focusElementParent = focusElement && focusElement.closest('.tw-date');\n return blurElementParent !== focusElementParent;\n}\n\nexport default DateInput;\n"],"names":["DateInput","ariaLabelledByProp","ariaLabel","disabled","size","Size","MEDIUM","value","dayLabel","dayAutoComplete","monthLabel","yearLabel","yearAutoComplete","monthFormat","MonthFormat","LONG","mode","DateMode","DAY_MONTH_YEAR","onChange","onFocus","onBlur","placeholders","id","idProp","selectProps","inputAttributes","useInputAttributes","nonLabelable","ariaLabelledBy","locale","formatMessage","useIntl","getDateObject","isDateValid","convertToLocalMidnight","undefined","getInitialDate","unit","dateObject","isMonthAndYearFormat","getFullYear","getMonth","getDate","day","setDay","useState","displayDay","setDisplayDay","toString","month","setMonth","year","setYear","displayYear","setDisplayYear","lastBroadcastedValue","setLastBroadcastedValue","monthNames","getMonthNames","messages","dayPlaceholder","yearPlaceholder","getDateAsString","date","MONTH_YEAR","slice","join","getSelectElement","_jsxs","className","children","_jsx","Body","type","Typography","BODY_DEFAULT","SelectInput","name","placeholder","items","Array","from","length","_","index","renderValue","selectedValue","SelectInputOptionContent","title","handleMonthChange","isDayValid","newDay","newMonth","newYear","maxDay","Date","handleInternalValue","broadcastNewValue","dateValue","setFullYear","handleDayChange","event","newDayString","target","replace","newDayNumber","Number","parseInt","selectedMonth","handleYearChange","newYearString","newYearNumber","newValue","monthYearOnly","monthWidth","clsx","getDay","Input","inputMode","pattern","autoComplete","min","max","maxLength","getYear","monthBeforeDay","MDY","has","yearFirst","YMD","role","shouldPropagateOnFocus","stopPropagation","shouldPropagateOnBlur","_Fragment","relatedTarget","targetParent","closest","relatedParent","blurElementParent","focusElement","document","activeElement","focusElementParent"],"mappings":"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"}
1
+ {"version":3,"file":"DateInput.js","sources":["../../src/dateInput/DateInput.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport Body from '../body';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputOptionContent,\n type SelectInputProps,\n} from '../inputs/SelectInput';\nimport {\n DateMode,\n MonthFormat,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n Typography,\n} from '../common';\nimport { MDY, YMD, getMonthNames, isDateValid, isMonthAndYearFormat } from '../common/dateUtils';\nimport { useInputAttributes } from '../inputs/contexts';\nimport messages from './DateInput.messages';\nimport { convertToLocalMidnight } from './utils';\n\nexport interface DateInputProps {\n /** @deprecated Use `Field` wrapper or the `aria-labelledby` attribute instead. */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n disabled?: boolean;\n size?: SizeSmall | SizeMedium | SizeLarge;\n value?: Date | string;\n onChange: (value: string | null) => void;\n onFocus?: React.FocusEventHandler<HTMLDivElement>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n dayLabel?: string;\n dayAutoComplete?: string;\n monthLabel?: string;\n yearLabel?: string;\n yearAutoComplete?: string;\n monthFormat?: `${MonthFormat}`;\n mode?: `${DateMode}`;\n placeholders?: {\n day?: string;\n month?: string;\n year?: string;\n };\n id?: string;\n selectProps?: Partial<SelectInputProps<number | null>>;\n}\n\nconst DateInput = ({\n 'aria-labelledby': ariaLabelledByProp,\n 'aria-label': ariaLabel,\n disabled = false,\n size = Size.MEDIUM,\n value,\n dayLabel,\n dayAutoComplete,\n monthLabel,\n yearLabel,\n yearAutoComplete,\n monthFormat = MonthFormat.LONG,\n mode = DateMode.DAY_MONTH_YEAR,\n onChange,\n onFocus,\n onBlur,\n placeholders,\n id: idProp,\n selectProps = {},\n}: DateInputProps) => {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes['aria-labelledby'];\n\n const { locale, formatMessage } = useIntl();\n\n const getDateObject = (): Date | undefined => {\n if (value && isDateValid(value)) {\n return typeof value === 'string' ? convertToLocalMidnight(value) : value;\n }\n return undefined;\n };\n\n const getInitialDate = (unit: 'year' | 'month' | 'day'): number | null => {\n if (value && isDateValid(value)) {\n const dateObject = getDateObject();\n\n if (typeof value === 'string' && isMonthAndYearFormat(value) && unit === 'day') {\n return null;\n }\n\n if (dateObject !== undefined) {\n switch (unit) {\n case 'year':\n return dateObject.getFullYear();\n case 'month':\n return dateObject.getMonth();\n case 'day':\n return dateObject.getDate();\n default:\n return null;\n }\n }\n }\n return null;\n };\n\n const [day, setDay] = useState(() => getInitialDate('day'));\n const [displayDay, setDisplayDay] = useState(day?.toString());\n const [month, setMonth] = useState(() => getInitialDate('month'));\n const [year, setYear] = useState(() => getInitialDate('year'));\n const [displayYear, setDisplayYear] = useState(year?.toString());\n const [lastBroadcastedValue, setLastBroadcastedValue] = useState<Date | null | undefined>(\n getDateObject,\n );\n const monthNames = getMonthNames(locale, monthFormat);\n\n dayLabel ||= formatMessage(messages.dayLabel);\n monthLabel ||= formatMessage(messages.monthLabel);\n yearLabel ||= formatMessage(messages.yearLabel);\n placeholders = {\n day: placeholders?.day || formatMessage(messages.dayPlaceholder),\n month: placeholders?.month || formatMessage(messages.monthLabel),\n year: placeholders?.year || formatMessage(messages.yearPlaceholder),\n };\n\n const getDateAsString = (date: Date) => {\n if (!isDateValid(date)) {\n return '';\n }\n switch (mode) {\n case DateMode.MONTH_YEAR:\n return [date.getFullYear(), `0${date.getMonth() + 1}`.slice(-2)].join('-');\n case DateMode.DAY_MONTH_YEAR:\n default:\n return [\n date.getFullYear(),\n `0${date.getMonth() + 1}`.slice(-2),\n `0${date.getDate()}`.slice(-2),\n ].join('-');\n }\n };\n\n const getSelectElement = () => {\n return (\n <label className=\"d-flex flex-column\">\n <Body type={Typography.BODY_DEFAULT}>{monthLabel}</Body>\n <SelectInput\n id={`${id}:month`}\n name=\"month\"\n disabled={disabled}\n placeholder={placeholders?.month}\n items={Array.from({ length: 12 }, (_, index) => ({ type: 'option', value: index }))}\n size={size}\n value={month}\n renderValue={(selectedValue) => (\n <SelectInputOptionContent title={monthNames[selectedValue]} />\n )}\n onChange={(selectedValue) => handleMonthChange(selectedValue)}\n {...selectProps}\n />\n </label>\n );\n };\n\n const isDayValid = (newDay: number, newMonth: number, newYear: number) => {\n const maxDay = new Date(newYear, newMonth + 1, 0).getDate();\n return newDay <= maxDay;\n };\n\n const handleInternalValue = (newDay = day, newMonth = month, newYear = year) => {\n if (newDay == null || newDay === 0 || newMonth == null || newYear == null || newYear === 0) {\n broadcastNewValue(null);\n return;\n }\n if (!isDayValid(newDay, newMonth, newYear)) {\n broadcastNewValue(null);\n return;\n }\n\n const dateValue = new Date(newYear, newMonth, newDay);\n if (newYear < 100) {\n dateValue.setFullYear(newYear);\n }\n\n if (!isDateValid(dateValue)) {\n broadcastNewValue(null);\n return;\n }\n\n if (mode === DateMode.MONTH_YEAR) {\n if (newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n } else if (newDay !== day || newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n };\n\n const handleDayChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDayString = event.target.value.replace(/\\D/g, '');\n const newDayNumber = Number.parseInt(newDayString, 10);\n\n setDay(newDayNumber);\n setDisplayDay(newDayString);\n handleInternalValue(newDayNumber, month, year);\n };\n\n const handleMonthChange = (selectedMonth: number | null) => {\n if (selectedMonth === null) {\n setMonth(null);\n handleInternalValue(day, null, year);\n return;\n }\n setMonth(selectedMonth);\n handleInternalValue(day, selectedMonth, year);\n };\n\n const handleYearChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newYearString = event.target.value.replace(/\\D/g, '');\n const newYearNumber = Number.parseInt(newYearString, 10);\n\n if (newYearString.length >= 4 && newYearString.length <= 6) {\n setYear(newYearNumber);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, newYearNumber);\n } else {\n setYear(null);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, null);\n }\n };\n\n const broadcastNewValue = (newValue: Date | null) => {\n if (newValue !== lastBroadcastedValue) {\n setLastBroadcastedValue(newValue);\n onChange(newValue != null ? getDateAsString(newValue) : null);\n }\n };\n\n const monthYearOnly = mode === DateMode.MONTH_YEAR;\n\n const monthWidth = clsx({\n 'col-sm-8 tw-date--month': monthYearOnly,\n 'col-sm-5 tw-date--month': !monthYearOnly,\n });\n\n const getMonth = () => {\n return <div className={monthWidth}>{getSelectElement()}</div>;\n };\n\n const getDay = () => {\n return (\n <div className=\"col-sm-3 tw-date--day\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{dayLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:day`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"day\"\n autoComplete={dayAutoComplete}\n value={displayDay || ''}\n placeholder={placeholders?.day}\n disabled={disabled}\n min={1}\n max={31}\n maxLength={2}\n onChange={(event) => handleDayChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n\n const getYear = () => {\n return (\n <div className=\"col-sm-4 tw-date--year\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{yearLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:year`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"year\"\n autoComplete={yearAutoComplete}\n placeholder={placeholders?.year}\n value={displayYear || ''}\n disabled={disabled}\n min={0}\n max={9999}\n maxLength={6}\n onChange={(event) => handleYearChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n const monthBeforeDay = MDY.has(locale);\n const yearFirst = YMD.has(locale);\n\n return (\n <div\n className=\"tw-date\"\n {...inputAttributes}\n id={id}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel}\n role=\"group\" // Add role attribute to indicate container for interactive elements\n onFocus={(event) =>\n shouldPropagateOnFocus(event) ? onFocus?.(event) : event.stopPropagation()\n }\n onBlur={(event) => (shouldPropagateOnBlur(event) ? onBlur?.(event) : event.stopPropagation())}\n >\n <div className=\"row\">\n {(() => {\n if (monthYearOnly) {\n return (\n <>\n {!yearFirst && getMonth()}\n {getYear()}\n {yearFirst && getMonth()}\n </>\n );\n }\n if (monthBeforeDay) {\n return (\n <>\n {getMonth()}\n {getDay()}\n {getYear()}\n </>\n );\n }\n if (yearFirst) {\n return (\n <>\n {getYear()}\n {getMonth()}\n {getDay()}\n </>\n );\n }\n return (\n <>\n {getDay()}\n {getMonth()}\n {getYear()}\n </>\n );\n })()}\n </div>\n </div>\n );\n};\n\n// Should only propagate if the relatedTarget is not part of this DateInput component.\nfunction shouldPropagateOnFocus({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const targetParent = target.closest('.tw-date');\n const relatedParent = relatedTarget && relatedTarget.closest('.tw-date');\n return targetParent !== relatedParent;\n}\n\n// Should only propagate if the relatedTarget or the activeElement is not part of this DateInput component.\nfunction shouldPropagateOnBlur({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const blurElementParent = target.closest('.tw-date');\n // Even though FocusEvent.relatedTarget is supported by IE\n // (https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/relatedTarget)\n // \"IE11 sets document.activeElement to the next focused element before the blur event is called.\"\n // (https://stackoverflow.com/a/49325196/986241)\n // Therefore if the relatedTarget is null, we try the document.activeElement,\n // which may contain the HTML element that is gaining focus\n const focusElement =\n relatedTarget || (document.activeElement !== target ? document.activeElement : null);\n const focusElementParent = focusElement && focusElement.closest('.tw-date');\n return blurElementParent !== focusElementParent;\n}\n\nexport default DateInput;\n"],"names":["DateInput","ariaLabelledByProp","ariaLabel","disabled","size","Size","MEDIUM","value","dayLabel","dayAutoComplete","monthLabel","yearLabel","yearAutoComplete","monthFormat","MonthFormat","LONG","mode","DateMode","DAY_MONTH_YEAR","onChange","onFocus","onBlur","placeholders","id","idProp","selectProps","inputAttributes","useInputAttributes","nonLabelable","ariaLabelledBy","locale","formatMessage","useIntl","getDateObject","isDateValid","convertToLocalMidnight","undefined","getInitialDate","unit","dateObject","isMonthAndYearFormat","getFullYear","getMonth","getDate","day","setDay","useState","displayDay","setDisplayDay","toString","month","setMonth","year","setYear","displayYear","setDisplayYear","lastBroadcastedValue","setLastBroadcastedValue","monthNames","getMonthNames","messages","dayPlaceholder","yearPlaceholder","getDateAsString","date","MONTH_YEAR","slice","join","getSelectElement","_jsxs","className","children","_jsx","Body","type","Typography","BODY_DEFAULT","SelectInput","name","placeholder","items","Array","from","length","_","index","renderValue","selectedValue","SelectInputOptionContent","title","handleMonthChange","isDayValid","newDay","newMonth","newYear","maxDay","Date","handleInternalValue","broadcastNewValue","dateValue","setFullYear","handleDayChange","event","newDayString","target","replace","newDayNumber","Number","parseInt","selectedMonth","handleYearChange","newYearString","newYearNumber","newValue","monthYearOnly","monthWidth","clsx","getDay","Input","inputMode","pattern","autoComplete","min","max","maxLength","getYear","monthBeforeDay","MDY","has","yearFirst","YMD","role","shouldPropagateOnFocus","stopPropagation","shouldPropagateOnBlur","_Fragment","relatedTarget","targetParent","closest","relatedParent","blurElementParent","focusElement","document","activeElement","focusElementParent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.mjs","sources":["../../src/dateInput/DateInput.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport Body from '../body';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputOptionContent,\n type SelectInputProps,\n} from '../inputs/SelectInput';\nimport {\n DateMode,\n MonthFormat,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n Typography,\n} from '../common';\nimport { MDY, YMD, getMonthNames, isDateValid, isMonthAndYearFormat } from '../common/dateUtils';\nimport { useInputAttributes } from '../inputs/contexts';\nimport messages from './DateInput.messages';\nimport { convertToLocalMidnight } from './utils';\n\nexport interface DateInputProps {\n /** @deprecated Use `Field` wrapper or the `aria-labelledby` attribute instead. */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n disabled?: boolean;\n size?: SizeSmall | SizeMedium | SizeLarge;\n value?: Date | string;\n onChange: (value: string | null) => void;\n onFocus?: React.FocusEventHandler<HTMLDivElement>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n dayLabel?: string;\n dayAutoComplete?: string;\n monthLabel?: string;\n yearLabel?: string;\n yearAutoComplete?: string;\n monthFormat?: `${MonthFormat}`;\n mode?: `${DateMode}`;\n placeholders?: {\n day?: string;\n month?: string;\n year?: string;\n };\n id?: string;\n selectProps?: Partial<SelectInputProps<number | null>>;\n}\n\nconst DateInput = ({\n 'aria-labelledby': ariaLabelledByProp,\n 'aria-label': ariaLabel,\n disabled = false,\n size = Size.MEDIUM,\n value,\n dayLabel,\n dayAutoComplete,\n monthLabel,\n yearLabel,\n yearAutoComplete,\n monthFormat = MonthFormat.LONG,\n mode = DateMode.DAY_MONTH_YEAR,\n onChange,\n onFocus,\n onBlur,\n placeholders,\n id: idProp,\n selectProps = {},\n}: DateInputProps) => {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes['aria-labelledby'];\n\n const { locale, formatMessage } = useIntl();\n\n const getDateObject = (): Date | undefined => {\n if (value && isDateValid(value)) {\n return typeof value === 'string' ? convertToLocalMidnight(value) : value;\n }\n return undefined;\n };\n\n const getInitialDate = (unit: 'year' | 'month' | 'day'): number | null => {\n if (value && isDateValid(value)) {\n const dateObject = getDateObject();\n\n if (typeof value === 'string' && isMonthAndYearFormat(value) && unit === 'day') {\n return null;\n }\n\n if (dateObject !== undefined) {\n switch (unit) {\n case 'year':\n return dateObject.getFullYear();\n case 'month':\n return dateObject.getMonth();\n case 'day':\n return dateObject.getDate();\n default:\n return null;\n }\n }\n }\n return null;\n };\n\n const [day, setDay] = useState(() => getInitialDate('day'));\n const [displayDay, setDisplayDay] = useState(day?.toString());\n const [month, setMonth] = useState(() => getInitialDate('month'));\n const [year, setYear] = useState(() => getInitialDate('year'));\n const [displayYear, setDisplayYear] = useState(year?.toString());\n const [lastBroadcastedValue, setLastBroadcastedValue] = useState<Date | null | undefined>(\n getDateObject,\n );\n const monthNames = getMonthNames(locale, monthFormat);\n\n dayLabel ||= formatMessage(messages.dayLabel);\n monthLabel ||= formatMessage(messages.monthLabel);\n yearLabel ||= formatMessage(messages.yearLabel);\n placeholders = {\n day: placeholders?.day || formatMessage(messages.dayPlaceholder),\n month: placeholders?.month || formatMessage(messages.monthLabel),\n year: placeholders?.year || formatMessage(messages.yearPlaceholder),\n };\n\n const getDateAsString = (date: Date) => {\n if (!isDateValid(date)) {\n return '';\n }\n switch (mode) {\n case DateMode.MONTH_YEAR:\n return [date.getFullYear(), `0${date.getMonth() + 1}`.slice(-2)].join('-');\n case DateMode.DAY_MONTH_YEAR:\n default:\n return [\n date.getFullYear(),\n `0${date.getMonth() + 1}`.slice(-2),\n `0${date.getDate()}`.slice(-2),\n ].join('-');\n }\n };\n\n const getSelectElement = () => {\n return (\n <label className=\"d-flex flex-column\">\n <Body type={Typography.BODY_DEFAULT}>{monthLabel}</Body>\n <SelectInput\n id={`${id}:month`}\n name=\"month\"\n disabled={disabled}\n placeholder={placeholders?.month}\n items={Array.from({ length: 12 }, (_, index) => ({ type: 'option', value: index }))}\n size={size}\n value={month}\n renderValue={(selectedValue) => (\n <SelectInputOptionContent title={monthNames[selectedValue]} />\n )}\n onChange={(selectedValue) => handleMonthChange(selectedValue)}\n {...selectProps}\n />\n </label>\n );\n };\n\n const isDayValid = (newDay: number, newMonth: number, newYear: number) => {\n const maxDay = new Date(newYear, newMonth + 1, 0).getDate();\n return newDay <= maxDay;\n };\n\n const handleInternalValue = (newDay = day, newMonth = month, newYear = year) => {\n if (newDay == null || newDay === 0 || newMonth == null || newYear == null || newYear === 0) {\n broadcastNewValue(null);\n return;\n }\n if (!isDayValid(newDay, newMonth, newYear)) {\n broadcastNewValue(null);\n return;\n }\n\n const dateValue = new Date(newYear, newMonth, newDay);\n if (newYear < 100) {\n dateValue.setFullYear(newYear);\n }\n\n if (!isDateValid(dateValue)) {\n broadcastNewValue(null);\n return;\n }\n\n if (mode === DateMode.MONTH_YEAR) {\n if (newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n } else if (newDay !== day || newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n };\n\n const handleDayChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDayString = event.target.value.replace(/\\D/g, '');\n const newDayNumber = Number.parseInt(newDayString, 10);\n\n setDay(newDayNumber);\n setDisplayDay(newDayString);\n handleInternalValue(newDayNumber, month, year);\n };\n\n const handleMonthChange = (selectedMonth: number | null) => {\n if (selectedMonth === null) {\n setMonth(null);\n handleInternalValue(day, null, year);\n return;\n }\n setMonth(selectedMonth);\n handleInternalValue(day, selectedMonth, year);\n };\n\n const handleYearChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newYearString = event.target.value.replace(/\\D/g, '');\n const newYearNumber = Number.parseInt(newYearString, 10);\n\n if (newYearString.length >= 4 && newYearString.length <= 6) {\n setYear(newYearNumber);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, newYearNumber);\n } else {\n setYear(null);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, null);\n }\n };\n\n const broadcastNewValue = (newValue: Date | null) => {\n if (newValue !== lastBroadcastedValue) {\n setLastBroadcastedValue(newValue);\n onChange(newValue != null ? getDateAsString(newValue) : null);\n }\n };\n\n const monthYearOnly = mode === DateMode.MONTH_YEAR;\n\n const monthWidth = clsx({\n 'col-sm-8 tw-date--month': monthYearOnly,\n 'col-sm-5 tw-date--month': !monthYearOnly,\n });\n\n const getMonth = () => {\n return <div className={monthWidth}>{getSelectElement()}</div>;\n };\n\n const getDay = () => {\n return (\n <div className=\"col-sm-3 tw-date--day\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{dayLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:day`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"day\"\n autoComplete={dayAutoComplete}\n value={displayDay || ''}\n placeholder={placeholders?.day}\n disabled={disabled}\n min={1}\n max={31}\n maxLength={2}\n onChange={(event) => handleDayChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n\n const getYear = () => {\n return (\n <div className=\"col-sm-4 tw-date--year\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{yearLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:year`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"year\"\n autoComplete={yearAutoComplete}\n placeholder={placeholders?.year}\n value={displayYear || ''}\n disabled={disabled}\n min={0}\n max={9999}\n maxLength={6}\n onChange={(event) => handleYearChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n const monthBeforeDay = MDY.has(locale);\n const yearFirst = YMD.has(locale);\n\n return (\n <div\n className=\"tw-date\"\n {...inputAttributes}\n id={id}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel}\n role=\"group\" // Add role attribute to indicate container for interactive elements\n onFocus={(event) =>\n shouldPropagateOnFocus(event) ? onFocus?.(event) : event.stopPropagation()\n }\n onBlur={(event) =>\n shouldPropagateOnBlur(event) ? onBlur?.(event) : event.stopPropagation()\n }\n >\n <div className=\"row\">\n {(() => {\n if (monthYearOnly) {\n return (\n <>\n {!yearFirst && getMonth()}\n {getYear()}\n {yearFirst && getMonth()}\n </>\n );\n }\n if (monthBeforeDay) {\n return (\n <>\n {getMonth()}\n {getDay()}\n {getYear()}\n </>\n );\n }\n if (yearFirst) {\n return (\n <>\n {getYear()}\n {getMonth()}\n {getDay()}\n </>\n );\n }\n return (\n <>\n {getDay()}\n {getMonth()}\n {getYear()}\n </>\n );\n })()}\n </div>\n </div>\n );\n};\n\n// Should only propagate if the relatedTarget is not part of this DateInput component.\nfunction shouldPropagateOnFocus({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const targetParent = target.closest('.tw-date');\n const relatedParent = relatedTarget && relatedTarget.closest('.tw-date');\n return targetParent !== relatedParent;\n}\n\n// Should only propagate if the relatedTarget or the activeElement is not part of this DateInput component.\nfunction shouldPropagateOnBlur({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const blurElementParent = target.closest('.tw-date');\n // Even though FocusEvent.relatedTarget is supported by IE\n // (https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/relatedTarget)\n // \"IE11 sets document.activeElement to the next focused element before the blur event is called.\"\n // (https://stackoverflow.com/a/49325196/986241)\n // Therefore if the relatedTarget is null, we try the document.activeElement,\n // which may contain the HTML element that is gaining focus\n const focusElement =\n relatedTarget || (document.activeElement !== target ? document.activeElement : null);\n const focusElementParent = focusElement && focusElement.closest('.tw-date');\n return blurElementParent !== focusElementParent;\n}\n\nexport default DateInput;\n"],"names":["DateInput","ariaLabelledByProp","ariaLabel","disabled","size","Size","MEDIUM","value","dayLabel","dayAutoComplete","monthLabel","yearLabel","yearAutoComplete","monthFormat","MonthFormat","LONG","mode","DateMode","DAY_MONTH_YEAR","onChange","onFocus","onBlur","placeholders","id","idProp","selectProps","inputAttributes","useInputAttributes","nonLabelable","ariaLabelledBy","locale","formatMessage","useIntl","getDateObject","isDateValid","convertToLocalMidnight","undefined","getInitialDate","unit","dateObject","isMonthAndYearFormat","getFullYear","getMonth","getDate","day","setDay","useState","displayDay","setDisplayDay","toString","month","setMonth","year","setYear","displayYear","setDisplayYear","lastBroadcastedValue","setLastBroadcastedValue","monthNames","getMonthNames","messages","dayPlaceholder","yearPlaceholder","getDateAsString","date","MONTH_YEAR","slice","join","getSelectElement","_jsxs","className","children","_jsx","Body","type","Typography","BODY_DEFAULT","SelectInput","name","placeholder","items","Array","from","length","_","index","renderValue","selectedValue","SelectInputOptionContent","title","handleMonthChange","isDayValid","newDay","newMonth","newYear","maxDay","Date","handleInternalValue","broadcastNewValue","dateValue","setFullYear","handleDayChange","event","newDayString","target","replace","newDayNumber","Number","parseInt","selectedMonth","handleYearChange","newYearString","newYearNumber","newValue","monthYearOnly","monthWidth","clsx","getDay","Input","inputMode","pattern","autoComplete","min","max","maxLength","getYear","monthBeforeDay","MDY","has","yearFirst","YMD","role","shouldPropagateOnFocus","stopPropagation","shouldPropagateOnBlur","_Fragment","relatedTarget","targetParent","closest","relatedParent","blurElementParent","focusElement","document","activeElement","focusElementParent"],"mappings":"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"}
1
+ {"version":3,"file":"DateInput.mjs","sources":["../../src/dateInput/DateInput.tsx"],"sourcesContent":["import { clsx } from 'clsx';\nimport { useState } from 'react';\nimport { useIntl } from 'react-intl';\n\nimport Body from '../body';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputOptionContent,\n type SelectInputProps,\n} from '../inputs/SelectInput';\nimport {\n DateMode,\n MonthFormat,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n Typography,\n} from '../common';\nimport { MDY, YMD, getMonthNames, isDateValid, isMonthAndYearFormat } from '../common/dateUtils';\nimport { useInputAttributes } from '../inputs/contexts';\nimport messages from './DateInput.messages';\nimport { convertToLocalMidnight } from './utils';\n\nexport interface DateInputProps {\n /** @deprecated Use `Field` wrapper or the `aria-labelledby` attribute instead. */\n 'aria-label'?: string;\n 'aria-labelledby'?: string;\n disabled?: boolean;\n size?: SizeSmall | SizeMedium | SizeLarge;\n value?: Date | string;\n onChange: (value: string | null) => void;\n onFocus?: React.FocusEventHandler<HTMLDivElement>;\n onBlur?: React.FocusEventHandler<HTMLDivElement>;\n dayLabel?: string;\n dayAutoComplete?: string;\n monthLabel?: string;\n yearLabel?: string;\n yearAutoComplete?: string;\n monthFormat?: `${MonthFormat}`;\n mode?: `${DateMode}`;\n placeholders?: {\n day?: string;\n month?: string;\n year?: string;\n };\n id?: string;\n selectProps?: Partial<SelectInputProps<number | null>>;\n}\n\nconst DateInput = ({\n 'aria-labelledby': ariaLabelledByProp,\n 'aria-label': ariaLabel,\n disabled = false,\n size = Size.MEDIUM,\n value,\n dayLabel,\n dayAutoComplete,\n monthLabel,\n yearLabel,\n yearAutoComplete,\n monthFormat = MonthFormat.LONG,\n mode = DateMode.DAY_MONTH_YEAR,\n onChange,\n onFocus,\n onBlur,\n placeholders,\n id: idProp,\n selectProps = {},\n}: DateInputProps) => {\n const inputAttributes = useInputAttributes({ nonLabelable: true });\n const id = idProp ?? inputAttributes.id;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes['aria-labelledby'];\n\n const { locale, formatMessage } = useIntl();\n\n const getDateObject = (): Date | undefined => {\n if (value && isDateValid(value)) {\n return typeof value === 'string' ? convertToLocalMidnight(value) : value;\n }\n return undefined;\n };\n\n const getInitialDate = (unit: 'year' | 'month' | 'day'): number | null => {\n if (value && isDateValid(value)) {\n const dateObject = getDateObject();\n\n if (typeof value === 'string' && isMonthAndYearFormat(value) && unit === 'day') {\n return null;\n }\n\n if (dateObject !== undefined) {\n switch (unit) {\n case 'year':\n return dateObject.getFullYear();\n case 'month':\n return dateObject.getMonth();\n case 'day':\n return dateObject.getDate();\n default:\n return null;\n }\n }\n }\n return null;\n };\n\n const [day, setDay] = useState(() => getInitialDate('day'));\n const [displayDay, setDisplayDay] = useState(day?.toString());\n const [month, setMonth] = useState(() => getInitialDate('month'));\n const [year, setYear] = useState(() => getInitialDate('year'));\n const [displayYear, setDisplayYear] = useState(year?.toString());\n const [lastBroadcastedValue, setLastBroadcastedValue] = useState<Date | null | undefined>(\n getDateObject,\n );\n const monthNames = getMonthNames(locale, monthFormat);\n\n dayLabel ||= formatMessage(messages.dayLabel);\n monthLabel ||= formatMessage(messages.monthLabel);\n yearLabel ||= formatMessage(messages.yearLabel);\n placeholders = {\n day: placeholders?.day || formatMessage(messages.dayPlaceholder),\n month: placeholders?.month || formatMessage(messages.monthLabel),\n year: placeholders?.year || formatMessage(messages.yearPlaceholder),\n };\n\n const getDateAsString = (date: Date) => {\n if (!isDateValid(date)) {\n return '';\n }\n switch (mode) {\n case DateMode.MONTH_YEAR:\n return [date.getFullYear(), `0${date.getMonth() + 1}`.slice(-2)].join('-');\n case DateMode.DAY_MONTH_YEAR:\n default:\n return [\n date.getFullYear(),\n `0${date.getMonth() + 1}`.slice(-2),\n `0${date.getDate()}`.slice(-2),\n ].join('-');\n }\n };\n\n const getSelectElement = () => {\n return (\n <label className=\"d-flex flex-column\">\n <Body type={Typography.BODY_DEFAULT}>{monthLabel}</Body>\n <SelectInput\n id={`${id}:month`}\n name=\"month\"\n disabled={disabled}\n placeholder={placeholders?.month}\n items={Array.from({ length: 12 }, (_, index) => ({ type: 'option', value: index }))}\n size={size}\n value={month}\n renderValue={(selectedValue) => (\n <SelectInputOptionContent title={monthNames[selectedValue]} />\n )}\n onChange={(selectedValue) => handleMonthChange(selectedValue)}\n {...selectProps}\n />\n </label>\n );\n };\n\n const isDayValid = (newDay: number, newMonth: number, newYear: number) => {\n const maxDay = new Date(newYear, newMonth + 1, 0).getDate();\n return newDay <= maxDay;\n };\n\n const handleInternalValue = (newDay = day, newMonth = month, newYear = year) => {\n if (newDay == null || newDay === 0 || newMonth == null || newYear == null || newYear === 0) {\n broadcastNewValue(null);\n return;\n }\n if (!isDayValid(newDay, newMonth, newYear)) {\n broadcastNewValue(null);\n return;\n }\n\n const dateValue = new Date(newYear, newMonth, newDay);\n if (newYear < 100) {\n dateValue.setFullYear(newYear);\n }\n\n if (!isDateValid(dateValue)) {\n broadcastNewValue(null);\n return;\n }\n\n if (mode === DateMode.MONTH_YEAR) {\n if (newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n } else if (newDay !== day || newMonth !== month || newYear !== year) {\n broadcastNewValue(dateValue);\n }\n };\n\n const handleDayChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newDayString = event.target.value.replace(/\\D/g, '');\n const newDayNumber = Number.parseInt(newDayString, 10);\n\n setDay(newDayNumber);\n setDisplayDay(newDayString);\n handleInternalValue(newDayNumber, month, year);\n };\n\n const handleMonthChange = (selectedMonth: number | null) => {\n if (selectedMonth === null) {\n setMonth(null);\n handleInternalValue(day, null, year);\n return;\n }\n setMonth(selectedMonth);\n handleInternalValue(day, selectedMonth, year);\n };\n\n const handleYearChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n const newYearString = event.target.value.replace(/\\D/g, '');\n const newYearNumber = Number.parseInt(newYearString, 10);\n\n if (newYearString.length >= 4 && newYearString.length <= 6) {\n setYear(newYearNumber);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, newYearNumber);\n } else {\n setYear(null);\n setDisplayYear(newYearString);\n handleInternalValue(day, month, null);\n }\n };\n\n const broadcastNewValue = (newValue: Date | null) => {\n if (newValue !== lastBroadcastedValue) {\n setLastBroadcastedValue(newValue);\n onChange(newValue != null ? getDateAsString(newValue) : null);\n }\n };\n\n const monthYearOnly = mode === DateMode.MONTH_YEAR;\n\n const monthWidth = clsx({\n 'col-sm-8 tw-date--month': monthYearOnly,\n 'col-sm-5 tw-date--month': !monthYearOnly,\n });\n\n const getMonth = () => {\n return <div className={monthWidth}>{getSelectElement()}</div>;\n };\n\n const getDay = () => {\n return (\n <div className=\"col-sm-3 tw-date--day\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{dayLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:day`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"day\"\n autoComplete={dayAutoComplete}\n value={displayDay || ''}\n placeholder={placeholders?.day}\n disabled={disabled}\n min={1}\n max={31}\n maxLength={2}\n onChange={(event) => handleDayChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n\n const getYear = () => {\n return (\n <div className=\"col-sm-4 tw-date--year\">\n <label>\n <Body type={Typography.BODY_DEFAULT}>{yearLabel}</Body>\n <div className={`input-group input-group-${size}`}>\n <Input\n id={`${id}:year`}\n type=\"text\"\n inputMode=\"numeric\"\n pattern=\"[0-9]*\"\n name=\"year\"\n autoComplete={yearAutoComplete}\n placeholder={placeholders?.year}\n value={displayYear || ''}\n disabled={disabled}\n min={0}\n max={9999}\n maxLength={6}\n onChange={(event) => handleYearChange(event)}\n />\n </div>\n </label>\n </div>\n );\n };\n const monthBeforeDay = MDY.has(locale);\n const yearFirst = YMD.has(locale);\n\n return (\n <div\n className=\"tw-date\"\n {...inputAttributes}\n id={id}\n aria-labelledby={ariaLabelledBy}\n aria-label={ariaLabel}\n role=\"group\" // Add role attribute to indicate container for interactive elements\n onFocus={(event) =>\n shouldPropagateOnFocus(event) ? onFocus?.(event) : event.stopPropagation()\n }\n onBlur={(event) => (shouldPropagateOnBlur(event) ? onBlur?.(event) : event.stopPropagation())}\n >\n <div className=\"row\">\n {(() => {\n if (monthYearOnly) {\n return (\n <>\n {!yearFirst && getMonth()}\n {getYear()}\n {yearFirst && getMonth()}\n </>\n );\n }\n if (monthBeforeDay) {\n return (\n <>\n {getMonth()}\n {getDay()}\n {getYear()}\n </>\n );\n }\n if (yearFirst) {\n return (\n <>\n {getYear()}\n {getMonth()}\n {getDay()}\n </>\n );\n }\n return (\n <>\n {getDay()}\n {getMonth()}\n {getYear()}\n </>\n );\n })()}\n </div>\n </div>\n );\n};\n\n// Should only propagate if the relatedTarget is not part of this DateInput component.\nfunction shouldPropagateOnFocus({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const targetParent = target.closest('.tw-date');\n const relatedParent = relatedTarget && relatedTarget.closest('.tw-date');\n return targetParent !== relatedParent;\n}\n\n// Should only propagate if the relatedTarget or the activeElement is not part of this DateInput component.\nfunction shouldPropagateOnBlur({\n target,\n relatedTarget,\n}: Pick<React.FocusEvent, 'target' | 'relatedTarget'>) {\n const blurElementParent = target.closest('.tw-date');\n // Even though FocusEvent.relatedTarget is supported by IE\n // (https://developer.mozilla.org/en-US/docs/Web/API/FocusEvent/relatedTarget)\n // \"IE11 sets document.activeElement to the next focused element before the blur event is called.\"\n // (https://stackoverflow.com/a/49325196/986241)\n // Therefore if the relatedTarget is null, we try the document.activeElement,\n // which may contain the HTML element that is gaining focus\n const focusElement =\n relatedTarget || (document.activeElement !== target ? document.activeElement : null);\n const focusElementParent = focusElement && focusElement.closest('.tw-date');\n return blurElementParent !== focusElementParent;\n}\n\nexport default DateInput;\n"],"names":["DateInput","ariaLabelledByProp","ariaLabel","disabled","size","Size","MEDIUM","value","dayLabel","dayAutoComplete","monthLabel","yearLabel","yearAutoComplete","monthFormat","MonthFormat","LONG","mode","DateMode","DAY_MONTH_YEAR","onChange","onFocus","onBlur","placeholders","id","idProp","selectProps","inputAttributes","useInputAttributes","nonLabelable","ariaLabelledBy","locale","formatMessage","useIntl","getDateObject","isDateValid","convertToLocalMidnight","undefined","getInitialDate","unit","dateObject","isMonthAndYearFormat","getFullYear","getMonth","getDate","day","setDay","useState","displayDay","setDisplayDay","toString","month","setMonth","year","setYear","displayYear","setDisplayYear","lastBroadcastedValue","setLastBroadcastedValue","monthNames","getMonthNames","messages","dayPlaceholder","yearPlaceholder","getDateAsString","date","MONTH_YEAR","slice","join","getSelectElement","_jsxs","className","children","_jsx","Body","type","Typography","BODY_DEFAULT","SelectInput","name","placeholder","items","Array","from","length","_","index","renderValue","selectedValue","SelectInputOptionContent","title","handleMonthChange","isDayValid","newDay","newMonth","newYear","maxDay","Date","handleInternalValue","broadcastNewValue","dateValue","setFullYear","handleDayChange","event","newDayString","target","replace","newDayNumber","Number","parseInt","selectedMonth","handleYearChange","newYearString","newYearNumber","newValue","monthYearOnly","monthWidth","clsx","getDay","Input","inputMode","pattern","autoComplete","min","max","maxLength","getYear","monthBeforeDay","MDY","has","yearFirst","YMD","role","shouldPropagateOnFocus","stopPropagation","shouldPropagateOnBlur","_Fragment","relatedTarget","targetParent","closest","relatedParent","blurElementParent","focusElement","document","activeElement","focusElementParent"],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/dateInput/DateInput.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,QAAQ,EACR,WAAW,EAEX,SAAS,EACT,UAAU,EACV,SAAS,EAEV,MAAM,WAAW,CAAC;AAMnB,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CACxD;AAED,QAAA,MAAM,SAAS,GAAI,qPAmBhB,cAAc,gCAqShB,CAAC;AA8BF,eAAe,SAAS,CAAC"}
1
+ {"version":3,"file":"DateInput.d.ts","sourceRoot":"","sources":["../../../src/dateInput/DateInput.tsx"],"names":[],"mappings":"AAMA,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,QAAQ,EACR,WAAW,EAEX,SAAS,EACT,UAAU,EACV,SAAS,EAEV,MAAM,WAAW,CAAC;AAMnB,MAAM,WAAW,cAAc;IAC7B,kFAAkF;IAClF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,KAAK,CAAC,EAAE,IAAI,GAAG,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IACzC,OAAO,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IAClD,MAAM,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,CAAC,EAAE,GAAG,WAAW,EAAE,CAAC;IAC/B,IAAI,CAAC,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrB,YAAY,CAAC,EAAE;QACb,GAAG,CAAC,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC;CACxD;AAED,QAAA,MAAM,SAAS,GAAI,qPAmBhB,cAAc,gCAmShB,CAAC;AA8BF,eAAe,SAAS,CAAC"}
@@ -13,6 +13,7 @@ export declare const storySourceWithoutNoise: (config: Story) => Story;
13
13
  * by swapping the `key`. This is a workaround for the Storybook's limitation.
14
14
  */
15
15
  export declare const withoutKey: Decorator;
16
+ export declare const withSizedContainer: (width: number) => Decorator;
16
17
  /**
17
18
  * Not all stories need access to all controls as it causes unnecessary UI noise.
18
19
  */
@@ -1 +1 @@
1
- {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/listItem/_stories/helpers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,KAAK,KAAG,KAuBvD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAQxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,eAAe,GACzB,kBAAiB,MAAM,EAAO,MAC9B,iBAAgB,MAAM,EAAO;;;;;;CAG7B,CAAC"}
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../src/listItem/_stories/helpers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAEjD,KAAK,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAErC;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,QAAQ,KAAK,KAAG,KAuBvD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,EAAE,SAQxB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC5B,OAAO,MAAM,KAAG,SAKhB,CAAC;AAEJ;;GAEG;AACH,eAAO,MAAM,eAAe,GACzB,kBAAiB,MAAM,EAAO,MAC9B,iBAAgB,MAAM,EAAO;;;;;;CAG7B,CAAC"}
@@ -1,5 +1,14 @@
1
1
  import { ReactNode } from 'react';
2
2
  export type SB_ListItem_ControlType = 'non-interactive' | 'button' | 'buttonAsLink' | 'partialButton' | 'partialButtonAsLink' | 'iconButton' | 'iconButtonAsLink' | 'iconButtonWithLabel' | 'iconButtonAsLinkWithLabel' | 'partialIconButton' | 'partialIconButtonAsLink' | 'partialIconButtonWithLabel' | 'partialIconButtonAsLinkWithLabel' | 'navigation' | 'navigationAsButton' | 'checkbox' | 'radio' | 'switch';
3
+ export declare const SB_LIST_ITEM_TEXT: {
4
+ title: string;
5
+ subtitle: string;
6
+ valueTitle: string;
7
+ valueSubtitle: string;
8
+ longTitle: string;
9
+ longSubtitle: string;
10
+ longValueTitle: import("react").JSX.Element;
11
+ };
3
12
  export declare const SB_LIST_ITEM_CONTROLS: Record<SB_ListItem_ControlType, ReactNode>;
4
13
  export declare const SB_LIST_ITEM_ADDITIONAL_INFO: {
5
14
  readonly interactive: import("react").JSX.Element;
@@ -1 +1 @@
1
- {"version":3,"file":"subcomponents.d.ts","sourceRoot":"","sources":["../../../../src/listItem/_stories/subcomponents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAOlC,MAAM,MAAM,uBAAuB,GAC/B,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,YAAY,GACZ,kBAAkB,GAClB,qBAAqB,GACrB,2BAA2B,GAC3B,mBAAmB,GACnB,yBAAyB,GACzB,4BAA4B,GAC5B,kCAAkC,GAClC,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,OAAO,GACP,QAAQ,CAAC;AAEb,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,uBAAuB,EAAE,SAAS,CA2DnE,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;CAe/B,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;CAavB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;CAoBrB,CAAC"}
1
+ {"version":3,"file":"subcomponents.d.ts","sourceRoot":"","sources":["../../../../src/listItem/_stories/subcomponents.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAQlC,MAAM,MAAM,uBAAuB,GAC/B,iBAAiB,GACjB,QAAQ,GACR,cAAc,GACd,eAAe,GACf,qBAAqB,GACrB,YAAY,GACZ,kBAAkB,GAClB,qBAAqB,GACrB,2BAA2B,GAC3B,mBAAmB,GACnB,yBAAyB,GACzB,4BAA4B,GAC5B,kCAAkC,GAClC,YAAY,GACZ,oBAAoB,GACpB,UAAU,GACV,OAAO,GACP,QAAQ,CAAC;AAEb,eAAO,MAAM,iBAAiB;;;;;;;;CAgB7B,CAAC;AAEF,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,uBAAuB,EAAE,SAAS,CA2DnE,CAAC;AAEX,eAAO,MAAM,4BAA4B;;;CAe/B,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;CAavB,CAAC;AAEX,eAAO,MAAM,kBAAkB;;;;;CAoBrB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { StoryObj } from '@storybook/react-webpack5';
2
+ import { StoryConfig } from '../../../test-utils';
3
+ import { type ListItemProps } from '../../ListItem';
4
+ import { SB_ListItem_ControlType as ControlType } from '../subcomponents';
5
+ type Story = StoryObj<ListItemProps>;
6
+ export declare const generateVariantsForControl: (controlType: ControlType, variant?: NonNullable<StoryConfig["variants"]>[number]) => Story;
7
+ export {};
8
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../../../src/listItem/_stories/variants/helpers.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,WAAW,EAAe,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAY,KAAK,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAML,uBAAuB,IAAI,WAAW,EACvC,MAAM,kBAAkB,CAAC;AAE1B,KAAK,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,CAAC;AAQrC,eAAO,MAAM,0BAA0B,GACrC,aAAa,WAAW,EACxB,UAAS,WAAW,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAa,KAChE,KAgHF,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@transferwise/components",
3
- "version": "0.0.0-experimental-11565f2",
3
+ "version": "0.0.0-experimental-d0addc4",
4
4
  "description": "Neptune React components",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
@@ -84,9 +84,9 @@
84
84
  "storybook-addon-tag-badges": "^2.0.2",
85
85
  "storybook-addon-test-codegen": "^2.0.1",
86
86
  "@transferwise/less-config": "3.1.2",
87
+ "@transferwise/neptune-css": "14.24.5",
87
88
  "@wise/components-theming": "1.6.4",
88
- "@wise/wds-configs": "0.0.0",
89
- "@transferwise/neptune-css": "14.24.5"
89
+ "@wise/wds-configs": "0.0.0"
90
90
  },
91
91
  "peerDependencies": {
92
92
  "@transferwise/icons": "^3.22.4",
@@ -317,9 +317,7 @@ const DateInput = ({
317
317
  onFocus={(event) =>
318
318
  shouldPropagateOnFocus(event) ? onFocus?.(event) : event.stopPropagation()
319
319
  }
320
- onBlur={(event) =>
321
- shouldPropagateOnBlur(event) ? onBlur?.(event) : event.stopPropagation()
322
- }
320
+ onBlur={(event) => (shouldPropagateOnBlur(event) ? onBlur?.(event) : event.stopPropagation())}
323
321
  >
324
322
  <div className="row">
325
323
  {(() => {
@@ -48,6 +48,14 @@ export const withoutKey: Decorator = (Story, { args }) => {
48
48
  return <Story key={key} />;
49
49
  };
50
50
 
51
+ export const withSizedContainer =
52
+ (width: number): Decorator =>
53
+ (Story, { args }) => (
54
+ <div style={{ width, border: '1px dashed #ccc', padding: '8px' }}>
55
+ <Story />
56
+ </div>
57
+ );
58
+
51
59
  /**
52
60
  * Not all stories need access to all controls as it causes unnecessary UI noise.
53
61
  */
@@ -1,9 +1,10 @@
1
1
  import { ReactNode } from 'react';
2
2
  import { Edit, Briefcase, Plane } from '@transferwise/icons';
3
- import { ListItem } from '../ListItem';
4
3
  import { fn } from 'storybook/test';
5
- import Link from '../../link';
6
4
  import { Flag } from '@wise/art';
5
+ import { lorem20 } from '../../test-utils';
6
+ import Link from '../../link';
7
+ import { ListItem } from '../ListItem';
7
8
 
8
9
  export type SB_ListItem_ControlType =
9
10
  | 'non-interactive'
@@ -25,6 +26,24 @@ export type SB_ListItem_ControlType =
25
26
  | 'radio'
26
27
  | 'switch';
27
28
 
29
+ export const SB_LIST_ITEM_TEXT = {
30
+ title: 'This is a title',
31
+ subtitle: 'And it also has a subtitle',
32
+ valueTitle: '100 GBP',
33
+ valueSubtitle: '200 USD',
34
+ longTitle: `This is a long title. ${lorem20}`,
35
+ longSubtitle: `And it also has a long subtitle. ${lorem20}`,
36
+ longValueTitle: (
37
+ <>
38
+ This value title
39
+ <br />
40
+ is made to span
41
+ <br />
42
+ across few lines
43
+ </>
44
+ ),
45
+ };
46
+
28
47
  export const SB_LIST_ITEM_CONTROLS: Record<SB_ListItem_ControlType, ReactNode> = {
29
48
  'non-interactive': null,
30
49
  button: <ListItem.Button onClick={() => {}}>Click me</ListItem.Button>,
@@ -0,0 +1,49 @@
1
+ import { Meta } from '@storybook/react-webpack5';
2
+ import { ListItem, type ListItemProps } from '../../ListItem';
3
+ import { generateVariantsForControl } from './helpers';
4
+
5
+ export default {
6
+ component: ListItem,
7
+ title: 'Content/ListItem/tests/variants/theme: bright-green',
8
+ tags: ['!autodocs'],
9
+ parameters: {
10
+ controls: { disable: true },
11
+ actions: { disable: true },
12
+ knobs: { disable: true },
13
+ },
14
+ } satisfies Meta<ListItemProps>;
15
+
16
+ export const Button = generateVariantsForControl('button', 'bright-green');
17
+ export const ButtonAsLink = generateVariantsForControl('buttonAsLink', 'bright-green');
18
+ export const ButtonPartiallyInteractive = generateVariantsForControl(
19
+ 'partialButton',
20
+ 'bright-green',
21
+ );
22
+ export const ButtonAsLinkPartiallyInteractive = generateVariantsForControl(
23
+ 'partialButtonAsLink',
24
+ 'bright-green',
25
+ );
26
+ export const IconButton = generateVariantsForControl('iconButton', 'bright-green');
27
+ export const IconButtonAsLink = generateVariantsForControl('iconButtonAsLink', 'bright-green');
28
+ export const IconButtonWithLabel = generateVariantsForControl(
29
+ 'iconButtonWithLabel',
30
+ 'bright-green',
31
+ );
32
+ export const IconButtonAsLinkWithLabel = generateVariantsForControl(
33
+ 'iconButtonAsLinkWithLabel',
34
+ 'bright-green',
35
+ );
36
+ export const IconButtonPartiallyInteractive = generateVariantsForControl(
37
+ 'partialIconButton',
38
+ 'bright-green',
39
+ );
40
+ export const IconButtonAsLinkPartiallyInteractive = generateVariantsForControl(
41
+ 'partialIconButtonAsLink',
42
+ 'bright-green',
43
+ );
44
+ export const Navigation = generateVariantsForControl('navigation', 'bright-green');
45
+ export const NavigationAsButton = generateVariantsForControl('navigationAsButton', 'bright-green');
46
+ export const Checkbox = generateVariantsForControl('checkbox', 'bright-green');
47
+ export const Radio = generateVariantsForControl('radio', 'bright-green');
48
+ export const Switch = generateVariantsForControl('switch', 'bright-green');
49
+ export const NonInteractive = generateVariantsForControl('non-interactive', 'bright-green');
@@ -0,0 +1,43 @@
1
+ import { Meta } from '@storybook/react-webpack5';
2
+ import { ListItem, type ListItemProps } from '../../ListItem';
3
+ import { generateVariantsForControl } from './helpers';
4
+
5
+ export default {
6
+ component: ListItem,
7
+ title: 'Content/ListItem/tests/variants/theme: dark',
8
+ tags: ['!autodocs'],
9
+ parameters: {
10
+ controls: { disable: true },
11
+ actions: { disable: true },
12
+ knobs: { disable: true },
13
+ },
14
+ } satisfies Meta<ListItemProps>;
15
+
16
+ export const Button = generateVariantsForControl('button', 'dark');
17
+ export const ButtonAsLink = generateVariantsForControl('buttonAsLink', 'dark');
18
+ export const ButtonPartiallyInteractive = generateVariantsForControl('partialButton', 'dark');
19
+ export const ButtonAsLinkPartiallyInteractive = generateVariantsForControl(
20
+ 'partialButtonAsLink',
21
+ 'dark',
22
+ );
23
+ export const IconButton = generateVariantsForControl('iconButton', 'dark');
24
+ export const IconButtonAsLink = generateVariantsForControl('iconButtonAsLink', 'dark');
25
+ export const IconButtonWithLabel = generateVariantsForControl('iconButtonWithLabel', 'dark');
26
+ export const IconButtonAsLinkWithLabel = generateVariantsForControl(
27
+ 'iconButtonAsLinkWithLabel',
28
+ 'dark',
29
+ );
30
+ export const IconButtonPartiallyInteractive = generateVariantsForControl(
31
+ 'partialIconButton',
32
+ 'dark',
33
+ );
34
+ export const IconButtonAsLinkPartiallyInteractive = generateVariantsForControl(
35
+ 'partialIconButtonAsLink',
36
+ 'dark',
37
+ );
38
+ export const Navigation = generateVariantsForControl('navigation', 'dark');
39
+ export const NavigationAsButton = generateVariantsForControl('navigationAsButton', 'dark');
40
+ export const Checkbox = generateVariantsForControl('checkbox', 'dark');
41
+ export const Radio = generateVariantsForControl('radio', 'dark');
42
+ export const Switch = generateVariantsForControl('switch', 'dark');
43
+ export const NonInteractive = generateVariantsForControl('non-interactive', 'dark');
@@ -0,0 +1,49 @@
1
+ import { Meta } from '@storybook/react-webpack5';
2
+ import { ListItem, type ListItemProps } from '../../ListItem';
3
+ import { generateVariantsForControl } from './helpers';
4
+
5
+ export default {
6
+ component: ListItem,
7
+ title: 'Content/ListItem/tests/variants/theme: forest-green',
8
+ tags: ['!autodocs'],
9
+ parameters: {
10
+ controls: { disable: true },
11
+ actions: { disable: true },
12
+ knobs: { disable: true },
13
+ },
14
+ } satisfies Meta<ListItemProps>;
15
+
16
+ export const Button = generateVariantsForControl('button', 'forest-green');
17
+ export const ButtonAsLink = generateVariantsForControl('buttonAsLink', 'forest-green');
18
+ export const ButtonPartiallyInteractive = generateVariantsForControl(
19
+ 'partialButton',
20
+ 'forest-green',
21
+ );
22
+ export const ButtonAsLinkPartiallyInteractive = generateVariantsForControl(
23
+ 'partialButtonAsLink',
24
+ 'forest-green',
25
+ );
26
+ export const IconButton = generateVariantsForControl('iconButton', 'forest-green');
27
+ export const IconButtonAsLink = generateVariantsForControl('iconButtonAsLink', 'forest-green');
28
+ export const IconButtonWithLabel = generateVariantsForControl(
29
+ 'iconButtonWithLabel',
30
+ 'forest-green',
31
+ );
32
+ export const IconButtonAsLinkWithLabel = generateVariantsForControl(
33
+ 'iconButtonAsLinkWithLabel',
34
+ 'forest-green',
35
+ );
36
+ export const IconButtonPartiallyInteractive = generateVariantsForControl(
37
+ 'partialIconButton',
38
+ 'forest-green',
39
+ );
40
+ export const IconButtonAsLinkPartiallyInteractive = generateVariantsForControl(
41
+ 'partialIconButtonAsLink',
42
+ 'forest-green',
43
+ );
44
+ export const Navigation = generateVariantsForControl('navigation', 'forest-green');
45
+ export const NavigationAsButton = generateVariantsForControl('navigationAsButton', 'forest-green');
46
+ export const Checkbox = generateVariantsForControl('checkbox', 'forest-green');
47
+ export const Radio = generateVariantsForControl('radio', 'forest-green');
48
+ export const Switch = generateVariantsForControl('switch', 'forest-green');
49
+ export const NonInteractive = generateVariantsForControl('non-interactive', 'forest-green');
@@ -0,0 +1,34 @@
1
+ import { Meta } from '@storybook/react-webpack5';
2
+ import { ListItem, type ListItemProps } from '../../ListItem';
3
+ import { generateVariantsForControl } from './helpers';
4
+ import { withSizedContainer } from '../helpers';
5
+
6
+ export default {
7
+ component: ListItem,
8
+ title: 'Content/ListItem/tests/variants/cq: medium',
9
+ tags: ['!autodocs'],
10
+ parameters: {
11
+ controls: { disable: true },
12
+ actions: { disable: true },
13
+ knobs: { disable: true },
14
+ },
15
+ decorators: [withSizedContainer(350)],
16
+ } satisfies Meta<ListItemProps>;
17
+
18
+ export const Button = generateVariantsForControl('button');
19
+ export const ButtonAsLink = generateVariantsForControl('buttonAsLink');
20
+ export const ButtonPartiallyInteractive = generateVariantsForControl('partialButton');
21
+ export const ButtonAsLinkPartiallyInteractive = generateVariantsForControl('partialButtonAsLink');
22
+ export const IconButton = generateVariantsForControl('iconButton');
23
+ export const IconButtonAsLink = generateVariantsForControl('iconButtonAsLink');
24
+ export const IconButtonWithLabel = generateVariantsForControl('iconButtonWithLabel');
25
+ export const IconButtonAsLinkWithLabel = generateVariantsForControl('iconButtonAsLinkWithLabel');
26
+ export const IconButtonPartiallyInteractive = generateVariantsForControl('partialIconButton');
27
+ export const IconButtonAsLinkPartiallyInteractive =
28
+ generateVariantsForControl('partialIconButtonAsLink');
29
+ export const Navigation = generateVariantsForControl('navigation');
30
+ export const NavigationAsButton = generateVariantsForControl('navigationAsButton');
31
+ export const Checkbox = generateVariantsForControl('checkbox');
32
+ export const Radio = generateVariantsForControl('radio');
33
+ export const Switch = generateVariantsForControl('switch');
34
+ export const NonInteractive = generateVariantsForControl('non-interactive');