@transferwise/components 46.98.0 → 46.98.1

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 (199) hide show
  1. package/build/dateInput/DateInput.js +4 -4
  2. package/build/dateInput/DateInput.js.map +1 -1
  3. package/build/dateInput/DateInput.mjs +4 -4
  4. package/build/dateInput/DateInput.mjs.map +1 -1
  5. package/build/dateLookup/DateLookup.js +4 -4
  6. package/build/dateLookup/DateLookup.js.map +1 -1
  7. package/build/dateLookup/DateLookup.mjs +4 -4
  8. package/build/dateLookup/DateLookup.mjs.map +1 -1
  9. package/build/dateLookup/dayCalendar/table/DayCalendarTable.js +3 -3
  10. package/build/dateLookup/dayCalendar/table/DayCalendarTable.js.map +1 -1
  11. package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs +3 -3
  12. package/build/dateLookup/dayCalendar/table/DayCalendarTable.mjs.map +1 -1
  13. package/build/i18n/cs.json +0 -2
  14. package/build/i18n/cs.json.js +0 -2
  15. package/build/i18n/cs.json.js.map +1 -1
  16. package/build/i18n/cs.json.mjs +0 -2
  17. package/build/i18n/cs.json.mjs.map +1 -1
  18. package/build/i18n/de.json +0 -2
  19. package/build/i18n/de.json.js +0 -2
  20. package/build/i18n/de.json.js.map +1 -1
  21. package/build/i18n/de.json.mjs +0 -2
  22. package/build/i18n/de.json.mjs.map +1 -1
  23. package/build/i18n/en.json +0 -2
  24. package/build/i18n/en.json.js +0 -2
  25. package/build/i18n/en.json.js.map +1 -1
  26. package/build/i18n/en.json.mjs +0 -2
  27. package/build/i18n/en.json.mjs.map +1 -1
  28. package/build/i18n/es.json +0 -2
  29. package/build/i18n/es.json.js +0 -2
  30. package/build/i18n/es.json.js.map +1 -1
  31. package/build/i18n/es.json.mjs +0 -2
  32. package/build/i18n/es.json.mjs.map +1 -1
  33. package/build/i18n/fr.json +0 -2
  34. package/build/i18n/fr.json.js +0 -2
  35. package/build/i18n/fr.json.js.map +1 -1
  36. package/build/i18n/fr.json.mjs +0 -2
  37. package/build/i18n/fr.json.mjs.map +1 -1
  38. package/build/i18n/hu.json +0 -2
  39. package/build/i18n/hu.json.js +0 -2
  40. package/build/i18n/hu.json.js.map +1 -1
  41. package/build/i18n/hu.json.mjs +0 -2
  42. package/build/i18n/hu.json.mjs.map +1 -1
  43. package/build/i18n/id.json +0 -2
  44. package/build/i18n/id.json.js +0 -2
  45. package/build/i18n/id.json.js.map +1 -1
  46. package/build/i18n/id.json.mjs +0 -2
  47. package/build/i18n/id.json.mjs.map +1 -1
  48. package/build/i18n/it.json +0 -2
  49. package/build/i18n/it.json.js +0 -2
  50. package/build/i18n/it.json.js.map +1 -1
  51. package/build/i18n/it.json.mjs +0 -2
  52. package/build/i18n/it.json.mjs.map +1 -1
  53. package/build/i18n/ja.json +0 -2
  54. package/build/i18n/ja.json.js +0 -2
  55. package/build/i18n/ja.json.js.map +1 -1
  56. package/build/i18n/ja.json.mjs +0 -2
  57. package/build/i18n/ja.json.mjs.map +1 -1
  58. package/build/i18n/nl.json +0 -2
  59. package/build/i18n/pl.json +0 -2
  60. package/build/i18n/pl.json.js +0 -2
  61. package/build/i18n/pl.json.js.map +1 -1
  62. package/build/i18n/pl.json.mjs +0 -2
  63. package/build/i18n/pl.json.mjs.map +1 -1
  64. package/build/i18n/pt.json +0 -2
  65. package/build/i18n/pt.json.js +0 -2
  66. package/build/i18n/pt.json.js.map +1 -1
  67. package/build/i18n/pt.json.mjs +0 -2
  68. package/build/i18n/pt.json.mjs.map +1 -1
  69. package/build/i18n/ro.json +0 -2
  70. package/build/i18n/ro.json.js +0 -2
  71. package/build/i18n/ro.json.js.map +1 -1
  72. package/build/i18n/ro.json.mjs +0 -2
  73. package/build/i18n/ro.json.mjs.map +1 -1
  74. package/build/i18n/ru.json +0 -2
  75. package/build/i18n/ru.json.js +0 -2
  76. package/build/i18n/ru.json.js.map +1 -1
  77. package/build/i18n/ru.json.mjs +0 -2
  78. package/build/i18n/ru.json.mjs.map +1 -1
  79. package/build/i18n/th.json +0 -2
  80. package/build/i18n/th.json.js +0 -2
  81. package/build/i18n/th.json.js.map +1 -1
  82. package/build/i18n/th.json.mjs +0 -2
  83. package/build/i18n/th.json.mjs.map +1 -1
  84. package/build/i18n/tr.json +0 -2
  85. package/build/i18n/tr.json.js +0 -2
  86. package/build/i18n/tr.json.js.map +1 -1
  87. package/build/i18n/tr.json.mjs +0 -2
  88. package/build/i18n/tr.json.mjs.map +1 -1
  89. package/build/i18n/zh-CN.json +0 -2
  90. package/build/i18n/zh-CN.json.js +0 -2
  91. package/build/i18n/zh-CN.json.js.map +1 -1
  92. package/build/i18n/zh-CN.json.mjs +0 -2
  93. package/build/i18n/zh-CN.json.mjs.map +1 -1
  94. package/build/i18n/zh-HK.json +0 -2
  95. package/build/i18n/zh-HK.json.js +0 -2
  96. package/build/i18n/zh-HK.json.js.map +1 -1
  97. package/build/i18n/zh-HK.json.mjs +0 -2
  98. package/build/i18n/zh-HK.json.mjs.map +1 -1
  99. package/build/index.js +0 -2
  100. package/build/index.js.map +1 -1
  101. package/build/index.mjs +0 -1
  102. package/build/index.mjs.map +1 -1
  103. package/build/main.css +13 -45
  104. package/build/moneyInput/MoneyInput.js +2 -2
  105. package/build/moneyInput/MoneyInput.js.map +1 -1
  106. package/build/moneyInput/MoneyInput.mjs +2 -2
  107. package/build/moneyInput/MoneyInput.mjs.map +1 -1
  108. package/build/snackbar/Snackbar.js +1 -1
  109. package/build/snackbar/Snackbar.js.map +1 -1
  110. package/build/snackbar/Snackbar.mjs +1 -1
  111. package/build/snackbar/Snackbar.mjs.map +1 -1
  112. package/build/styles/dateInput/DateInput.css +13 -1
  113. package/build/styles/main.css +13 -45
  114. package/build/tabs/Tabs.js +3 -3
  115. package/build/tabs/Tabs.js.map +1 -1
  116. package/build/tabs/Tabs.mjs +3 -3
  117. package/build/tabs/Tabs.mjs.map +1 -1
  118. package/build/test-utils/assets/apple-pay-logo.svg +84 -0
  119. package/build/typeahead/Typeahead.js +2 -2
  120. package/build/typeahead/Typeahead.js.map +1 -1
  121. package/build/typeahead/Typeahead.mjs +2 -2
  122. package/build/typeahead/Typeahead.mjs.map +1 -1
  123. package/build/typeahead/typeaheadInput/TypeaheadInput.js +2 -2
  124. package/build/typeahead/typeaheadInput/TypeaheadInput.js.map +1 -1
  125. package/build/typeahead/typeaheadInput/TypeaheadInput.mjs +2 -2
  126. package/build/typeahead/typeaheadInput/TypeaheadInput.mjs.map +1 -1
  127. package/build/types/index.d.ts +0 -2
  128. package/build/types/index.d.ts.map +1 -1
  129. package/build/types/test-utils/fake-data.d.ts +2 -0
  130. package/build/types/test-utils/fake-data.d.ts.map +1 -1
  131. package/build/types/test-utils/index.d.ts +0 -4
  132. package/build/types/test-utils/index.d.ts.map +1 -1
  133. package/build/types/uploadInput/UploadInput.d.ts.map +1 -1
  134. package/build/upload/Upload.js +2 -2
  135. package/build/upload/Upload.js.map +1 -1
  136. package/build/upload/Upload.mjs +2 -2
  137. package/build/upload/Upload.mjs.map +1 -1
  138. package/build/upload/steps/uploadImageStep/uploadImageStep.js +1 -1
  139. package/build/upload/steps/uploadImageStep/uploadImageStep.js.map +1 -1
  140. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs +1 -1
  141. package/build/upload/steps/uploadImageStep/uploadImageStep.mjs.map +1 -1
  142. package/build/uploadInput/UploadInput.js +0 -1
  143. package/build/uploadInput/UploadInput.js.map +1 -1
  144. package/build/uploadInput/UploadInput.mjs +0 -1
  145. package/build/uploadInput/UploadInput.mjs.map +1 -1
  146. package/package.json +11 -11
  147. package/src/dateInput/DateInput.css +13 -1
  148. package/src/dateInput/DateInput.less +20 -3
  149. package/src/dateInput/DateInput.tests.story.tsx +14 -3
  150. package/src/dateInput/DateInput.tsx +4 -4
  151. package/src/i18n/cs.json +0 -2
  152. package/src/i18n/de.json +0 -2
  153. package/src/i18n/en.json +0 -2
  154. package/src/i18n/es.json +0 -2
  155. package/src/i18n/fr.json +0 -2
  156. package/src/i18n/hu.json +0 -2
  157. package/src/i18n/id.json +0 -2
  158. package/src/i18n/it.json +0 -2
  159. package/src/i18n/ja.json +0 -2
  160. package/src/i18n/nl.json +0 -2
  161. package/src/i18n/pl.json +0 -2
  162. package/src/i18n/pt.json +0 -2
  163. package/src/i18n/ro.json +0 -2
  164. package/src/i18n/ru.json +0 -2
  165. package/src/i18n/th.json +0 -2
  166. package/src/i18n/tr.json +0 -2
  167. package/src/i18n/zh-CN.json +0 -2
  168. package/src/i18n/zh-HK.json +0 -2
  169. package/src/index.ts +0 -2
  170. package/src/legacylistItem/LegacyListItem.story.tsx +5 -5
  171. package/src/legacylistItem/LegacyListItem.tests.story.tsx +6 -6
  172. package/src/main.css +13 -45
  173. package/src/main.less +0 -1
  174. package/src/ssr.spec.tsx +0 -1
  175. package/src/test-utils/assets/apple-pay-logo.svg +84 -0
  176. package/src/test-utils/fake-data.ts +5 -0
  177. package/src/uploadInput/UploadInput.tsx +4 -13
  178. package/build/selectOption/SelectOption.js +0 -131
  179. package/build/selectOption/SelectOption.js.map +0 -1
  180. package/build/selectOption/SelectOption.messages.js +0 -17
  181. package/build/selectOption/SelectOption.messages.js.map +0 -1
  182. package/build/selectOption/SelectOption.messages.mjs +0 -13
  183. package/build/selectOption/SelectOption.messages.mjs.map +0 -1
  184. package/build/selectOption/SelectOption.mjs +0 -127
  185. package/build/selectOption/SelectOption.mjs.map +0 -1
  186. package/build/styles/selectOption/SelectOption.css +0 -44
  187. package/build/types/selectOption/SelectOption.d.ts +0 -21
  188. package/build/types/selectOption/SelectOption.d.ts.map +0 -1
  189. package/build/types/selectOption/SelectOption.messages.d.ts +0 -12
  190. package/build/types/selectOption/SelectOption.messages.d.ts.map +0 -1
  191. package/build/types/selectOption/index.d.ts +0 -3
  192. package/build/types/selectOption/index.d.ts.map +0 -1
  193. package/src/selectOption/SelectOption.css +0 -44
  194. package/src/selectOption/SelectOption.less +0 -40
  195. package/src/selectOption/SelectOption.messages.ts +0 -12
  196. package/src/selectOption/SelectOption.spec.tsx +0 -83
  197. package/src/selectOption/SelectOption.story.tsx +0 -277
  198. package/src/selectOption/SelectOption.tsx +0 -151
  199. package/src/selectOption/index.ts +0 -2
