@transferwise/components 46.138.0 → 46.139.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/flowNavigation/FlowNavigation.js +2 -4
- package/build/flowNavigation/FlowNavigation.js.map +1 -1
- package/build/flowNavigation/FlowNavigation.mjs +2 -4
- package/build/flowNavigation/FlowNavigation.mjs.map +1 -1
- package/build/loader/Loader.js +16 -6
- package/build/loader/Loader.js.map +1 -1
- package/build/loader/Loader.mjs +17 -7
- package/build/loader/Loader.mjs.map +1 -1
- package/build/main.css +16 -4
- package/build/moneyInput/MoneyInput.js +2 -1
- package/build/moneyInput/MoneyInput.js.map +1 -1
- package/build/moneyInput/MoneyInput.mjs +2 -1
- package/build/moneyInput/MoneyInput.mjs.map +1 -1
- package/build/styles/listItem/ListItem.css +1 -0
- package/build/styles/loader/Loader.css +14 -4
- package/build/styles/main.css +16 -4
- package/build/types/flowNavigation/FlowNavigation.d.ts.map +1 -1
- package/build/types/loader/Loader.d.ts +4 -1
- package/build/types/loader/Loader.d.ts.map +1 -1
- package/build/types/moneyInput/MoneyInput.d.ts +1 -0
- package/build/types/moneyInput/MoneyInput.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/flowNavigation/FlowNavigation.story.tsx +14 -9
- package/src/flowNavigation/FlowNavigation.test.js +2 -2
- package/src/flowNavigation/FlowNavigation.test.story.tsx +77 -0
- package/src/flowNavigation/FlowNavigation.tsx +2 -5
- package/src/listItem/ListItem.css +1 -0
- package/src/listItem/ListItem.less +1 -0
- package/src/loader/Loader.css +14 -4
- package/src/loader/Loader.less +54 -88
- package/src/loader/Loader.story.tsx +4 -0
- package/src/loader/Loader.test.tsx +20 -5
- package/src/loader/Loader.tsx +18 -7
- package/src/main.css +16 -4
- package/src/moneyInput/MoneyInput.story.tsx +20 -0
- package/src/moneyInput/MoneyInput.test.tsx +49 -0
- package/src/moneyInput/MoneyInput.tsx +2 -0
|
@@ -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 {\n Typography,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n getLocaleCurrencyName,\n} 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, formatNumber, getCurrencyDecimals, 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 decimals,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n if (typeof amount !== 'number') {\n return '';\n }\n if (decimals != null && getCurrencyDecimals(currency) !== 0) {\n return formatNumber(amount, locale, decimals);\n }\n return formatAmount(amount, currency, locale);\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n decimals,\n}: {\n amount: string;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n return parseAmount(amount, currency, locale, decimals);\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 * Specify the number of decimal places to format the amount. When not specified, the number of\n * decimals is determined by the selected currency (e.g. 2 for EUR, 0 for JPY, 3 for BHD).\n * This override is ignored for zero-decimal currencies (e.g. JPY, KRW, HUF), which always use 0.\n */\n decimals?: number;\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 decimals: props.decimals,\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 decimals: nextProps.decimals,\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 decimals: this.props.decimals,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n decimals: this.props.decimals,\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 decimals: this.props.decimals,\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 decimals: this.props.decimals,\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 decimals: this.props.decimals,\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 <fieldset\n aria-invalid={inputAttributes?.['aria-invalid']}\n aria-describedby={inputAttributes?.['aria-describedby']}\n aria-labelledby={inputAttributes?.id ?? amountInputId}\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={inputAttributes?.id ?? amountInputId}\n aria-labelledby={ariaLabelledBy}\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 decimals: this.props.decimals,\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 aria-label={getLocaleCurrencyName(this.props.intl, selectedCurrency.currency)}\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={\n withinTrigger ? (\n <span\n aria-label={getLocaleCurrencyName(this.props.intl, currency.currency)}\n >\n {currency.currency.toUpperCase()}\n </span>\n ) : (\n currency.label\n )\n }\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 </fieldset>\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","decimals","getCurrencyDecimals","formatNumber","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","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","getLocaleCurrencyName","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","role","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 {\n Typography,\n Size,\n SizeLarge,\n SizeMedium,\n SizeSmall,\n getLocaleCurrencyName,\n} 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, formatNumber, getCurrencyDecimals, 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 disabled?: boolean;\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 decimals,\n}: {\n amount: number | null | undefined;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n if (typeof amount !== 'number') {\n return '';\n }\n if (decimals != null && getCurrencyDecimals(currency) !== 0) {\n return formatNumber(amount, locale, decimals);\n }\n return formatAmount(amount, currency, locale);\n};\n\nconst parseNumber = ({\n amount,\n currency,\n locale,\n decimals,\n}: {\n amount: string;\n currency: string;\n locale: string;\n decimals?: number;\n}) => {\n return parseAmount(amount, currency, locale, decimals);\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 * Specify the number of decimal places to format the amount. When not specified, the number of\n * decimals is determined by the selected currency (e.g. 2 for EUR, 0 for JPY, 3 for BHD).\n * This override is ignored for zero-decimal currencies (e.g. JPY, KRW, HUF), which always use 0.\n */\n decimals?: number;\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 decimals: props.decimals,\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 decimals: nextProps.decimals,\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 decimals: this.props.decimals,\n });\n\n if (isNumberOrNull(parsed)) {\n this.setState({\n formattedAmount: formatAmountIfSet({\n amount: parsed,\n currency: this.props.selectedCurrency.currency,\n locale,\n decimals: this.props.decimals,\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 decimals: this.props.decimals,\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 disabled: item.disabled,\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 decimals: this.props.decimals,\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 decimals: this.props.decimals,\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 <fieldset\n aria-invalid={inputAttributes?.['aria-invalid']}\n aria-describedby={inputAttributes?.['aria-describedby']}\n aria-labelledby={inputAttributes?.id ?? amountInputId}\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={inputAttributes?.id ?? amountInputId}\n aria-labelledby={ariaLabelledBy}\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 decimals: this.props.decimals,\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 aria-label={getLocaleCurrencyName(this.props.intl, selectedCurrency.currency)}\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={\n withinTrigger ? (\n <span\n aria-label={getLocaleCurrencyName(this.props.intl, currency.currency)}\n >\n {currency.currency.toUpperCase()}\n </span>\n ) : (\n currency.label\n )\n }\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 </fieldset>\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","decimals","getCurrencyDecimals","formatNumber","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","disabled","previousState","handleSelectChange","handleSearchChange","onCurrencyChange","onSearchChange","filteredOptions","style","className","render","inputAttributes","id","amountInputId","ariaLabelledByProp","addon","ariaLabelledBy","hasSingleCurrency","length","firstItem","onCustomAction","customActionLabel","isFixedCurrency","selectedCurrencyElementId","_jsxs","clsx","children","_jsx","Input","inputMode","placeholder","autoComplete","onKeyDown","onChange","onFocus","onBlur","onPaste","Flag","code","toLowerCase","intrinsicSize","Title","as","Typography","TITLE_SUBSECTION","getLocaleCurrencyName","toUpperCase","translate","SelectInput","UNSAFE_triggerButtonProps","undefined","formatMessage","messages","selectCurrencyLabel","items","compareValues","renderValue","withinTrigger","SelectInputOptionContent","title","icon","renderFooter","role","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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"}
|
|
@@ -8,6 +8,16 @@
|
|
|
8
8
|
--coins-image: url("data:image/png;base64,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");
|
|
9
9
|
}
|
|
10
10
|
.tw-loader {
|
|
11
|
+
display: flex;
|
|
12
|
+
flex-direction: column;
|
|
13
|
+
align-items: center;
|
|
14
|
+
gap: 16px;
|
|
15
|
+
gap: var(--size-16);
|
|
16
|
+
width: 190px;
|
|
17
|
+
text-align: center;
|
|
18
|
+
word-break: break-word;
|
|
19
|
+
}
|
|
20
|
+
.tw-loader-asset {
|
|
11
21
|
overflow: hidden;
|
|
12
22
|
border-radius: 50%;
|
|
13
23
|
backface-visibility: hidden;
|
|
@@ -23,10 +33,10 @@
|
|
|
23
33
|
opacity: 0;
|
|
24
34
|
transition: opacity 300ms cubic-bezier(0.24, 0, 0.3, 1);
|
|
25
35
|
}
|
|
26
|
-
.tw-loader--visible {
|
|
36
|
+
.tw-loader-asset--visible {
|
|
27
37
|
opacity: 1;
|
|
28
38
|
}
|
|
29
|
-
.tw-loader::before {
|
|
39
|
+
.tw-loader-asset::before {
|
|
30
40
|
content: "";
|
|
31
41
|
display: block;
|
|
32
42
|
width: 4.5rem;
|
|
@@ -45,14 +55,14 @@
|
|
|
45
55
|
animation-delay: 0s;
|
|
46
56
|
animation-iteration-count: infinite;
|
|
47
57
|
}
|
|
48
|
-
.tw-loader--sm {
|
|
58
|
+
.tw-loader-asset--sm {
|
|
49
59
|
--coin-size: 3rem;
|
|
50
60
|
--coin-edge-width-offset: translateX(0.275rem);
|
|
51
61
|
--coin-edge-width-negative-offset: translateX(-0.275rem);
|
|
52
62
|
--box-shadow-forwards: 0.025rem 0 0 var(--coin-colour), 0.05rem 0 0 var(--coin-colour), 0.075rem 0 0 var(--coin-colour), 0.1rem 0 0 var(--coin-colour), 0.125rem 0 0 var(--coin-colour), 0.15rem 0 0 var(--coin-colour), 0.175rem 0 0 var(--coin-colour), 0.2rem 0 0 var(--coin-colour), 0.225rem 0 0 var(--coin-colour), 0.25rem 0 0 var(--coin-colour), 0.275rem 0 0 var(--coin-colour), 0.3rem 0 0 var(--coin-colour), 0.325rem 0 0 var(--coin-colour), 0.35rem 0 0 var(--coin-colour), 0.375rem 0 0 var(--coin-colour), 0.4rem 0 0 var(--coin-colour), 0.425rem 0 0 var(--coin-colour), 0.45rem 0 0 var(--coin-colour), 0.475rem 0 0 var(--coin-colour);
|
|
53
63
|
--box-shadow-backwards: -0.025rem 0 0 var(--coin-colour), -0.05rem 0 0 var(--coin-colour), -0.075rem 0 0 var(--coin-colour), -0.1rem 0 0 var(--coin-colour), -0.125rem 0 0 var(--coin-colour), -0.15rem 0 0 var(--coin-colour), -0.175rem 0 0 var(--coin-colour), -0.2rem 0 0 var(--coin-colour), -0.225rem 0 0 var(--coin-colour), -0.25rem 0 0 var(--coin-colour), -0.275rem 0 0 var(--coin-colour), -0.3rem 0 0 var(--coin-colour), -0.325rem 0 0 var(--coin-colour), -0.35rem 0 0 var(--coin-colour), -0.375rem 0 0 var(--coin-colour), -0.4rem 0 0 var(--coin-colour), -0.425rem 0 0 var(--coin-colour), -0.45rem 0 0 var(--coin-colour), -0.475rem 0 0 var(--coin-colour);
|
|
54
64
|
}
|
|
55
|
-
.tw-loader--md {
|
|
65
|
+
.tw-loader-asset--md {
|
|
56
66
|
--coin-size: 4.5rem;
|
|
57
67
|
--coin-edge-width-offset: translateX(0.375rem);
|
|
58
68
|
--coin-edge-width-negative-offset: translateX(-0.375rem);
|
package/build/styles/main.css
CHANGED
|
@@ -30086,6 +30086,7 @@ html:not([dir="rtl"]) .np-flow-navigation--sm .np-flow-navigation__stepper {
|
|
|
30086
30086
|
.wds-list-item-navigation .tw-icon-chevron-right {
|
|
30087
30087
|
color: #c9cbce;
|
|
30088
30088
|
color: var(--color-interactive-secondary);
|
|
30089
|
+
display: block;
|
|
30089
30090
|
}
|
|
30090
30091
|
|
|
30091
30092
|
.wds-list-item-control {
|
|
@@ -30838,6 +30839,17 @@ button.np-link {
|
|
|
30838
30839
|
}
|
|
30839
30840
|
|
|
30840
30841
|
.tw-loader {
|
|
30842
|
+
display: flex;
|
|
30843
|
+
flex-direction: column;
|
|
30844
|
+
align-items: center;
|
|
30845
|
+
gap: 16px;
|
|
30846
|
+
gap: var(--size-16);
|
|
30847
|
+
width: 190px;
|
|
30848
|
+
text-align: center;
|
|
30849
|
+
word-break: break-word;
|
|
30850
|
+
}
|
|
30851
|
+
|
|
30852
|
+
.tw-loader-asset {
|
|
30841
30853
|
overflow: hidden;
|
|
30842
30854
|
border-radius: 50%;
|
|
30843
30855
|
backface-visibility: hidden;
|
|
@@ -30854,11 +30866,11 @@ button.np-link {
|
|
|
30854
30866
|
transition: opacity 300ms cubic-bezier(0.24, 0, 0.3, 1);
|
|
30855
30867
|
}
|
|
30856
30868
|
|
|
30857
|
-
.tw-loader--visible {
|
|
30869
|
+
.tw-loader-asset--visible {
|
|
30858
30870
|
opacity: 1;
|
|
30859
30871
|
}
|
|
30860
30872
|
|
|
30861
|
-
.tw-loader::before {
|
|
30873
|
+
.tw-loader-asset::before {
|
|
30862
30874
|
content: "";
|
|
30863
30875
|
display: block;
|
|
30864
30876
|
width: 4.5rem;
|
|
@@ -30878,7 +30890,7 @@ button.np-link {
|
|
|
30878
30890
|
animation-iteration-count: infinite;
|
|
30879
30891
|
}
|
|
30880
30892
|
|
|
30881
|
-
.tw-loader--sm {
|
|
30893
|
+
.tw-loader-asset--sm {
|
|
30882
30894
|
--coin-size: 3rem;
|
|
30883
30895
|
--coin-edge-width-offset: translateX(0.275rem);
|
|
30884
30896
|
--coin-edge-width-negative-offset: translateX(-0.275rem);
|
|
@@ -30886,7 +30898,7 @@ button.np-link {
|
|
|
30886
30898
|
--box-shadow-backwards: -0.025rem 0 0 var(--coin-colour), -0.05rem 0 0 var(--coin-colour), -0.075rem 0 0 var(--coin-colour), -0.1rem 0 0 var(--coin-colour), -0.125rem 0 0 var(--coin-colour), -0.15rem 0 0 var(--coin-colour), -0.175rem 0 0 var(--coin-colour), -0.2rem 0 0 var(--coin-colour), -0.225rem 0 0 var(--coin-colour), -0.25rem 0 0 var(--coin-colour), -0.275rem 0 0 var(--coin-colour), -0.3rem 0 0 var(--coin-colour), -0.325rem 0 0 var(--coin-colour), -0.35rem 0 0 var(--coin-colour), -0.375rem 0 0 var(--coin-colour), -0.4rem 0 0 var(--coin-colour), -0.425rem 0 0 var(--coin-colour), -0.45rem 0 0 var(--coin-colour), -0.475rem 0 0 var(--coin-colour);
|
|
30887
30899
|
}
|
|
30888
30900
|
|
|
30889
|
-
.tw-loader--md {
|
|
30901
|
+
.tw-loader-asset--md {
|
|
30890
30902
|
--coin-size: 4.5rem;
|
|
30891
30903
|
--coin-edge-width-offset: translateX(0.375rem);
|
|
30892
30904
|
--coin-edge-width-negative-offset: translateX(-0.375rem);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FlowNavigation.d.ts","sourceRoot":"","sources":["../../../src/flowNavigation/FlowNavigation.tsx"],"names":[],"mappings":"AAOA,OAAgB,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAQxD,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,wBAAwB;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,sIAAsI;IACtI,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,wGAAwG;IACxG,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACxB;AAED,QAAA,MAAM,cAAc,GAAI,+DAQrB,mBAAmB,
|
|
1
|
+
{"version":3,"file":"FlowNavigation.d.ts","sourceRoot":"","sources":["../../../src/flowNavigation/FlowNavigation.tsx"],"names":[],"mappings":"AAOA,OAAgB,EAAE,KAAK,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAQxD,MAAM,WAAW,mBAAmB;IAClC,iBAAiB;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACzB,wBAAwB;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACvB,qBAAqB;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,2FAA2F;IAC3F,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,sIAAsI;IACtI,QAAQ,CAAC,EAAE,MAAM,IAAI,CAAC;IACtB,wGAAwG;IACxG,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;CACxB;AAED,QAAA,MAAM,cAAc,GAAI,+DAQrB,mBAAmB,gCAsErB,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { SizeExtraSmall, SizeSmall, SizeMedium, SizeLarge, SizeExtraLarge } from '../common';
|
|
2
3
|
type DeprecatedSize = SizeExtraSmall | SizeLarge | SizeExtraLarge;
|
|
3
4
|
type SizeType = SizeSmall | SizeMedium;
|
|
@@ -11,6 +12,8 @@ export type LoaderProps = {
|
|
|
11
12
|
size?: SizeType | DeprecatedSize;
|
|
12
13
|
/** @default false */
|
|
13
14
|
displayInstantly?: boolean;
|
|
15
|
+
/** Optional label displayed below the loader */
|
|
16
|
+
label?: ReactNode;
|
|
14
17
|
/** @default {} */
|
|
15
18
|
classNames?: Record<string, string>;
|
|
16
19
|
'data-testid'?: string;
|
|
@@ -25,6 +28,6 @@ export type LoaderProps = {
|
|
|
25
28
|
* @param root0.size
|
|
26
29
|
* @param root0.classNames
|
|
27
30
|
*/
|
|
28
|
-
declare const Loader: ({ small, size, displayInstantly, classNames, ...restProps }: LoaderProps) => import("react").JSX.Element;
|
|
31
|
+
declare const Loader: ({ small, size, displayInstantly, label, classNames, ...restProps }: LoaderProps) => import("react").JSX.Element;
|
|
29
32
|
export default Loader;
|
|
30
33
|
//# sourceMappingURL=Loader.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Loader.d.ts","sourceRoot":"","sources":["../../../src/loader/Loader.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Loader.d.ts","sourceRoot":"","sources":["../../../src/loader/Loader.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAuB,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAQ,cAAc,EAAE,SAAS,EAAE,UAAU,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAInG,KAAK,cAAc,GAAG,cAAc,GAAG,SAAS,GAAG,cAAc,CAAC;AAElE,KAAK,QAAQ,GAAG,SAAS,GAAG,UAAU,CAAC;AAEvC,MAAM,MAAM,WAAW,GAAG;IACxB;;;OAGG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,oBAAoB;IACpB,IAAI,CAAC,EAAE,QAAQ,GAAG,cAAc,CAAC;IACjC,qBAAqB;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,gDAAgD;IAChD,KAAK,CAAC,EAAE,SAAS,CAAC;IAElB,kBAAkB;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF;;;;;;;;;GASG;AACH,QAAA,MAAM,MAAM,GAAI,oEAOb,WAAW,gCAiDb,CAAC;AAgBF,eAAe,MAAM,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MoneyInput.d.ts","sourceRoot":"","sources":["../../../src/moneyInput/MoneyInput.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAc,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAGL,SAAS,EACT,UAAU,EACV,SAAS,EAEV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAuB,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,EAKL,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"MoneyInput.d.ts","sourceRoot":"","sources":["../../../src/moneyInput/MoneyInput.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAc,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE/D,OAAO,EAGL,SAAS,EACT,UAAU,EACV,SAAS,EAEV,MAAM,WAAW,CAAC;AACnB,OAAO,EAAuB,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAEnF,OAAO,EAKL,gBAAgB,EACjB,MAAM,uBAAuB,CAAC;AAO/B,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,KAAK,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,MAAM,YAAY,GAAG,kBAAkB,GAAG,kBAAkB,CAAC;AAoDnE,MAAM,WAAW,eAAgB,SAAQ,qBAAqB;IAC5D,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,UAAU,EAAE,SAAS,YAAY,EAAE,CAAC;IACpC,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,gBAAgB,CAAC,EAAE,CAAC,KAAK,EAAE,kBAAkB,KAAK,IAAI,CAAC;IACvD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,IAAI,CAAC,EAAE,SAAS,GAAG,UAAU,GAAG,SAAS,CAAC;IAC1C,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,KAAK,IAAI,CAAC;IAChD,KAAK,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACxB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B;;OAEG;IACH,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,WAAW,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,YAAY,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAC3F,iBAAiB,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IACpC,cAAc,CAAC,EAAE,MAAM,IAAI,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACpC,WAAW,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAC;IAC5D;;;;OAIG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,kCAAkC,GAAG,eAAe,GAC9D,OAAO,CAAC,wBAAwB,CAAC,CAAC;;;;;;;;AAqapC,wBAA2F"}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@ import { useState } from 'react';
|
|
|
3
3
|
import AvatarView from '../avatarView';
|
|
4
4
|
import Body from '../body';
|
|
5
5
|
import Button from '../button';
|
|
6
|
-
import { ProfileType, Typography } from '../common';
|
|
6
|
+
import { Breakpoint, ProfileType, Typography } from '../common';
|
|
7
7
|
import Logo from '../logo';
|
|
8
8
|
import OverlayHeader from '../overlayHeader';
|
|
9
9
|
import { lorem10 } from '../test-utils';
|
|
@@ -45,14 +45,14 @@ const meta: Meta<StoryArgs> = {
|
|
|
45
45
|
};
|
|
46
46
|
export default meta;
|
|
47
47
|
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
48
|
+
const viewports = [
|
|
49
|
+
Breakpoint.ZOOM_400 - 10,
|
|
50
|
+
Breakpoint.ZOOM_400 + 10,
|
|
51
|
+
Breakpoint.EXTRA_SMALL + 10,
|
|
52
|
+
Breakpoint.SMALL + 10,
|
|
53
|
+
Breakpoint.MEDIUM + 10,
|
|
54
|
+
Breakpoint.LARGE + 10,
|
|
55
|
+
];
|
|
56
56
|
|
|
57
57
|
export const Variants: Story = {
|
|
58
58
|
args: {
|
|
@@ -62,6 +62,11 @@ export const Variants: Story = {
|
|
|
62
62
|
done: false,
|
|
63
63
|
avatarURL: '../tapestry-01.png',
|
|
64
64
|
},
|
|
65
|
+
parameters: {
|
|
66
|
+
chromatic: {
|
|
67
|
+
viewports,
|
|
68
|
+
},
|
|
69
|
+
},
|
|
65
70
|
render: (args) => {
|
|
66
71
|
const [activeStep, setActiveStep] = useState(2);
|
|
67
72
|
const [closed, setClosed] = useState(false);
|
|
@@ -86,10 +86,10 @@ describe('FlowNavigation', () => {
|
|
|
86
86
|
expect(container.querySelector('.np-flow-navigation__stepper')).not.toBeInTheDocument();
|
|
87
87
|
});
|
|
88
88
|
|
|
89
|
-
it(`
|
|
89
|
+
it(`does not render stepper when steps is empty`, () => {
|
|
90
90
|
const { container } = render(<FlowNavigation {...props} steps={[]} />);
|
|
91
91
|
|
|
92
|
-
expect(container.querySelector('.np-flow-navigation__stepper')).toBeInTheDocument();
|
|
92
|
+
expect(container.querySelector('.np-flow-navigation__stepper')).not.toBeInTheDocument();
|
|
93
93
|
expect(container.querySelector('.tw-stepper')).not.toBeInTheDocument();
|
|
94
94
|
});
|
|
95
95
|
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
import { Meta, StoryObj } from '@storybook/react-webpack5';
|
|
2
|
+
import AvatarView from '../avatarView';
|
|
3
|
+
import { ProfileType } from '../common';
|
|
4
|
+
import Logo from '../logo';
|
|
5
|
+
import { allModes } from '../../.storybook/modes';
|
|
6
|
+
|
|
7
|
+
import FlowNavigation, { FlowNavigationProps } from './FlowNavigation';
|
|
8
|
+
|
|
9
|
+
const noop = () => {};
|
|
10
|
+
|
|
11
|
+
const baseProps: FlowNavigationProps = {
|
|
12
|
+
steps: [],
|
|
13
|
+
activeStep: 0,
|
|
14
|
+
avatar: <AvatarView profileType={ProfileType.PERSONAL} />,
|
|
15
|
+
logo: <Logo />,
|
|
16
|
+
onClose: noop,
|
|
17
|
+
onGoBack: noop,
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
const meta: Meta<typeof FlowNavigation> = {
|
|
21
|
+
component: FlowNavigation,
|
|
22
|
+
title: 'Navigation/FlowNavigation/Tests',
|
|
23
|
+
tags: ['!autodocs', '!manifest'],
|
|
24
|
+
parameters: {
|
|
25
|
+
padding: '0',
|
|
26
|
+
},
|
|
27
|
+
};
|
|
28
|
+
export default meta;
|
|
29
|
+
|
|
30
|
+
type Story = StoryObj<typeof FlowNavigation>;
|
|
31
|
+
|
|
32
|
+
export const EmptySteps: Story = {
|
|
33
|
+
parameters: {
|
|
34
|
+
chromatic: {
|
|
35
|
+
modes: {
|
|
36
|
+
tablet: allModes.tablet,
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
globals: {
|
|
41
|
+
viewport: 'tablet',
|
|
42
|
+
},
|
|
43
|
+
render: () => <FlowNavigation {...baseProps} />,
|
|
44
|
+
};
|
|
45
|
+
|
|
46
|
+
export const LongLabel: Story = {
|
|
47
|
+
parameters: {
|
|
48
|
+
chromatic: {
|
|
49
|
+
viewports: [360],
|
|
50
|
+
},
|
|
51
|
+
viewport: {
|
|
52
|
+
options: {
|
|
53
|
+
narrow: {
|
|
54
|
+
name: '360px',
|
|
55
|
+
styles: { width: '360px', height: '600px' },
|
|
56
|
+
type: 'mobile',
|
|
57
|
+
},
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
globals: {
|
|
62
|
+
viewport: 'narrow',
|
|
63
|
+
},
|
|
64
|
+
render: () => (
|
|
65
|
+
<FlowNavigation
|
|
66
|
+
{...baseProps}
|
|
67
|
+
steps={[
|
|
68
|
+
{ label: 'Amount', hoverLabel: '100 GBP', onClick: noop },
|
|
69
|
+
{ label: 'You', hoverLabel: 'Elena Durante', onClick: noop },
|
|
70
|
+
{ label: 'Kedvezményezett', hoverLabel: 'Daniele Tomboro', onClick: noop },
|
|
71
|
+
{ label: 'Review', hoverLabel: 'Antonio Dozortevo', onClick: noop },
|
|
72
|
+
{ label: 'Pay', hoverLabel: 'Enrico Gusso', onClick: noop },
|
|
73
|
+
]}
|
|
74
|
+
activeStep={2}
|
|
75
|
+
/>
|
|
76
|
+
),
|
|
77
|
+
};
|
|
@@ -95,16 +95,13 @@ const FlowNavigation = ({
|
|
|
95
95
|
</div>
|
|
96
96
|
}
|
|
97
97
|
bottomContent={
|
|
98
|
-
!done &&
|
|
99
|
-
(steps.length > 0 ? (
|
|
98
|
+
!done && steps.length > 0 ? (
|
|
100
99
|
<Stepper
|
|
101
100
|
activeStep={activeStep}
|
|
102
101
|
steps={steps}
|
|
103
102
|
className={clsx('np-flow-navigation__stepper')}
|
|
104
103
|
/>
|
|
105
|
-
) :
|
|
106
|
-
<div className="np-flow-navigation__stepper" />
|
|
107
|
-
))
|
|
104
|
+
) : null
|
|
108
105
|
}
|
|
109
106
|
layout={!screenLg ? Layout.VERTICAL : Layout.HORIZONTAL}
|
|
110
107
|
/>
|