@fluentui-react-native/tester 0.86.2 → 0.89.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.
Files changed (89) hide show
  1. package/CHANGELOG.json +154 -3
  2. package/CHANGELOG.md +49 -2
  3. package/lib/TestComponents/Avatar/CustomizedAvatar.d.ts.map +1 -1
  4. package/lib/TestComponents/Avatar/CustomizedAvatar.js +7 -2
  5. package/lib/TestComponents/Avatar/CustomizedAvatar.js.map +1 -1
  6. package/lib/TestComponents/Badge/BasicBadgeTest.d.ts.map +1 -1
  7. package/lib/TestComponents/Badge/BasicBadgeTest.js +12 -11
  8. package/lib/TestComponents/Badge/BasicBadgeTest.js.map +1 -1
  9. package/lib/TestComponents/Badge/CounterBadgeTest.js +3 -3
  10. package/lib/TestComponents/Badge/CounterBadgeTest.js.map +1 -1
  11. package/lib/TestComponents/Badge/E2EBadgeTest.js +1 -1
  12. package/lib/TestComponents/Badge/E2EBadgeTest.js.map +1 -1
  13. package/lib/TestComponents/Badge/PresenceBadgeTest.d.ts.map +1 -1
  14. package/lib/TestComponents/Badge/PresenceBadgeTest.js +25 -12
  15. package/lib/TestComponents/Badge/PresenceBadgeTest.js.map +1 -1
  16. package/lib/TestComponents/Common/MenuPicker.desktop.js +2 -2
  17. package/lib/TestComponents/Common/MenuPicker.desktop.js.map +1 -1
  18. package/lib/TestComponents/RadioGroupExperimental/DefaultRadioGroup.d.ts +3 -0
  19. package/lib/TestComponents/RadioGroupExperimental/DefaultRadioGroup.d.ts.map +1 -0
  20. package/lib/TestComponents/RadioGroupExperimental/DefaultRadioGroup.js +29 -0
  21. package/lib/TestComponents/RadioGroupExperimental/DefaultRadioGroup.js.map +1 -0
  22. package/lib/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.d.ts +3 -0
  23. package/lib/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.d.ts.map +1 -0
  24. package/lib/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.js +23 -0
  25. package/lib/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.js.map +1 -0
  26. package/lib/TestComponents/RadioGroupExperimental/consts.d.ts +3 -0
  27. package/lib/TestComponents/RadioGroupExperimental/consts.d.ts.map +1 -0
  28. package/lib/TestComponents/RadioGroupExperimental/consts.js +3 -0
  29. package/lib/TestComponents/RadioGroupExperimental/consts.js.map +1 -0
  30. package/lib/TestComponents/RadioGroupExperimental/index.d.ts +3 -0
  31. package/lib/TestComponents/RadioGroupExperimental/index.d.ts.map +1 -0
  32. package/lib/TestComponents/RadioGroupExperimental/index.js +3 -0
  33. package/lib/TestComponents/RadioGroupExperimental/index.js.map +1 -0
  34. package/lib/TestComponents/Test.d.ts.map +1 -1
  35. package/lib/TestComponents/Test.js +65 -45
  36. package/lib/TestComponents/Test.js.map +1 -1
  37. package/lib/testPages.d.ts.map +1 -1
  38. package/lib/testPages.js +8 -0
  39. package/lib/testPages.js.map +1 -1
  40. package/lib-commonjs/TestComponents/Avatar/CustomizedAvatar.d.ts.map +1 -1
  41. package/lib-commonjs/TestComponents/Avatar/CustomizedAvatar.js +6 -1
  42. package/lib-commonjs/TestComponents/Avatar/CustomizedAvatar.js.map +1 -1
  43. package/lib-commonjs/TestComponents/Badge/BasicBadgeTest.d.ts.map +1 -1
  44. package/lib-commonjs/TestComponents/Badge/BasicBadgeTest.js +12 -11
  45. package/lib-commonjs/TestComponents/Badge/BasicBadgeTest.js.map +1 -1
  46. package/lib-commonjs/TestComponents/Badge/CounterBadgeTest.js +3 -3
  47. package/lib-commonjs/TestComponents/Badge/CounterBadgeTest.js.map +1 -1
  48. package/lib-commonjs/TestComponents/Badge/E2EBadgeTest.js +1 -1
  49. package/lib-commonjs/TestComponents/Badge/E2EBadgeTest.js.map +1 -1
  50. package/lib-commonjs/TestComponents/Badge/PresenceBadgeTest.d.ts.map +1 -1
  51. package/lib-commonjs/TestComponents/Badge/PresenceBadgeTest.js +23 -11
  52. package/lib-commonjs/TestComponents/Badge/PresenceBadgeTest.js.map +1 -1
  53. package/lib-commonjs/TestComponents/Common/MenuPicker.desktop.js +2 -2
  54. package/lib-commonjs/TestComponents/Common/MenuPicker.desktop.js.map +1 -1
  55. package/lib-commonjs/TestComponents/RadioGroupExperimental/DefaultRadioGroup.d.ts +3 -0
  56. package/lib-commonjs/TestComponents/RadioGroupExperimental/DefaultRadioGroup.d.ts.map +1 -0
  57. package/lib-commonjs/TestComponents/RadioGroupExperimental/DefaultRadioGroup.js +34 -0
  58. package/lib-commonjs/TestComponents/RadioGroupExperimental/DefaultRadioGroup.js.map +1 -0
  59. package/lib-commonjs/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.d.ts +3 -0
  60. package/lib-commonjs/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.d.ts.map +1 -0
  61. package/lib-commonjs/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.js +28 -0
  62. package/lib-commonjs/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.js.map +1 -0
  63. package/lib-commonjs/TestComponents/RadioGroupExperimental/consts.d.ts +3 -0
  64. package/lib-commonjs/TestComponents/RadioGroupExperimental/consts.d.ts.map +1 -0
  65. package/lib-commonjs/TestComponents/RadioGroupExperimental/consts.js +6 -0
  66. package/lib-commonjs/TestComponents/RadioGroupExperimental/consts.js.map +1 -0
  67. package/lib-commonjs/TestComponents/RadioGroupExperimental/index.d.ts +3 -0
  68. package/lib-commonjs/TestComponents/RadioGroupExperimental/index.d.ts.map +1 -0
  69. package/lib-commonjs/TestComponents/RadioGroupExperimental/index.js +6 -0
  70. package/lib-commonjs/TestComponents/RadioGroupExperimental/index.js.map +1 -0
  71. package/lib-commonjs/TestComponents/Test.d.ts.map +1 -1
  72. package/lib-commonjs/TestComponents/Test.js +63 -43
  73. package/lib-commonjs/TestComponents/Test.js.map +1 -1
  74. package/lib-commonjs/testPages.d.ts.map +1 -1
  75. package/lib-commonjs/testPages.js +8 -0
  76. package/lib-commonjs/testPages.js.map +1 -1
  77. package/package.json +12 -11
  78. package/src/TestComponents/Avatar/CustomizedAvatar.tsx +22 -1
  79. package/src/TestComponents/Badge/BasicBadgeTest.tsx +18 -17
  80. package/src/TestComponents/Badge/CounterBadgeTest.tsx +3 -3
  81. package/src/TestComponents/Badge/E2EBadgeTest.tsx +1 -1
  82. package/src/TestComponents/Badge/PresenceBadgeTest.tsx +22 -10
  83. package/src/TestComponents/Common/MenuPicker.desktop.tsx +2 -2
  84. package/src/TestComponents/RadioGroupExperimental/DefaultRadioGroup.tsx +44 -0
  85. package/src/TestComponents/RadioGroupExperimental/RadioGroupExperimentalTest.tsx +29 -0
  86. package/src/TestComponents/RadioGroupExperimental/consts.ts +2 -0
  87. package/src/TestComponents/RadioGroupExperimental/index.ts +2 -0
  88. package/src/TestComponents/Test.tsx +85 -58
  89. package/src/testPages.ts +8 -0