@@ -1 +1 @@
1
- {"version":3,"file":"MoneyInput.mjs","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
1
+ {"version":3,"file":"MoneyInput.mjs","sources":["../../src/moneyInput/MoneyInput.tsx"],"sourcesContent":["import { isEmpty, isNumber, isNull } from '@transferwise/neptune-validation';\nimport { Flag } from '@wise/art';\nimport { clsx } from 'clsx';\nimport { Component } from 'react';\nimport { injectIntl, WrappedComponentProps } from 'react-intl';\n\nimport { Typography, Size, SizeLarge, SizeMedium, SizeSmall } from '../common';\nimport { withInputAttributes, WithInputAttributesProps } from '../inputs/contexts';\nimport { Input } from '../inputs/Input';\nimport {\n SelectInput,\n SelectInputItem,\n SelectInputOptionContent,\n SelectInputOptionItem,\n SelectInputProps,\n} from '../inputs/SelectInput';\nimport Title from '../title';\n\nimport messages from './MoneyInput.messages';\nimport { formatAmount, parseAmount } from './currencyFormatting';\nimport withId from '../withId';\n\nexport interface CurrencyOptionItem {\n header?: never;\n value: string;\n label: string;\n currency: string;\n note?: string;\n searchable?: string;\n}\n\nexport interface CurrencyHeaderItem {\n header: string;\n}\n\nexport type CurrencyItem = CurrencyOptionItem | CurrencyHeaderItem;\n\nconst isNumberOrNull = (v: unknown): v is number | null => isNumber(v) || isNull(v);\n\nconst formatAmountIfSet = ({\n amount,\n currency,\n locale,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n}) => {\n return typeof amount === 'number' ? formatAmount(amount, currency, locale) : '';\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n}: {\n amount: string;\n currency: string;\n locale: string;\n}) => {\n return parseAmount(amount, currency, locale);\n};\n\nconst allowedInputKeys = new Set([\n 'Backspace',\n 'Delete',\n ',',\n '.',\n 'ArrowDown',\n 'ArrowUp',\n 'ArrowLeft',\n 'ArrowRight',\n 'Enter',\n 'Escape',\n 'Tab',\n]);\n\nexport interface MoneyInputProps extends WrappedComponentProps {\n id?: string;\n 'aria-labelledby'?: string;\n currencies: readonly CurrencyItem[];\n selectedCurrency: CurrencyOptionItem;\n onCurrencyChange?: (value: CurrencyOptionItem) => void;\n placeholder?: number;\n amount: number | null;\n size?: SizeSmall | SizeMedium | SizeLarge;\n onAmountChange?: (value: number | null) => void;\n addon?: React.ReactNode;\n searchPlaceholder?: string;\n /**\n * Allows the consumer to react to searching, while the search itself is handled internally.\n */\n onSearchChange?: (value: { searchQuery: string; filteredOptions: CurrencyItem[] }) => void;\n customActionLabel?: React.ReactNode;\n onCustomAction?: () => void;\n classNames?: Record<string, string>;\n selectProps?: Partial<SelectInputProps<CurrencyOptionItem>>;\n}\n\nexport type MoneyInputPropsWithInputAttributes = MoneyInputProps &\n Partial<WithInputAttributesProps>;\n\ninterface MoneyInputState {\n searchQuery: string;\n formattedAmount: string;\n locale: string;\n}\n\nclass MoneyInput extends Component<MoneyInputPropsWithInputAttributes, MoneyInputState> {\n declare props: MoneyInputPropsWithInputAttributes &\n Required<Pick<MoneyInputPropsWithInputAttributes, keyof typeof MoneyInput.defaultProps>>;\n\n static defaultProps = {\n size: Size.LARGE,\n classNames: {},\n selectProps: {},\n } satisfies Partial<MoneyInputPropsWithInputAttributes>;\n\n amountFocused = false;\n\n constructor(props: MoneyInputProps) {\n super(props);\n this.state = {\n searchQuery: '',\n formattedAmount: formatAmountIfSet({\n amount: props.amount,\n currency: props.selectedCurrency.currency,\n locale: props.intl.locale,\n }),\n locale: props.intl.locale,\n };\n }\n\n UNSAFE_componentWillReceiveProps(nextProps: MoneyInputProps) {\n this.setState({ locale: nextProps.intl.locale });\n\n if (!this.amountFocused) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: nextProps.amount,\n currency: nextProps.selectedCurrency.currency,\n locale: nextProps.intl.locale,\n }),\n });\n }\n }\n\n isInputAllowedForKeyEvent = (event: React.KeyboardEvent<HTMLInputElement>) => {\n const { metaKey, key, ctrlKey } = event;\n const isNumberKey = isNumber(Number.parseInt(key, 10));\n\n return isNumberKey || metaKey || ctrlKey || allowedInputKeys.has(key);\n };\n\n handleKeyDown: React.KeyboardEventHandler<HTMLInputElement> = (event) => {\n if (!this.isInputAllowedForKeyEvent(event)) {\n event.preventDefault();\n }\n };\n\n handlePaste: React.ClipboardEventHandler<HTMLInputElement> = (event) => {\n const paste = event.clipboardData.getData('text');\n const { locale } = this.state;\n const parsed = isEmpty(paste)\n ? null\n : parseNumber({\n amount: paste,\n currency: this.props.selectedCurrency.currency,\n locale,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n }),\n });\n this.props.onAmountChange?.(parsed);\n }\n\n event.preventDefault();\n };\n\n onAmountChange: React.ChangeEventHandler<HTMLInputElement> = (event) => {\n const { value } = event.target;\n this.setState({\n formattedAmount: value,\n });\n const parsed = isEmpty(value)\n ? null\n : parseNumber({\n amount: value,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n });\n if (isNumberOrNull(parsed)) {\n this.props.onAmountChange?.(parsed);\n }\n };\n\n onAmountBlur = () => {\n this.amountFocused = false;\n this.setAmount();\n };\n\n onAmountFocus = () => {\n this.amountFocused = true;\n };\n\n getSelectOptions() {\n const selectOptions = filterCurrenciesForQuery(this.props.currencies, this.state.searchQuery);\n\n const formattedOptions: SelectInputItem<CurrencyOptionItem>[] = [];\n let currentGroupOptions: SelectInputOptionItem<CurrencyOptionItem>[] | undefined;\n\n selectOptions.forEach((item) => {\n if (item.header != null) {\n currentGroupOptions = [];\n formattedOptions.push({\n type: 'group',\n label: item.header,\n options: currentGroupOptions,\n });\n } else {\n (currentGroupOptions ?? formattedOptions).push({\n type: 'option',\n value: item,\n filterMatchers: [item.value, item.label, item.note ?? '', item.searchable ?? ''],\n });\n }\n });\n\n return formattedOptions;\n }\n\n setAmount() {\n this.setState((previousState) => {\n const parsed = parseNumber({\n amount: previousState.formattedAmount,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n });\n if (!isNumberOrNull(parsed)) {\n return {\n formattedAmount: previousState.formattedAmount,\n };\n }\n return {\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale: previousState.locale,\n }),\n };\n });\n }\n\n handleSelectChange = (value: CurrencyOptionItem) => {\n this.handleSearchChange('');\n this.props.onCurrencyChange?.(value);\n };\n\n handleSearchChange = (searchQuery: string) => {\n this.setState({ searchQuery });\n this.props.onSearchChange?.({\n searchQuery,\n filteredOptions: filterCurrenciesForQuery(this.props.currencies, searchQuery),\n });\n };\n\n style = (className: string) => this.props.classNames[className] || className;\n\n render() {\n const {\n inputAttributes,\n id: amountInputId,\n 'aria-labelledby': ariaLabelledByProp,\n selectedCurrency,\n onCurrencyChange,\n size,\n addon,\n selectProps,\n } = this.props;\n const ariaLabelledBy = ariaLabelledByProp ?? inputAttributes?.['aria-labelledby'];\n const selectOptions = this.getSelectOptions();\n\n const hasSingleCurrency = () => {\n if (selectOptions.length !== 0) {\n const firstItem = selectOptions[0];\n\n if (selectOptions.length === 1) {\n if (firstItem.type === 'option') {\n return firstItem.value.currency === selectedCurrency.currency;\n }\n if (firstItem.type === 'group') {\n return (\n firstItem.options.length === 1 &&\n !(this.props.onCustomAction && this.props.customActionLabel)\n );\n }\n }\n } else if (selectedCurrency?.currency) {\n return true;\n }\n\n return false;\n };\n\n const isFixedCurrency = (!this.state.searchQuery && hasSingleCurrency()) || !onCurrencyChange;\n const disabled = !this.props.onAmountChange;\n const selectedCurrencyElementId = `${inputAttributes?.id ?? amountInputId}SelectedCurrency`;\n\n return (\n <div\n role=\"group\"\n {...inputAttributes}\n aria-labelledby={ariaLabelledBy}\n className={clsx(\n this.style('tw-money-input'),\n this.style('input-group'),\n this.style(`input-group-${size}`),\n )}\n >\n <Input\n id={amountInputId}\n value={this.state.formattedAmount}\n inputMode=\"decimal\"\n disabled={disabled}\n placeholder={formatAmountIfSet({\n amount: this.props.placeholder,\n currency: this.props.selectedCurrency.currency,\n locale: this.state.locale,\n })}\n autoComplete=\"off\"\n aria-describedby={selectedCurrencyElementId}\n onKeyDown={this.handleKeyDown}\n onChange={this.onAmountChange}\n onFocus={this.onAmountFocus}\n onBlur={this.onAmountBlur}\n onPaste={this.handlePaste}\n />\n {addon && (\n <span\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n disabled ? this.style('disabled') : '',\n )}\n >\n {addon}\n </span>\n )}\n {isFixedCurrency ? (\n <div\n className={clsx(\n this.style('input-group-addon'),\n this.style(`input-${size}`),\n this.style('tw-money-input__fixed-currency'),\n disabled ? this.style('disabled') : '',\n )}\n id={selectedCurrencyElementId}\n >\n {(size === 'lg' || size === 'md') && (\n <span className={clsx(this.style('money-input-currency-flag'), this.style('m-r-2'))}>\n <Flag code={selectedCurrency.currency.toLowerCase()} intrinsicSize={24} />\n </span>\n )}\n <Title\n as=\"span\"\n type={Typography.TITLE_SUBSECTION}\n className={size === 'lg' ? this.style('m-r-1') : ''}\n >\n {selectedCurrency.currency.toUpperCase()}\n </Title>\n </div>\n ) : (\n <div\n translate=\"no\"\n className={clsx(\n this.style('input-group-btn'),\n this.style('amount-currency-select-btn'),\n )}\n >\n <SelectInput\n UNSAFE_triggerButtonProps={{\n id: undefined,\n 'aria-labelledby': undefined,\n 'aria-describedby': ariaLabelledBy,\n 'aria-invalid': undefined,\n 'aria-label': this.props.intl.formatMessage(messages.selectCurrencyLabel),\n }}\n id={selectedCurrencyElementId}\n items={selectOptions}\n value={selectedCurrency}\n compareValues=\"currency\"\n renderValue={(currency, withinTrigger) => {\n return (\n <SelectInputOptionContent\n title={withinTrigger ? currency.currency.toUpperCase() : currency.label}\n note={withinTrigger ? undefined : currency.note}\n icon={<Flag code={currency.currency} intrinsicSize={24} />}\n />\n );\n }}\n renderFooter={\n this.props.onCustomAction\n ? () => (\n // eslint-disable-next-line jsx-a11y/click-events-have-key-events\n <div role=\"button\" tabIndex={0} onClick={this.props.onCustomAction}>\n {this.props.customActionLabel}\n </div>\n )\n : undefined\n }\n placeholder={this.props.intl.formatMessage(messages.selectPlaceholder)}\n filterable\n filterPlaceholder={\n this.props.searchPlaceholder ||\n this.props.intl.formatMessage(messages.searchPlaceholder)\n }\n disabled={disabled}\n size={size}\n onChange={this.handleSelectChange}\n onFilterChange={({ queryNormalized }) => {\n this.handleSearchChange(queryNormalized ?? '');\n }}\n {...selectProps}\n />\n </div>\n )}\n </div>\n );\n }\n}\n\nfunction filterCurrenciesForQuery(\n currencies: readonly CurrencyItem[],\n query: string,\n): CurrencyItem[] {\n if (!query) {\n return [...currencies];\n }\n\n const options = currencies.filter(\n (option): option is CurrencyOptionItem => option.header == null,\n );\n const filteredOptions = removeDuplicateValueOptions(options).filter((option) =>\n currencyOptionFitsQuery(option, query),\n );\n\n return sortOptionsLabelsToFirst(filteredOptions, query);\n}\n\nfunction removeDuplicateValueOptions(options: readonly CurrencyOptionItem[]) {\n const uniqueValues = new Set<string>();\n return options.filter((option) => {\n if (!uniqueValues.has(option.value)) {\n uniqueValues.add(option.value);\n return true;\n }\n return false;\n });\n}\n\nfunction currencyOptionFitsQuery(option: CurrencyOptionItem, query: string) {\n if (!option.value) {\n return false;\n }\n\n return (\n contains(option.label, query) ||\n contains(option.searchable, query) ||\n contains(option.note, query)\n );\n}\n\nfunction contains(property: string | undefined, query: string) {\n return property?.toLowerCase().includes(query.toLowerCase());\n}\n\nfunction sortOptionsLabelsToFirst(options: readonly CurrencyOptionItem[], query: string) {\n return [...options].sort((first, second) => {\n const firstContains = contains(first.label, query);\n const secondContains = contains(second.label, query);\n\n if (firstContains && secondContains) {\n return 0;\n }\n if (firstContains) {\n return -1;\n }\n if (secondContains) {\n return 1;\n }\n return 0;\n });\n}\n\nexport default injectIntl(withId(withInputAttributes(MoneyInput, { nonLabelable: true })));\n"],"names":["isNumberOrNull","v","isNumber","isNull","formatAmountIfSet","amount","currency","locale","formatAmount","parseNumber","parseAmount","allowedInputKeys","Set","MoneyInput","Component","defaultProps","size","Size","LARGE","classNames","selectProps","amountFocused","constructor","props","state","searchQuery","formattedAmount","selectedCurrency","intl","UNSAFE_componentWillReceiveProps","nextProps","setState","isInputAllowedForKeyEvent","event","metaKey","key","ctrlKey","isNumberKey","Number","parseInt","has","handleKeyDown","preventDefault","handlePaste","paste","clipboardData","getData","parsed","isEmpty","onAmountChange","value","target","onAmountBlur","setAmount","onAmountFocus","getSelectOptions","selectOptions","filterCurrenciesForQuery","currencies","formattedOptions","currentGroupOptions","forEach","item","header","push","type","label","options","filterMatchers","note","searchable","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","disabled","selectedCurrencyElementId","_jsxs","role","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","tabIndex","onClick","selectPlaceholder","filterable","filterPlaceholder","searchPlaceholder","onFilterChange","queryNormalized","query","filter","option","removeDuplicateValueOptions","currencyOptionFitsQuery","sortOptionsLabelsToFirst","uniqueValues","add","contains","property","includes","sort","first","second","firstContains","secondContains","injectIntl","withId","withInputAttributes","nonLabelable"],"mappings":"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"}
@@ -12,7 +12,7 @@ var jsxRuntime = require('react/jsx-runtime');
12
12
 
13
13
  const CSS_TRANSITION_DURATION = 400;
14
14
  class Snackbar extends React.Component {
15
- bodyRef = (() => /*#__PURE__*/React.createRef())();
15
+ bodyRef = /*#__PURE__*/React.createRef();
16
16
  timeout = 0;
17
17
  transitionTimeout = 0;
18
18
  constructor(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.js","sources":["../../src/snackbar/Snackbar.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../button';\nimport Body from '../body';\nimport { Theme, type ThemeDark, type ThemeLight } from '../common';\nimport { DirectionContext } from '../provider/direction';\nimport withNextPortal from '../withNextPortal/withNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text' | 'theme'> {\n visible: boolean;\n}\n\nexport class Snackbar extends Component<SnackbarProps, SnackbarState> {\n bodyRef = createRef<HTMLSpanElement>();\n timeout = 0;\n transitionTimeout = 0;\n\n constructor(props: SnackbarProps) {\n super(props);\n this.state = {\n visible: false,\n text: '',\n };\n }\n\n componentWillUnmount() {\n window.clearTimeout(this.timeout);\n window.clearTimeout(this.transitionTimeout);\n }\n\n shouldComponentUpdate(nextProps: SnackbarProps, nextState: SnackbarState) {\n if (!nextProps.text) {\n return false;\n }\n if (\n nextProps.timestamp === this.props.timestamp &&\n nextState.visible === this.state.visible &&\n nextState.text === this.state.text\n ) {\n return false;\n }\n\n return true;\n }\n\n setLeaveTimeout = () => {\n const { timeout } = this.props;\n\n this.timeout = window.setTimeout(() => {\n this.setState({ visible: false });\n }, timeout);\n };\n\n componentDidUpdate(previousProps: SnackbarProps) {\n const { action, text, timestamp } = this.props;\n\n if (!previousProps.text) {\n this.setState({ visible: true, action, text }, () => {\n this.setLeaveTimeout();\n });\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(this.timeout);\n\n if (this.state.visible) {\n this.setState({ visible: false }, () => {\n this.transitionTimeout = window.setTimeout(() => {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }, CSS_TRANSITION_DURATION);\n });\n } else {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }\n }\n }\n\n render() {\n const { action, text, visible } = this.state;\n const { timeout } = this.props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={this.bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={this.bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n }\n}\n\nSnackbar.contextType = DirectionContext;\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","Component","bodyRef","createRef","timeout","transitionTimeout","constructor","props","state","visible","text","componentWillUnmount","window","clearTimeout","shouldComponentUpdate","nextProps","nextState","timestamp","setLeaveTimeout","setTimeout","setState","componentDidUpdate","previousProps","action","render","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","contextType","DirectionContext","withNextPortal"],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar.js","sources":["../../src/snackbar/Snackbar.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../button';\nimport Body from '../body';\nimport { Theme, type ThemeDark, type ThemeLight } from '../common';\nimport { DirectionContext } from '../provider/direction';\nimport withNextPortal from '../withNextPortal/withNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text' | 'theme'> {\n visible: boolean;\n}\n\nexport class Snackbar extends Component<SnackbarProps, SnackbarState> {\n bodyRef = createRef<HTMLSpanElement>();\n timeout = 0;\n transitionTimeout = 0;\n\n constructor(props: SnackbarProps) {\n super(props);\n this.state = {\n visible: false,\n text: '',\n };\n }\n\n componentWillUnmount() {\n window.clearTimeout(this.timeout);\n window.clearTimeout(this.transitionTimeout);\n }\n\n shouldComponentUpdate(nextProps: SnackbarProps, nextState: SnackbarState) {\n if (!nextProps.text) {\n return false;\n }\n if (\n nextProps.timestamp === this.props.timestamp &&\n nextState.visible === this.state.visible &&\n nextState.text === this.state.text\n ) {\n return false;\n }\n\n return true;\n }\n\n setLeaveTimeout = () => {\n const { timeout } = this.props;\n\n this.timeout = window.setTimeout(() => {\n this.setState({ visible: false });\n }, timeout);\n };\n\n componentDidUpdate(previousProps: SnackbarProps) {\n const { action, text, timestamp } = this.props;\n\n if (!previousProps.text) {\n this.setState({ visible: true, action, text }, () => {\n this.setLeaveTimeout();\n });\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(this.timeout);\n\n if (this.state.visible) {\n this.setState({ visible: false }, () => {\n this.transitionTimeout = window.setTimeout(() => {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }, CSS_TRANSITION_DURATION);\n });\n } else {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }\n }\n }\n\n render() {\n const { action, text, visible } = this.state;\n const { timeout } = this.props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={this.bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={this.bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n }\n}\n\nSnackbar.contextType = DirectionContext;\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","Component","bodyRef","createRef","timeout","transitionTimeout","constructor","props","state","visible","text","componentWillUnmount","window","clearTimeout","shouldComponentUpdate","nextProps","nextState","timestamp","setLeaveTimeout","setTimeout","setState","componentDidUpdate","previousProps","action","render","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","contextType","DirectionContext","withNextPortal"],"mappings":"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"}
@@ -8,7 +8,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
8
8
 
9
9
  const CSS_TRANSITION_DURATION = 400;
10
10
  class Snackbar extends Component {
11
- bodyRef = (() => /*#__PURE__*/createRef())();
11
+ bodyRef = /*#__PURE__*/createRef();
12
12
  timeout = 0;
13
13
  transitionTimeout = 0;
14
14
  constructor(props) {
@@ -1 +1 @@
1
- {"version":3,"file":"Snackbar.mjs","sources":["../../src/snackbar/Snackbar.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../button';\nimport Body from '../body';\nimport { Theme, type ThemeDark, type ThemeLight } from '../common';\nimport { DirectionContext } from '../provider/direction';\nimport withNextPortal from '../withNextPortal/withNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text' | 'theme'> {\n visible: boolean;\n}\n\nexport class Snackbar extends Component<SnackbarProps, SnackbarState> {\n bodyRef = createRef<HTMLSpanElement>();\n timeout = 0;\n transitionTimeout = 0;\n\n constructor(props: SnackbarProps) {\n super(props);\n this.state = {\n visible: false,\n text: '',\n };\n }\n\n componentWillUnmount() {\n window.clearTimeout(this.timeout);\n window.clearTimeout(this.transitionTimeout);\n }\n\n shouldComponentUpdate(nextProps: SnackbarProps, nextState: SnackbarState) {\n if (!nextProps.text) {\n return false;\n }\n if (\n nextProps.timestamp === this.props.timestamp &&\n nextState.visible === this.state.visible &&\n nextState.text === this.state.text\n ) {\n return false;\n }\n\n return true;\n }\n\n setLeaveTimeout = () => {\n const { timeout } = this.props;\n\n this.timeout = window.setTimeout(() => {\n this.setState({ visible: false });\n }, timeout);\n };\n\n componentDidUpdate(previousProps: SnackbarProps) {\n const { action, text, timestamp } = this.props;\n\n if (!previousProps.text) {\n this.setState({ visible: true, action, text }, () => {\n this.setLeaveTimeout();\n });\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(this.timeout);\n\n if (this.state.visible) {\n this.setState({ visible: false }, () => {\n this.transitionTimeout = window.setTimeout(() => {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }, CSS_TRANSITION_DURATION);\n });\n } else {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }\n }\n }\n\n render() {\n const { action, text, visible } = this.state;\n const { timeout } = this.props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={this.bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={this.bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n }\n}\n\nSnackbar.contextType = DirectionContext;\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","Component","bodyRef","createRef","timeout","transitionTimeout","constructor","props","state","visible","text","componentWillUnmount","window","clearTimeout","shouldComponentUpdate","nextProps","nextState","timestamp","setLeaveTimeout","setTimeout","setState","componentDidUpdate","previousProps","action","render","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","contextType","DirectionContext","withNextPortal"],"mappings":"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"}
1
+ {"version":3,"file":"Snackbar.mjs","sources":["../../src/snackbar/Snackbar.tsx"],"sourcesContent":["import { Component, createRef } from 'react';\nimport { CSSTransition } from 'react-transition-group';\n\nimport Button from '../button';\nimport Body from '../body';\nimport { Theme, type ThemeDark, type ThemeLight } from '../common';\nimport { DirectionContext } from '../provider/direction';\nimport withNextPortal from '../withNextPortal/withNextPortal';\n\nconst CSS_TRANSITION_DURATION = 400;\n\nexport interface SnackbarProps {\n action?: {\n label: string;\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n };\n text: React.ReactNode;\n /** @deprecated */\n theme?: ThemeLight | ThemeDark;\n timeout: number;\n timestamp: number;\n}\n\ninterface SnackbarState extends Pick<SnackbarProps, 'action' | 'text' | 'theme'> {\n visible: boolean;\n}\n\nexport class Snackbar extends Component<SnackbarProps, SnackbarState> {\n bodyRef = createRef<HTMLSpanElement>();\n timeout = 0;\n transitionTimeout = 0;\n\n constructor(props: SnackbarProps) {\n super(props);\n this.state = {\n visible: false,\n text: '',\n };\n }\n\n componentWillUnmount() {\n window.clearTimeout(this.timeout);\n window.clearTimeout(this.transitionTimeout);\n }\n\n shouldComponentUpdate(nextProps: SnackbarProps, nextState: SnackbarState) {\n if (!nextProps.text) {\n return false;\n }\n if (\n nextProps.timestamp === this.props.timestamp &&\n nextState.visible === this.state.visible &&\n nextState.text === this.state.text\n ) {\n return false;\n }\n\n return true;\n }\n\n setLeaveTimeout = () => {\n const { timeout } = this.props;\n\n this.timeout = window.setTimeout(() => {\n this.setState({ visible: false });\n }, timeout);\n };\n\n componentDidUpdate(previousProps: SnackbarProps) {\n const { action, text, timestamp } = this.props;\n\n if (!previousProps.text) {\n this.setState({ visible: true, action, text }, () => {\n this.setLeaveTimeout();\n });\n } else if (previousProps.timestamp !== timestamp) {\n window.clearTimeout(this.timeout);\n\n if (this.state.visible) {\n this.setState({ visible: false }, () => {\n this.transitionTimeout = window.setTimeout(() => {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }, CSS_TRANSITION_DURATION);\n });\n } else {\n this.setState({ visible: true, action, text });\n this.setLeaveTimeout();\n }\n }\n }\n\n render() {\n const { action, text, visible } = this.state;\n const { timeout } = this.props;\n\n return (\n <div className=\"snackbar\" aria-live=\"assertive\" role=\"alert\">\n <CSSTransition\n nodeRef={this.bodyRef}\n in={visible}\n classNames=\"snackbar__text-container\"\n timeout={{\n appear: 0,\n enter: timeout,\n exit: CSS_TRANSITION_DURATION,\n }}\n unmountOnExit\n >\n <Body ref={this.bodyRef} as=\"span\" className=\"snackbar__text\">\n {text}\n {action ? (\n <Button className=\"snackbar__text__action\" v2 size=\"sm\" onClick={action.onClick}>\n {action.label}\n </Button>\n ) : null}\n </Body>\n </CSSTransition>\n </div>\n );\n }\n}\n\nSnackbar.contextType = DirectionContext;\n\nexport default withNextPortal(Snackbar);\n"],"names":["CSS_TRANSITION_DURATION","Snackbar","Component","bodyRef","createRef","timeout","transitionTimeout","constructor","props","state","visible","text","componentWillUnmount","window","clearTimeout","shouldComponentUpdate","nextProps","nextState","timestamp","setLeaveTimeout","setTimeout","setState","componentDidUpdate","previousProps","action","render","_jsx","className","role","children","CSSTransition","nodeRef","in","classNames","appear","enter","exit","unmountOnExit","_jsxs","Body","ref","as","Button","v2","size","onClick","label","contextType","DirectionContext","withNextPortal"],"mappings":"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"}
@@ -1,4 +1,16 @@
1
- .np-theme-personal .tw-date label {
1
+ .tw-date label {
2
2
  width: 100%;
3
+ }
4
+ .tw-date .tw-date--year label {
5
+ margin-bottom: 0;
6
+ }
7
+ .tw-date .tw-date--year,
8
+ .tw-date .tw-date--month,
9
+ .tw-date .tw-date--day {
3
10
  margin-bottom: 0;
4
11
  }
12
+ @media (min-width: 576px) {
13
+ .np-theme-personal .tw-date label {
14
+ margin-bottom: 0;
15
+ }
16
+ }
@@ -1789,50 +1789,6 @@ button.np-option {
1789
1789
  margin-top: -3px;
1790
1790
  }
1791
1791
  }
1792
- .np-select-option {
1793
- border-radius: 10px;
1794
- border-radius: var(--radius-small);
1795
- padding: 16px;
1796
- padding: var(--size-16);
1797
- }
1798
- .np-select-option-placeholder {
1799
- background-color: rgba(134,167,189,0.10196);
1800
- background-color: var(--color-background-neutral);
1801
- }
1802
- .np-select-option-placeholder:not(.disabled):hover {
1803
- background-color: var(--color-background-neutral-hover);
1804
- }
1805
- .np-select-option-placeholder:not(.disabled):focus,
1806
- .np-select-option-placeholder:not(.disabled):active {
1807
- background-color: var(--color-background-neutral-active);
1808
- }
1809
- .np-select-option-selected {
1810
- border: 1px solid #c9cbce;
1811
- border: 1px solid var(--color-interactive-secondary);
1812
- }
1813
- .np-select-option-list {
1814
- max-height: 350px;
1815
- overflow-y: auto;
1816
- }
1817
- .np-select-option-list > .np-section {
1818
- margin-top: 0;
1819
- }
1820
- .has-error * .np-select-option {
1821
- --ring-outline-color: var(--color-sentiment-negative);
1822
- --ring-outline-width: 3px;
1823
- --ring-outline-offset: calc(-1 * var(--ring-outline-width));
1824
- outline: var(--ring-outline-color) solid 3px;
1825
- outline: var(--ring-outline-color) solid var(--ring-outline-width);
1826
- outline-offset: calc(-1 * 3px);
1827
- outline-offset: var(--ring-outline-offset);
1828
- }
1829
- .has-error * .np-select-option:focus {
1830
- outline: none;
1831
- }
1832
- .has-error * .np-select-option:focus-visible {
1833
- outline: var(--ring-outline-color) solid var(--ring-outline-width);
1834
- outline-offset: var(--ring-outline-offset);
1835
- }
1836
1792
  .np-panel__content {
1837
1793
  opacity: 0;
1838
1794
  visibility: hidden;
@@ -1910,10 +1866,22 @@ button.np-option {
1910
1866
  border-color: rgba(0,0,0,0.10196);
1911
1867
  border-color: var(--color-border-neutral);
1912
1868
  }
1913
- .np-theme-personal .tw-date label {
1869
+ .tw-date label {
1914
1870
  width: 100%;
1871
+ }
1872
+ .tw-date .tw-date--year label {
1915
1873
  margin-bottom: 0;
1916
1874
  }
1875
+ .tw-date .tw-date--year,
1876
+ .tw-date .tw-date--month,
1877
+ .tw-date .tw-date--day {
1878
+ margin-bottom: 0;
1879
+ }
1880
+ @media (min-width: 576px) {
1881
+ .np-theme-personal .tw-date label {
1882
+ margin-bottom: 0;
1883
+ }
1884
+ }
1917
1885
  .tw-date-lookup-menu {
1918
1886
  width: 400px;
1919
1887
  }
@@ -48,12 +48,12 @@ const SpacerWidth = {
48
48
  lg: 32
49
49
  };
50
50
  class Tabs extends React.Component {
51
- static defaultProps = (() => ({
51
+ static defaultProps = {
52
52
  changeTabOnSwipe: true,
53
53
  transitionSpacing: 'default',
54
54
  headerWidth: width.Width.BLOCK
55
- }))();
56
- containerReference = (() => /*#__PURE__*/React.createRef())();
55
+ };
56
+ containerReference = /*#__PURE__*/React.createRef();
57
57
  constructor(props) {
58
58
  super(props);
59
59
  this.state = {
@@ -1 +1 @@
1
- {"version":3,"file":"Tabs.js","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { Spring, animated } from '@react-spring/web';\nimport { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef, Fragment } from 'react';\n\nimport { Size, Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getElasticDragDifference,\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n getVelocity,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\ntype TabsTransitionSpacing =\n | 'default'\n | `${Size.EXTRA_SMALL | Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n animatePanelsOnClick?: boolean;\n changeTabOnSwipe?: boolean;\n className?: string;\n transitionSpacing?: TabsTransitionSpacing;\n headerWidth?: `${Width}`;\n id?: string;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateX: number;\n translateFrom: number;\n translateTo: number;\n translateLineX: string | null;\n isAnimating: boolean;\n isSwiping: boolean;\n isScrolling: boolean;\n lastSwipeVelocity: number;\n fullWidthTabs: boolean;\n currentSwipe: Swipe[];\n selectedTabIndex: number;\n}\n\nconst SpacerWidth = {\n default: 0,\n xs: 8,\n sm: 16,\n md: 24,\n lg: 32,\n} satisfies Record<TabsTransitionSpacing, number>;\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n transitionSpacing: 'default',\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateX: 0,\n translateFrom: 0,\n translateTo: 0,\n translateLineX: null,\n isAnimating: false,\n isSwiping: false,\n isScrolling: false,\n lastSwipeVelocity: 0,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n currentSwipe: [],\n selectedTabIndex: props.selected,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get filteredTabsLength() {\n return this.props.tabs.filter((tab) => !tab.disabled).length;\n }\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateToTab(clamp(selected, MIN_INDEX, this.MAX_INDEX), true);\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps, previousState: TabsState) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n const { animatePanelsOnClick } = this.props;\n const instantOnClick = !animatePanelsOnClick && !previousState.isSwiping;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateToTab(\n clamp(currentSelected, MIN_INDEX, this.MAX_INDEX),\n currentSelected === previousSelected || instantOnClick,\n );\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n\n this.setState(({ selectedTabIndex }) => ({\n translateTo: -(this.containerWidth * selectedTabIndex),\n }));\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n calculateApplicableDragDifference = ({\n currentSelected,\n nextSelected,\n start,\n end,\n }: {\n currentSelected: number;\n nextSelected: number;\n start: Swipe;\n end: Swipe;\n }) => {\n const difference = getSwipeDifference(start, end);\n const elasticDrag = getElasticDragDifference(difference);\n\n if (swipedLeftToRight(start, end)) {\n if (currentSelected > MIN_INDEX && currentSelected !== nextSelected) {\n return Math.min(difference, this.containerWidth);\n }\n return elasticDrag;\n }\n if (swipedRightToLeft(start, end)) {\n if (currentSelected < this.MAX_INDEX && currentSelected !== nextSelected) {\n return -Math.min(difference, this.containerWidth);\n }\n return -elasticDrag;\n }\n\n return false;\n };\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n getTabIndexWithoutDisabledTabs(index: number) {\n return index - this.props.tabs.slice(0, index).filter((tab) => tab.disabled).length;\n }\n\n animateToTab = (index: number, instant?: boolean) => {\n this.animateLine(index);\n\n this.animatePanel(this.getTabIndexWithoutDisabledTabs(index), instant);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n // Pass `instant` to set the `translateX` to the new panel with no transition\n animatePanel = (index: number, instant = false) => {\n const { translateTo: currentTranslateTo } = this.state;\n\n const translateFrom = currentTranslateTo;\n const translateTo = -(this.containerWidth * index);\n\n this.setState({\n selectedTabIndex: index,\n isAnimating: !instant && translateFrom !== translateTo,\n translateFrom,\n translateTo,\n });\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n currentSwipe: [start],\n });\n\n event.persist();\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const selected = this.getTabIndexWithoutDisabledTabs(currentSelectedFromProps);\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n event.persist();\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n\n const dragDifference = this.calculateApplicableDragDifference({\n currentSelected: currentSelectedFromProps,\n nextSelected,\n start,\n end,\n });\n\n const translateX = dragDifference\n ? -(this.containerWidth * selected) + dragDifference\n : false;\n\n this.setState((state) => ({\n currentSwipe: [...state.currentSwipe, end],\n translateFrom: translateX || state.translateFrom,\n translateTo: translateX || state.translateTo,\n }));\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const velocity = getVelocity([...this.state.currentSwipe, end]);\n\n this.setState({\n currentSwipe: [],\n });\n\n let nextSelected = selected;\n\n event.persist();\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n\n this.setState({\n lastSwipeVelocity: velocity,\n });\n } else {\n this.animateToTab(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, transitionSpacing, headerWidth } =\n this.props;\n const {\n isSwiping,\n translateLineX,\n isAnimating,\n translateFrom,\n translateTo,\n lastSwipeVelocity,\n fullWidthTabs,\n } = this.state;\n\n const spacer = SpacerWidth[transitionSpacing];\n\n const tabsLength = this.filteredTabsLength;\n\n const distanceSwiped = Math.abs(-translateFrom - this.containerWidth * selected);\n\n const remainingContainerToTravel = isSwiping\n ? 1 - distanceSwiped / this.containerWidth\n : 1 - Math.abs(distanceSwiped / this.containerWidth - 1);\n\n const restrictedVelocity =\n (Number.isNaN(remainingContainerToTravel) ? 0 : remainingContainerToTravel) *\n Math.min(10 * Math.E, lastSwipeVelocity * 10 * Math.E);\n\n const hidePanelOverflow = isAnimating || isSwiping;\n\n const sliderWidth = tabsLength * this.containerWidth + spacer * 2;\n\n // Uses `props.panelTransitionSpacing` to add a spacer in-between the `TabPanel` you're transitioning to/from\n const Spacer = ({ id }: { id: string }) =>\n spacer > 0 && (\n <div\n key={id}\n style={{\n width: spacer,\n display: hidePanelOverflow ? 'block' : 'none',\n }}\n />\n );\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div\n ref={this.setContainerRefAndWidth}\n className=\"tabs__panel-container\"\n style={{\n overflow: hidePanelOverflow ? 'hidden' : 'visible',\n }}\n >\n <Spring\n from={{\n transform: `translateX(${translateFrom - spacer}px)`,\n }}\n to={{\n transform: `translateX(${translateTo - spacer}px)`,\n }}\n config={{\n precision: isSwiping ? 1 : 0.01,\n velocity: !isSwiping ? restrictedVelocity : 0,\n clamp: true,\n }}\n onRest={() => {\n if (isAnimating) {\n this.setState({\n isAnimating: false,\n lastSwipeVelocity: 0,\n });\n }\n }}\n >\n {(props) => (\n <animated.div\n className=\"tabs__slider\"\n style={{\n width: hidePanelOverflow ? `${sliderWidth}px` : '100%',\n transform: hidePanelOverflow ? props.transform : 'translateX(0px)',\n }}\n >\n {tabs.map(({ content, disabled }, index) =>\n !disabled ? (\n <Fragment key={`${tabs[index].title}-fragment`}>\n {index === selected && <Spacer id=\"left-spacer\" />}\n <TabPanel\n key={tabs[index].title}\n tabId={`${name}-tab-${index}`}\n id={`${name}-panel-${index}`}\n style={{\n width: hidePanelOverflow ? `${this.containerWidth}px` : '100%',\n display: hidePanelOverflow || index === selected ? 'block' : 'none',\n }}\n >\n {content}\n </TabPanel>\n {index === selected && <Spacer id=\"right-spacer\" />}\n </Fragment>\n ) : null,\n )}\n </animated.div>\n )}\n </Spring>\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}\n"],"names":["MIN_INDEX","SpacerWidth","default","xs","sm","md","lg","Tabs","Component","defaultProps","changeTabOnSwipe","transitionSpacing","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateX","translateFrom","translateTo","translateLineX","isAnimating","isSwiping","isScrolling","lastSwipeVelocity","fullWidthTabs","currentSwipe","selectedTabIndex","selected","container","containerWidth","tabRefs","filteredTabsLength","tabs","filter","tab","disabled","length","MAX_INDEX","componentDidMount","setTabWidth","switchTab","clamp","animateToTab","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","previousState","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","animatePanelsOnClick","instantOnClick","componentWillUnmount","removeEventListener","setContainerWidth","setState","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","_","idx","allTabsWidth","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","calculateApplicableDragDifference","getSwipeDifference","elasticDrag","getElasticDragDifference","onTabSelect","getTabIndexWithoutDisabledTabs","slice","instant","animateLine","animatePanel","currentTranslateTo","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","persist","handleTouchMove","currentSelectedFromProps","changedTouches","yAxisDifference","dragDifference","handleTouchEnd","velocity","getVelocity","swipeShouldChangeTab","render","name","className","spacer","tabsLength","distanceSwiped","abs","remainingContainerToTravel","restrictedVelocity","Number","isNaN","E","hidePanelOverflow","sliderWidth","Spacer","id","_jsx","style","display","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","panelId","focusTab","current","contains","activeElement","focus","onClick","role","transform","overflow","Spring","from","to","config","precision","onRest","animated","div","content","Fragment","TabPanel","tabId"],"mappings":"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"}
1
+ {"version":3,"file":"Tabs.js","sources":["../../src/tabs/Tabs.tsx"],"sourcesContent":["import { Spring, animated } from '@react-spring/web';\nimport { clsx } from 'clsx';\nimport clamp from 'lodash.clamp';\nimport { Component, createRef, Fragment } from 'react';\n\nimport { Size, Width, Direction } from '../common';\nimport { DirectionContext } from '../provider/direction';\n\nimport Tab from './Tab';\nimport TabList from './TabList';\nimport TabPanel from './TabPanel';\nimport {\n getElasticDragDifference,\n getSwipeDifference,\n swipedLeftToRight,\n swipedRightToLeft,\n swipeShouldChangeTab,\n getVelocity,\n Swipe,\n} from './utils';\n\nconst MIN_INDEX = 0;\n\nexport interface TabItem {\n title: string;\n content: React.ReactNode;\n disabled: boolean;\n}\n\ntype TabsTransitionSpacing =\n | 'default'\n | `${Size.EXTRA_SMALL | Size.SMALL | Size.MEDIUM | Size.LARGE}`;\n\nexport interface TabsProps {\n tabs: TabItem[];\n selected: number;\n name: string;\n animatePanelsOnClick?: boolean;\n changeTabOnSwipe?: boolean;\n className?: string;\n transitionSpacing?: TabsTransitionSpacing;\n headerWidth?: `${Width}`;\n id?: string;\n onTabSelect: (index: number) => void;\n}\n\ninterface TabsState {\n start: Swipe | null;\n translateX: number;\n translateFrom: number;\n translateTo: number;\n translateLineX: string | null;\n isAnimating: boolean;\n isSwiping: boolean;\n isScrolling: boolean;\n lastSwipeVelocity: number;\n fullWidthTabs: boolean;\n currentSwipe: Swipe[];\n selectedTabIndex: number;\n}\n\nconst SpacerWidth = {\n default: 0,\n xs: 8,\n sm: 16,\n md: 24,\n lg: 32,\n} satisfies Record<TabsTransitionSpacing, number>;\n\nexport default class Tabs extends Component<TabsProps, TabsState> {\n declare props: TabsProps & Required<Pick<TabsProps, keyof typeof Tabs.defaultProps>>;\n\n static defaultProps = {\n changeTabOnSwipe: true,\n transitionSpacing: 'default',\n headerWidth: Width.BLOCK,\n } satisfies Partial<TabsProps>;\n\n containerReference = createRef<HTMLDivElement>();\n\n constructor(props: Tabs['props']) {\n super(props);\n this.state = {\n start: null,\n translateX: 0,\n translateFrom: 0,\n translateTo: 0,\n translateLineX: null,\n isAnimating: false,\n isSwiping: false,\n isScrolling: false,\n lastSwipeVelocity: 0,\n fullWidthTabs: props.headerWidth === Width.BLOCK,\n currentSwipe: [],\n selectedTabIndex: props.selected,\n };\n }\n\n container: HTMLDivElement | null = null;\n\n containerWidth = 0;\n\n tabRefs: (HTMLLIElement | null)[] = [];\n\n get filteredTabsLength() {\n return this.props.tabs.filter((tab) => !tab.disabled).length;\n }\n\n get MAX_INDEX() {\n return this.props.tabs.length - 1;\n }\n\n componentDidMount() {\n const { selected } = this.props;\n\n this.setTabWidth();\n this.switchTab(clamp(selected, MIN_INDEX, this.MAX_INDEX));\n this.animateToTab(clamp(selected, MIN_INDEX, this.MAX_INDEX), true);\n document.body.addEventListener('touchmove', this.disableScroll, { passive: false });\n document.body.addEventListener('touchforcechange', this.disableScroll, { passive: false });\n window.addEventListener('resize', this.handleResize);\n }\n\n componentDidUpdate(previousProps: TabsProps, previousState: TabsState) {\n const currentSelected = this.props.selected;\n const previousSelected = previousProps.selected;\n const currentSelectedTab = this.props.tabs[currentSelected];\n const currentSelectedTabIsDisabled = currentSelectedTab?.disabled;\n const previousSelectedTab = previousProps.tabs[previousSelected];\n const previousSelectedTabIsDisabled = previousSelectedTab?.disabled;\n const currentTabsLength = this.props.tabs.length;\n const previousTabsLength = previousProps.tabs.length;\n const currentDisabledTabsLength = this.props.tabs.filter((tab) => !tab.disabled).length;\n const previousDisabledTabsLength = previousProps.tabs.filter((tab) => !tab.disabled).length;\n const currentHeaderWidth = this.props.headerWidth;\n const previousFullHeaderWidth = previousProps.headerWidth;\n const { animatePanelsOnClick } = this.props;\n const instantOnClick = !animatePanelsOnClick && !previousState.isSwiping;\n\n if (\n currentHeaderWidth !== previousFullHeaderWidth ||\n currentTabsLength !== previousTabsLength\n ) {\n this.setTabWidth();\n }\n\n if (\n currentSelected !== previousSelected ||\n currentDisabledTabsLength !== previousDisabledTabsLength ||\n currentSelectedTabIsDisabled !== previousSelectedTabIsDisabled\n ) {\n this.animateToTab(\n clamp(currentSelected, MIN_INDEX, this.MAX_INDEX),\n currentSelected === previousSelected || instantOnClick,\n );\n }\n }\n\n componentWillUnmount() {\n document.body.removeEventListener('touchmove', this.disableScroll);\n document.body.removeEventListener('touchforcechange', this.disableScroll);\n window.removeEventListener('resize', this.handleResize);\n }\n\n handleResize = () => {\n this.setContainerWidth(this.container);\n\n this.setState(({ selectedTabIndex }) => ({\n translateTo: -(this.containerWidth * selectedTabIndex),\n }));\n };\n\n setContainerRefAndWidth = (node: HTMLDivElement | null) => {\n this.container = node;\n this.setContainerWidth(node);\n };\n\n setContainerWidth = (node: HTMLDivElement | null) => {\n if (!node) {\n return;\n }\n\n const { width } = node.getBoundingClientRect();\n\n this.containerWidth = width;\n };\n\n isTabDisabled = (index: number) => {\n const { tabs } = this.props;\n\n return tabs[index]?.disabled ?? false;\n };\n\n getAllTabsWidth = () => {\n return this.tabRefs\n .map((reference) => {\n return reference ? reference.getBoundingClientRect().width : 0;\n })\n .reduce((a, b) => a + b, 0);\n };\n\n getDistanceToSelectedTab = (selectedTabIndex: number) => {\n return this.tabRefs\n .filter((_, idx) => idx < selectedTabIndex)\n .map((reference) => (reference ? reference.getBoundingClientRect().width : 0))\n .reduce((a, b) => a + b, 0);\n };\n\n setTabWidth = () => {\n const { fullWidthTabs } = this.state;\n const { headerWidth, selected } = this.props;\n\n const allTabsWidth = this.getAllTabsWidth();\n\n if (!fullWidthTabs && (headerWidth === Width.BLOCK || this.containerWidth < allTabsWidth)) {\n this.setState({ fullWidthTabs: true, translateLineX: `${selected * 100}%` });\n }\n if (fullWidthTabs && headerWidth === Width.AUTO && this.containerWidth >= allTabsWidth) {\n this.setState({\n fullWidthTabs: false,\n translateLineX: `${this.getDistanceToSelectedTab(selected)}px`,\n });\n }\n };\n\n getTabLineWidth = () => {\n const { fullWidthTabs } = this.state;\n const { selected, tabs } = this.props;\n\n if (fullWidthTabs) {\n return `${(1 / tabs.length) * 100}%`;\n }\n\n const reference = this.tabRefs[selected] || this.tabRefs[this.tabRefs.length - 1];\n const width = reference ? reference.getBoundingClientRect().width : 0;\n return `${width}px`;\n };\n\n /*\n * Gets the next tab that should be selected based on the swipe direction\n * and the current selected tab (is called recursively to account for disabled tabs).\n */\n getTabToSelect = (selected: number, start: Swipe, end: Swipe): number => {\n let nextSelected = selected;\n\n if (swipedLeftToRight(start, end)) {\n nextSelected -= 1;\n\n if (nextSelected > MIN_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n } else if (swipedRightToLeft(start, end)) {\n nextSelected += 1;\n\n if (nextSelected < this.MAX_INDEX && this.isTabDisabled(nextSelected)) {\n return this.getTabToSelect(nextSelected, start, end);\n }\n }\n\n nextSelected = clamp(\n nextSelected,\n Math.max(selected - 1, MIN_INDEX),\n Math.min(selected + 1, this.MAX_INDEX),\n );\n\n if (this.isTabDisabled(nextSelected)) {\n return selected;\n }\n\n return nextSelected;\n };\n\n swipedOverHalfOfContainer = (difference: number) => difference / this.containerWidth >= 0.5;\n\n calculateApplicableDragDifference = ({\n currentSelected,\n nextSelected,\n start,\n end,\n }: {\n currentSelected: number;\n nextSelected: number;\n start: Swipe;\n end: Swipe;\n }) => {\n const difference = getSwipeDifference(start, end);\n const elasticDrag = getElasticDragDifference(difference);\n\n if (swipedLeftToRight(start, end)) {\n if (currentSelected > MIN_INDEX && currentSelected !== nextSelected) {\n return Math.min(difference, this.containerWidth);\n }\n return elasticDrag;\n }\n if (swipedRightToLeft(start, end)) {\n if (currentSelected < this.MAX_INDEX && currentSelected !== nextSelected) {\n return -Math.min(difference, this.containerWidth);\n }\n return -elasticDrag;\n }\n\n return false;\n };\n\n switchTab = (index: number) => {\n const { onTabSelect } = this.props;\n onTabSelect(index);\n };\n\n getTabIndexWithoutDisabledTabs(index: number) {\n return index - this.props.tabs.slice(0, index).filter((tab) => tab.disabled).length;\n }\n\n animateToTab = (index: number, instant?: boolean) => {\n this.animateLine(index);\n\n this.animatePanel(this.getTabIndexWithoutDisabledTabs(index), instant);\n };\n\n animateLine = (index: number) => {\n this.setState((previousState) => ({\n translateLineX: previousState.fullWidthTabs\n ? `${index * 100}%`\n : `${this.getDistanceToSelectedTab(index)}px`,\n }));\n };\n\n // Pass `instant` to set the `translateX` to the new panel with no transition\n animatePanel = (index: number, instant = false) => {\n const { translateTo: currentTranslateTo } = this.state;\n\n const translateFrom = currentTranslateTo;\n const translateTo = -(this.containerWidth * index);\n\n this.setState({\n selectedTabIndex: index,\n isAnimating: !instant && translateFrom !== translateTo,\n translateFrom,\n translateTo,\n });\n };\n\n disableScroll = (event: Event) => {\n const { isSwiping } = this.state;\n\n if (isSwiping) {\n event.preventDefault();\n }\n };\n\n handleTabClick = (index: number) => () => {\n this.switchTab(index);\n };\n\n onKeyDown = (index: number) => (event: React.KeyboardEvent<HTMLLIElement>) => {\n if (event && event.key === 'Enter') {\n this.switchTab(index);\n }\n };\n\n handleTouchStart: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const start = {\n x: event.nativeEvent.touches[0].clientX,\n y: event.nativeEvent.touches[0].clientY,\n time: Date.now(),\n };\n this.setState({\n start,\n currentSwipe: [start],\n });\n\n event.persist();\n };\n\n handleTouchMove: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected: currentSelectedFromProps } = this.props;\n const selected = this.getTabIndexWithoutDisabledTabs(currentSelectedFromProps);\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const yAxisDifference = getSwipeDifference(start, end, 'y');\n let { isScrolling, isSwiping } = this.state;\n\n event.persist();\n\n if (!isScrolling && !isSwiping) {\n if (difference > yAxisDifference) {\n isSwiping = true;\n } else {\n isScrolling = true;\n }\n }\n\n this.setState({ isScrolling, isSwiping });\n\n if (isSwiping) {\n const nextSelected = this.getTabToSelect(currentSelectedFromProps, start, end);\n this.animateLine(\n this.swipedOverHalfOfContainer(difference) ? nextSelected : currentSelectedFromProps,\n );\n\n const dragDifference = this.calculateApplicableDragDifference({\n currentSelected: currentSelectedFromProps,\n nextSelected,\n start,\n end,\n });\n\n const translateX = dragDifference\n ? -(this.containerWidth * selected) + dragDifference\n : false;\n\n this.setState((state) => ({\n currentSwipe: [...state.currentSwipe, end],\n translateFrom: translateX || state.translateFrom,\n translateTo: translateX || state.translateTo,\n }));\n }\n };\n\n handleTouchEnd: React.TouchEventHandler<HTMLDivElement> = (event) => {\n const { start, isSwiping } = this.state;\n if (start == null) {\n return;\n }\n\n const { selected } = this.props;\n const end: Swipe = {\n x: event.nativeEvent.changedTouches[0].clientX,\n y: event.nativeEvent.changedTouches[0].clientY,\n time: Date.now(),\n };\n const difference = getSwipeDifference(start, end);\n const velocity = getVelocity([...this.state.currentSwipe, end]);\n\n this.setState({\n currentSwipe: [],\n });\n\n let nextSelected = selected;\n\n event.persist();\n\n if (isSwiping) {\n if (swipeShouldChangeTab(start, end) || this.swipedOverHalfOfContainer(difference)) {\n nextSelected = this.getTabToSelect(nextSelected, start, end);\n }\n\n if (nextSelected !== selected) {\n this.switchTab(nextSelected);\n\n this.setState({\n lastSwipeVelocity: velocity,\n });\n } else {\n this.animateToTab(nextSelected);\n }\n }\n\n this.setState({ isSwiping: false, isScrolling: false });\n };\n\n render() {\n const { tabs, changeTabOnSwipe, name, selected, className, transitionSpacing, headerWidth } =\n this.props;\n const {\n isSwiping,\n translateLineX,\n isAnimating,\n translateFrom,\n translateTo,\n lastSwipeVelocity,\n fullWidthTabs,\n } = this.state;\n\n const spacer = SpacerWidth[transitionSpacing];\n\n const tabsLength = this.filteredTabsLength;\n\n const distanceSwiped = Math.abs(-translateFrom - this.containerWidth * selected);\n\n const remainingContainerToTravel = isSwiping\n ? 1 - distanceSwiped / this.containerWidth\n : 1 - Math.abs(distanceSwiped / this.containerWidth - 1);\n\n const restrictedVelocity =\n (Number.isNaN(remainingContainerToTravel) ? 0 : remainingContainerToTravel) *\n Math.min(10 * Math.E, lastSwipeVelocity * 10 * Math.E);\n\n const hidePanelOverflow = isAnimating || isSwiping;\n\n const sliderWidth = tabsLength * this.containerWidth + spacer * 2;\n\n // Uses `props.panelTransitionSpacing` to add a spacer in-between the `TabPanel` you're transitioning to/from\n const Spacer = ({ id }: { id: string }) =>\n spacer > 0 && (\n <div\n key={id}\n style={{\n width: spacer,\n display: hidePanelOverflow ? 'block' : 'none',\n }}\n />\n );\n\n return (\n <DirectionContext.Consumer>\n {(direction) => {\n const isRTL = direction === Direction.RTL;\n return (\n <div\n ref={this.containerReference}\n className={clsx('tabs', className, {\n 'tabs--auto-width': headerWidth === Width.AUTO,\n })}\n onTouchStart={changeTabOnSwipe ? this.handleTouchStart : undefined}\n onTouchEnd={changeTabOnSwipe ? this.handleTouchEnd : undefined}\n onTouchMove={changeTabOnSwipe ? this.handleTouchMove : undefined}\n >\n <TabList>\n {tabs.map(({ title, disabled }, index) => {\n return (\n <Tab\n key={title}\n ref={(node) => {\n this.tabRefs[index] = node;\n }}\n id={`${name}-tab-${index}`}\n panelId={`${name}-panel-${index}`}\n selected={selected === index}\n disabled={disabled}\n focusTab={() => {\n if (this.containerReference.current?.contains(document.activeElement)) {\n this.tabRefs[index]?.focus();\n }\n }}\n onClick={disabled ? undefined : this.handleTabClick(index)}\n onKeyDown={this.onKeyDown(index)}\n {...(fullWidthTabs\n ? { style: { width: `${(1 / tabs.length) * 100}%` } }\n : {})}\n >\n {title}\n </Tab>\n );\n })}\n {translateLineX ? (\n <li\n role=\"none\"\n className=\"tabs__line\"\n style={{\n width: this.getTabLineWidth(),\n transform: isRTL\n ? `translateX(-${translateLineX})`\n : `translateX(${translateLineX})`,\n }}\n />\n ) : null}\n </TabList>\n <div\n ref={this.setContainerRefAndWidth}\n className=\"tabs__panel-container\"\n style={{\n overflow: hidePanelOverflow ? 'hidden' : 'visible',\n }}\n >\n <Spring\n from={{\n transform: `translateX(${translateFrom - spacer}px)`,\n }}\n to={{\n transform: `translateX(${translateTo - spacer}px)`,\n }}\n config={{\n precision: isSwiping ? 1 : 0.01,\n velocity: !isSwiping ? restrictedVelocity : 0,\n clamp: true,\n }}\n onRest={() => {\n if (isAnimating) {\n this.setState({\n isAnimating: false,\n lastSwipeVelocity: 0,\n });\n }\n }}\n >\n {(props) => (\n <animated.div\n className=\"tabs__slider\"\n style={{\n width: hidePanelOverflow ? `${sliderWidth}px` : '100%',\n transform: hidePanelOverflow ? props.transform : 'translateX(0px)',\n }}\n >\n {tabs.map(({ content, disabled }, index) =>\n !disabled ? (\n <Fragment key={`${tabs[index].title}-fragment`}>\n {index === selected && <Spacer id=\"left-spacer\" />}\n <TabPanel\n key={tabs[index].title}\n tabId={`${name}-tab-${index}`}\n id={`${name}-panel-${index}`}\n style={{\n width: hidePanelOverflow ? `${this.containerWidth}px` : '100%',\n display: hidePanelOverflow || index === selected ? 'block' : 'none',\n }}\n >\n {content}\n </TabPanel>\n {index === selected && <Spacer id=\"right-spacer\" />}\n </Fragment>\n ) : null,\n )}\n </animated.div>\n )}\n </Spring>\n </div>\n </div>\n );\n }}\n </DirectionContext.Consumer>\n );\n }\n}\n"],"names":["MIN_INDEX","SpacerWidth","default","xs","sm","md","lg","Tabs","Component","defaultProps","changeTabOnSwipe","transitionSpacing","headerWidth","Width","BLOCK","containerReference","createRef","constructor","props","state","start","translateX","translateFrom","translateTo","translateLineX","isAnimating","isSwiping","isScrolling","lastSwipeVelocity","fullWidthTabs","currentSwipe","selectedTabIndex","selected","container","containerWidth","tabRefs","filteredTabsLength","tabs","filter","tab","disabled","length","MAX_INDEX","componentDidMount","setTabWidth","switchTab","clamp","animateToTab","document","body","addEventListener","disableScroll","passive","window","handleResize","componentDidUpdate","previousProps","previousState","currentSelected","previousSelected","currentSelectedTab","currentSelectedTabIsDisabled","previousSelectedTab","previousSelectedTabIsDisabled","currentTabsLength","previousTabsLength","currentDisabledTabsLength","previousDisabledTabsLength","currentHeaderWidth","previousFullHeaderWidth","animatePanelsOnClick","instantOnClick","componentWillUnmount","removeEventListener","setContainerWidth","setState","setContainerRefAndWidth","node","width","getBoundingClientRect","isTabDisabled","index","getAllTabsWidth","map","reference","reduce","a","b","getDistanceToSelectedTab","_","idx","allTabsWidth","AUTO","getTabLineWidth","getTabToSelect","end","nextSelected","swipedLeftToRight","swipedRightToLeft","Math","max","min","swipedOverHalfOfContainer","difference","calculateApplicableDragDifference","getSwipeDifference","elasticDrag","getElasticDragDifference","onTabSelect","getTabIndexWithoutDisabledTabs","slice","instant","animateLine","animatePanel","currentTranslateTo","event","preventDefault","handleTabClick","onKeyDown","key","handleTouchStart","x","nativeEvent","touches","clientX","y","clientY","time","Date","now","persist","handleTouchMove","currentSelectedFromProps","changedTouches","yAxisDifference","dragDifference","handleTouchEnd","velocity","getVelocity","swipeShouldChangeTab","render","name","className","spacer","tabsLength","distanceSwiped","abs","remainingContainerToTravel","restrictedVelocity","Number","isNaN","E","hidePanelOverflow","sliderWidth","Spacer","id","_jsx","style","display","DirectionContext","Consumer","children","direction","isRTL","Direction","RTL","_jsxs","ref","clsx","onTouchStart","undefined","onTouchEnd","onTouchMove","TabList","title","Tab","panelId","focusTab","current","contains","activeElement","focus","onClick","role","transform","overflow","Spring","from","to","config","precision","onRest","animated","div","content","Fragment","TabPanel","tabId"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,MAAMA,SAAS,GAAG,CAAC;AAwCnB,MAAMC,WAAW,GAAG;AAClBC,EAAAA,OAAO,EAAE,CAAC;AACVC,EAAAA,EAAE,EAAE,CAAC;AACLC,EAAAA,EAAE,EAAE,EAAE;AACNC,EAAAA,EAAE,EAAE,EAAE;AACNC,EAAAA,EAAE,EAAE;CAC2C;AAE5B,MAAAC,IAAK,SAAQC,eAA+B,CAAA;AAG/D,EAAA,OAAOC,YAAY,GAAG;AACpBC,IAAAA,gBAAgB,EAAE,IAAI;AACtBC,IAAAA,iBAAiB,EAAE,SAAS;IAC5BC,WAAW,EAAEC,WAAK,CAACC;GACS;EAE9BC,kBAAkB,gBAAGC,eAAS,EAAkB;EAEhDC,WAAAA,CAAYC,KAAoB,EAAA;IAC9B,KAAK,CAACA,KAAK,CAAC;IACZ,IAAI,CAACC,KAAK,GAAG;AACXC,MAAAA,KAAK,EAAE,IAAI;AACXC,MAAAA,UAAU,EAAE,CAAC;AACbC,MAAAA,aAAa,EAAE,CAAC;AAChBC,MAAAA,WAAW,EAAE,CAAC;AACdC,MAAAA,cAAc,EAAE,IAAI;AACpBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,SAAS,EAAE,KAAK;AAChBC,MAAAA,WAAW,EAAE,KAAK;AAClBC,MAAAA,iBAAiB,EAAE,CAAC;AACpBC,MAAAA,aAAa,EAAEX,KAAK,CAACN,WAAW,KAAKC,WAAK,CAACC,KAAK;AAChDgB,MAAAA,YAAY,EAAE,EAAE;MAChBC,gBAAgB,EAAEb,KAAK,CAACc;KACzB;AACH;AAEAC,EAAAA,SAAS,GAA0B,IAAI;AAEvCC,EAAAA,cAAc,GAAG,CAAC;AAElBC,EAAAA,OAAO,GAA6B,EAAE;EAEtC,IAAIC,kBAAkBA,GAAA;AACpB,IAAA,OAAO,IAAI,CAAClB,KAAK,CAACmB,IAAI,CAACC,MAAM,CAAEC,GAAG,IAAK,CAACA,GAAG,CAACC,QAAQ,CAAC,CAACC,MAAM;AAC9D;EAEA,IAAIC,SAASA,GAAA;IACX,OAAO,IAAI,CAACxB,KAAK,CAACmB,IAAI,CAACI,MAAM,GAAG,CAAC;AACnC;AAEAE,EAAAA,iBAAiBA,GAAA;IACf,MAAM;AAAEX,MAAAA;KAAU,GAAG,IAAI,CAACd,KAAK;IAE/B,IAAI,CAAC0B,WAAW,EAAE;AAClB,IAAA,IAAI,CAACC,SAAS,CAACC,sBAAK,CAACd,QAAQ,EAAEhC,SAAS,EAAE,IAAI,CAAC0C,SAAS,CAAC,CAAC;AAC1D,IAAA,IAAI,CAACK,YAAY,CAACD,sBAAK,CAACd,QAAQ,EAAEhC,SAAS,EAAE,IAAI,CAAC0C,SAAS,CAAC,EAAE,IAAI,CAAC;IACnEM,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,WAAW,EAAE,IAAI,CAACC,aAAa,EAAE;AAAEC,MAAAA,OAAO,EAAE;AAAK,KAAE,CAAC;IACnFJ,QAAQ,CAACC,IAAI,CAACC,gBAAgB,CAAC,kBAAkB,EAAE,IAAI,CAACC,aAAa,EAAE;AAAEC,MAAAA,OAAO,EAAE;AAAK,KAAE,CAAC;IAC1FC,MAAM,CAACH,gBAAgB,CAAC,QAAQ,EAAE,IAAI,CAACI,YAAY,CAAC;AACtD;AAEAC,EAAAA,kBAAkBA,CAACC,aAAwB,EAAEC,aAAwB,EAAA;AACnE,IAAA,MAAMC,eAAe,GAAG,IAAI,CAACxC,KAAK,CAACc,QAAQ;AAC3C,IAAA,MAAM2B,gBAAgB,GAAGH,aAAa,CAACxB,QAAQ;IAC/C,MAAM4B,kBAAkB,GAAG,IAAI,CAAC1C,KAAK,CAACmB,IAAI,CAACqB,eAAe,CAAC;AAC3D,IAAA,MAAMG,4BAA4B,GAAGD,kBAAkB,EAAEpB,QAAQ;AACjE,IAAA,MAAMsB,mBAAmB,GAAGN,aAAa,CAACnB,IAAI,CAACsB,gBAAgB,CAAC;AAChE,IAAA,MAAMI,6BAA6B,GAAGD,mBAAmB,EAAEtB,QAAQ;IACnE,MAAMwB,iBAAiB,GAAG,IAAI,CAAC9C,KAAK,CAACmB,IAAI,CAACI,MAAM;AAChD,IAAA,MAAMwB,kBAAkB,GAAGT,aAAa,CAACnB,IAAI,CAACI,MAAM;AACpD,IAAA,MAAMyB,yBAAyB,GAAG,IAAI,CAAChD,KAAK,CAACmB,IAAI,CAACC,MAAM,CAAEC,GAAG,IAAK,CAACA,GAAG,CAACC,QAAQ,CAAC,CAACC,MAAM;AACvF,IAAA,MAAM0B,0BAA0B,GAAGX,aAAa,CAACnB,IAAI,CAACC,MAAM,CAAEC,GAAG,IAAK,CAACA,GAAG,CAACC,QAAQ,CAAC,CAACC,MAAM;AAC3F,IAAA,MAAM2B,kBAAkB,GAAG,IAAI,CAAClD,KAAK,CAACN,WAAW;AACjD,IAAA,MAAMyD,uBAAuB,GAAGb,aAAa,CAAC5C,WAAW;IACzD,MAAM;AAAE0D,MAAAA;KAAsB,GAAG,IAAI,CAACpD,KAAK;IAC3C,MAAMqD,cAAc,GAAG,CAACD,oBAAoB,IAAI,CAACb,aAAa,CAAC/B,SAAS;AAExE,IAAA,IACE0C,kBAAkB,KAAKC,uBAAuB,IAC9CL,iBAAiB,KAAKC,kBAAkB,EACxC;MACA,IAAI,CAACrB,WAAW,EAAE;AACpB;IAEA,IACEc,eAAe,KAAKC,gBAAgB,IACpCO,yBAAyB,KAAKC,0BAA0B,IACxDN,4BAA4B,KAAKE,6BAA6B,EAC9D;AACA,MAAA,IAAI,CAAChB,YAAY,CACfD,sBAAK,CAACY,eAAe,EAAE1D,SAAS,EAAE,IAAI,CAAC0C,SAAS,CAAC,EACjDgB,eAAe,KAAKC,gBAAgB,IAAIY,cAAc,CACvD;AACH;AACF;AAEAC,EAAAA,oBAAoBA,GAAA;IAClBxB,QAAQ,CAACC,IAAI,CAACwB,mBAAmB,CAAC,WAAW,EAAE,IAAI,CAACtB,aAAa,CAAC;IAClEH,QAAQ,CAACC,IAAI,CAACwB,mBAAmB,CAAC,kBAAkB,EAAE,IAAI,CAACtB,aAAa,CAAC;IACzEE,MAAM,CAACoB,mBAAmB,CAAC,QAAQ,EAAE,IAAI,CAACnB,YAAY,CAAC;AACzD;EAEAA,YAAY,GAAGA,MAAK;AAClB,IAAA,IAAI,CAACoB,iBAAiB,CAAC,IAAI,CAACzC,SAAS,CAAC;IAEtC,IAAI,CAAC0C,QAAQ,CAAC,CAAC;AAAE5C,MAAAA;AAAkB,KAAA,MAAM;AACvCR,MAAAA,WAAW,EAAE,EAAE,IAAI,CAACW,cAAc,GAAGH,gBAAgB;AACtD,KAAA,CAAC,CAAC;GACJ;EAED6C,uBAAuB,GAAIC,IAA2B,IAAI;IACxD,IAAI,CAAC5C,SAAS,GAAG4C,IAAI;AACrB,IAAA,IAAI,CAACH,iBAAiB,CAACG,IAAI,CAAC;GAC7B;EAEDH,iBAAiB,GAAIG,IAA2B,IAAI;IAClD,IAAI,CAACA,IAAI,EAAE;AACT,MAAA;AACF;IAEA,MAAM;AAAEC,MAAAA;AAAO,KAAA,GAAGD,IAAI,CAACE,qBAAqB,EAAE;IAE9C,IAAI,CAAC7C,cAAc,GAAG4C,KAAK;GAC5B;EAEDE,aAAa,GAAIC,KAAa,IAAI;IAChC,MAAM;AAAE5C,MAAAA;KAAM,GAAG,IAAI,CAACnB,KAAK;AAE3B,IAAA,OAAOmB,IAAI,CAAC4C,KAAK,CAAC,EAAEzC,QAAQ,IAAI,KAAK;GACtC;EAED0C,eAAe,GAAGA,MAAK;AACrB,IAAA,OAAO,IAAI,CAAC/C,OAAO,CAChBgD,GAAG,CAAEC,SAAS,IAAI;MACjB,OAAOA,SAAS,GAAGA,SAAS,CAACL,qBAAqB,EAAE,CAACD,KAAK,GAAG,CAAC;AAChE,KAAC,CAAC,CACDO,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC;GAC9B;EAEDC,wBAAwB,GAAIzD,gBAAwB,IAAI;IACtD,OAAO,IAAI,CAACI,OAAO,CAChBG,MAAM,CAAC,CAACmD,CAAC,EAAEC,GAAG,KAAKA,GAAG,GAAG3D,gBAAgB,CAAC,CAC1CoD,GAAG,CAAEC,SAAS,IAAMA,SAAS,GAAGA,SAAS,CAACL,qBAAqB,EAAE,CAACD,KAAK,GAAG,CAAE,CAAC,CAC7EO,MAAM,CAAC,CAACC,CAAC,EAAEC,CAAC,KAAKD,CAAC,GAAGC,CAAC,EAAE,CAAC,CAAC;GAC9B;EAED3C,WAAW,GAAGA,MAAK;IACjB,MAAM;AAAEf,MAAAA;KAAe,GAAG,IAAI,CAACV,KAAK;IACpC,MAAM;MAAEP,WAAW;AAAEoB,MAAAA;KAAU,GAAG,IAAI,CAACd,KAAK;AAE5C,IAAA,MAAMyE,YAAY,GAAG,IAAI,CAACT,eAAe,EAAE;AAE3C,IAAA,IAAI,CAACrD,aAAa,KAAKjB,WAAW,KAAKC,WAAK,CAACC,KAAK,IAAI,IAAI,CAACoB,cAAc,GAAGyD,YAAY,CAAC,EAAE;MACzF,IAAI,CAAChB,QAAQ,CAAC;AAAE9C,QAAAA,aAAa,EAAE,IAAI;AAAEL,QAAAA,cAAc,EAAE,CAAA,EAAGQ,QAAQ,GAAG,GAAG,CAAA,CAAA;AAAG,OAAE,CAAC;AAC9E;AACA,IAAA,IAAIH,aAAa,IAAIjB,WAAW,KAAKC,WAAK,CAAC+E,IAAI,IAAI,IAAI,CAAC1D,cAAc,IAAIyD,YAAY,EAAE;MACtF,IAAI,CAAChB,QAAQ,CAAC;AACZ9C,QAAAA,aAAa,EAAE,KAAK;AACpBL,QAAAA,cAAc,EAAE,CAAG,EAAA,IAAI,CAACgE,wBAAwB,CAACxD,QAAQ,CAAC,CAAA,EAAA;AAC3D,OAAA,CAAC;AACJ;GACD;EAED6D,eAAe,GAAGA,MAAK;IACrB,MAAM;AAAEhE,MAAAA;KAAe,GAAG,IAAI,CAACV,KAAK;IACpC,MAAM;MAAEa,QAAQ;AAAEK,MAAAA;KAAM,GAAG,IAAI,CAACnB,KAAK;AAErC,IAAA,IAAIW,aAAa,EAAE;MACjB,OAAO,CAAA,EAAI,CAAC,GAAGQ,IAAI,CAACI,MAAM,GAAI,GAAG,CAAG,CAAA,CAAA;AACtC;IAEA,MAAM2C,SAAS,GAAG,IAAI,CAACjD,OAAO,CAACH,QAAQ,CAAC,IAAI,IAAI,CAACG,OAAO,CAAC,IAAI,CAACA,OAAO,CAACM,MAAM,GAAG,CAAC,CAAC;AACjF,IAAA,MAAMqC,KAAK,GAAGM,SAAS,GAAGA,SAAS,CAACL,qBAAqB,EAAE,CAACD,KAAK,GAAG,CAAC;IACrE,OAAO,CAAA,EAAGA,KAAK,CAAI,EAAA,CAAA;GACpB;AAED;;;AAGG;AACHgB,EAAAA,cAAc,GAAGA,CAAC9D,QAAgB,EAAEZ,KAAY,EAAE2E,GAAU,KAAY;IACtE,IAAIC,YAAY,GAAGhE,QAAQ;AAE3B,IAAA,IAAIiE,uBAAiB,CAAC7E,KAAK,EAAE2E,GAAG,CAAC,EAAE;AACjCC,MAAAA,YAAY,IAAI,CAAC;MAEjB,IAAIA,YAAY,GAAGhG,SAAS,IAAI,IAAI,CAACgF,aAAa,CAACgB,YAAY,CAAC,EAAE;QAChE,OAAO,IAAI,CAACF,cAAc,CAACE,YAAY,EAAE5E,KAAK,EAAE2E,GAAG,CAAC;AACtD;KACD,MAAM,IAAIG,uBAAiB,CAAC9E,KAAK,EAAE2E,GAAG,CAAC,EAAE;AACxCC,MAAAA,YAAY,IAAI,CAAC;AAEjB,MAAA,IAAIA,YAAY,GAAG,IAAI,CAACtD,SAAS,IAAI,IAAI,CAACsC,aAAa,CAACgB,YAAY,CAAC,EAAE;QACrE,OAAO,IAAI,CAACF,cAAc,CAACE,YAAY,EAAE5E,KAAK,EAAE2E,GAAG,CAAC;AACtD;AACF;AAEAC,IAAAA,YAAY,GAAGlD,sBAAK,CAClBkD,YAAY,EACZG,IAAI,CAACC,GAAG,CAACpE,QAAQ,GAAG,CAAC,EAAEhC,SAAS,CAAC,EACjCmG,IAAI,CAACE,GAAG,CAACrE,QAAQ,GAAG,CAAC,EAAE,IAAI,CAACU,SAAS,CAAC,CACvC;AAED,IAAA,IAAI,IAAI,CAACsC,aAAa,CAACgB,YAAY,CAAC,EAAE;AACpC,MAAA,OAAOhE,QAAQ;AACjB;AAEA,IAAA,OAAOgE,YAAY;GACpB;EAEDM,yBAAyB,GAAIC,UAAkB,IAAKA,UAAU,GAAG,IAAI,CAACrE,cAAc,IAAI,GAAG;AAE3FsE,EAAAA,iCAAiC,GAAGA,CAAC;IACnC9C,eAAe;IACfsC,YAAY;IACZ5E,KAAK;AACL2E,IAAAA;AAMD,GAAA,KAAI;AACH,IAAA,MAAMQ,UAAU,GAAGE,wBAAkB,CAACrF,KAAK,EAAE2E,GAAG,CAAC;AACjD,IAAA,MAAMW,WAAW,GAAGC,8BAAwB,CAACJ,UAAU,CAAC;AAExD,IAAA,IAAIN,uBAAiB,CAAC7E,KAAK,EAAE2E,GAAG,CAAC,EAAE;AACjC,MAAA,IAAIrC,eAAe,GAAG1D,SAAS,IAAI0D,eAAe,KAAKsC,YAAY,EAAE;QACnE,OAAOG,IAAI,CAACE,GAAG,CAACE,UAAU,EAAE,IAAI,CAACrE,cAAc,CAAC;AAClD;AACA,MAAA,OAAOwE,WAAW;AACpB;AACA,IAAA,IAAIR,uBAAiB,CAAC9E,KAAK,EAAE2E,GAAG,CAAC,EAAE;MACjC,IAAIrC,eAAe,GAAG,IAAI,CAAChB,SAAS,IAAIgB,eAAe,KAAKsC,YAAY,EAAE;QACxE,OAAO,CAACG,IAAI,CAACE,GAAG,CAACE,UAAU,EAAE,IAAI,CAACrE,cAAc,CAAC;AACnD;AACA,MAAA,OAAO,CAACwE,WAAW;AACrB;AAEA,IAAA,OAAO,KAAK;GACb;EAED7D,SAAS,GAAIoC,KAAa,IAAI;IAC5B,MAAM;AAAE2B,MAAAA;KAAa,GAAG,IAAI,CAAC1F,KAAK;IAClC0F,WAAW,CAAC3B,KAAK,CAAC;GACnB;EAED4B,8BAA8BA,CAAC5B,KAAa,EAAA;IAC1C,OAAOA,KAAK,GAAG,IAAI,CAAC/D,KAAK,CAACmB,IAAI,CAACyE,KAAK,CAAC,CAAC,EAAE7B,KAAK,CAAC,CAAC3C,MAAM,CAAEC,GAAG,IAAKA,GAAG,CAACC,QAAQ,CAAC,CAACC,MAAM;AACrF;AAEAM,EAAAA,YAAY,GAAGA,CAACkC,KAAa,EAAE8B,OAAiB,KAAI;AAClD,IAAA,IAAI,CAACC,WAAW,CAAC/B,KAAK,CAAC;IAEvB,IAAI,CAACgC,YAAY,CAAC,IAAI,CAACJ,8BAA8B,CAAC5B,KAAK,CAAC,EAAE8B,OAAO,CAAC;GACvE;EAEDC,WAAW,GAAI/B,KAAa,IAAI;AAC9B,IAAA,IAAI,CAACN,QAAQ,CAAElB,aAAa,KAAM;AAChCjC,MAAAA,cAAc,EAAEiC,aAAa,CAAC5B,aAAa,GACvC,GAAGoD,KAAK,GAAG,GAAG,CAAA,CAAA,CAAG,GACjB,CAAG,EAAA,IAAI,CAACO,wBAAwB,CAACP,KAAK,CAAC,CAAA,EAAA;AAC5C,KAAA,CAAC,CAAC;GACJ;AAED;AACAgC,EAAAA,YAAY,GAAGA,CAAChC,KAAa,EAAE8B,OAAO,GAAG,KAAK,KAAI;IAChD,MAAM;AAAExF,MAAAA,WAAW,EAAE2F;KAAoB,GAAG,IAAI,CAAC/F,KAAK;IAEtD,MAAMG,aAAa,GAAG4F,kBAAkB;IACxC,MAAM3F,WAAW,GAAG,EAAE,IAAI,CAACW,cAAc,GAAG+C,KAAK,CAAC;IAElD,IAAI,CAACN,QAAQ,CAAC;AACZ5C,MAAAA,gBAAgB,EAAEkD,KAAK;AACvBxD,MAAAA,WAAW,EAAE,CAACsF,OAAO,IAAIzF,aAAa,KAAKC,WAAW;MACtDD,aAAa;AACbC,MAAAA;AACD,KAAA,CAAC;GACH;EAED4B,aAAa,GAAIgE,KAAY,IAAI;IAC/B,MAAM;AAAEzF,MAAAA;KAAW,GAAG,IAAI,CAACP,KAAK;AAEhC,IAAA,IAAIO,SAAS,EAAE;MACbyF,KAAK,CAACC,cAAc,EAAE;AACxB;GACD;EAEDC,cAAc,GAAIpC,KAAa,IAAK,MAAK;AACvC,IAAA,IAAI,CAACpC,SAAS,CAACoC,KAAK,CAAC;GACtB;AAEDqC,EAAAA,SAAS,GAAIrC,KAAa,IAAMkC,KAAyC,IAAI;AAC3E,IAAA,IAAIA,KAAK,IAAIA,KAAK,CAACI,GAAG,KAAK,OAAO,EAAE;AAClC,MAAA,IAAI,CAAC1E,SAAS,CAACoC,KAAK,CAAC;AACvB;GACD;EAEDuC,gBAAgB,GAA6CL,KAAK,IAAI;AACpE,IAAA,MAAM/F,KAAK,GAAG;MACZqG,CAAC,EAAEN,KAAK,CAACO,WAAW,CAACC,OAAO,CAAC,CAAC,CAAC,CAACC,OAAO;MACvCC,CAAC,EAAEV,KAAK,CAACO,WAAW,CAACC,OAAO,CAAC,CAAC,CAAC,CAACG,OAAO;AACvCC,MAAAA,IAAI,EAAEC,IAAI,CAACC,GAAG;KACf;IACD,IAAI,CAACtD,QAAQ,CAAC;MACZvD,KAAK;MACLU,YAAY,EAAE,CAACV,KAAK;AACrB,KAAA,CAAC;IAEF+F,KAAK,CAACe,OAAO,EAAE;GAChB;EAEDC,eAAe,GAA6ChB,KAAK,IAAI;IACnE,MAAM;AAAE/F,MAAAA;KAAO,GAAG,IAAI,CAACD,KAAK;IAC5B,IAAIC,KAAK,IAAI,IAAI,EAAE;AACjB,MAAA;AACF;IAEA,MAAM;AAAEY,MAAAA,QAAQ,EAAEoG;KAA0B,GAAG,IAAI,CAAClH,KAAK;AACzD,IAAA,MAAMc,QAAQ,GAAG,IAAI,CAAC6E,8BAA8B,CAACuB,wBAAwB,CAAC;AAC9E,IAAA,MAAMrC,GAAG,GAAU;MACjB0B,CAAC,EAAEN,KAAK,CAACO,WAAW,CAACW,cAAc,CAAC,CAAC,CAAC,CAACT,OAAO;MAC9CC,CAAC,EAAEV,KAAK,CAACO,WAAW,CAACW,cAAc,CAAC,CAAC,CAAC,CAACP,OAAO;AAC9CC,MAAAA,IAAI,EAAEC,IAAI,CAACC,GAAG;KACf;AACD,IAAA,MAAM1B,UAAU,GAAGE,wBAAkB,CAACrF,KAAK,EAAE2E,GAAG,CAAC;IACjD,MAAMuC,eAAe,GAAG7B,wBAAkB,CAACrF,KAAK,EAAE2E,GAAG,EAAE,GAAG,CAAC;IAC3D,IAAI;MAAEpE,WAAW;AAAED,MAAAA;KAAW,GAAG,IAAI,CAACP,KAAK;IAE3CgG,KAAK,CAACe,OAAO,EAAE;AAEf,IAAA,IAAI,CAACvG,WAAW,IAAI,CAACD,SAAS,EAAE;MAC9B,IAAI6E,UAAU,GAAG+B,eAAe,EAAE;AAChC5G,QAAAA,SAAS,GAAG,IAAI;AAClB,OAAC,MAAM;AACLC,QAAAA,WAAW,GAAG,IAAI;AACpB;AACF;IAEA,IAAI,CAACgD,QAAQ,CAAC;MAAEhD,WAAW;AAAED,MAAAA;AAAW,KAAA,CAAC;AAEzC,IAAA,IAAIA,SAAS,EAAE;MACb,MAAMsE,YAAY,GAAG,IAAI,CAACF,cAAc,CAACsC,wBAAwB,EAAEhH,KAAK,EAAE2E,GAAG,CAAC;AAC9E,MAAA,IAAI,CAACiB,WAAW,CACd,IAAI,CAACV,yBAAyB,CAACC,UAAU,CAAC,GAAGP,YAAY,GAAGoC,wBAAwB,CACrF;AAED,MAAA,MAAMG,cAAc,GAAG,IAAI,CAAC/B,iCAAiC,CAAC;AAC5D9C,QAAAA,eAAe,EAAE0E,wBAAwB;QACzCpC,YAAY;QACZ5E,KAAK;AACL2E,QAAAA;AACD,OAAA,CAAC;AAEF,MAAA,MAAM1E,UAAU,GAAGkH,cAAc,GAC7B,EAAE,IAAI,CAACrG,cAAc,GAAGF,QAAQ,CAAC,GAAGuG,cAAc,GAClD,KAAK;AAET,MAAA,IAAI,CAAC5D,QAAQ,CAAExD,KAAK,KAAM;QACxBW,YAAY,EAAE,CAAC,GAAGX,KAAK,CAACW,YAAY,EAAEiE,GAAG,CAAC;AAC1CzE,QAAAA,aAAa,EAAED,UAAU,IAAIF,KAAK,CAACG,aAAa;AAChDC,QAAAA,WAAW,EAAEF,UAAU,IAAIF,KAAK,CAACI;AAClC,OAAA,CAAC,CAAC;AACL;GACD;EAEDiH,cAAc,GAA6CrB,KAAK,IAAI;IAClE,MAAM;MAAE/F,KAAK;AAAEM,MAAAA;KAAW,GAAG,IAAI,CAACP,KAAK;IACvC,IAAIC,KAAK,IAAI,IAAI,EAAE;AACjB,MAAA;AACF;IAEA,MAAM;AAAEY,MAAAA;KAAU,GAAG,IAAI,CAACd,KAAK;AAC/B,IAAA,MAAM6E,GAAG,GAAU;MACjB0B,CAAC,EAAEN,KAAK,CAACO,WAAW,CAACW,cAAc,CAAC,CAAC,CAAC,CAACT,OAAO;MAC9CC,CAAC,EAAEV,KAAK,CAACO,WAAW,CAACW,cAAc,CAAC,CAAC,CAAC,CAACP,OAAO;AAC9CC,MAAAA,IAAI,EAAEC,IAAI,CAACC,GAAG;KACf;AACD,IAAA,MAAM1B,UAAU,GAAGE,wBAAkB,CAACrF,KAAK,EAAE2E,GAAG,CAAC;AACjD,IAAA,MAAM0C,QAAQ,GAAGC,iBAAW,CAAC,CAAC,GAAG,IAAI,CAACvH,KAAK,CAACW,YAAY,EAAEiE,GAAG,CAAC,CAAC;IAE/D,IAAI,CAACpB,QAAQ,CAAC;AACZ7C,MAAAA,YAAY,EAAE;AACf,KAAA,CAAC;IAEF,IAAIkE,YAAY,GAAGhE,QAAQ;IAE3BmF,KAAK,CAACe,OAAO,EAAE;AAEf,IAAA,IAAIxG,SAAS,EAAE;AACb,MAAA,IAAIiH,0BAAoB,CAACvH,KAAK,EAAE2E,GAAG,CAAC,IAAI,IAAI,CAACO,yBAAyB,CAACC,UAAU,CAAC,EAAE;QAClFP,YAAY,GAAG,IAAI,CAACF,cAAc,CAACE,YAAY,EAAE5E,KAAK,EAAE2E,GAAG,CAAC;AAC9D;MAEA,IAAIC,YAAY,KAAKhE,QAAQ,EAAE;AAC7B,QAAA,IAAI,CAACa,SAAS,CAACmD,YAAY,CAAC;QAE5B,IAAI,CAACrB,QAAQ,CAAC;AACZ/C,UAAAA,iBAAiB,EAAE6G;AACpB,SAAA,CAAC;AACJ,OAAC,MAAM;AACL,QAAA,IAAI,CAAC1F,YAAY,CAACiD,YAAY,CAAC;AACjC;AACF;IAEA,IAAI,CAACrB,QAAQ,CAAC;AAAEjD,MAAAA,SAAS,EAAE,KAAK;AAAEC,MAAAA,WAAW,EAAE;AAAK,KAAE,CAAC;GACxD;AAEDiH,EAAAA,MAAMA,GAAA;IACJ,MAAM;MAAEvG,IAAI;MAAE3B,gBAAgB;MAAEmI,IAAI;MAAE7G,QAAQ;MAAE8G,SAAS;MAAEnI,iBAAiB;AAAEC,MAAAA;KAAa,GACzF,IAAI,CAACM,KAAK;IACZ,MAAM;MACJQ,SAAS;MACTF,cAAc;MACdC,WAAW;MACXH,aAAa;MACbC,WAAW;MACXK,iBAAiB;AACjBC,MAAAA;KACD,GAAG,IAAI,CAACV,KAAK;AAEd,IAAA,MAAM4H,MAAM,GAAG9I,WAAW,CAACU,iBAAiB,CAAC;AAE7C,IAAA,MAAMqI,UAAU,GAAG,IAAI,CAAC5G,kBAAkB;AAE1C,IAAA,MAAM6G,cAAc,GAAG9C,IAAI,CAAC+C,GAAG,CAAC,CAAC5H,aAAa,GAAG,IAAI,CAACY,cAAc,GAAGF,QAAQ,CAAC;IAEhF,MAAMmH,0BAA0B,GAAGzH,SAAS,GACxC,CAAC,GAAGuH,cAAc,GAAG,IAAI,CAAC/G,cAAc,GACxC,CAAC,GAAGiE,IAAI,CAAC+C,GAAG,CAACD,cAAc,GAAG,IAAI,CAAC/G,cAAc,GAAG,CAAC,CAAC;AAE1D,IAAA,MAAMkH,kBAAkB,GACtB,CAACC,MAAM,CAACC,KAAK,CAACH,0BAA0B,CAAC,GAAG,CAAC,GAAGA,0BAA0B,IAC1EhD,IAAI,CAACE,GAAG,CAAC,EAAE,GAAGF,IAAI,CAACoD,CAAC,EAAE3H,iBAAiB,GAAG,EAAE,GAAGuE,IAAI,CAACoD,CAAC,CAAC;AAExD,IAAA,MAAMC,iBAAiB,GAAG/H,WAAW,IAAIC,SAAS;IAElD,MAAM+H,WAAW,GAAGT,UAAU,GAAG,IAAI,CAAC9G,cAAc,GAAG6G,MAAM,GAAG,CAAC;AAEjE;IACA,MAAMW,MAAM,GAAGA,CAAC;AAAEC,MAAAA;KAAoB,KACpCZ,MAAM,GAAG,CAAC,iBACRa,cAAA,CAAA,KAAA,EAAA;AAEEC,MAAAA,KAAK,EAAE;AACL/E,QAAAA,KAAK,EAAEiE,MAAM;AACbe,QAAAA,OAAO,EAAEN,iBAAiB,GAAG,OAAO,GAAG;;AACvC,KAAA,EAJGG,EAIH,CAEL;AAEH,IAAA,oBACEC,cAAA,CAACG,kCAAgB,CAACC,QAAQ,EAAA;MAAAC,QAAA,EACtBC,WAAS,IAAI;AACb,QAAA,MAAMC,KAAK,GAAGD,WAAS,KAAKE,mBAAS,CAACC,GAAG;AACzC,QAAA,oBACEC,eAAA,CAAA,KAAA,EAAA;UACEC,GAAG,EAAE,IAAI,CAACxJ,kBAAmB;AAC7B+H,UAAAA,SAAS,EAAE0B,SAAI,CAAC,MAAM,EAAE1B,SAAS,EAAE;AACjC,YAAA,kBAAkB,EAAElI,WAAW,KAAKC,WAAK,CAAC+E;WAC3C,CAAE;AACH6E,UAAAA,YAAY,EAAE/J,gBAAgB,GAAG,IAAI,CAAC8G,gBAAgB,GAAGkD,SAAU;AACnEC,UAAAA,UAAU,EAAEjK,gBAAgB,GAAG,IAAI,CAAC8H,cAAc,GAAGkC,SAAU;AAC/DE,UAAAA,WAAW,EAAElK,gBAAgB,GAAG,IAAI,CAACyH,eAAe,GAAGuC,SAAU;UAAAT,QAAA,EAAA,cAEjEK,eAAA,CAACO,eAAO,EAAA;AAAAZ,YAAAA,QAAA,EACL5H,CAAAA,IAAI,CAAC8C,GAAG,CAAC,CAAC;cAAE2F,KAAK;AAAEtI,cAAAA;aAAU,EAAEyC,KAAK,KAAI;cACvC,oBACE2E,cAAA,CAACmB,WAAG,EAAA;gBAEFR,GAAG,EAAG1F,IAAI,IAAI;AACZ,kBAAA,IAAI,CAAC1C,OAAO,CAAC8C,KAAK,CAAC,GAAGJ,IAAI;iBAC1B;AACF8E,gBAAAA,EAAE,EAAE,CAAA,EAAGd,IAAI,CAAA,KAAA,EAAQ5D,KAAK,CAAG,CAAA;AAC3B+F,gBAAAA,OAAO,EAAE,CAAA,EAAGnC,IAAI,CAAA,OAAA,EAAU5D,KAAK,CAAG,CAAA;gBAClCjD,QAAQ,EAAEA,QAAQ,KAAKiD,KAAM;AAC7BzC,gBAAAA,QAAQ,EAAEA,QAAS;gBACnByI,QAAQ,EAAEA,MAAK;AACb,kBAAA,IAAI,IAAI,CAAClK,kBAAkB,CAACmK,OAAO,EAAEC,QAAQ,CAACnI,QAAQ,CAACoI,aAAa,CAAC,EAAE;oBACrE,IAAI,CAACjJ,OAAO,CAAC8C,KAAK,CAAC,EAAEoG,KAAK,EAAE;AAC9B;iBACA;gBACFC,OAAO,EAAE9I,QAAQ,GAAGkI,SAAS,GAAG,IAAI,CAACrD,cAAc,CAACpC,KAAK,CAAE;AAC3DqC,gBAAAA,SAAS,EAAE,IAAI,CAACA,SAAS,CAACrC,KAAK,CAAE;AAAA,gBAAA,IAC5BpD,aAAa,GACd;AAAEgI,kBAAAA,KAAK,EAAE;oBAAE/E,KAAK,EAAE,GAAI,CAAC,GAAGzC,IAAI,CAACI,MAAM,GAAI,GAAG,CAAA,CAAA;;iBAAO,GACnD,EAAE,CAAA;AAAAwH,gBAAAA,QAAA,EAELa;AAAK,eAAA,EAnBDA,KAoBF,CAAC;AAEV,aAAC,CAAC,EACDtJ,cAAc,gBACboI,cAAA,CAAA,IAAA,EAAA;AACE2B,cAAAA,IAAI,EAAC,MAAM;AACXzC,cAAAA,SAAS,EAAC,YAAY;AACtBe,cAAAA,KAAK,EAAE;AACL/E,gBAAAA,KAAK,EAAE,IAAI,CAACe,eAAe,EAAE;gBAC7B2F,SAAS,EAAErB,KAAK,GACZ,CAAA,YAAA,EAAe3I,cAAc,CAAG,CAAA,CAAA,GAChC,cAAcA,cAAc,CAAA,CAAA;AACjC;cACD,GACA,IAAI;WACD,CACT,eAAAoI,cAAA,CAAA,KAAA,EAAA;YACEW,GAAG,EAAE,IAAI,CAAC3F,uBAAwB;AAClCkE,YAAAA,SAAS,EAAC,uBAAuB;AACjCe,YAAAA,KAAK,EAAE;AACL4B,cAAAA,QAAQ,EAAEjC,iBAAiB,GAAG,QAAQ,GAAG;aACzC;YAAAS,QAAA,eAEFL,cAAA,CAAC8B,UAAM,EAAA;AACLC,cAAAA,IAAI,EAAE;AACJH,gBAAAA,SAAS,EAAE,CAAA,WAAA,EAAclK,aAAa,GAAGyH,MAAM,CAAA,GAAA;eAC/C;AACF6C,cAAAA,EAAE,EAAE;AACFJ,gBAAAA,SAAS,EAAE,CAAA,WAAA,EAAcjK,WAAW,GAAGwH,MAAM,CAAA,GAAA;eAC7C;AACF8C,cAAAA,MAAM,EAAE;AACNC,gBAAAA,SAAS,EAAEpK,SAAS,GAAG,CAAC,GAAG,IAAI;AAC/B+G,gBAAAA,QAAQ,EAAE,CAAC/G,SAAS,GAAG0H,kBAAkB,GAAG,CAAC;AAC7CtG,gBAAAA,KAAK,EAAE;eACP;cACFiJ,MAAM,EAAEA,MAAK;AACX,gBAAA,IAAItK,WAAW,EAAE;kBACf,IAAI,CAACkD,QAAQ,CAAC;AACZlD,oBAAAA,WAAW,EAAE,KAAK;AAClBG,oBAAAA,iBAAiB,EAAE;AACpB,mBAAA,CAAC;AACJ;eACA;AAAAqI,cAAAA,QAAA,EAEA/I,KAAK,iBACL0I,cAAA,CAACoC,YAAQ,CAACC,GAAG,EAAA;AACXnD,gBAAAA,SAAS,EAAC,cAAc;AACxBe,gBAAAA,KAAK,EAAE;AACL/E,kBAAAA,KAAK,EAAE0E,iBAAiB,GAAG,GAAGC,WAAW,CAAA,EAAA,CAAI,GAAG,MAAM;AACtD+B,kBAAAA,SAAS,EAAEhC,iBAAiB,GAAGtI,KAAK,CAACsK,SAAS,GAAG;iBACjD;AAAAvB,gBAAAA,QAAA,EAED5H,IAAI,CAAC8C,GAAG,CAAC,CAAC;kBAAE+G,OAAO;AAAE1J,kBAAAA;iBAAU,EAAEyC,KAAK,KACrC,CAACzC,QAAQ,gBACP8H,eAAA,CAAC6B,cAAQ,EAAA;AAAAlC,kBAAAA,QAAA,GACNhF,KAAK,KAAKjD,QAAQ,iBAAI4H,cAAA,CAACF,MAAM,EAAA;AAACC,oBAAAA,EAAE,EAAC;AAAa,mBAAA,CAAG,eAClDC,cAAA,CAACwC,gBAAQ,EAAA;AAEPC,oBAAAA,KAAK,EAAE,CAAA,EAAGxD,IAAI,CAAA,KAAA,EAAQ5D,KAAK,CAAG,CAAA;AAC9B0E,oBAAAA,EAAE,EAAE,CAAA,EAAGd,IAAI,CAAA,OAAA,EAAU5D,KAAK,CAAG,CAAA;AAC7B4E,oBAAAA,KAAK,EAAE;sBACL/E,KAAK,EAAE0E,iBAAiB,GAAG,CAAA,EAAG,IAAI,CAACtH,cAAc,CAAI,EAAA,CAAA,GAAG,MAAM;sBAC9D4H,OAAO,EAAEN,iBAAiB,IAAIvE,KAAK,KAAKjD,QAAQ,GAAG,OAAO,GAAG;qBAC7D;AAAAiI,oBAAAA,QAAA,EAEDiC;AAAO,mBAAA,EARH7J,IAAI,CAAC4C,KAAK,CAAC,CAAC6F,KAST,CACV,EAAC7F,KAAK,KAAKjD,QAAQ,iBAAI4H,cAAA,CAACF,MAAM,EAAA;AAACC,oBAAAA,EAAE,EAAC;AAAc,mBAAA,CAAG;iBAbtC,EAAA,CAAA,EAAGtH,IAAI,CAAC4C,KAAK,CAAC,CAAC6F,KAAK,CAAA,SAAA,CAczB,CAAC,GACT,IAAI;eAEE;aAEV;AACV,WAAK,CACP;AAAA,SAAK,CAAC;AAEV;AAAC,KACwB,CAAC;AAEhC;;;;;"}
@@ -40,12 +40,12 @@ const SpacerWidth = {
40
40
  lg: 32
41
41
  };
42
42
  class Tabs extends Component {
43
- static defaultProps = (() => ({
43
+ static defaultProps = {
44
44
  changeTabOnSwipe: true,
45
45
  transitionSpacing: 'default',
46
46
  headerWidth: Width.BLOCK
47
- }))();
48
- containerReference = (() => /*#__PURE__*/createRef())();
47
+ };
48
+ containerReference = /*#__PURE__*/createRef();
49
49
  constructor(props) {
50
50
  super(props);
51
51
  this.state = {