jfs-components 0.1.8 → 0.1.12
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/CHANGELOG.md +16 -0
- package/lib/commonjs/components/Accordion/Accordion.js +2 -1
- package/lib/commonjs/components/AccordionCheckbox/AccordionCheckbox.js +4 -3
- package/lib/commonjs/components/AccountCard/AccountCard.js +4 -3
- package/lib/commonjs/components/AllocationComparisonChart/AllocationComparisonChart.js +9 -6
- package/lib/commonjs/components/AreaLineChart/AreaLineChart.js +11 -7
- package/lib/commonjs/components/Badge/Badge.js +47 -8
- package/lib/commonjs/components/BrandChip/BrandChip.js +3 -3
- package/lib/commonjs/components/Button/Button.js +2 -1
- package/lib/commonjs/components/CardAdvisory/CardAdvisory.js +2 -1
- package/lib/commonjs/components/CardBankAccount/CardBankAccount.js +3 -2
- package/lib/commonjs/components/CardCTA/CardCTA.js +197 -27
- package/lib/commonjs/components/CardInsight/CardInsight.js +5 -1
- package/lib/commonjs/components/CircularProgressBar/CircularProgressBar.js +7 -3
- package/lib/commonjs/components/CircularProgressBarDoted/CircularProgressBarDoted.js +3 -2
- package/lib/commonjs/components/CircularRating/CircularRating.js +2 -1
- package/lib/commonjs/components/ClusterBubble/ClusterBubble.js +3 -2
- package/lib/commonjs/components/CompareTable/CompareTable.js +72 -43
- package/lib/commonjs/components/CoverageBarComparison/CoverageBarComparison.js +3 -2
- package/lib/commonjs/components/DonutChart/DonutChart.js +4 -3
- package/lib/commonjs/components/Dropdown/Dropdown.js +3 -2
- package/lib/commonjs/components/DropdownInput/DropdownInput.js +3 -2
- package/lib/commonjs/components/ExpandableCheckbox/ExpandableCheckbox.js +2 -1
- package/lib/commonjs/components/FormField/FormField.js +42 -2
- package/lib/commonjs/components/Gauge/Gauge.js +1 -1
- package/lib/commonjs/components/HoldingsCard/HoldingsCard.js +3 -2
- package/lib/commonjs/components/InstitutionBadge/InstitutionBadge.js +2 -1
- package/lib/commonjs/components/ListGroup/ListGroup.js +2 -1
- package/lib/commonjs/components/ListItem/ListItem.js +3 -2
- package/lib/commonjs/components/MediaCard/MediaCard.js +4 -2
- package/lib/commonjs/components/MetricLegendItem/MetricLegendItem.js +3 -2
- package/lib/commonjs/components/MonthlyStatusGrid/MonthlyStatusGrid.js +6 -3
- package/lib/commonjs/components/PoweredByLabel/PoweredByLabel.js +3 -2
- package/lib/commonjs/components/ProductMerchandisingCard/ProductMerchandisingCard.js +107 -33
- package/lib/commonjs/components/ProductOverview/ProductOverview.js +4 -3
- package/lib/commonjs/components/ProgressBadge/ProgressBadge.js +2 -2
- package/lib/commonjs/components/ProjectionMarker/ProjectionMarker.js +3 -2
- package/lib/commonjs/components/Section/Section.js +3 -2
- package/lib/commonjs/components/Slider/Slider.js +3 -2
- package/lib/commonjs/components/Stack/Stack.js +86 -0
- package/lib/commonjs/components/SuggestiveSearch/SuggestiveSearch.js +10 -1
- package/lib/commonjs/components/SummaryTile/SummaryTile.js +3 -2
- package/lib/commonjs/components/Table/Table.js +324 -0
- package/lib/commonjs/components/Text/Text.js +2 -1
- package/lib/commonjs/components/TextInput/TextInput.js +9 -1
- package/lib/commonjs/components/TextSegment/TextSegment.js +2 -1
- package/lib/commonjs/components/ThreadHero/ThreadHero.js +4 -5
- package/lib/commonjs/components/Title/Title.js +2 -1
- package/lib/commonjs/components/Toast/Toast.js +3 -2
- package/lib/commonjs/components/TransactionBubble/TransactionBubble.js +2 -1
- package/lib/commonjs/components/TransactionStatus/TransactionStatus.js +3 -2
- package/lib/commonjs/components/UpiHandle/UpiHandle.js +2 -2
- package/lib/commonjs/components/index.js +44 -0
- package/lib/commonjs/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/commonjs/design-tokens/figma-modes.generated.js +1 -0
- package/lib/commonjs/icons/registry.js +1 -1
- package/lib/commonjs/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.js +11 -3
- package/lib/commonjs/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.web.js +8 -4
- package/lib/commonjs/utils/react-utils.js +56 -0
- package/lib/commonjs/utils/web-platform-utils.js +59 -0
- package/lib/module/components/Accordion/Accordion.js +3 -2
- package/lib/module/components/AccordionCheckbox/AccordionCheckbox.js +5 -4
- package/lib/module/components/AccountCard/AccountCard.js +5 -4
- package/lib/module/components/AllocationComparisonChart/AllocationComparisonChart.js +10 -7
- package/lib/module/components/AreaLineChart/AreaLineChart.js +12 -8
- package/lib/module/components/Badge/Badge.js +49 -10
- package/lib/module/components/BrandChip/BrandChip.js +4 -4
- package/lib/module/components/Button/Button.js +3 -2
- package/lib/module/components/CardAdvisory/CardAdvisory.js +3 -2
- package/lib/module/components/CardBankAccount/CardBankAccount.js +4 -3
- package/lib/module/components/CardCTA/CardCTA.js +198 -28
- package/lib/module/components/CardInsight/CardInsight.js +5 -1
- package/lib/module/components/CircularProgressBar/CircularProgressBar.js +8 -4
- package/lib/module/components/CircularProgressBarDoted/CircularProgressBarDoted.js +4 -3
- package/lib/module/components/CircularRating/CircularRating.js +3 -2
- package/lib/module/components/ClusterBubble/ClusterBubble.js +4 -3
- package/lib/module/components/CompareTable/CompareTable.js +73 -44
- package/lib/module/components/CoverageBarComparison/CoverageBarComparison.js +4 -3
- package/lib/module/components/DonutChart/DonutChart.js +5 -4
- package/lib/module/components/Dropdown/Dropdown.js +4 -3
- package/lib/module/components/DropdownInput/DropdownInput.js +4 -3
- package/lib/module/components/ExpandableCheckbox/ExpandableCheckbox.js +2 -1
- package/lib/module/components/FormField/FormField.js +45 -5
- package/lib/module/components/Gauge/Gauge.js +1 -1
- package/lib/module/components/HoldingsCard/HoldingsCard.js +4 -3
- package/lib/module/components/InstitutionBadge/InstitutionBadge.js +3 -2
- package/lib/module/components/ListGroup/ListGroup.js +3 -2
- package/lib/module/components/ListItem/ListItem.js +4 -3
- package/lib/module/components/MediaCard/MediaCard.js +4 -2
- package/lib/module/components/MetricLegendItem/MetricLegendItem.js +4 -3
- package/lib/module/components/MonthlyStatusGrid/MonthlyStatusGrid.js +7 -4
- package/lib/module/components/PoweredByLabel/PoweredByLabel.js +4 -3
- package/lib/module/components/ProductMerchandisingCard/ProductMerchandisingCard.js +109 -35
- package/lib/module/components/ProductOverview/ProductOverview.js +5 -4
- package/lib/module/components/ProgressBadge/ProgressBadge.js +3 -3
- package/lib/module/components/ProjectionMarker/ProjectionMarker.js +4 -3
- package/lib/module/components/Section/Section.js +4 -3
- package/lib/module/components/Slider/Slider.js +4 -3
- package/lib/module/components/Stack/Stack.js +81 -0
- package/lib/module/components/SuggestiveSearch/SuggestiveSearch.js +10 -1
- package/lib/module/components/SummaryTile/SummaryTile.js +4 -3
- package/lib/module/components/Table/Table.js +315 -0
- package/lib/module/components/Text/Text.js +3 -2
- package/lib/module/components/TextInput/TextInput.js +9 -1
- package/lib/module/components/TextSegment/TextSegment.js +3 -2
- package/lib/module/components/ThreadHero/ThreadHero.js +5 -6
- package/lib/module/components/Title/Title.js +3 -2
- package/lib/module/components/Toast/Toast.js +4 -3
- package/lib/module/components/TransactionBubble/TransactionBubble.js +3 -2
- package/lib/module/components/TransactionStatus/TransactionStatus.js +4 -3
- package/lib/module/components/UpiHandle/UpiHandle.js +3 -3
- package/lib/module/components/index.js +2 -0
- package/lib/module/design-tokens/Coin Variables-variables-full.json +1 -1
- package/lib/module/design-tokens/figma-modes.generated.js +1 -0
- package/lib/module/icons/registry.js +1 -1
- package/lib/module/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.js +11 -3
- package/lib/module/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.web.js +8 -4
- package/lib/module/utils/react-utils.js +54 -0
- package/lib/module/utils/web-platform-utils.js +58 -0
- package/lib/typescript/src/components/Accordion/Accordion.d.ts +7 -1
- package/lib/typescript/src/components/AccordionCheckbox/AccordionCheckbox.d.ts +7 -1
- package/lib/typescript/src/components/AccountCard/AccountCard.d.ts +7 -1
- package/lib/typescript/src/components/AllocationComparisonChart/AllocationComparisonChart.d.ts +7 -1
- package/lib/typescript/src/components/AreaLineChart/AreaLineChart.d.ts +8 -1
- package/lib/typescript/src/components/Badge/Badge.d.ts +32 -2
- package/lib/typescript/src/components/BrandChip/BrandChip.d.ts +7 -1
- package/lib/typescript/src/components/Button/Button.d.ts +7 -1
- package/lib/typescript/src/components/CardAdvisory/CardAdvisory.d.ts +7 -1
- package/lib/typescript/src/components/CardBankAccount/CardBankAccount.d.ts +7 -1
- package/lib/typescript/src/components/CardCTA/CardCTA.d.ts +27 -5
- package/lib/typescript/src/components/CircularProgressBar/CircularProgressBar.d.ts +7 -1
- package/lib/typescript/src/components/CircularProgressBarDoted/CircularProgressBarDoted.d.ts +7 -1
- package/lib/typescript/src/components/CircularRating/CircularRating.d.ts +7 -1
- package/lib/typescript/src/components/ClusterBubble/ClusterBubble.d.ts +7 -1
- package/lib/typescript/src/components/CompareTable/CompareTable.d.ts +7 -1
- package/lib/typescript/src/components/CoverageBarComparison/CoverageBarComparison.d.ts +7 -1
- package/lib/typescript/src/components/DonutChart/DonutChart.d.ts +7 -1
- package/lib/typescript/src/components/Dropdown/Dropdown.d.ts +7 -1
- package/lib/typescript/src/components/DropdownInput/DropdownInput.d.ts +6 -0
- package/lib/typescript/src/components/ExpandableCheckbox/ExpandableCheckbox.d.ts +7 -1
- package/lib/typescript/src/components/HoldingsCard/HoldingsCard.d.ts +7 -1
- package/lib/typescript/src/components/InstitutionBadge/InstitutionBadge.d.ts +7 -1
- package/lib/typescript/src/components/ListGroup/ListGroup.d.ts +7 -1
- package/lib/typescript/src/components/ListItem/ListItem.d.ts +7 -1
- package/lib/typescript/src/components/MetricLegendItem/MetricLegendItem.d.ts +7 -1
- package/lib/typescript/src/components/MonthlyStatusGrid/MonthlyStatusGrid.d.ts +14 -2
- package/lib/typescript/src/components/PoweredByLabel/PoweredByLabel.d.ts +7 -1
- package/lib/typescript/src/components/ProductMerchandisingCard/ProductMerchandisingCard.d.ts +7 -1
- package/lib/typescript/src/components/ProductOverview/ProductOverview.d.ts +7 -1
- package/lib/typescript/src/components/ProgressBadge/ProgressBadge.d.ts +7 -1
- package/lib/typescript/src/components/ProjectionMarker/ProjectionMarker.d.ts +7 -1
- package/lib/typescript/src/components/Section/Section.d.ts +7 -1
- package/lib/typescript/src/components/Slider/Slider.d.ts +6 -0
- package/lib/typescript/src/components/Stack/Stack.d.ts +81 -0
- package/lib/typescript/src/components/SummaryTile/SummaryTile.d.ts +7 -1
- package/lib/typescript/src/components/Table/Table.d.ts +139 -0
- package/lib/typescript/src/components/Text/Text.d.ts +7 -1
- package/lib/typescript/src/components/TextSegment/TextSegment.d.ts +7 -1
- package/lib/typescript/src/components/ThreadHero/ThreadHero.d.ts +7 -1
- package/lib/typescript/src/components/Title/Title.d.ts +7 -1
- package/lib/typescript/src/components/Toast/Toast.d.ts +7 -1
- package/lib/typescript/src/components/TransactionBubble/TransactionBubble.d.ts +7 -1
- package/lib/typescript/src/components/TransactionStatus/TransactionStatus.d.ts +7 -1
- package/lib/typescript/src/components/UpiHandle/UpiHandle.d.ts +7 -1
- package/lib/typescript/src/components/index.d.ts +4 -2
- package/lib/typescript/src/icons/registry.d.ts +1 -1
- package/lib/typescript/src/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.d.ts +31 -3
- package/lib/typescript/src/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.web.d.ts +18 -2
- package/lib/typescript/src/utils/react-utils.d.ts +37 -0
- package/lib/typescript/src/utils/web-platform-utils.d.ts +36 -0
- package/package.json +1 -1
- package/src/components/Accordion/Accordion.tsx +9 -2
- package/src/components/AccordionCheckbox/AccordionCheckbox.tsx +10 -3
- package/src/components/AccountCard/AccountCard.tsx +10 -3
- package/src/components/AllocationComparisonChart/AllocationComparisonChart.tsx +14 -4
- package/src/components/AreaLineChart/AreaLineChart.tsx +15 -5
- package/src/components/Badge/Badge.tsx +78 -8
- package/src/components/BrandChip/BrandChip.tsx +9 -3
- package/src/components/Button/Button.tsx +9 -2
- package/src/components/CardAdvisory/CardAdvisory.tsx +9 -2
- package/src/components/CardBankAccount/CardBankAccount.tsx +9 -2
- package/src/components/CardCTA/CardCTA.tsx +214 -41
- package/src/components/CardInsight/CardInsight.tsx +7 -1
- package/src/components/CircularProgressBar/CircularProgressBar.tsx +14 -4
- package/src/components/CircularProgressBarDoted/CircularProgressBarDoted.tsx +10 -3
- package/src/components/CircularRating/CircularRating.tsx +9 -2
- package/src/components/ClusterBubble/ClusterBubble.tsx +9 -2
- package/src/components/CompareTable/CompareTable.tsx +98 -50
- package/src/components/CoverageBarComparison/CoverageBarComparison.tsx +9 -2
- package/src/components/DonutChart/DonutChart.tsx +10 -3
- package/src/components/Dropdown/Dropdown.tsx +9 -2
- package/src/components/DropdownInput/DropdownInput.tsx +9 -2
- package/src/components/ExpandableCheckbox/ExpandableCheckbox.tsx +8 -1
- package/src/components/FormField/FormField.tsx +49 -4
- package/src/components/Gauge/Gauge.tsx +1 -1
- package/src/components/HoldingsCard/HoldingsCard.tsx +9 -2
- package/src/components/InstitutionBadge/InstitutionBadge.tsx +9 -2
- package/src/components/ListGroup/ListGroup.tsx +9 -2
- package/src/components/ListItem/ListItem.tsx +10 -3
- package/src/components/MediaCard/MediaCard.tsx +2 -2
- package/src/components/MetricLegendItem/MetricLegendItem.tsx +9 -2
- package/src/components/MonthlyStatusGrid/MonthlyStatusGrid.tsx +17 -2
- package/src/components/PoweredByLabel/PoweredByLabel.tsx +9 -2
- package/src/components/ProductMerchandisingCard/ProductMerchandisingCard.tsx +104 -37
- package/src/components/ProductOverview/ProductOverview.tsx +10 -3
- package/src/components/ProgressBadge/ProgressBadge.tsx +9 -3
- package/src/components/ProjectionMarker/ProjectionMarker.tsx +9 -2
- package/src/components/Section/Section.tsx +10 -3
- package/src/components/Slider/Slider.tsx +9 -2
- package/src/components/Stack/Stack.tsx +131 -0
- package/src/components/SuggestiveSearch/SuggestiveSearch.tsx +10 -1
- package/src/components/SummaryTile/SummaryTile.tsx +9 -2
- package/src/components/Table/Table.tsx +449 -0
- package/src/components/Text/Text.tsx +9 -2
- package/src/components/TextInput/TextInput.tsx +7 -1
- package/src/components/TextSegment/TextSegment.tsx +9 -2
- package/src/components/ThreadHero/ThreadHero.tsx +10 -3
- package/src/components/Title/Title.tsx +9 -2
- package/src/components/Toast/Toast.tsx +9 -2
- package/src/components/TransactionBubble/TransactionBubble.tsx +9 -2
- package/src/components/TransactionStatus/TransactionStatus.tsx +9 -2
- package/src/components/UpiHandle/UpiHandle.tsx +9 -3
- package/src/components/index.ts +23 -2
- package/src/design-tokens/Coin Variables-variables-full.json +1 -1
- package/src/design-tokens/figma-modes.generated.ts +1 -0
- package/src/icons/registry.ts +1 -1
- package/src/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.tsx +32 -3
- package/src/{components/ProductMerchandisingCard → utils/GlassFill}/GlassFill.web.tsx +25 -4
- package/src/utils/react-utils.ts +61 -0
- package/src/utils/web-platform-utils.ts +68 -0
- package/lib/commonjs/components/MediaCard/GlassFill.js +0 -62
- package/lib/commonjs/components/MediaCard/GlassFill.web.js +0 -48
- package/lib/module/components/MediaCard/GlassFill.js +0 -57
- package/lib/module/components/MediaCard/GlassFill.web.js +0 -43
- package/lib/typescript/src/components/MediaCard/GlassFill.d.ts +0 -47
- package/lib/typescript/src/components/MediaCard/GlassFill.web.d.ts +0 -20
- package/src/components/MediaCard/GlassFill.tsx +0 -89
- package/src/components/MediaCard/GlassFill.web.tsx +0 -53
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { useMemo } from 'react'
|
|
2
2
|
import { Text as RNText, type TextStyle, type StyleProp } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
-
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
4
|
+
import { EMPTY_MODES, cloneChildrenWithModes, resolveTruncation } from '../../utils/react-utils'
|
|
5
5
|
import type { Modes } from '../../design-tokens'
|
|
6
6
|
|
|
7
7
|
/**
|
|
@@ -58,6 +58,12 @@ export type TextSegmentProps = {
|
|
|
58
58
|
textAlign?: 'Left' | 'Center'
|
|
59
59
|
/** Clamp the paragraph to this many lines (truncates with an ellipsis). Applies to the whole composed line, not per-run. */
|
|
60
60
|
numberOfLines?: number
|
|
61
|
+
/**
|
|
62
|
+
* When `true`, disables truncation entirely: the trailing ellipsis (`…`) is
|
|
63
|
+
* never shown and the `numberOfLines` clamp is ignored, so the paragraph
|
|
64
|
+
* wraps to as many lines as it needs even when horizontal space is tight.
|
|
65
|
+
*/
|
|
66
|
+
disableTruncation?: boolean
|
|
61
67
|
/** Mode configuration used for the base style and cascaded to every run/child. */
|
|
62
68
|
modes?: Modes
|
|
63
69
|
/** Style override applied to the outer paragraph (e.g. width constraints to force wrapping). */
|
|
@@ -125,6 +131,7 @@ function TextSegment({
|
|
|
125
131
|
children,
|
|
126
132
|
textAlign = 'Left',
|
|
127
133
|
numberOfLines,
|
|
134
|
+
disableTruncation,
|
|
128
135
|
modes = EMPTY_MODES,
|
|
129
136
|
style,
|
|
130
137
|
}: TextSegmentProps) {
|
|
@@ -157,7 +164,7 @@ function TextSegment({
|
|
|
157
164
|
const content = hasChildren ? cloneChildrenWithModes(children, modes) : renderedSegments
|
|
158
165
|
|
|
159
166
|
return (
|
|
160
|
-
<RNText style={[baseStyle, style]}
|
|
167
|
+
<RNText style={[baseStyle, style]} {...resolveTruncation(disableTruncation, numberOfLines)}>
|
|
161
168
|
{content}
|
|
162
169
|
</RNText>
|
|
163
170
|
)
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import React, { isValidElement, cloneElement, type ReactNode } from 'react'
|
|
2
2
|
import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
|
-
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
4
|
+
import { EMPTY_MODES, resolveTruncation } from '../../utils/react-utils'
|
|
5
5
|
import type { Modes } from '../../design-tokens'
|
|
6
6
|
|
|
7
7
|
export type ThreadHeroProps = {
|
|
@@ -17,6 +17,12 @@ export type ThreadHeroProps = {
|
|
|
17
17
|
modes?: Modes
|
|
18
18
|
/** Optional container style */
|
|
19
19
|
style?: ViewStyle
|
|
20
|
+
/**
|
|
21
|
+
* When `true`, disables text truncation: the trailing ellipsis (`…`) is never
|
|
22
|
+
* shown and any `numberOfLines` clamp is ignored, so the text wraps to as many
|
|
23
|
+
* lines as it needs even when horizontal space is tight.
|
|
24
|
+
*/
|
|
25
|
+
disableTruncation?: boolean
|
|
20
26
|
}
|
|
21
27
|
|
|
22
28
|
/**
|
|
@@ -29,6 +35,7 @@ export default function ThreadHero({
|
|
|
29
35
|
renderAvatar,
|
|
30
36
|
modes = EMPTY_MODES,
|
|
31
37
|
style,
|
|
38
|
+
disableTruncation,
|
|
32
39
|
}: ThreadHeroProps) {
|
|
33
40
|
// Container Gaps
|
|
34
41
|
const containerGap = Number(getVariableByName('threadHero/gap', modes)) || 8
|
|
@@ -111,13 +118,13 @@ export default function ThreadHero({
|
|
|
111
118
|
{avatarContent}
|
|
112
119
|
{title ? <Text style={titleStyle}>{title}</Text> : null}
|
|
113
120
|
{subtitle ? (
|
|
114
|
-
<Text style={subtitleStyle}
|
|
121
|
+
<Text style={subtitleStyle} {...resolveTruncation(disableTruncation, 1, 'tail')}>
|
|
115
122
|
{subtitle}
|
|
116
123
|
</Text>
|
|
117
124
|
) : null}
|
|
118
125
|
</View>
|
|
119
126
|
{caption ? (
|
|
120
|
-
<Text style={captionStyle}
|
|
127
|
+
<Text style={captionStyle} {...resolveTruncation(disableTruncation, 1, 'tail')}>
|
|
121
128
|
{caption}
|
|
122
129
|
</Text>
|
|
123
130
|
) : null}
|
|
@@ -2,7 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import { View, Text, type StyleProp, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
4
4
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
5
|
-
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import { EMPTY_MODES, resolveTruncation } from '../../utils/react-utils'
|
|
6
6
|
import type { Modes } from '../../design-tokens'
|
|
7
7
|
|
|
8
8
|
export type TitleProps = {
|
|
@@ -17,6 +17,12 @@ export type TitleProps = {
|
|
|
17
17
|
/** Optional style overrides for the subtitle text. */
|
|
18
18
|
subtitleStyle?: StyleProp<TextStyle>;
|
|
19
19
|
numberOfLines?: number;
|
|
20
|
+
/**
|
|
21
|
+
* When `true`, disables truncation for both the title and subtitle: the
|
|
22
|
+
* trailing ellipsis (`…`) is never shown and the `numberOfLines` clamp is
|
|
23
|
+
* ignored, so the text wraps fully even when horizontal space is tight.
|
|
24
|
+
*/
|
|
25
|
+
disableTruncation?: boolean;
|
|
20
26
|
accessibilityLabel?: string;
|
|
21
27
|
accessibilityHint?: string;
|
|
22
28
|
} & React.ComponentProps<typeof View>;
|
|
@@ -35,6 +41,7 @@ function Title({
|
|
|
35
41
|
textStyle,
|
|
36
42
|
subtitleStyle,
|
|
37
43
|
numberOfLines,
|
|
44
|
+
disableTruncation,
|
|
38
45
|
accessibilityLabel,
|
|
39
46
|
accessibilityHint,
|
|
40
47
|
...rest
|
|
@@ -128,7 +135,7 @@ function Title({
|
|
|
128
135
|
>
|
|
129
136
|
<Text
|
|
130
137
|
style={[titleTextStyle, textStyle]}
|
|
131
|
-
|
|
138
|
+
{...resolveTruncation(disableTruncation, numberOfLines !== undefined ? numberOfLines : 1)}
|
|
132
139
|
accessibilityElementsHidden={true}
|
|
133
140
|
importantForAccessibility="no"
|
|
134
141
|
>
|
|
@@ -3,7 +3,7 @@ import { StyleSheet, Text, type StyleProp, type ViewStyle } from 'react-native'
|
|
|
3
3
|
import Animated, { FadeIn, FadeOut, SlideInDown, SlideInUp } from 'react-native-reanimated'
|
|
4
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
5
5
|
import { closeToast, type ToastPlacement } from './useToast'
|
|
6
|
-
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
6
|
+
import { EMPTY_MODES, resolveTruncation } from '../../utils/react-utils'
|
|
7
7
|
import type { Modes } from '../../design-tokens'
|
|
8
8
|
|
|
9
9
|
export interface ToastProps {
|
|
@@ -14,6 +14,12 @@ export interface ToastProps {
|
|
|
14
14
|
modes?: Modes | undefined
|
|
15
15
|
placement?: ToastPlacement | undefined
|
|
16
16
|
style?: StyleProp<ViewStyle> | undefined
|
|
17
|
+
/**
|
|
18
|
+
* When `true`, disables text truncation: the trailing ellipsis (`…`) is never
|
|
19
|
+
* shown and any `numberOfLines` clamp is ignored, so the text wraps to as many
|
|
20
|
+
* lines as it needs even when horizontal space is tight.
|
|
21
|
+
*/
|
|
22
|
+
disableTruncation?: boolean
|
|
17
23
|
}
|
|
18
24
|
|
|
19
25
|
const ANIMATION_DURATION = 250
|
|
@@ -26,6 +32,7 @@ function Toast({
|
|
|
26
32
|
modes = EMPTY_MODES,
|
|
27
33
|
placement = 'bottom',
|
|
28
34
|
style,
|
|
35
|
+
disableTruncation,
|
|
29
36
|
}: ToastProps) {
|
|
30
37
|
const timerRef = useRef<ReturnType<typeof setTimeout> | null>(null)
|
|
31
38
|
|
|
@@ -88,7 +95,7 @@ function Toast({
|
|
|
88
95
|
accessibilityRole="alert"
|
|
89
96
|
accessibilityLiveRegion="assertive"
|
|
90
97
|
>
|
|
91
|
-
<Text style={textStyle}
|
|
98
|
+
<Text style={textStyle} {...resolveTruncation(disableTruncation, 2)}>
|
|
92
99
|
{title}
|
|
93
100
|
</Text>
|
|
94
101
|
</Animated.View>
|
|
@@ -4,7 +4,7 @@ import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
|
4
4
|
import MoneyValue from '../MoneyValue/MoneyValue'
|
|
5
5
|
import TransactionStatus from '../TransactionStatus/TransactionStatus'
|
|
6
6
|
import NavArrow from '../NavArrow/NavArrow'
|
|
7
|
-
import { EMPTY_MODES, cloneChildrenWithModes } from '../../utils/react-utils'
|
|
7
|
+
import { EMPTY_MODES, cloneChildrenWithModes, resolveTruncation } from '../../utils/react-utils'
|
|
8
8
|
import { usePressableWebSupport, type WebAccessibilityProps } from '../../utils/web-platform-utils'
|
|
9
9
|
import type { Modes } from '../../design-tokens'
|
|
10
10
|
|
|
@@ -23,6 +23,12 @@ export type TransactionBubbleProps = {
|
|
|
23
23
|
accessibilityLabel?: string
|
|
24
24
|
accessibilityHint?: string
|
|
25
25
|
webAccessibilityProps?: WebAccessibilityProps
|
|
26
|
+
/**
|
|
27
|
+
* When `true`, disables text truncation: the trailing ellipsis (`…`) is never
|
|
28
|
+
* shown and any `numberOfLines` clamp is ignored, so the text wraps to as many
|
|
29
|
+
* lines as it needs even when horizontal space is tight.
|
|
30
|
+
*/
|
|
31
|
+
disableTruncation?: boolean
|
|
26
32
|
} & Omit<PressableProps, 'style' | 'children' | 'onPress'>
|
|
27
33
|
|
|
28
34
|
/**
|
|
@@ -56,6 +62,7 @@ function TransactionBubble({
|
|
|
56
62
|
accessibilityLabel,
|
|
57
63
|
accessibilityHint,
|
|
58
64
|
webAccessibilityProps,
|
|
65
|
+
disableTruncation,
|
|
59
66
|
...rest
|
|
60
67
|
}: TransactionBubbleProps) {
|
|
61
68
|
const resolvedModes = {
|
|
@@ -122,7 +129,7 @@ function TransactionBubble({
|
|
|
122
129
|
const mainContent = (
|
|
123
130
|
<View style={{ gap: bubbleGap }}>
|
|
124
131
|
<View style={{ gap: moneyValueWrapGap }}>
|
|
125
|
-
<Text style={descriptionStyle}
|
|
132
|
+
<Text style={descriptionStyle} {...resolveTruncation(disableTruncation, 1)}>{description}</Text>
|
|
126
133
|
<MoneyValue value={value} currency={currency} modes={resolvedModes} />
|
|
127
134
|
</View>
|
|
128
135
|
{processedChildren}
|
|
@@ -2,7 +2,7 @@ import React from 'react'
|
|
|
2
2
|
import { View, Text, type ViewStyle, type TextStyle } from 'react-native'
|
|
3
3
|
import { Svg, Path } from 'react-native-svg'
|
|
4
4
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
5
|
-
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
5
|
+
import { EMPTY_MODES, resolveTruncation } from '../../utils/react-utils'
|
|
6
6
|
import type { Modes } from '../../design-tokens'
|
|
7
7
|
|
|
8
8
|
// --- Internal Icon Component ---
|
|
@@ -48,6 +48,12 @@ export type TransactionStatusProps = {
|
|
|
48
48
|
modes?: Modes
|
|
49
49
|
/** Optional container style */
|
|
50
50
|
style?: ViewStyle
|
|
51
|
+
/**
|
|
52
|
+
* When `true`, disables text truncation: the trailing ellipsis (`…`) is never
|
|
53
|
+
* shown and any `numberOfLines` clamp is ignored, so the text wraps to as many
|
|
54
|
+
* lines as it needs even when horizontal space is tight.
|
|
55
|
+
*/
|
|
56
|
+
disableTruncation?: boolean
|
|
51
57
|
}
|
|
52
58
|
|
|
53
59
|
/**
|
|
@@ -58,6 +64,7 @@ export default function TransactionStatus({
|
|
|
58
64
|
date = '20 Mar 2025',
|
|
59
65
|
modes = EMPTY_MODES,
|
|
60
66
|
style,
|
|
67
|
+
disableTruncation,
|
|
61
68
|
}: TransactionStatusProps) {
|
|
62
69
|
const gap = Number(getVariableByName('transactionBubble/statusWrap/gap', modes)) || 4
|
|
63
70
|
// Using 'transactionStatus' tokens for text
|
|
@@ -88,7 +95,7 @@ export default function TransactionStatus({
|
|
|
88
95
|
return (
|
|
89
96
|
<View style={containerStyle}>
|
|
90
97
|
<StatusIcon width={iconSize} height={iconSize} color={iconColor} modes={modes} />
|
|
91
|
-
<Text style={textStyle}
|
|
98
|
+
<Text style={textStyle} {...resolveTruncation(disableTruncation, 1)}>
|
|
92
99
|
{status} · {date}
|
|
93
100
|
</Text>
|
|
94
101
|
</View>
|
|
@@ -13,7 +13,7 @@ import {
|
|
|
13
13
|
} from 'react-native'
|
|
14
14
|
import { getVariableByName } from '../../design-tokens/figma-variables-resolver'
|
|
15
15
|
import { useTokens } from '../../design-tokens/JFSThemeProvider'
|
|
16
|
-
import { EMPTY_MODES } from '../../utils/react-utils'
|
|
16
|
+
import { EMPTY_MODES, resolveTruncation } from '../../utils/react-utils'
|
|
17
17
|
import MediaSource, { type UnifiedSource } from '../../utils/MediaSource'
|
|
18
18
|
import Icon from '../../icons/Icon'
|
|
19
19
|
import type { Modes } from '../../design-tokens'
|
|
@@ -52,6 +52,12 @@ type UpiHandleProps = {
|
|
|
52
52
|
onPress?: () => void;
|
|
53
53
|
onClick?: () => void;
|
|
54
54
|
disabled?: boolean;
|
|
55
|
+
/**
|
|
56
|
+
* When `true`, disables text truncation: the trailing ellipsis (`…`) is never
|
|
57
|
+
* shown and any `numberOfLines` clamp is ignored, so the text wraps to as many
|
|
58
|
+
* lines as it needs even when horizontal space is tight.
|
|
59
|
+
*/
|
|
60
|
+
disableTruncation?: boolean;
|
|
55
61
|
} & Omit<React.ComponentProps<typeof View>, 'style' | 'accessibilityRole' | 'accessibilityLabel' | 'accessibilityHint'>;
|
|
56
62
|
|
|
57
63
|
interface UpiHandleTokens {
|
|
@@ -152,6 +158,7 @@ function UpiHandle({
|
|
|
152
158
|
onPress,
|
|
153
159
|
onClick,
|
|
154
160
|
disabled,
|
|
161
|
+
disableTruncation,
|
|
155
162
|
// accessibilityLabel is accepted on the type for API back-compat; the
|
|
156
163
|
// wrapper renders `accessibilityLabel={undefined}` because the inner Text
|
|
157
164
|
// already carries the label.
|
|
@@ -240,8 +247,7 @@ function UpiHandle({
|
|
|
240
247
|
</View>
|
|
241
248
|
<Text
|
|
242
249
|
style={tokens.labelStyle}
|
|
243
|
-
|
|
244
|
-
ellipsizeMode="tail"
|
|
250
|
+
{...resolveTruncation(disableTruncation, 1, 'tail')}
|
|
245
251
|
accessibilityElementsHidden={true}
|
|
246
252
|
importantForAccessibility="no"
|
|
247
253
|
>
|
package/src/components/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ export { default as Attached, type AttachedProps, type AttachedPosition } from '
|
|
|
4
4
|
export { default as AppBar } from './AppBar/AppBar';
|
|
5
5
|
export { default as Avatar, type AvatarProps } from './Avatar/Avatar';
|
|
6
6
|
export { default as AvatarGroup } from './AvatarGroup/AvatarGroup';
|
|
7
|
-
export { default as Badge } from './Badge/Badge';
|
|
7
|
+
export { default as Badge, type BadgeProps, type BadgeType } from './Badge/Badge';
|
|
8
8
|
export { default as BenefitCard, type BenefitCardProps, type BenefitCardItem } from './BenefitCard/BenefitCard';
|
|
9
9
|
export { default as BottomNav } from './BottomNav/BottomNav';
|
|
10
10
|
export { default as BottomNavItem } from './BottomNavItem/BottomNavItem';
|
|
@@ -28,7 +28,7 @@ export { default as Drawer, type DrawerProps, type DrawerHandle } from './Drawer
|
|
|
28
28
|
export { default as Dropdown, DropdownItem, type DropdownProps, type DropdownItemProps } from './Dropdown/Dropdown';
|
|
29
29
|
export { default as DropdownInput, type DropdownInputProps, type DropdownInputHandle, type DropdownInputOption, type DropdownInputOptionValue } from './DropdownInput/DropdownInput';
|
|
30
30
|
export { default as SuggestiveSearch, type SuggestiveSearchProps, type SuggestiveSearchOption, type SuggestiveSearchOptionValue, type SuggestiveSearchItem } from './SuggestiveSearch/SuggestiveSearch';
|
|
31
|
-
export { default as CardCTA, type CardCTAProps, type CardCTAType } from './CardCTA/CardCTA'
|
|
31
|
+
export { default as CardCTA, type CardCTAProps, type CardCTAType, type CardCTATypeInput } from './CardCTA/CardCTA'
|
|
32
32
|
export { default as DebitCard, type DebitCardProps } from './DebitCard/DebitCard';
|
|
33
33
|
export { default as FilterBar } from './FilterBar/FilterBar';
|
|
34
34
|
export { default as FullscreenModal, type FullscreenModalProps } from './FullscreenModal/FullscreenModal';
|
|
@@ -72,6 +72,11 @@ export { default as Screen, type ScreenProps } from './Screen/Screen';
|
|
|
72
72
|
export { default as Section } from './Section/Section';
|
|
73
73
|
export { default as Slider, type SliderProps, type SliderHandle } from './Slider/Slider';
|
|
74
74
|
export { default as Slot, type SlotProps, type SlotLayoutDirection } from './Slot/Slot';
|
|
75
|
+
export {
|
|
76
|
+
default as Stack,
|
|
77
|
+
type StackProps,
|
|
78
|
+
type StackLayoutDirection,
|
|
79
|
+
} from './Stack/Stack';
|
|
75
80
|
export { default as Spinner, type SpinnerProps, type SpinnerColors } from './Spinner/Spinner';
|
|
76
81
|
export { default as Stepper, type StepperProps } from './Stepper/Stepper';
|
|
77
82
|
export { Step, type StepProps, type StepStatus } from './Stepper/Step';
|
|
@@ -135,6 +140,22 @@ export { default as Popup, type PopupProps, type PopupRef } from './Popup/Popup'
|
|
|
135
140
|
export { default as PortfolioHero, type PortfolioHeroProps } from './PortfolioHero/PortfolioHero';
|
|
136
141
|
export { default as PlanComparisonCard, type PlanComparisonCardProps, type PlanComparisonColumn, type PlanComparisonRow, type PlanComparisonCellValue } from './PlanComparisonCard/PlanComparisonCard';
|
|
137
142
|
export { default as CompareTable, type CompareTableProps, type CompareTableColumn, type CompareTableRow, type CompareTableCellValue, type CompareTableSection } from './CompareTable/CompareTable';
|
|
143
|
+
export {
|
|
144
|
+
default as Table,
|
|
145
|
+
TableHeader,
|
|
146
|
+
TableHeaderCell,
|
|
147
|
+
TableBody,
|
|
148
|
+
TableRow,
|
|
149
|
+
TableCell,
|
|
150
|
+
type TableProps,
|
|
151
|
+
type TableColumn,
|
|
152
|
+
type TableCellAlign,
|
|
153
|
+
type TableHeaderProps,
|
|
154
|
+
type TableHeaderCellProps,
|
|
155
|
+
type TableBodyProps,
|
|
156
|
+
type TableRowProps,
|
|
157
|
+
type TableCellProps,
|
|
158
|
+
} from './Table/Table';
|
|
138
159
|
export { default as PoweredByLabel, type PoweredByLabelProps } from './PoweredByLabel/PoweredByLabel';
|
|
139
160
|
export { default as ProductLabel, type ProductLabelProps } from './ProductLabel/ProductLabel';
|
|
140
161
|
export { default as ProductMerchandisingCard, type ProductMerchandisingCardProps } from './ProductMerchandisingCard/ProductMerchandisingCard';
|