@@ -1,8 +1,8 @@
1
1
  import * as React from 'react';
2
- import { Text, View, StyleSheet } from 'react-native';
2
+ import { View, StyleSheet } from 'react-native';
3
3
  import { Menu, MenuItem, MenuTrigger, MenuPopover, MenuList } from '@fluentui-react-native/menu';
4
4
  import { MenuPickerProps, collectionItem } from './MenuPicker';
5
- import { ButtonV1 as Button } from '@fluentui/react-native';
5
+ import { ButtonV1 as Button, Text } from '@fluentui/react-native';
6
6
  import { SvgXml } from 'react-native-svg';
7
7
 
8
8
  const chevronXml = `
@@ -0,0 +1,44 @@
1
+ import { RadioGroup } from '@fluentui-react-native/experimental-radio-group';
2
+ import { RadioButton } from '@fluentui/react-native';
3
+ import { Separator } from '@fluentui/react-native';
4
+ import * as React from 'react';
5
+ import { View } from 'react-native';
6
+
7
+ export const DefaultRadioGroup: React.FunctionComponent = () => {
8
+ // Client's example onChange function
9
+ const onChange = (key: string) => {
10
+ console.log(key);
11
+ };
12
+
13
+ const [selectedKey, setSelectedKey] = React.useState('C');
14
+
15
+ const onChange2 = React.useCallback((key: string) => {
16
+ setSelectedKey(key);
17
+ }, []);
18
+
19
+ return (
20
+ <View>
21
+ <RadioGroup label="Uncontrolled RadioGroup" defaultValue="X" onChange={onChange}>
22
+ <RadioButton content="Option W" buttonKey="W" accessibilityLabel="Test Accessibility Label" />
23
+ <RadioButton content="Option X" buttonKey="X" />
24
+ <RadioButton content="Option Y (disabled)" buttonKey="C" disabled={true} />
25
+ <RadioButton content="Option Z" buttonKey="Z" />
26
+ </RadioGroup>
27
+ <Separator />
28
+ <RadioGroup label="Controlled RadioGroup" value={selectedKey} onChange={onChange2}>
29
+ <View>
30
+ <RadioButton
31
+ content="Option A"
32
+ buttonKey="A"
33
+ accessibilityLabel="Test Accessibility Label"
34
+ accessibilityPositionInSet={1}
35
+ accessibilitySetSize={4}
36
+ />
37
+ <RadioButton content="Option B" buttonKey="B" accessibilityPositionInSet={2} accessibilitySetSize={4} />
38
+ <RadioButton content="Option C" buttonKey="C" accessibilityPositionInSet={3} accessibilitySetSize={4} />
39
+ <RadioButton content="Option D" buttonKey="D" accessibilityPositionInSet={4} accessibilitySetSize={4} />
40
+ </View>
41
+ </RadioGroup>
42
+ </View>
43
+ );
44
+ };
@@ -0,0 +1,29 @@
1
+ import * as React from 'react';
2
+ import { RADIO_GROUP_EXPERIMENTAL_TESTPAGE } from './consts';
3
+ import { DefaultRadioGroup } from './DefaultRadioGroup';
4
+ import { Test, TestSection, PlatformStatus } from '../Test';
5
+
6
+ const radioGroupExperimentalSections: TestSection[] = [
7
+ {
8
+ name: 'Default RadioGroup Usage',
9
+ testID: RADIO_GROUP_EXPERIMENTAL_TESTPAGE,
10
+ component: DefaultRadioGroup,
11
+ },
12
+ ];
13
+
14
+ export const RadioGroupExperimentalTest: React.FunctionComponent = () => {
15
+ const status: PlatformStatus = {
16
+ win32Status: 'Beta',
17
+ uwpStatus: 'Experimental',
18
+ iosStatus: 'Experimental',
19
+ macosStatus: 'Backlog',
20
+ androidStatus: 'Backlog',
21
+ };
22
+
23
+ const description =
24
+ 'RadioGroup lets users select a single option from two or more choices. Each option is represented by one Radio; a user can select only one Radio in a RadioGroup.';
25
+
26
+ return (
27
+ <Test name="Experimental RadioGroup Test" description={description} sections={radioGroupExperimentalSections} status={status}></Test>
28
+ );
29
+ };
@@ -0,0 +1,2 @@
1
+ export const HOMEPAGE_RADIO_GROUP_EXPERIMENTAL_BUTTON = 'Homepage_RadioGroupExperimental_Button';
2
+ export const RADIO_GROUP_EXPERIMENTAL_TESTPAGE = 'RadioGroupExperimental_TestPage';
@@ -0,0 +1,2 @@
1
+ export * from './RadioGroupExperimentalTest';
2
+ export * from './consts';
@@ -1,8 +1,11 @@
1
1
  import * as React from 'react';
2
- import { StyleSheet, View, Platform } from 'react-native';
3
- import { Text, Separator } from '@fluentui/react-native';
2
+ import { Platform, StyleSheet, View } from 'react-native';
3
+ import { Text, ToggleButton, Separator } from '@fluentui/react-native';
4
4
  import { Stack } from '@fluentui-react-native/stack';
5
5
  import { stackStyle } from './Common/styles';
6
+ import { useTheme } from '@fluentui-react-native/theme-types';
7
+ import Svg, { G, Path, SvgProps } from 'react-native-svg';
8
+ import { SvgIconProps } from '@fluentui-react-native/icon';
6
9
 
7
10
  export type TestSection = {
8
11
  name: string;
@@ -26,10 +29,22 @@ export interface TestProps {
26
29
  sections: TestSection[];
27
30
  }
28
31
 
32
+ const definitions = {
33
+ Production: 'Control is ready for broad partner use and to be used in production-ready scenarios.',
34
+ Beta: 'Control is ready for partner consumption, but not ready for production release (e.g. fixing bugs).',
35
+ Experimental: 'Control code checked into repo, but not ready for partner use.',
36
+ Backlog: 'Control is in plan and on our backlog to deliver.',
37
+ 'N/A': 'Control is not in current plan.',
38
+ };
39
+
29
40
  const styles = StyleSheet.create({
30
41
  name: {
31
42
  marginTop: 4,
32
43
  },
44
+ definitionHeader: {
45
+ marginTop: 12,
46
+ marginBottom: 6,
47
+ },
33
48
  description: {
34
49
  alignItems: 'flex-start',
35
50
  flexWrap: 'wrap',
@@ -39,12 +54,9 @@ const styles = StyleSheet.create({
39
54
  },
40
55
  statusView: {
41
56
  flexDirection: 'row',
42
- alignItems: 'flex-start',
57
+ alignItems: 'center',
43
58
  justifyContent: 'space-between',
44
59
  },
45
- statusHeader: {
46
- marginBottom: 6,
47
- },
48
60
  statusLabel: {
49
61
  marginTop: 2,
50
62
  marginStart: 4,
@@ -54,10 +66,40 @@ const styles = StyleSheet.create({
54
66
  },
55
67
  });
56
68
 
57
- // mobile platform check to not render status components.
58
- const isMobile = Platform.OS == 'android' || (Platform.OS == 'ios' && !Platform.isPad);
59
-
60
69
  export const Test = (props: TestProps): React.ReactElement<Record<string, never>> => {
70
+ const [showStatus, setShowStatus] = React.useState(false);
71
+
72
+ const toggleSvg: React.FunctionComponent<SvgProps> = () => {
73
+ const plusPath =
74
+ 'M6.5 1.75C6.5 1.33579 6.16421 1 5.75 1C5.33579 1 5 1.33579 5 1.75V5H1.75C1.33579 5 1 5.33579 1 5.75C1 6.16421 1.33579 6.5 1.75 6.5H5V9.75C5 10.1642 5.33579 10.5 5.75 10.5C6.16421 10.5 6.5 10.1642 6.5 9.75V6.5H9.75C10.1642 6.5 10.5 6.16421 10.5 5.75C10.5 5.33579 10.1642 5 9.75 5H6.5V1.75Z';
75
+ const minusPath = 'M2.75 5.25h6.5s0.75 0 0.75 0.75v0s0 0.75 -0.75 0.75h-6.5s-0.75 0 -0.75 -0.75v0s0 -0.75 0.75 -0.75';
76
+
77
+ const path = showStatus ? minusPath : plusPath;
78
+ return (
79
+ <Svg>
80
+ <G>
81
+ <Path d={path} fill="black" />
82
+ </G>
83
+ </Svg>
84
+ );
85
+ };
86
+ const svgProps: SvgIconProps = {
87
+ src: toggleSvg,
88
+ };
89
+
90
+ const theme = useTheme();
91
+ const fontFamily = theme.typography.families.primary;
92
+
93
+ const plusCodepoint = 0x2795;
94
+ const minusCodepoint = 0x2796;
95
+ const fontIconProps = {
96
+ fontFamily: fontFamily,
97
+ codepoint: showStatus ? minusCodepoint : plusCodepoint,
98
+ fontSize: 10,
99
+ };
100
+
101
+ const toggleIconProps = Platform.OS === 'windows' ? { fontSource: fontIconProps } : { svgSource: svgProps, width: 12, height: 12 };
102
+
61
103
  return (
62
104
  <View testID="ScrollViewAreaForComponents">
63
105
  <Text style={[styles.name]} variant="heroSemibold">
@@ -67,57 +109,42 @@ export const Test = (props: TestProps): React.ReactElement<Record<string, never>
67
109
  <Stack style={stackStyle}>
68
110
  <Text style={styles.description}>{props.description}</Text>
69
111
  </Stack>
70
- {!isMobile && (
71
- <Stack style={stackStyle}>
72
- <View style={styles.statusView}>
73
- <Stack>
74
- <Text style={[styles.statusHeader]} variant="headerStandard">
75
- Platform Status
76
- </Text>
77
- <Text style={[styles.statusLabel]} variant="bodySemibold">
78
- Win32: <Text style={styles.status}>{props.status.win32Status}</Text>
79
- </Text>
80
- <Text style={[styles.statusLabel]} variant="bodySemibold">
81
- UWP: <Text style={styles.status}>{props.status.uwpStatus}</Text>
82
- </Text>
83
- <Text style={[styles.statusLabel]} variant="bodySemibold">
84
- iOS: <Text style={styles.status}>{props.status.iosStatus}</Text>
85
- </Text>
86
- <Text style={[styles.statusLabel]} variant="bodySemibold">
87
- macOS: <Text style={styles.status}>{props.status.macosStatus}</Text>
88
- </Text>
89
- <Text style={[styles.statusLabel]} variant="bodySemibold">
90
- Android: <Text style={styles.status}>{props.status.androidStatus}</Text>
91
- </Text>
92
- </Stack>
112
+ <Stack style={stackStyle}>
113
+ <View style={styles.statusView}>
114
+ <Text variant="headerStandard">Platform Status</Text>
115
+ <ToggleButton iconOnly={true} icon={toggleIconProps} onClick={() => setShowStatus(!showStatus)} />
116
+ </View>
117
+ {showStatus && (
118
+ <>
119
+ <Text style={[styles.statusLabel]} variant="bodySemibold">
120
+ Win32: <Text style={styles.status}>{props.status.win32Status}</Text>
121
+ </Text>
122
+ <Text style={[styles.statusLabel]} variant="bodySemibold">
123
+ UWP: <Text style={styles.status}>{props.status.uwpStatus}</Text>
124
+ </Text>
125
+ <Text style={[styles.statusLabel]} variant="bodySemibold">
126
+ iOS: <Text style={styles.status}>{props.status.iosStatus}</Text>
127
+ </Text>
128
+ <Text style={[styles.statusLabel]} variant="bodySemibold">
129
+ macOS: <Text style={styles.status}>{props.status.macosStatus}</Text>
130
+ </Text>
131
+ <Text style={[styles.statusLabel]} variant="bodySemibold">
132
+ Android: <Text style={styles.status}>{props.status.androidStatus}</Text>
133
+ </Text>
93
134
 
94
- <Stack style={stackStyle}>
95
- <Text style={[styles.statusHeader]} variant="headerStandard">
96
- Status Definitions
97
- </Text>
98
- <Text style={[styles.statusLabel]} variant="bodySemibold">
99
- Production:{' '}
100
- <Text style={styles.status}>Control is ready for broad partner use and to be used in production-ready scenarios.</Text>
101
- </Text>
102
- <Text style={[styles.statusLabel]} variant="bodySemibold">
103
- Beta:{' '}
104
- <Text style={styles.status}>
105
- Control is ready for partner consumption, but not ready for production release (e.g. fixing bugs).
135
+ <Text style={[styles.definitionHeader]} variant="headerStandard">
136
+ Status Definitions
137
+ </Text>
138
+ {Object.entries(definitions).map(([key, value]) => {
139
+ return (
140
+ <Text style={[styles.statusLabel]} variant="bodySemibold" key={key}>
141
+ {key}: <Text style={styles.status}>{value}</Text>
106
142
  </Text>
107
- </Text>
108
- <Text style={[styles.statusLabel]} variant="bodySemibold">
109
- Experimental: <Text style={styles.status}>Control code checked into repo, but not ready for partner use.</Text>
110
- </Text>
111
- <Text style={[styles.statusLabel]} variant="bodySemibold">
112
- Backlog: <Text style={styles.status}>Control is in plan and on our backlog to deliver.</Text>
113
- </Text>
114
- <Text style={[styles.statusLabel]} variant="bodySemibold">
115
- N/A: <Text style={styles.status}>Control is not in current plan.</Text>
116
- </Text>
117
- </Stack>
118
- </View>
119
- </Stack>
120
- )}
143
+ );
144
+ })}
145
+ </>
146
+ )}
147
+ </Stack>
121
148
  {props.sections.map((section, index) => {
122
149
  const TestComponent = section.component;
123
150
  return (
package/src/testPages.ts CHANGED
@@ -22,6 +22,7 @@ import { PersonaTest, HOMEPAGE_PERSONA_BUTTON } from './TestComponents/Persona';
22
22
  import { PersonaCoinTest, HOMEPAGE_PERSONACOIN_BUTTON } from './TestComponents/PersonaCoin';
23
23
  import { PressableTest, HOMEPAGE_PRESSABLE_BUTTON } from './TestComponents/Pressable';
24
24
  import { RadioGroupTest, HOMEPAGE_RADIOGROUP_BUTTON } from './TestComponents/RadioGroup';
25
+ import { HOMEPAGE_RADIO_GROUP_EXPERIMENTAL_BUTTON } from './TestComponents/RadioGroupExperimental';
25
26
  import { SeparatorTest, HOMEPAGE_SEPARATOR_BUTTON } from './TestComponents/Separator';
26
27
  import { ShadowTest, HOMEPAGE_SHADOW_BUTTON } from './TestComponents/Shadow';
27
28
  import { ShimmerTest, HOMEPAGE_SHIMMER_BUTTON } from './TestComponents/Shimmer';
@@ -33,6 +34,7 @@ import { TextTest, HOMEPAGE_TEXT_BUTTON } from './TestComponents/Text';
33
34
  import { TextExperimentalTest, HOMEPAGE_EXPERIMENTAL_TEXT_BUTTON } from './TestComponents/TextExperimental';
34
35
  import { ThemeTest, HOMEPAGE_THEME_BUTTON } from './TestComponents/Theme';
35
36
  import { TokenTest, HOMEPAGE_TOKEN_BUTTON } from './TestComponents/Tokens';
37
+ import { RadioGroupExperimentalTest } from './TestComponents/RadioGroupExperimental';
36
38
 
37
39
  export const tests: TestDescription[] = [
38
40
  {
@@ -180,6 +182,12 @@ export const tests: TestDescription[] = [
180
182
  testPage: HOMEPAGE_RADIOGROUP_BUTTON,
181
183
  platforms: ['android', 'ios', 'macos', 'web', 'win32'],
182
184
  },
185
+ {
186
+ name: 'RadioGroup (Experimental)',
187
+ component: RadioGroupExperimentalTest,
188
+ testPage: HOMEPAGE_RADIO_GROUP_EXPERIMENTAL_BUTTON,
189
+ platforms: ['android', 'ios', 'macos', 'web', 'win32'],
190
+ },
183
191
  {
184
192
  name: 'Separator',
185
193
  component: SeparatorTest,