@ledgerhq/lumen-ui-rnative 0.1.47 → 0.1.49
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/dist/module/i18n/locales/de.json +1 -3
- package/dist/module/i18n/locales/en.json +1 -3
- package/dist/module/i18n/locales/es.json +1 -3
- package/dist/module/i18n/locales/fr.json +1 -3
- package/dist/module/i18n/locales/ja.json +1 -3
- package/dist/module/i18n/locales/ko.json +1 -3
- package/dist/module/i18n/locales/pt.json +1 -3
- package/dist/module/i18n/locales/ru.json +1 -3
- package/dist/module/i18n/locales/th.json +1 -3
- package/dist/module/i18n/locales/tr.json +1 -3
- package/dist/module/i18n/locales/zh.json +1 -3
- package/dist/module/lib/Animations/Pulse/Pulse.js +3 -3
- package/dist/module/lib/Animations/Pulse/Pulse.js.map +1 -1
- package/dist/module/lib/Animations/Pulse/Pulse.mdx +0 -1
- package/dist/module/lib/Animations/Spin/Spin.js +3 -3
- package/dist/module/lib/Animations/Spin/Spin.js.map +1 -1
- package/dist/module/lib/Animations/Spin/Spin.mdx +0 -1
- package/dist/module/lib/Components/AddressInput/AddressInput.figma.js +36 -0
- package/dist/module/lib/Components/AddressInput/AddressInput.figma.js.map +1 -0
- package/dist/module/lib/Components/AddressInput/AddressInput.mdx +0 -183
- package/dist/module/lib/Components/AmountDisplay/AmountDisplay.figma.js +31 -0
- package/dist/module/lib/Components/AmountDisplay/AmountDisplay.figma.js.map +1 -0
- package/dist/module/lib/Components/AmountDisplay/AmountDisplay.mdx +0 -90
- package/dist/module/lib/Components/AmountInput/AmountInput.figma.js +70 -0
- package/dist/module/lib/Components/AmountInput/AmountInput.figma.js.map +1 -0
- package/dist/module/lib/Components/AmountInput/AmountInput.js +3 -1
- package/dist/module/lib/Components/AmountInput/AmountInput.js.map +1 -1
- package/dist/module/lib/Components/AmountInput/AmountInput.mdx +0 -190
- package/dist/module/lib/Components/AmountInput/AmountInput.stories.js +15 -0
- package/dist/module/lib/Components/AmountInput/AmountInput.stories.js.map +1 -1
- package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.js +1 -1
- package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.js.map +1 -1
- package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.test.js +20 -1
- package/dist/module/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.test.js.map +1 -1
- package/dist/module/lib/Components/Avatar/Avatar.figma.js +15 -12
- package/dist/module/lib/Components/Avatar/Avatar.figma.js.map +1 -1
- package/dist/module/lib/Components/Avatar/Avatar.js +4 -27
- package/dist/module/lib/Components/Avatar/Avatar.js.map +1 -1
- package/dist/module/lib/Components/Avatar/Avatar.mdx +53 -69
- package/dist/module/lib/Components/Avatar/Avatar.stories.js +27 -33
- package/dist/module/lib/Components/Avatar/Avatar.stories.js.map +1 -1
- package/dist/module/lib/Components/Avatar/Avatar.test.js +21 -39
- package/dist/module/lib/Components/Avatar/Avatar.test.js.map +1 -1
- package/dist/module/lib/Components/Banner/Banner.figma.js +107 -0
- package/dist/module/lib/Components/Banner/Banner.figma.js.map +1 -0
- package/dist/module/lib/Components/Banner/Banner.mdx +0 -86
- package/dist/module/lib/Components/BottomSheet/BottomSheet.figma.js +49 -0
- package/dist/module/lib/Components/BottomSheet/BottomSheet.figma.js.map +1 -0
- package/dist/module/lib/Components/BottomSheet/BottomSheet.mdx +0 -119
- package/dist/module/lib/Components/Button/Button.figma.js +45 -0
- package/dist/module/lib/Components/Button/Button.figma.js.map +1 -0
- package/dist/module/lib/Components/Button/Button.mdx +25 -224
- package/dist/module/lib/Components/Button/Button.stories.js +4 -36
- package/dist/module/lib/Components/Button/Button.stories.js.map +1 -1
- package/dist/module/lib/Components/Card/Card.figma.js +143 -0
- package/dist/module/lib/Components/Card/Card.figma.js.map +1 -0
- package/dist/module/lib/Components/Card/Card.mdx +0 -160
- package/dist/module/lib/Components/CardButton/CardButton.figma.js +38 -0
- package/dist/module/lib/Components/CardButton/CardButton.figma.js.map +1 -0
- package/dist/module/lib/Components/CardButton/CardButton.mdx +0 -48
- package/dist/module/lib/Components/Checkbox/Checkbox.figma.js +48 -0
- package/dist/module/lib/Components/Checkbox/Checkbox.figma.js.map +1 -0
- package/dist/module/lib/Components/Checkbox/Checkbox.mdx +0 -73
- package/dist/module/lib/Components/ContentBanner/ContentBanner.figma.js +91 -0
- package/dist/module/lib/Components/ContentBanner/ContentBanner.figma.js.map +1 -0
- package/dist/module/lib/Components/ContentBanner/ContentBanner.mdx +0 -2
- package/dist/module/lib/Components/CryptoIcon/CryptoIcon.figma.js +17 -0
- package/dist/module/lib/Components/CryptoIcon/CryptoIcon.figma.js.map +1 -0
- package/dist/module/lib/Components/DescriptionItem/DescriptionItem.figma.js +29 -0
- package/dist/module/lib/Components/DescriptionItem/DescriptionItem.figma.js.map +1 -0
- package/dist/module/lib/Components/Divider/Divider.figma.js +10 -0
- package/dist/module/lib/Components/Divider/Divider.figma.js.map +1 -0
- package/dist/module/lib/Components/Divider/Divider.mdx +0 -2
- package/dist/module/lib/Components/DotCount/DotCount.figma.js +29 -0
- package/dist/module/lib/Components/DotCount/DotCount.figma.js.map +1 -0
- package/dist/module/lib/Components/DotIndicator/DotIndicator.figma.js +29 -0
- package/dist/module/lib/Components/DotIndicator/DotIndicator.figma.js.map +1 -0
- package/dist/module/lib/Components/DotIndicator/DotIndicator.stories.js +6 -3
- package/dist/module/lib/Components/DotIndicator/DotIndicator.stories.js.map +1 -1
- package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.js +17 -0
- package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.js.map +1 -0
- package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.test.js +17 -0
- package/dist/module/lib/Components/DotIndicator/getDotIndicatorProps.test.js.map +1 -0
- package/dist/module/lib/Components/DotIndicator/index.js +1 -0
- package/dist/module/lib/Components/DotIndicator/index.js.map +1 -1
- package/dist/module/lib/Components/Icon/Icon.figma.js +1840 -0
- package/dist/module/lib/Components/Icon/Icon.figma.js.map +1 -0
- package/dist/module/lib/Components/Icon/Icon.mdx +0 -62
- package/dist/module/lib/Components/IconButton/IconButton.figma.js +42 -0
- package/dist/module/lib/Components/IconButton/IconButton.figma.js.map +1 -0
- package/dist/module/lib/Components/IconButton/IconButton.mdx +0 -68
- package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.figma.js +51 -0
- package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.figma.js.map +1 -0
- package/dist/module/lib/Components/InteractiveIcon/InteractiveIcon.mdx +0 -107
- package/dist/module/lib/Components/Link/Link.figma.js +41 -0
- package/dist/module/lib/Components/Link/Link.figma.js.map +1 -0
- package/dist/module/lib/Components/Link/Link.mdx +0 -102
- package/dist/module/lib/Components/ListItem/ListItem.figma.js +416 -0
- package/dist/module/lib/Components/ListItem/ListItem.figma.js.map +1 -0
- package/dist/module/lib/Components/ListItem/ListItem.mdx +0 -129
- package/dist/module/lib/Components/MediaBanner/MediaBanner.figma.js +25 -0
- package/dist/module/lib/Components/MediaBanner/MediaBanner.figma.js.map +1 -0
- package/dist/module/lib/Components/MediaBanner/MediaBanner.mdx +0 -3
- package/dist/module/lib/Components/MediaButton/MediaButton.figma.js +72 -0
- package/dist/module/lib/Components/MediaButton/MediaButton.figma.js.map +1 -0
- package/dist/module/lib/Components/MediaCard/MediaCard.figma.js +28 -0
- package/dist/module/lib/Components/MediaCard/MediaCard.figma.js.map +1 -0
- package/dist/module/lib/Components/MediaCard/MediaCard.mdx +0 -2
- package/dist/module/lib/Components/MediaImage/MediaImage.mdx +0 -1
- package/dist/module/lib/Components/MediaTag/MediaTag.figma.js +100 -0
- package/dist/module/lib/Components/MediaTag/MediaTag.figma.js.map +1 -0
- package/dist/module/lib/Components/MediaTag/MediaTag.mdx +0 -2
- package/dist/module/lib/Components/NavBar/NavBar.figma.js +79 -0
- package/dist/module/lib/Components/NavBar/NavBar.figma.js.map +1 -0
- package/dist/module/lib/Components/NavBar/NavBar.mdx +0 -2
- package/dist/module/lib/Components/OptionList/OptionList.js +16 -1
- package/dist/module/lib/Components/OptionList/OptionList.js.map +1 -1
- package/dist/module/lib/Components/OptionList/OptionList.mdx +45 -90
- package/dist/module/lib/Components/OptionList/OptionList.stories.js +61 -1
- package/dist/module/lib/Components/OptionList/OptionList.stories.js.map +1 -1
- package/dist/module/lib/Components/OptionList/OptionList.test.js +43 -1
- package/dist/module/lib/Components/OptionList/OptionList.test.js.map +1 -1
- package/dist/module/lib/Components/OptionList/useOptionList/useOptionListItems.js.map +1 -1
- package/dist/module/lib/Components/PageIndicator/PageIndicator.figma.js +13 -0
- package/dist/module/lib/Components/PageIndicator/PageIndicator.figma.js.map +1 -0
- package/dist/module/lib/Components/PageIndicator/PageIndicator.mdx +0 -2
- package/dist/module/lib/Components/SearchInput/SearchInput.figma.js +31 -0
- package/dist/module/lib/Components/SearchInput/SearchInput.figma.js.map +1 -0
- package/dist/module/lib/Components/SearchInput/SearchInput.mdx +0 -199
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.figma.js +35 -0
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.figma.js.map +1 -0
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.js +7 -1
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.js.map +1 -1
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.mdx +28 -1
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.stories.js +24 -1
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.stories.js.map +1 -1
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.test.js +28 -1
- package/dist/module/lib/Components/SegmentedControl/SegmentedControl.test.js.map +1 -1
- package/dist/module/lib/Components/Skeleton/Skeleton.figma.js +18 -0
- package/dist/module/lib/Components/Skeleton/Skeleton.figma.js.map +1 -0
- package/dist/module/lib/Components/Skeleton/Skeleton.mdx +0 -71
- package/dist/module/lib/Components/Spinner/Spinner.figma.js +13 -0
- package/dist/module/lib/Components/Spinner/Spinner.figma.js.map +1 -0
- package/dist/module/lib/Components/Spinner/Spinner.mdx +0 -100
- package/dist/module/lib/Components/Spot/Spot.figma.js +37 -0
- package/dist/module/lib/Components/Spot/Spot.figma.js.map +1 -0
- package/dist/module/lib/Components/Spot/Spot.mdx +0 -94
- package/dist/module/lib/Components/Stepper/Stepper.figma.js +13 -0
- package/dist/module/lib/Components/Stepper/Stepper.figma.js.map +1 -0
- package/dist/module/lib/Components/Stepper/Stepper.mdx +0 -67
- package/dist/module/lib/Components/Subheader/Subheader.figma.js +67 -0
- package/dist/module/lib/Components/Subheader/Subheader.figma.js.map +1 -0
- package/dist/module/lib/Components/Subheader/Subheader.mdx +0 -116
- package/dist/module/lib/Components/Switch/Switch.figma.js +58 -0
- package/dist/module/lib/Components/Switch/Switch.figma.js.map +1 -0
- package/dist/module/lib/Components/Switch/Switch.mdx +0 -39
- package/dist/module/lib/Components/TabBar/TabBar.figma.js +98 -0
- package/dist/module/lib/Components/TabBar/TabBar.figma.js.map +1 -0
- package/dist/module/lib/Components/TabBar/TabBar.js +7 -4
- package/dist/module/lib/Components/TabBar/TabBar.js.map +1 -1
- package/dist/module/lib/Components/TabBar/TabBar.mdx +29 -5
- package/dist/module/lib/Components/TabBar/TabBar.stories.js +35 -1
- package/dist/module/lib/Components/TabBar/TabBar.stories.js.map +1 -1
- package/dist/module/lib/Components/TabBar/TabBar.test.js +28 -1
- package/dist/module/lib/Components/TabBar/TabBar.test.js.map +1 -1
- package/dist/module/lib/Components/TabBar/index.js +2 -1
- package/dist/module/lib/Components/TabBar/index.js.map +1 -1
- package/dist/module/lib/Components/Tag/Tag.figma.js +41 -0
- package/dist/module/lib/Components/Tag/Tag.figma.js.map +1 -0
- package/dist/module/lib/Components/Tag/Tag.mdx +0 -2
- package/dist/module/lib/Components/TextInput/TextInput.figma.js +37 -0
- package/dist/module/lib/Components/TextInput/TextInput.figma.js.map +1 -0
- package/dist/module/lib/Components/TextInput/TextInput.mdx +0 -178
- package/dist/module/lib/Components/Tile/Tile.figma.js +111 -0
- package/dist/module/lib/Components/Tile/Tile.figma.js.map +1 -0
- package/dist/module/lib/Components/Tile/Tile.mdx +0 -53
- package/dist/module/lib/Components/TileButton/TileButton.figma.js +23 -0
- package/dist/module/lib/Components/TileButton/TileButton.figma.js.map +1 -0
- package/dist/module/lib/Components/TileButton/TileButton.mdx +0 -40
- package/dist/module/lib/Components/Tooltip/Tooltip.figma.js +26 -0
- package/dist/module/lib/Components/Tooltip/Tooltip.figma.js.map +1 -0
- package/dist/module/lib/Components/Tooltip/Tooltip.mdx +0 -183
- package/dist/module/lib/Components/Trend/Trend.figma.js +29 -0
- package/dist/module/lib/Components/Trend/Trend.figma.js.map +1 -0
- package/dist/module/lib/Components/Trend/Trend.mdx +0 -2
- package/dist/module/lib/Components/Utility/Text/Text.mdx +0 -1
- package/dist/module/lib/Symbols/Icons/ChevronAscending.js +1 -1
- package/dist/module/lib/Symbols/Icons/ChevronDescending.js +1 -1
- package/dist/module/lib/Symbols/Icons/Contact.js +50 -0
- package/dist/module/lib/Symbols/Icons/Contact.js.map +1 -0
- package/dist/module/lib/Symbols/index.js +1 -0
- package/dist/module/lib/Symbols/index.js.map +1 -1
- package/dist/typescript/src/lib/Animations/Pulse/Pulse.d.ts.map +1 -1
- package/dist/typescript/src/lib/Animations/Spin/Spin.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/AmountInput.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/types.d.ts +8 -0
- package/dist/typescript/src/lib/Components/AmountInput/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.d.ts +1 -0
- package/dist/typescript/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts +1 -4
- package/dist/typescript/src/lib/Components/Avatar/Avatar.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/Avatar/types.d.ts +0 -6
- package/dist/typescript/src/lib/Components/Avatar/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/DotIndicator/getDotIndicatorProps.d.ts +24 -0
- package/dist/typescript/src/lib/Components/DotIndicator/getDotIndicatorProps.d.ts.map +1 -0
- package/dist/typescript/src/lib/Components/DotIndicator/index.d.ts +1 -0
- package/dist/typescript/src/lib/Components/DotIndicator/index.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/OptionList/OptionList.d.ts +18 -4
- package/dist/typescript/src/lib/Components/OptionList/OptionList.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/OptionList/types.d.ts +16 -15
- package/dist/typescript/src/lib/Components/OptionList/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/OptionList/useOptionList/useOptionListItems.d.ts +9 -9
- package/dist/typescript/src/lib/Components/OptionList/useOptionList/useOptionListItems.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControl.d.ts +8 -3
- package/dist/typescript/src/lib/Components/SegmentedControl/SegmentedControl.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/SegmentedControl/types.d.ts +6 -5
- package/dist/typescript/src/lib/Components/SegmentedControl/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/TabBar/TabBar.d.ts +7 -2
- package/dist/typescript/src/lib/Components/TabBar/TabBar.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/TabBar/index.d.ts +2 -2
- package/dist/typescript/src/lib/Components/TabBar/index.d.ts.map +1 -1
- package/dist/typescript/src/lib/Components/TabBar/types.d.ts +17 -16
- package/dist/typescript/src/lib/Components/TabBar/types.d.ts.map +1 -1
- package/dist/typescript/src/lib/Symbols/Icons/Contact.d.ts +35 -0
- package/dist/typescript/src/lib/Symbols/Icons/Contact.d.ts.map +1 -0
- package/dist/typescript/src/lib/Symbols/index.d.ts +1 -0
- package/dist/typescript/src/lib/Symbols/index.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/i18n/locales/de.json +1 -3
- package/src/i18n/locales/en.json +1 -3
- package/src/i18n/locales/es.json +1 -3
- package/src/i18n/locales/fr.json +1 -3
- package/src/i18n/locales/ja.json +1 -3
- package/src/i18n/locales/ko.json +1 -3
- package/src/i18n/locales/pt.json +1 -3
- package/src/i18n/locales/ru.json +1 -3
- package/src/i18n/locales/th.json +1 -3
- package/src/i18n/locales/tr.json +1 -3
- package/src/i18n/locales/zh.json +1 -3
- package/src/lib/Animations/Pulse/Pulse.mdx +0 -1
- package/src/lib/Animations/Pulse/Pulse.tsx +8 -1
- package/src/lib/Animations/Spin/Spin.mdx +0 -1
- package/src/lib/Animations/Spin/Spin.tsx +8 -1
- package/src/lib/Components/AddressInput/AddressInput.figma.tsx +39 -0
- package/src/lib/Components/AddressInput/AddressInput.mdx +0 -183
- package/src/lib/Components/AmountDisplay/AmountDisplay.figma.tsx +37 -0
- package/src/lib/Components/AmountDisplay/AmountDisplay.mdx +0 -90
- package/src/lib/Components/AmountInput/AmountInput.figma.tsx +78 -0
- package/src/lib/Components/AmountInput/AmountInput.mdx +0 -190
- package/src/lib/Components/AmountInput/AmountInput.stories.tsx +14 -0
- package/src/lib/Components/AmountInput/AmountInput.tsx +2 -0
- package/src/lib/Components/AmountInput/types.ts +8 -0
- package/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.test.ts +20 -0
- package/src/lib/Components/AmountInput/useAmountInputFormatting/useAmountInputFormatting.ts +2 -0
- package/src/lib/Components/Avatar/Avatar.figma.tsx +24 -14
- package/src/lib/Components/Avatar/Avatar.mdx +53 -69
- package/src/lib/Components/Avatar/Avatar.stories.tsx +16 -50
- package/src/lib/Components/Avatar/Avatar.test.tsx +12 -32
- package/src/lib/Components/Avatar/Avatar.tsx +4 -34
- package/src/lib/Components/Avatar/types.ts +0 -6
- package/src/lib/Components/Banner/Banner.figma.tsx +115 -0
- package/src/lib/Components/Banner/Banner.mdx +0 -86
- package/src/lib/Components/BottomSheet/BottomSheet.figma.tsx +52 -0
- package/src/lib/Components/BottomSheet/BottomSheet.mdx +0 -119
- package/src/lib/Components/Button/Button.figma.tsx +57 -0
- package/src/lib/Components/Button/Button.mdx +25 -224
- package/src/lib/Components/Button/Button.stories.tsx +3 -35
- package/src/lib/Components/Card/Card.figma.tsx +149 -0
- package/src/lib/Components/Card/Card.mdx +0 -160
- package/src/lib/Components/CardButton/CardButton.figma.tsx +49 -0
- package/src/lib/Components/CardButton/CardButton.mdx +0 -48
- package/src/lib/Components/Checkbox/Checkbox.figma.tsx +54 -0
- package/src/lib/Components/Checkbox/Checkbox.mdx +0 -73
- package/src/lib/Components/ContentBanner/ContentBanner.figma.tsx +108 -0
- package/src/lib/Components/ContentBanner/ContentBanner.mdx +0 -2
- package/src/lib/Components/CryptoIcon/CryptoIcon.figma.tsx +20 -0
- package/src/lib/Components/DescriptionItem/DescriptionItem.figma.tsx +36 -0
- package/src/lib/Components/Divider/Divider.figma.tsx +11 -0
- package/src/lib/Components/Divider/Divider.mdx +0 -2
- package/src/lib/Components/DotCount/DotCount.figma.tsx +32 -0
- package/src/lib/Components/DotIndicator/DotIndicator.figma.tsx +32 -0
- package/src/lib/Components/DotIndicator/DotIndicator.stories.tsx +4 -1
- package/src/lib/Components/DotIndicator/getDotIndicatorProps.test.ts +15 -0
- package/src/lib/Components/DotIndicator/getDotIndicatorProps.ts +10 -0
- package/src/lib/Components/DotIndicator/index.ts +1 -0
- package/src/lib/Components/Icon/Icon.figma.tsx +3085 -0
- package/src/lib/Components/Icon/Icon.mdx +0 -62
- package/src/lib/Components/IconButton/IconButton.figma.tsx +53 -0
- package/src/lib/Components/IconButton/IconButton.mdx +0 -68
- package/src/lib/Components/InteractiveIcon/InteractiveIcon.figma.tsx +52 -0
- package/src/lib/Components/InteractiveIcon/InteractiveIcon.mdx +0 -107
- package/src/lib/Components/Link/Link.figma.tsx +53 -0
- package/src/lib/Components/Link/Link.mdx +0 -102
- package/src/lib/Components/ListItem/ListItem.figma.tsx +431 -0
- package/src/lib/Components/ListItem/ListItem.mdx +0 -129
- package/src/lib/Components/MediaBanner/MediaBanner.figma.tsx +32 -0
- package/src/lib/Components/MediaBanner/MediaBanner.mdx +0 -3
- package/src/lib/Components/MediaButton/MediaButton.figma.tsx +60 -0
- package/src/lib/Components/MediaCard/MediaCard.figma.tsx +27 -0
- package/src/lib/Components/MediaCard/MediaCard.mdx +0 -2
- package/src/lib/Components/MediaImage/MediaImage.mdx +0 -1
- package/src/lib/Components/MediaTag/MediaTag.figma.tsx +116 -0
- package/src/lib/Components/MediaTag/MediaTag.mdx +0 -2
- package/src/lib/Components/NavBar/NavBar.figma.tsx +84 -0
- package/src/lib/Components/NavBar/NavBar.mdx +0 -2
- package/src/lib/Components/OptionList/OptionList.mdx +45 -90
- package/src/lib/Components/OptionList/OptionList.stories.tsx +63 -0
- package/src/lib/Components/OptionList/OptionList.test.tsx +40 -0
- package/src/lib/Components/OptionList/OptionList.tsx +57 -10
- package/src/lib/Components/OptionList/types.ts +34 -15
- package/src/lib/Components/OptionList/useOptionList/useOptionListItems.ts +28 -13
- package/src/lib/Components/PageIndicator/PageIndicator.figma.tsx +11 -0
- package/src/lib/Components/PageIndicator/PageIndicator.mdx +0 -2
- package/src/lib/Components/SearchInput/SearchInput.figma.tsx +34 -0
- package/src/lib/Components/SearchInput/SearchInput.mdx +0 -199
- package/src/lib/Components/SegmentedControl/SegmentedControl.figma.tsx +34 -0
- package/src/lib/Components/SegmentedControl/SegmentedControl.mdx +28 -1
- package/src/lib/Components/SegmentedControl/SegmentedControl.stories.tsx +34 -1
- package/src/lib/Components/SegmentedControl/SegmentedControl.test.tsx +32 -1
- package/src/lib/Components/SegmentedControl/SegmentedControl.tsx +22 -5
- package/src/lib/Components/SegmentedControl/types.ts +11 -5
- package/src/lib/Components/Skeleton/Skeleton.figma.tsx +17 -0
- package/src/lib/Components/Skeleton/Skeleton.mdx +0 -71
- package/src/lib/Components/Spinner/Spinner.figma.tsx +12 -0
- package/src/lib/Components/Spinner/Spinner.mdx +0 -100
- package/src/lib/Components/Spot/Spot.figma.tsx +50 -0
- package/src/lib/Components/Spot/Spot.mdx +0 -94
- package/src/lib/Components/Stepper/Stepper.figma.tsx +11 -0
- package/src/lib/Components/Stepper/Stepper.mdx +0 -67
- package/src/lib/Components/Subheader/Subheader.figma.tsx +72 -0
- package/src/lib/Components/Subheader/Subheader.mdx +0 -116
- package/src/lib/Components/Switch/Switch.figma.tsx +66 -0
- package/src/lib/Components/Switch/Switch.mdx +0 -39
- package/src/lib/Components/TabBar/TabBar.figma.tsx +70 -0
- package/src/lib/Components/TabBar/TabBar.mdx +29 -5
- package/src/lib/Components/TabBar/TabBar.stories.tsx +34 -1
- package/src/lib/Components/TabBar/TabBar.test.tsx +23 -1
- package/src/lib/Components/TabBar/TabBar.tsx +17 -9
- package/src/lib/Components/TabBar/index.ts +2 -2
- package/src/lib/Components/TabBar/types.ts +19 -17
- package/src/lib/Components/Tag/Tag.figma.tsx +52 -0
- package/src/lib/Components/Tag/Tag.mdx +0 -2
- package/src/lib/Components/TextInput/TextInput.figma.tsx +40 -0
- package/src/lib/Components/TextInput/TextInput.mdx +0 -178
- package/src/lib/Components/Tile/Tile.figma.tsx +113 -0
- package/src/lib/Components/Tile/Tile.mdx +0 -53
- package/src/lib/Components/TileButton/TileButton.figma.tsx +35 -0
- package/src/lib/Components/TileButton/TileButton.mdx +0 -40
- package/src/lib/Components/Tooltip/Tooltip.figma.tsx +30 -0
- package/src/lib/Components/Tooltip/Tooltip.mdx +0 -183
- package/src/lib/Components/Trend/Trend.figma.tsx +28 -0
- package/src/lib/Components/Trend/Trend.mdx +0 -2
- package/src/lib/Components/Utility/Text/Text.mdx +0 -1
- package/src/lib/Symbols/Icons/ChevronAscending.tsx +1 -1
- package/src/lib/Symbols/Icons/ChevronDescending.tsx +1 -1
- package/src/lib/Symbols/Icons/Contact.tsx +45 -0
- package/src/lib/Symbols/index.ts +1 -0
- package/dist/typescript/src/lib/Components/Avatar/Avatar.figma.d.ts +0 -2
- package/dist/typescript/src/lib/Components/Avatar/Avatar.figma.d.ts.map +0 -1
- package/dist/typescript/src/lib/Components/OptionList/OptionList.figma.d.ts +0 -2
- package/dist/typescript/src/lib/Components/OptionList/OptionList.figma.d.ts.map +0 -1
|
@@ -3,7 +3,7 @@ import {
|
|
|
3
3
|
useDisabledContext,
|
|
4
4
|
DisabledProvider,
|
|
5
5
|
} from '@ledgerhq/lumen-utils-shared';
|
|
6
|
-
import { Fragment, type ReactNode } from 'react';
|
|
6
|
+
import { Fragment, type ReactElement, type ReactNode } from 'react';
|
|
7
7
|
import { StyleSheet, View } from 'react-native';
|
|
8
8
|
import { useStyleSheet } from '../../../styles';
|
|
9
9
|
import { Check, ChevronDown } from '../../Symbols';
|
|
@@ -27,13 +27,17 @@ import type {
|
|
|
27
27
|
OptionListSearchProps,
|
|
28
28
|
OptionListTriggerProps,
|
|
29
29
|
OptionListLabelProps,
|
|
30
|
+
OptionListValue,
|
|
30
31
|
} from './types';
|
|
31
32
|
import { useOptionListItems } from './useOptionList/useOptionListItems';
|
|
32
33
|
|
|
33
34
|
const [OptionListProvider, useOptionListContext] =
|
|
34
35
|
createSafeContext<OptionListContextValue>('OptionList');
|
|
35
36
|
|
|
36
|
-
export const OptionList = <
|
|
37
|
+
export const OptionList = <
|
|
38
|
+
T extends OptionListValue = OptionListValue,
|
|
39
|
+
TMeta extends MetaShape = MetaShape,
|
|
40
|
+
>({
|
|
37
41
|
items,
|
|
38
42
|
value,
|
|
39
43
|
defaultValue,
|
|
@@ -45,7 +49,7 @@ export const OptionList = <TMeta extends MetaShape = MetaShape>({
|
|
|
45
49
|
defaultSearchValue,
|
|
46
50
|
onSearchValueChange,
|
|
47
51
|
children,
|
|
48
|
-
}: OptionListProps<TMeta>) => {
|
|
52
|
+
}: OptionListProps<T, TMeta>) => {
|
|
49
53
|
const disabled = useDisabledContext({
|
|
50
54
|
consumerName: 'OptionList',
|
|
51
55
|
mergeWith: { disabled: disabledProp },
|
|
@@ -55,7 +59,7 @@ export const OptionList = <TMeta extends MetaShape = MetaShape>({
|
|
|
55
59
|
{
|
|
56
60
|
prop: value,
|
|
57
61
|
defaultProp: defaultValue ?? null,
|
|
58
|
-
onChange: onValueChange,
|
|
62
|
+
onChange: (next: string | null) => onValueChange?.(next as T | null),
|
|
59
63
|
},
|
|
60
64
|
);
|
|
61
65
|
|
|
@@ -65,7 +69,7 @@ export const OptionList = <TMeta extends MetaShape = MetaShape>({
|
|
|
65
69
|
flatItems,
|
|
66
70
|
resolvedSearchValue,
|
|
67
71
|
handleSearchValueChange,
|
|
68
|
-
} = useOptionListItems<TMeta>({
|
|
72
|
+
} = useOptionListItems<T, TMeta>({
|
|
69
73
|
items,
|
|
70
74
|
filter,
|
|
71
75
|
filteredItems,
|
|
@@ -93,20 +97,26 @@ export const OptionList = <TMeta extends MetaShape = MetaShape>({
|
|
|
93
97
|
);
|
|
94
98
|
};
|
|
95
99
|
|
|
96
|
-
export const OptionListContent = <
|
|
100
|
+
export const OptionListContent = <
|
|
101
|
+
T extends OptionListValue = OptionListValue,
|
|
102
|
+
TMeta extends MetaShape = MetaShape,
|
|
103
|
+
>({
|
|
97
104
|
renderItem,
|
|
98
105
|
lx,
|
|
99
106
|
style,
|
|
100
107
|
ref,
|
|
101
108
|
...props
|
|
102
|
-
}: OptionListContentProps<TMeta>) => {
|
|
109
|
+
}: OptionListContentProps<T, TMeta>) => {
|
|
103
110
|
const { selectedValue, isGrouped, groups, flatItems } = useOptionListContext({
|
|
104
111
|
consumerName: 'OptionListContent',
|
|
105
112
|
contextRequired: true,
|
|
106
113
|
});
|
|
107
114
|
|
|
108
115
|
const renderItemWithState = (item: OptionListItemData) =>
|
|
109
|
-
renderItem(
|
|
116
|
+
renderItem(
|
|
117
|
+
item as OptionListItemData<T, TMeta>,
|
|
118
|
+
selectedValue === item.value,
|
|
119
|
+
);
|
|
110
120
|
|
|
111
121
|
if (isGrouped) {
|
|
112
122
|
return (
|
|
@@ -161,7 +171,7 @@ const useItemStyles = ({
|
|
|
161
171
|
);
|
|
162
172
|
};
|
|
163
173
|
|
|
164
|
-
export const OptionListItem = ({
|
|
174
|
+
export const OptionListItem = <T extends OptionListValue = OptionListValue>({
|
|
165
175
|
value,
|
|
166
176
|
disabled: disabledProp = false,
|
|
167
177
|
children,
|
|
@@ -169,7 +179,7 @@ export const OptionListItem = ({
|
|
|
169
179
|
style,
|
|
170
180
|
ref,
|
|
171
181
|
...props
|
|
172
|
-
}: OptionListItemProps) => {
|
|
182
|
+
}: OptionListItemProps<T>) => {
|
|
173
183
|
const { selectedValue, onValueChange } = useOptionListContext({
|
|
174
184
|
consumerName: 'OptionListItem',
|
|
175
185
|
contextRequired: true,
|
|
@@ -576,3 +586,40 @@ export const OptionListTrigger = ({
|
|
|
576
586
|
</Pressable>
|
|
577
587
|
);
|
|
578
588
|
};
|
|
589
|
+
|
|
590
|
+
export function createOptionList<
|
|
591
|
+
T extends OptionListValue = never,
|
|
592
|
+
TMeta extends MetaShape = MetaShape,
|
|
593
|
+
>(): {
|
|
594
|
+
OptionList: (props: OptionListProps<T, TMeta>) => ReactElement;
|
|
595
|
+
OptionListContent: (props: OptionListContentProps<T, TMeta>) => ReactElement;
|
|
596
|
+
OptionListItem: (props: OptionListItemProps<T>) => ReactElement;
|
|
597
|
+
OptionListItemText: (props: OptionListItemTextProps) => ReactElement;
|
|
598
|
+
OptionListItemDescription: (
|
|
599
|
+
props: OptionListItemDescriptionProps,
|
|
600
|
+
) => ReactElement;
|
|
601
|
+
OptionListItemContent: (props: OptionListItemContentProps) => ReactElement;
|
|
602
|
+
OptionListItemContentRow: (
|
|
603
|
+
props: OptionListItemContentRowProps,
|
|
604
|
+
) => ReactElement;
|
|
605
|
+
OptionListItemLeading: (props: OptionListItemLeadingProps) => ReactElement;
|
|
606
|
+
OptionListSearch: (props: OptionListSearchProps) => ReactElement;
|
|
607
|
+
OptionListEmptyState: (
|
|
608
|
+
props: OptionListEmptyStateProps,
|
|
609
|
+
) => ReactElement | null;
|
|
610
|
+
OptionListTrigger: (props: OptionListTriggerProps) => ReactElement;
|
|
611
|
+
} {
|
|
612
|
+
return {
|
|
613
|
+
OptionList,
|
|
614
|
+
OptionListContent,
|
|
615
|
+
OptionListItem,
|
|
616
|
+
OptionListItemText,
|
|
617
|
+
OptionListItemDescription,
|
|
618
|
+
OptionListItemContent,
|
|
619
|
+
OptionListItemContentRow,
|
|
620
|
+
OptionListItemLeading,
|
|
621
|
+
OptionListSearch,
|
|
622
|
+
OptionListEmptyState,
|
|
623
|
+
OptionListTrigger,
|
|
624
|
+
};
|
|
625
|
+
}
|
|
@@ -8,9 +8,14 @@ import type { SearchInputProps } from '../SearchInput';
|
|
|
8
8
|
|
|
9
9
|
export type MetaShape = Record<string, unknown>;
|
|
10
10
|
|
|
11
|
-
export type
|
|
11
|
+
export type OptionListValue = string;
|
|
12
|
+
|
|
13
|
+
export type OptionListItemData<
|
|
14
|
+
T extends OptionListValue = OptionListValue,
|
|
15
|
+
TMeta extends MetaShape = MetaShape,
|
|
16
|
+
> = {
|
|
12
17
|
/** Unique string identifier for this item, used for selection tracking. */
|
|
13
|
-
value:
|
|
18
|
+
value: T;
|
|
14
19
|
/** Display text. */
|
|
15
20
|
label: string;
|
|
16
21
|
/** Secondary text displayed below the label inside the item. */
|
|
@@ -43,29 +48,35 @@ export type OptionListContextValue = {
|
|
|
43
48
|
};
|
|
44
49
|
|
|
45
50
|
/** Internal type -- consumers never construct this directly. */
|
|
46
|
-
export type OptionListItemGroup<
|
|
51
|
+
export type OptionListItemGroup<
|
|
52
|
+
T extends OptionListValue = OptionListValue,
|
|
53
|
+
TMeta extends MetaShape = MetaShape,
|
|
54
|
+
> = {
|
|
47
55
|
label: string;
|
|
48
|
-
items: OptionListItemData<TMeta>[];
|
|
56
|
+
items: OptionListItemData<T, TMeta>[];
|
|
49
57
|
};
|
|
50
58
|
|
|
51
|
-
export type OptionListProps<
|
|
59
|
+
export type OptionListProps<
|
|
60
|
+
T extends OptionListValue = OptionListValue,
|
|
61
|
+
TMeta extends MetaShape = MetaShape,
|
|
62
|
+
> = {
|
|
52
63
|
/**
|
|
53
64
|
* Flat array of items.
|
|
54
65
|
* Use the `group` field on each item for automatic grouping.
|
|
55
66
|
*/
|
|
56
|
-
items: OptionListItemData<TMeta>[];
|
|
67
|
+
items: OptionListItemData<T, TMeta>[];
|
|
57
68
|
/**
|
|
58
69
|
* The controlled selected value.
|
|
59
70
|
*/
|
|
60
|
-
value?:
|
|
71
|
+
value?: T | null;
|
|
61
72
|
/**
|
|
62
73
|
* The default selected value (uncontrolled)
|
|
63
74
|
*/
|
|
64
|
-
defaultValue?:
|
|
75
|
+
defaultValue?: T | null;
|
|
65
76
|
/**
|
|
66
77
|
* Called when the selected value changes.
|
|
67
78
|
*/
|
|
68
|
-
onValueChange?: (value:
|
|
79
|
+
onValueChange?: (value: T | null) => void;
|
|
69
80
|
/**
|
|
70
81
|
* When true, prevents interaction with the entire list.
|
|
71
82
|
*/
|
|
@@ -74,12 +85,14 @@ export type OptionListProps<TMeta extends MetaShape = MetaShape> = {
|
|
|
74
85
|
* Custom item/query matcher.
|
|
75
86
|
* Defaults to case-insensitive label match; `null` disables filtering.
|
|
76
87
|
*/
|
|
77
|
-
filter?:
|
|
88
|
+
filter?:
|
|
89
|
+
| null
|
|
90
|
+
| ((item: OptionListItemData<T, TMeta>, query: string) => boolean);
|
|
78
91
|
/**
|
|
79
92
|
* Pre-filtered items for async/remote search.
|
|
80
93
|
* Bypasses internal filtering.
|
|
81
94
|
*/
|
|
82
|
-
filteredItems?: OptionListItemData<TMeta>[];
|
|
95
|
+
filteredItems?: OptionListItemData<T, TMeta>[];
|
|
83
96
|
/**
|
|
84
97
|
* Controlled search input value.
|
|
85
98
|
*/
|
|
@@ -95,14 +108,20 @@ export type OptionListProps<TMeta extends MetaShape = MetaShape> = {
|
|
|
95
108
|
children: ReactNode;
|
|
96
109
|
};
|
|
97
110
|
|
|
98
|
-
export type OptionListContentProps<
|
|
111
|
+
export type OptionListContentProps<
|
|
112
|
+
T extends OptionListValue = OptionListValue,
|
|
113
|
+
TMeta extends MetaShape = MetaShape,
|
|
114
|
+
> = {
|
|
99
115
|
/** Render function called for each item. Receives the item data and selection/disabled state. */
|
|
100
|
-
renderItem: (
|
|
116
|
+
renderItem: (
|
|
117
|
+
item: OptionListItemData<T, TMeta>,
|
|
118
|
+
selected: boolean,
|
|
119
|
+
) => ReactNode;
|
|
101
120
|
} & Omit<StyledViewProps, 'children'>;
|
|
102
121
|
|
|
103
|
-
export type OptionListItemProps = {
|
|
122
|
+
export type OptionListItemProps<T extends OptionListValue = OptionListValue> = {
|
|
104
123
|
/** The value associated with this item, used for selection matching. */
|
|
105
|
-
value:
|
|
124
|
+
value: T;
|
|
106
125
|
/** Whether the item is disabled. */
|
|
107
126
|
disabled?: boolean;
|
|
108
127
|
children: ReactNode;
|
|
@@ -4,13 +4,17 @@ import type {
|
|
|
4
4
|
MetaShape,
|
|
5
5
|
OptionListItemData,
|
|
6
6
|
OptionListItemGroup,
|
|
7
|
+
OptionListValue,
|
|
7
8
|
} from '../types';
|
|
8
9
|
|
|
9
|
-
const groupByField = <
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
const groupByField = <
|
|
11
|
+
T extends OptionListValue = OptionListValue,
|
|
12
|
+
TMeta extends MetaShape = MetaShape,
|
|
13
|
+
>(
|
|
14
|
+
items: OptionListItemData<T, TMeta>[],
|
|
15
|
+
): OptionListItemGroup<T, TMeta>[] => {
|
|
12
16
|
const order: string[] = [];
|
|
13
|
-
const map: Record<string, OptionListItemData<TMeta>[]> = {};
|
|
17
|
+
const map: Record<string, OptionListItemData<T, TMeta>[]> = {};
|
|
14
18
|
for (const item of items) {
|
|
15
19
|
const key = item.group ?? '';
|
|
16
20
|
if (!map[key]) {
|
|
@@ -30,31 +34,42 @@ export const defaultLabelFilter = (
|
|
|
30
34
|
query: string,
|
|
31
35
|
): boolean => item.label.toLowerCase().includes(query.toLowerCase());
|
|
32
36
|
|
|
33
|
-
type UseOptionListItemsParams<
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
+
type UseOptionListItemsParams<
|
|
38
|
+
T extends OptionListValue = OptionListValue,
|
|
39
|
+
TMeta extends MetaShape = MetaShape,
|
|
40
|
+
> = {
|
|
41
|
+
items: OptionListItemData<T, TMeta>[];
|
|
42
|
+
filter?:
|
|
43
|
+
| null
|
|
44
|
+
| ((item: OptionListItemData<T, TMeta>, query: string) => boolean);
|
|
45
|
+
filteredItems?: OptionListItemData<T, TMeta>[];
|
|
37
46
|
searchValue?: string;
|
|
38
47
|
defaultSearchValue?: string;
|
|
39
48
|
onSearchValueChange?: (value: string) => void;
|
|
40
49
|
};
|
|
41
50
|
|
|
42
|
-
type UseOptionListItemsResult<
|
|
51
|
+
type UseOptionListItemsResult<
|
|
52
|
+
T extends OptionListValue = OptionListValue,
|
|
53
|
+
TMeta extends MetaShape = MetaShape,
|
|
54
|
+
> = {
|
|
43
55
|
isGrouped: boolean;
|
|
44
|
-
groups: OptionListItemGroup<TMeta>[];
|
|
45
|
-
flatItems: OptionListItemData<TMeta>[];
|
|
56
|
+
groups: OptionListItemGroup<T, TMeta>[];
|
|
57
|
+
flatItems: OptionListItemData<T, TMeta>[];
|
|
46
58
|
resolvedSearchValue: string;
|
|
47
59
|
handleSearchValueChange: (val: string) => void;
|
|
48
60
|
};
|
|
49
61
|
|
|
50
|
-
export const useOptionListItems = <
|
|
62
|
+
export const useOptionListItems = <
|
|
63
|
+
T extends OptionListValue = OptionListValue,
|
|
64
|
+
TMeta extends MetaShape = MetaShape,
|
|
65
|
+
>({
|
|
51
66
|
items,
|
|
52
67
|
filter,
|
|
53
68
|
filteredItems,
|
|
54
69
|
searchValue: searchValueProp,
|
|
55
70
|
defaultSearchValue,
|
|
56
71
|
onSearchValueChange,
|
|
57
|
-
}: UseOptionListItemsParams<TMeta>): UseOptionListItemsResult<TMeta> => {
|
|
72
|
+
}: UseOptionListItemsParams<T, TMeta>): UseOptionListItemsResult<T, TMeta> => {
|
|
58
73
|
const [searchValue, handleSearchValueChange] = useControllableState<string>({
|
|
59
74
|
prop: searchValueProp,
|
|
60
75
|
defaultProp: defaultSearchValue ?? '',
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { PageIndicator } from './PageIndicator';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
PageIndicator,
|
|
6
|
+
'https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=11768-12849',
|
|
7
|
+
{
|
|
8
|
+
imports: ["import { PageIndicator } from '@ledgerhq/lumen-ui-rnative'"],
|
|
9
|
+
example: () => <PageIndicator currentPage={2} totalPages={5} />,
|
|
10
|
+
},
|
|
11
|
+
);
|
|
@@ -2,7 +2,6 @@ import { Meta, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
|
2
2
|
import * as PageIndicatorStories from './PageIndicator.stories';
|
|
3
3
|
import { PageIndicator } from './PageIndicator';
|
|
4
4
|
import { CustomTabs, Tab } from '../../../../.storybook/components';
|
|
5
|
-
import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
|
|
6
5
|
|
|
7
6
|
<Meta title='Core/PageIndicator' of={PageIndicatorStories} />
|
|
8
7
|
|
|
@@ -118,7 +117,6 @@ function MyComponent() {
|
|
|
118
117
|
}
|
|
119
118
|
```
|
|
120
119
|
|
|
121
|
-
<CommonRulesDoAndDont />
|
|
122
120
|
|
|
123
121
|
</Tab>
|
|
124
122
|
</CustomTabs>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { SearchInput } from './SearchInput';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
SearchInput,
|
|
6
|
+
'https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=2248%3A3468',
|
|
7
|
+
{
|
|
8
|
+
imports: ["import { SearchInput } from '@ledgerhq/lumen-ui-rnative'"],
|
|
9
|
+
props: {
|
|
10
|
+
appearance: figma.enum('appearance', {
|
|
11
|
+
plain: 'plain',
|
|
12
|
+
transparent: 'transparent',
|
|
13
|
+
}),
|
|
14
|
+
placeholder: figma.enum('search-state', {
|
|
15
|
+
placeholder: figma.string('placeholder'),
|
|
16
|
+
}),
|
|
17
|
+
value: figma.enum('search-state', {
|
|
18
|
+
typing: figma.string('value'),
|
|
19
|
+
}),
|
|
20
|
+
disabled: figma.enum('state', {
|
|
21
|
+
disabled: true,
|
|
22
|
+
}),
|
|
23
|
+
},
|
|
24
|
+
example: (props) => (
|
|
25
|
+
<SearchInput
|
|
26
|
+
appearance={props.appearance}
|
|
27
|
+
placeholder={props.placeholder}
|
|
28
|
+
value={props.value}
|
|
29
|
+
disabled={props.disabled}
|
|
30
|
+
onChangeText={() => {}}
|
|
31
|
+
/>
|
|
32
|
+
),
|
|
33
|
+
},
|
|
34
|
+
);
|
|
@@ -2,8 +2,6 @@ import { Meta, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
|
2
2
|
import * as SearchInputStories from './SearchInput.stories';
|
|
3
3
|
import { SearchInput } from './SearchInput';
|
|
4
4
|
import { CustomTabs, Tab } from '../../../../.storybook/components';
|
|
5
|
-
import { DoVsDontRow, DoBlockItem, DontBlockItem } from '../../../../.storybook/components/DoVsDont';
|
|
6
|
-
import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
|
|
7
5
|
|
|
8
6
|
<Meta title='Core/SearchInput' of={SearchInputStories} />
|
|
9
7
|
|
|
@@ -326,203 +324,6 @@ function MyComponent() {
|
|
|
326
324
|
}
|
|
327
325
|
```
|
|
328
326
|
|
|
329
|
-
## Do's and Don'ts
|
|
330
|
-
|
|
331
|
-
The following guidelines ensure consistent usage of the SearchInput component and maintain design system principles.
|
|
332
|
-
|
|
333
|
-
<div style={{ display: 'flex', flexDirection: 'column', gap: 24 }}>
|
|
334
|
-
<DoVsDontRow>
|
|
335
|
-
<DoBlockItem
|
|
336
|
-
title='Use placeholder text'
|
|
337
|
-
description='SearchInput uses placeholder text instead of labels for optimal search UX'
|
|
338
|
-
>
|
|
339
|
-
|
|
340
|
-
{/* prettier-ignore */}
|
|
341
|
-
```tsx
|
|
342
|
-
<SearchInput
|
|
343
|
-
placeholder='Search by name or email'
|
|
344
|
-
value={query}
|
|
345
|
-
onChangeText={setQuery}
|
|
346
|
-
/>
|
|
347
|
-
```
|
|
348
|
-
|
|
349
|
-
</DoBlockItem>
|
|
350
|
-
<DontBlockItem
|
|
351
|
-
title="Don't use label prop"
|
|
352
|
-
description='SearchInput component does not support labels as they are not suitable for search UX patterns'
|
|
353
|
-
>
|
|
354
|
-
|
|
355
|
-
{/* prettier-ignore */}
|
|
356
|
-
```tsx
|
|
357
|
-
<SearchInput
|
|
358
|
-
label='Search' // Not supported, will cause error
|
|
359
|
-
placeholder='Search by name or email'
|
|
360
|
-
value={query}
|
|
361
|
-
/>
|
|
362
|
-
```
|
|
363
|
-
|
|
364
|
-
</DontBlockItem>
|
|
365
|
-
|
|
366
|
-
</DoVsDontRow>
|
|
367
|
-
|
|
368
|
-
<DoVsDontRow>
|
|
369
|
-
<DoBlockItem
|
|
370
|
-
title='Use the built-in search icon'
|
|
371
|
-
description='The search icon is automatically included and cannot be changed'
|
|
372
|
-
>
|
|
373
|
-
|
|
374
|
-
{/* prettier-ignore */}
|
|
375
|
-
```tsx
|
|
376
|
-
<SearchInput
|
|
377
|
-
placeholder='Search products'
|
|
378
|
-
value={query}
|
|
379
|
-
onChangeText={handleChange}
|
|
380
|
-
/>
|
|
381
|
-
```
|
|
382
|
-
|
|
383
|
-
</DoBlockItem>
|
|
384
|
-
<DontBlockItem
|
|
385
|
-
title="Don't override the search icon"
|
|
386
|
-
description='The prefix prop is not available on SearchInput component'
|
|
387
|
-
>
|
|
388
|
-
|
|
389
|
-
{/* prettier-ignore */}
|
|
390
|
-
```tsx
|
|
391
|
-
<SearchInput
|
|
392
|
-
prefix={<CustomIcon />} // Not supported, will cause error
|
|
393
|
-
placeholder='Search products'
|
|
394
|
-
/>
|
|
395
|
-
```
|
|
396
|
-
|
|
397
|
-
</DontBlockItem>
|
|
398
|
-
|
|
399
|
-
</DoVsDontRow>
|
|
400
|
-
|
|
401
|
-
<DoVsDontRow>
|
|
402
|
-
<DoBlockItem
|
|
403
|
-
title='Use onClear for custom logic only'
|
|
404
|
-
description='Let the component handle clearing automatically, add onClear only for additional logic'
|
|
405
|
-
>
|
|
406
|
-
|
|
407
|
-
{/* prettier-ignore */}
|
|
408
|
-
```tsx
|
|
409
|
-
<SearchInput
|
|
410
|
-
placeholder='Search'
|
|
411
|
-
value={query}
|
|
412
|
-
onChangeText={setQuery}
|
|
413
|
-
onClear={() => {
|
|
414
|
-
// Default clearing happens automatically
|
|
415
|
-
analytics.track('search_cleared');
|
|
416
|
-
}}
|
|
417
|
-
/>
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
</DoBlockItem>
|
|
421
|
-
<DontBlockItem
|
|
422
|
-
title="Don't manually clear in onClear"
|
|
423
|
-
description='Value clearing happens automatically - no need to call setQuery'
|
|
424
|
-
>
|
|
425
|
-
|
|
426
|
-
{/* prettier-ignore */}
|
|
427
|
-
```tsx
|
|
428
|
-
<SearchInput
|
|
429
|
-
placeholder='Search'
|
|
430
|
-
value={query}
|
|
431
|
-
onChangeText={setQuery}
|
|
432
|
-
onClear={() => setQuery('')}
|
|
433
|
-
/>
|
|
434
|
-
```
|
|
435
|
-
|
|
436
|
-
</DontBlockItem>
|
|
437
|
-
|
|
438
|
-
</DoVsDontRow>
|
|
439
|
-
|
|
440
|
-
<DoVsDontRow>
|
|
441
|
-
<DoBlockItem
|
|
442
|
-
title='Debounce expensive search operations'
|
|
443
|
-
description='Use debouncing for API calls or expensive filtering to improve performance'
|
|
444
|
-
>
|
|
445
|
-
|
|
446
|
-
{/* prettier-ignore */}
|
|
447
|
-
```tsx
|
|
448
|
-
const debouncedSearch = useCallback(
|
|
449
|
-
debounce((text: string) => performSearch(text), 500),
|
|
450
|
-
[]
|
|
451
|
-
);
|
|
452
|
-
|
|
453
|
-
<SearchInput
|
|
454
|
-
placeholder='Search'
|
|
455
|
-
value={query}
|
|
456
|
-
onChangeText={(text) => {
|
|
457
|
-
setQuery(text);
|
|
458
|
-
debouncedSearch(text);
|
|
459
|
-
}}
|
|
460
|
-
/>
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
</DoBlockItem>
|
|
464
|
-
<DontBlockItem
|
|
465
|
-
title="Don't perform expensive operations on every keystroke"
|
|
466
|
-
description='Avoid running expensive operations on every input change without debouncing'
|
|
467
|
-
>
|
|
468
|
-
|
|
469
|
-
{/* prettier-ignore */}
|
|
470
|
-
```tsx
|
|
471
|
-
const debouncedSearch = useCallback(
|
|
472
|
-
debounce((text: string) => performSearch(text), 500),
|
|
473
|
-
[]
|
|
474
|
-
);
|
|
475
|
-
|
|
476
|
-
<SearchInput
|
|
477
|
-
placeholder='Search'
|
|
478
|
-
value={query}
|
|
479
|
-
onChangeText={(text) => {
|
|
480
|
-
setQuery(text);
|
|
481
|
-
performExpensiveAPICall(text); // Should be debounced
|
|
482
|
-
}}
|
|
483
|
-
/>
|
|
484
|
-
```
|
|
485
|
-
|
|
486
|
-
</DontBlockItem>
|
|
487
|
-
|
|
488
|
-
</DoVsDontRow>
|
|
489
|
-
|
|
490
|
-
<DoVsDontRow>
|
|
491
|
-
<DoBlockItem
|
|
492
|
-
title='Provide descriptive placeholder text'
|
|
493
|
-
description='Use clear, specific placeholder text that describes what users can search for'
|
|
494
|
-
>
|
|
495
|
-
|
|
496
|
-
{/* prettier-ignore */}
|
|
497
|
-
```tsx
|
|
498
|
-
<SearchInput
|
|
499
|
-
placeholder='Search by name or email'
|
|
500
|
-
value={query}
|
|
501
|
-
onChangeText={setQuery}
|
|
502
|
-
/>
|
|
503
|
-
```
|
|
504
|
-
|
|
505
|
-
</DoBlockItem>
|
|
506
|
-
<DontBlockItem
|
|
507
|
-
title="Don't use vague placeholder text"
|
|
508
|
-
description='Avoid generic or unclear placeholder text that does not help users'
|
|
509
|
-
>
|
|
510
|
-
|
|
511
|
-
{/* prettier-ignore */}
|
|
512
|
-
```tsx
|
|
513
|
-
<SearchInput
|
|
514
|
-
placeholder='Type here'
|
|
515
|
-
value={query}
|
|
516
|
-
onChangeText={setQuery}
|
|
517
|
-
/>
|
|
518
|
-
```
|
|
519
|
-
|
|
520
|
-
</DontBlockItem>
|
|
521
|
-
|
|
522
|
-
</DoVsDontRow>
|
|
523
|
-
|
|
524
|
-
<CommonRulesDoAndDont />
|
|
525
|
-
</div>
|
|
526
327
|
|
|
527
328
|
## Platform Considerations
|
|
528
329
|
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import figma from '@figma/code-connect';
|
|
2
|
+
import { SegmentedControl, SegmentedControlButton } from './SegmentedControl';
|
|
3
|
+
|
|
4
|
+
figma.connect(
|
|
5
|
+
SegmentedControl,
|
|
6
|
+
'https://www.figma.com/design/JxaLVMTWirCpU0rsbZ30k7?node-id=1170-2345',
|
|
7
|
+
{
|
|
8
|
+
imports: [
|
|
9
|
+
"import { SegmentedControl, SegmentedControlButton } from '@ledgerhq/lumen-ui-rnative'",
|
|
10
|
+
],
|
|
11
|
+
props: {
|
|
12
|
+
appearance: figma.enum('appearance', {
|
|
13
|
+
background: 'background',
|
|
14
|
+
'no-background': 'no-background',
|
|
15
|
+
}),
|
|
16
|
+
tabLayout: figma.enum('tab-width', {
|
|
17
|
+
fixed: 'fixed',
|
|
18
|
+
hug: 'fit',
|
|
19
|
+
}),
|
|
20
|
+
},
|
|
21
|
+
example: (props) => (
|
|
22
|
+
<SegmentedControl
|
|
23
|
+
selectedValue='tab1'
|
|
24
|
+
onSelectedChange={() => {}}
|
|
25
|
+
appearance={props.appearance}
|
|
26
|
+
tabLayout={props.tabLayout}
|
|
27
|
+
>
|
|
28
|
+
<SegmentedControlButton value='tab1'>Tab 1</SegmentedControlButton>
|
|
29
|
+
<SegmentedControlButton value='tab2'>Tab 2</SegmentedControlButton>
|
|
30
|
+
<SegmentedControlButton value='tab3'>Tab 3</SegmentedControlButton>
|
|
31
|
+
</SegmentedControl>
|
|
32
|
+
),
|
|
33
|
+
},
|
|
34
|
+
);
|
|
@@ -2,7 +2,6 @@ import { Meta, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
|
2
2
|
import * as SegmentedControlStories from './SegmentedControl.stories';
|
|
3
3
|
import { SegmentedControl } from './SegmentedControl';
|
|
4
4
|
import { CustomTabs, Tab } from '../../../../.storybook/components';
|
|
5
|
-
import CommonRulesDoAndDont from '../../../../.storybook/components/DoVsDont/CommonRulesDoAndDont.mdx';
|
|
6
5
|
import { Box } from '../Utility';
|
|
7
6
|
|
|
8
7
|
<Meta title='Core/SegmentedControl' of={SegmentedControlStories} />
|
|
@@ -67,6 +66,8 @@ Use the library as part of `@ledgerhq/lumen-ui-rnative`. See the [Setup Guide
|
|
|
67
66
|
|
|
68
67
|
Control selected value in state at the top level and pass it to SegmentedControl. Buttons use value to identify themselves; selected state is derived from context.
|
|
69
68
|
|
|
69
|
+
> **Recommended:** prefer the [type-safe variant](#type-safe-variant) below. It shares a single literal union across the root and every button.
|
|
70
|
+
|
|
70
71
|
```tsx
|
|
71
72
|
import { SegmentedControl, SegmentedControlButton } from '@ledgerhq/lumen-ui-rnative';
|
|
72
73
|
|
|
@@ -87,6 +88,32 @@ export default function Example() {
|
|
|
87
88
|
}
|
|
88
89
|
```
|
|
89
90
|
|
|
91
|
+
## Type-safe variant
|
|
92
|
+
|
|
93
|
+
`SegmentedControl` and `SegmentedControlButton` communicate via context, so TypeScript cannot connect the root's `selectedValue` to each button's `value` on its own. A typo compiles, and the pill silently never moves to that segment.
|
|
94
|
+
|
|
95
|
+
`createSegmentedControl<T>()` ties both components to one literal union. Call it once at module scope; the returned pair are typed against your `T`.
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { createSegmentedControl } from '@ledgerhq/lumen-ui-rnative';
|
|
99
|
+
|
|
100
|
+
type View = 'preview' | 'raw' | 'blame';
|
|
101
|
+
|
|
102
|
+
const { SegmentedControl, SegmentedControlButton } = createSegmentedControl<View>();
|
|
103
|
+
|
|
104
|
+
function Example() {
|
|
105
|
+
const [view, setView] = React.useState<View>('preview');
|
|
106
|
+
|
|
107
|
+
return (
|
|
108
|
+
<SegmentedControl selectedValue={view} onSelectedChange={setView}>
|
|
109
|
+
<SegmentedControlButton value='preview'>Preview</SegmentedControlButton>
|
|
110
|
+
<SegmentedControlButton value='raw'>Raw</SegmentedControlButton>
|
|
111
|
+
<SegmentedControlButton value='blame'>Blame</SegmentedControlButton>
|
|
112
|
+
</SegmentedControl>
|
|
113
|
+
);
|
|
114
|
+
}
|
|
115
|
+
```
|
|
116
|
+
|
|
90
117
|
## With trailing content
|
|
91
118
|
|
|
92
119
|
Pass any node via `trailingContent` to render it to the right of the label. Use it for badges like `DotCount` to surface counts per segment.
|