@planningcenter/chat-react-native 3.2.0-rc.0 → 3.2.0-rc.2

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 (193) hide show
  1. package/build/components/conversation/message_form.js.map +1 -1
  2. package/build/components/conversation/message_reaction.d.ts +2 -2
  3. package/build/components/conversations/action_toggle_button.d.ts +21 -0
  4. package/build/components/conversations/action_toggle_button.d.ts.map +1 -0
  5. package/build/components/conversations/action_toggle_button.js +47 -0
  6. package/build/components/conversations/action_toggle_button.js.map +1 -0
  7. package/build/components/conversations/conversation_actions.d.ts +10 -0
  8. package/build/components/conversations/conversation_actions.d.ts.map +1 -0
  9. package/build/components/conversations/conversation_actions.js +70 -0
  10. package/build/components/conversations/conversation_actions.js.map +1 -0
  11. package/build/components/conversations/conversation_preview.d.ts +2 -1
  12. package/build/components/conversations/conversation_preview.d.ts.map +1 -1
  13. package/build/components/conversations/conversation_preview.js +27 -9
  14. package/build/components/conversations/conversation_preview.js.map +1 -1
  15. package/build/components/conversations/conversations.d.ts +5 -3
  16. package/build/components/conversations/conversations.d.ts.map +1 -1
  17. package/build/components/conversations/conversations.js +11 -7
  18. package/build/components/conversations/conversations.js.map +1 -1
  19. package/build/components/conversations/mute_indicator.d.ts +5 -0
  20. package/build/components/conversations/mute_indicator.d.ts.map +1 -0
  21. package/build/components/conversations/mute_indicator.js +19 -0
  22. package/build/components/conversations/mute_indicator.js.map +1 -0
  23. package/build/components/conversations/unread_count_badge.d.ts +2 -1
  24. package/build/components/conversations/unread_count_badge.d.ts.map +1 -1
  25. package/build/components/conversations/unread_count_badge.js +9 -1
  26. package/build/components/conversations/unread_count_badge.js.map +1 -1
  27. package/build/components/display/badge.d.ts +5 -4
  28. package/build/components/display/badge.d.ts.map +1 -1
  29. package/build/components/display/badge.js +5 -2
  30. package/build/components/display/badge.js.map +1 -1
  31. package/build/components/display/button.d.ts +3 -2
  32. package/build/components/display/button.d.ts.map +1 -1
  33. package/build/components/display/button.js.map +1 -1
  34. package/build/components/display/icon.d.ts +14 -1
  35. package/build/components/display/icon.d.ts.map +1 -1
  36. package/build/components/display/icon.js +9 -0
  37. package/build/components/display/icon.js.map +1 -1
  38. package/build/components/display/icon_button.d.ts +2 -2
  39. package/build/components/display/icon_button.d.ts.map +1 -1
  40. package/build/components/display/icon_button.js.map +1 -1
  41. package/build/components/display/index.d.ts +1 -0
  42. package/build/components/display/index.d.ts.map +1 -1
  43. package/build/components/display/index.js +1 -0
  44. package/build/components/display/index.js.map +1 -1
  45. package/build/components/display/text.js.map +1 -1
  46. package/build/components/display/toggle_button.d.ts +43 -0
  47. package/build/components/display/toggle_button.d.ts.map +1 -0
  48. package/build/components/display/toggle_button.js +67 -0
  49. package/build/components/display/toggle_button.js.map +1 -0
  50. package/build/components/display/utils/button_colors.d.ts +3 -3
  51. package/build/components/display/utils/button_colors.d.ts.map +1 -1
  52. package/build/components/display/utils/button_colors.js +1 -1
  53. package/build/components/display/utils/button_colors.js.map +1 -1
  54. package/build/components/page/error_boundary.d.ts +1 -1
  55. package/build/components/primitive/avatar_primitive.d.ts.map +1 -1
  56. package/build/components/primitive/avatar_primitive.js +3 -2
  57. package/build/components/primitive/avatar_primitive.js.map +1 -1
  58. package/build/components/primitive/banner_primitive.d.ts +2 -1
  59. package/build/components/primitive/banner_primitive.d.ts.map +1 -1
  60. package/build/components/primitive/banner_primitive.js.map +1 -1
  61. package/build/contexts/api_provider.js.map +1 -1
  62. package/build/contexts/swipeable_active_conversation.d.ts +11 -0
  63. package/build/contexts/swipeable_active_conversation.d.ts.map +1 -0
  64. package/build/contexts/swipeable_active_conversation.js +16 -0
  65. package/build/contexts/swipeable_active_conversation.js.map +1 -0
  66. package/build/hooks/use_conversation.d.ts +1 -1
  67. package/build/hooks/use_conversation.d.ts.map +1 -1
  68. package/build/hooks/use_conversation.js +1 -1
  69. package/build/hooks/use_conversation.js.map +1 -1
  70. package/build/hooks/use_create_android_ripple_color.d.ts +1 -1
  71. package/build/hooks/use_create_android_ripple_color.d.ts.map +1 -1
  72. package/build/hooks/use_jolt.js +1 -1
  73. package/build/hooks/use_jolt.js.map +1 -1
  74. package/build/navigation/index.d.ts +9 -1
  75. package/build/navigation/index.d.ts.map +1 -1
  76. package/build/navigation/index.js +13 -1
  77. package/build/navigation/index.js.map +1 -1
  78. package/build/screens/conversation_filters/components/conversation_filters.js.map +1 -1
  79. package/build/screens/conversation_filters/components/rows.d.ts +2 -1
  80. package/build/screens/conversation_filters/components/rows.d.ts.map +1 -1
  81. package/build/screens/conversation_filters/components/rows.js +19 -14
  82. package/build/screens/conversation_filters/components/rows.js.map +1 -1
  83. package/build/screens/conversations/components/chat_group_badge.d.ts +3 -0
  84. package/build/screens/conversations/components/chat_group_badge.d.ts.map +1 -0
  85. package/build/screens/conversations/components/chat_group_badge.js +40 -0
  86. package/build/screens/conversations/components/chat_group_badge.js.map +1 -0
  87. package/build/screens/conversations/components/list_header_component.d.ts +3 -0
  88. package/build/screens/conversations/components/list_header_component.d.ts.map +1 -0
  89. package/build/screens/conversations/components/list_header_component.js +88 -0
  90. package/build/screens/conversations/components/list_header_component.js.map +1 -0
  91. package/build/screens/{conversations_screen.d.ts → conversations/conversations_screen.d.ts} +1 -1
  92. package/build/screens/conversations/conversations_screen.d.ts.map +1 -0
  93. package/build/screens/conversations/conversations_screen.js +35 -0
  94. package/build/screens/conversations/conversations_screen.js.map +1 -0
  95. package/build/screens/create/conversation_create_screen.d.ts.map +1 -1
  96. package/build/screens/create/conversation_create_screen.js +0 -1
  97. package/build/screens/create/conversation_create_screen.js.map +1 -1
  98. package/build/screens/design_system_screen.d.ts.map +1 -1
  99. package/build/screens/design_system_screen.js +10 -1
  100. package/build/screens/design_system_screen.js.map +1 -1
  101. package/build/screens/message_actions_screen.js +1 -1
  102. package/build/screens/message_actions_screen.js.map +1 -1
  103. package/build/utils/client/client.d.ts +2 -2
  104. package/build/utils/client/client.d.ts.map +1 -1
  105. package/build/utils/client/client.js +12 -4
  106. package/build/utils/client/client.js.map +1 -1
  107. package/build/utils/client/request_helpers.d.ts +15 -8
  108. package/build/utils/client/request_helpers.d.ts.map +1 -1
  109. package/build/utils/client/request_helpers.js +2 -1
  110. package/build/utils/client/request_helpers.js.map +1 -1
  111. package/build/utils/client/transform_request_data.d.ts +11 -6
  112. package/build/utils/client/transform_request_data.d.ts.map +1 -1
  113. package/build/utils/client/transform_request_data.js +1 -1
  114. package/build/utils/client/transform_request_data.js.map +1 -1
  115. package/build/utils/client/transform_response.d.ts +1 -1
  116. package/build/utils/client/transform_response.d.ts.map +1 -1
  117. package/build/utils/client/transform_response.js +2 -0
  118. package/build/utils/client/transform_response.js.map +1 -1
  119. package/build/utils/client/utils.d.ts +3 -3
  120. package/build/utils/client/utils.d.ts.map +1 -1
  121. package/build/utils/client/utils.js +6 -6
  122. package/build/utils/client/utils.js.map +1 -1
  123. package/build/utils/date.d.ts.map +1 -1
  124. package/build/utils/date.js +1 -0
  125. package/build/utils/date.js.map +1 -1
  126. package/build/utils/deepCamelCaseKeys.d.ts.map +1 -1
  127. package/build/utils/deepCamelCaseKeys.js +3 -1
  128. package/build/utils/deepCamelCaseKeys.js.map +1 -1
  129. package/build/utils/parse_simple_markdown.d.ts +1 -1
  130. package/build/utils/parse_simple_markdown.d.ts.map +1 -1
  131. package/build/utils/parse_simple_markdown.js +2 -1
  132. package/build/utils/parse_simple_markdown.js.map +1 -1
  133. package/build/utils/space.js.map +1 -1
  134. package/build/utils/uri.d.ts +2 -2
  135. package/build/utils/uri.d.ts.map +1 -1
  136. package/build/utils/uri.js +2 -2
  137. package/build/utils/uri.js.map +1 -1
  138. package/build/vendor/tapestry/alias_tokens_color_map.d.ts +8 -0
  139. package/build/vendor/tapestry/alias_tokens_color_map.d.ts.map +1 -1
  140. package/build/vendor/tapestry/alias_tokens_color_map.js +8 -0
  141. package/build/vendor/tapestry/alias_tokens_color_map.js.map +1 -1
  142. package/build/vendor/tapestry/tokens.d.ts +2 -0
  143. package/build/vendor/tapestry/tokens.d.ts.map +1 -1
  144. package/build/vendor/tapestry/tokens.js +2 -0
  145. package/build/vendor/tapestry/tokens.js.map +1 -1
  146. package/package.json +8 -6
  147. package/src/components/conversation/message_form.tsx +1 -1
  148. package/src/components/conversations/action_toggle_button.tsx +83 -0
  149. package/src/components/conversations/conversation_actions.tsx +119 -0
  150. package/src/components/conversations/conversation_preview.tsx +46 -16
  151. package/src/components/conversations/conversations.tsx +38 -30
  152. package/src/components/conversations/mute_indicator.tsx +21 -0
  153. package/src/components/conversations/unread_count_badge.tsx +8 -1
  154. package/src/components/display/badge.tsx +12 -8
  155. package/src/components/display/button.tsx +3 -3
  156. package/src/components/display/icon.tsx +16 -3
  157. package/src/components/display/icon_button.tsx +2 -2
  158. package/src/components/display/index.ts +1 -0
  159. package/src/components/display/text.tsx +1 -1
  160. package/src/components/display/toggle_button.tsx +157 -0
  161. package/src/components/display/utils/button_colors.ts +8 -3
  162. package/src/components/primitive/avatar_primitive.tsx +5 -3
  163. package/src/components/primitive/banner_primitive.tsx +2 -2
  164. package/src/contexts/api_provider.tsx +1 -1
  165. package/src/contexts/swipeable_active_conversation.tsx +27 -0
  166. package/src/hooks/use_conversation.ts +5 -5
  167. package/src/hooks/use_jolt.ts +2 -2
  168. package/src/navigation/index.tsx +19 -1
  169. package/src/screens/conversation_filters/components/conversation_filters.tsx +1 -1
  170. package/src/screens/conversation_filters/components/rows.tsx +44 -14
  171. package/src/screens/conversations/components/chat_group_badge.tsx +47 -0
  172. package/src/screens/conversations/components/list_header_component.tsx +125 -0
  173. package/src/screens/conversations/conversations_screen.tsx +56 -0
  174. package/src/screens/create/conversation_create_screen.tsx +7 -4
  175. package/src/screens/design_system_screen.tsx +29 -0
  176. package/src/screens/message_actions_screen.tsx +2 -2
  177. package/src/utils/client/client.ts +15 -7
  178. package/src/utils/client/request_helpers.ts +15 -6
  179. package/src/utils/client/transform_request_data.ts +13 -4
  180. package/src/utils/client/transform_response.ts +3 -0
  181. package/src/utils/client/types.d.ts +2 -1
  182. package/src/utils/client/utils.ts +13 -12
  183. package/src/utils/date.ts +1 -0
  184. package/src/utils/deepCamelCaseKeys.ts +3 -2
  185. package/src/utils/parse_simple_markdown.ts +3 -1
  186. package/src/utils/space.ts +1 -1
  187. package/src/utils/uri.ts +2 -2
  188. package/src/vendor/tapestry/alias_tokens_color_map.ts +12 -0
  189. package/src/vendor/tapestry/tokens.ts +2 -0
  190. package/build/screens/conversations_screen.d.ts.map +0 -1
  191. package/build/screens/conversations_screen.js +0 -144
  192. package/build/screens/conversations_screen.js.map +0 -1
  193. package/src/screens/conversations_screen.tsx +0 -222
@@ -1,7 +1,7 @@
1
1
  import React, { useState } from 'react';
2
2
  import { Alert, Pressable, ScrollView, StyleSheet, View } from 'react-native';
3
3
  import { useTheme } from '../hooks';
4
- import { Avatar, AvatarGroup, Badge, Banner, BannerCollapsible, Button, Heading, Icon, IconButton, Image, Person, Spinner, Switch, Text, TextButton, TextInlineButton, } from '../components/display';
4
+ import { Avatar, AvatarGroup, Badge, Banner, BannerCollapsible, Button, ToggleButton, Heading, Icon, IconButton, Image, Person, Spinner, Switch, Text, TextButton, TextInlineButton, } from '../components/display';
5
5
  import { space, MAX_FONT_SIZE_MULTIPLIER, platformPressedOpacityStyle, platformFontWeightMedium, } from '../utils';
6
6
  import BannerPrimitive from '../components/primitive/banner_primitive';
7
7
  // =================================
@@ -193,6 +193,7 @@ function HeadingTextSection({ isLast }) {
193
193
  }
194
194
  function PressablesSection({ isLast }) {
195
195
  const styles = useStyles();
196
+ const [filterSelected, setFilterSelected] = useState('Groups');
196
197
  return (<CollapsableSection title="Pressables" isLast={isLast}>
197
198
  <Group title="Button" description="Feature fill and outline variants for primary and danger usecases, along with disabled & loading states. Optionally shows icons to the left and right of the text.">
198
199
  <Row>
@@ -236,6 +237,13 @@ function PressablesSection({ isLast }) {
236
237
  <Button loading onPress={buttonPress} title="Danger" appearance="danger" size="lg" variant="outline" iconNameLeft="groups.cards" iconNameRight="general.downChevron" maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}/>
237
238
  </Row>
238
239
  </Group>
240
+ <Group title="ToggleButton" description="Button with active and deactive states. Supports right & left icons, along with standard pressable props.">
241
+ <Row>
242
+ <ToggleButton onPress={() => setFilterSelected('Groups')} title="Groups" active={filterSelected === 'Groups'} accessibilityLabel="Filter to group conversations"/>
243
+ <ToggleButton onPress={() => setFilterSelected('Teams')} title="Teams" active={filterSelected === 'Teams'} accessibilityLabel="Filter to team conversations"/>
244
+ <ToggleButton onPress={() => setFilterSelected('More')} title="More" active={filterSelected === 'More'} iconNameRight="general.threeReducingHorizontalBars" accessibilityLabel="View more filters"/>
245
+ </Row>
246
+ </Group>
239
247
  <Group title="IconButton" description="Supports different appearances, sizes, along with loading & disabled states. Use `iconStyle` for custom colors and font sizes. Requires `accessibilityLabel` as icon's don't provide context to screen readers.">
240
248
  <Row>
241
249
  <IconButton onPress={buttonPress} name="general.paperclip" accessibilityLabel="Add attachment" accessibilityHint="Opens your device's image gallary" size="md"/>
@@ -400,6 +408,7 @@ function ImageIconsSection({ isLast }) {
400
408
  </Group>
401
409
  <Group title="Icon" description="Displays any icon from @planningcenter/icons. Missing icons will fallback to a grey circle. Styling with `fontSize` will allow it to scale with the device's text a11y size.">
402
410
  <Row>
411
+ {/* @ts-expect-error - Icon name is not a string */}
403
412
  <Icon name="missingIcon" size={20}/>
404
413
  <Icon name="general.textMessage" size={20}/>
405
414
  <Icon name="general.bell" size={20} color={colors.needsDesignPass}/>
@@ -1 +1 @@
1
- {"version":3,"file":"design_system_screen.js","sourceRoot":"","sources":["../../src/screens/design_system_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react'\nimport { Alert, Pressable, ScrollView, StyleSheet, View } from 'react-native'\nimport type { ViewStyle } from 'react-native'\nimport { useTheme } from '../hooks'\nimport {\n Avatar,\n AvatarGroup,\n Badge,\n Banner,\n BannerCollapsible,\n Button,\n Heading,\n Icon,\n IconButton,\n Image,\n Person,\n Spinner,\n Switch,\n Text,\n TextButton,\n TextInlineButton,\n} from '../components/display'\nimport {\n space,\n MAX_FONT_SIZE_MULTIPLIER,\n platformPressedOpacityStyle,\n platformFontWeightMedium,\n} from '../utils'\nimport BannerPrimitive from '../components/primitive/banner_primitive'\n\n// =================================\n// ====== Docs Utils ===============\n// =================================\n\nconst URL = {\n image: 'https://picsum.photos/seed/picsum/200',\n broken: 'https://broken.url',\n avatar: 'https://i.pravatar.cc/200?img=22',\n avatar_fallback: 'https://avatars.planningcenteronline.com/uploads/initials/PR.png',\n two_avatars: ['https://i.pravatar.cc/200?img=22', 'https://i.pravatar.cc/200?img=23'],\n three_avatars: [\n 'https://i.pravatar.cc/200?img=22',\n 'https://i.pravatar.cc/200?img=23',\n 'https://i.pravatar.cc/200?img=24',\n ],\n four_avatars: [\n 'https://i.pravatar.cc/200?img=30',\n 'https://i.pravatar.cc/200?img=29',\n 'https://i.pravatar.cc/200?img=28',\n 'https://i.pravatar.cc/200?img=27',\n ],\n}\n\nconst personAdult = {\n id: 1,\n type: 'Member' as const,\n name: 'John Doe',\n avatar: URL.avatar,\n badges: [{ title: 'Conversation owner' }, { title: 'Leader' }],\n child: false,\n}\n\nconst personChild = {\n id: 2,\n type: 'Member' as const,\n name: 'Kid McChild',\n avatar: URL.two_avatars[1],\n badges: [],\n child: true,\n}\n\nconst buttonPress = () => Alert.alert('Button clicked')\n\n// =================================\n// ====== Component ================\n// =================================\n\nexport function DesignSystemScreen() {\n const styles = useStyles()\n\n return (\n <ScrollView contentContainerStyle={styles.container} style={styles.scrollView}>\n <ThemeSection />\n {/* TODO: Enable & update when we install @planningcenter/tapestry */}\n {/* <TokensSection /> */}\n <IndicatorsSection />\n <HeadingTextSection />\n <PressablesSection />\n <ImageIconsSection />\n <FormControlsSection />\n <StatusComponentsSection />\n <MiscComponentsSection isLast />\n </ScrollView>\n )\n}\n\n// =================================\n// ====== Sections =================\n// =================================\n\ninterface SectionProps {\n isLast?: boolean\n}\n\nfunction ThemeSection({ isLast }: SectionProps) {\n return (\n <CollapsableSection title=\"Theme\" isLast={isLast}>\n <TextGroup>\n <Text>There are four main parts to our theming system…</Text>\n <TextRow>\n <Heading variant=\"h3\">Default theme</Heading>\n <Text>\n Start at `src/utils/theme` when adding new theme values or checking what target apps\n have access to. The file has more instructions and examples.\n </Text>\n <Text>At a high level, it provides…</Text>\n <TextListItem label=\"1.\">\n Access to consuming app targets of what theme values that they can be customized.\n </TextListItem>\n <TextListItem label=\"2.\">\n Fallback values for our components to use if the values weren't overriden.\n </TextListItem>\n </TextRow>\n <TextRow>\n <Heading variant=\"h3\">Customizing the theme</Heading>\n <Text>\n Apps can override any default theme value by passing a `theme` object to our\n `ChatProvider` that holds a `theme` and a `colorScheme`.\n </Text>\n <Text>\n Currently types can be enforced by setting the parent theme object to\n `CreateChatThemeProps`.\n </Text>\n <Text variant=\"footnote\">\n Example setup: `apps/mobile/src/context/chat_context_provider.tsx`\n </Text>\n </TextRow>\n <TextRow>\n <Heading variant=\"h3\">Merged theme</Heading>\n <Text>\n In `src/contexts/chat_context.tsx` we merge the default theme and any custom values\n coming from a product target with the `useCreateChatTheme` hook. It creates a single\n `ChatTheme` type.\n </Text>\n </TextRow>\n <TextRow>\n <Heading variant=\"h3\">Using theme values</Heading>\n <Text>\n Inside of our own `chat-react-native` components we can access the merged `ChatTheme`\n object via our own `useTheme` hook.\n </Text>\n <Text variant=\"footnote\">Example setup: `src/components/display/button.tsx`</Text>\n </TextRow>\n </TextGroup>\n </CollapsableSection>\n )\n}\n\n// function TokensSection({ isLast }: SectionProps) {\n// return (\n// <CollapsableSection title=\"Tokens\" isLast={isLast}>\n// <TextGroup>\n// <TextRow>\n// <Heading variant=\"h3\">What are they?</Heading>\n// <Text>\n// Tokens are UX approved CSS values that we can use to style our UI in a consistent way.\n// (e.g. colors, spacing amounts, and font weights.)\n// </Text>\n// </TextRow>\n// <TextRow>\n// <Heading variant=\"h3\">Where do they come from?</Heading>\n// <Text>\n// Tokens primarily come from our internal `@planningcenter/tapestry` package. However, at\n// this time the package only support light mode colors, so Chat uses a workaround.\n// </Text>\n// <Text>Color-based tokens are infused into our theming system with two local files…</Text>\n// <TextListItem label=\"1. `src/vendor/tapestry/tokens`:\">\n// Primitive color values are stored* here. Primitives capture light or dark mode values,\n// but don't take into account the devices's colors scheme.\n// </TextListItem>\n// <TextListItem label=\"2. `src/vendor/tapestry/alias_tokens_color_map`:\">\n// Alias tokens reference the primitive color values token file* in light and dark mode\n// specfic objects. Our theming system then selects the right color to use based on the\n// device's color scheme.\n// </TextListItem>\n// <Text variant=\"footnote\">\n// *If available, reference the color from the Tapestry package instead.\n// </Text>\n// </TextRow>\n// <TextRow>\n// <Heading variant=\"h3\">How do we use them?</Heading>\n// <Text>There are two places to reference tokens at this time…</Text>\n// <TextListItem label=\"• Color tokens:\">\n// Reference them from our internal `useTheme` hook to ensure the correct light or dark\n// mode color token is used.\n// </TextListItem>\n// <TextListItem label=\"• All other tokens:\">\n// Use the `computedToken` function from `@planningcenter/tapestry` by passing it a string\n// with the token's name. This function provides Typescript support and maps to the token's\n// raw CSS value. There is another function called `token`, but it maps to CSS custom\n// properties which React Native doesn't support.\n// </TextListItem>\n// </TextRow>\n// </TextGroup>\n// </CollapsableSection>\n// )\n// }\n\nfunction IndicatorsSection({ isLast }: SectionProps) {\n const styles = useStyles()\n\n return (\n <CollapsableSection title=\"Indicators\" isLast={isLast}>\n <Group\n title=\"Spinner\"\n description=\"Loading indicators that can be used within or close to atomic components. Not intended for full-screen loading.\"\n >\n <Row style={styles.spinnerContainer}>\n <Spinner size={24} />\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction HeadingTextSection({ isLast }: SectionProps) {\n const styles = useStyles()\n\n return (\n <CollapsableSection title=\"Heading & Text\" isLast={isLast}>\n <Group\n title=\"Heading\"\n description=\"Use for headings & titles as it includes the a11y 'header' role. Change the size and style with the h1-h4 variants.\"\n >\n <Column style={styles.columnCenter}>\n <Heading>Heading 1</Heading>\n <Heading variant=\"h2\">Heading 2</Heading>\n <Heading variant=\"h3\">Heading 3</Heading>\n <Heading variant=\"h4\">Heading 4</Heading>\n </Column>\n </Group>\n <Group title=\"Text\" description=\"Use for body copy and supporting text.\">\n <Column style={styles.columnCenter}>\n <Text>Plain text</Text>\n <Text variant=\"secondary\">Secondary</Text>\n <Text variant=\"tertiary\">Tertiary</Text>\n <Text variant=\"footnote\">Footnote</Text>\n </Column>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction PressablesSection({ isLast }: SectionProps) {\n const styles = useStyles()\n\n return (\n <CollapsableSection title=\"Pressables\" isLast={isLast}>\n <Group\n title=\"Button\"\n description=\"Feature fill and outline variants for primary and danger usecases, along with disabled & loading states. Optionally shows icons to the left and right of the text.\"\n >\n <Row>\n <Button onPress={buttonPress} title=\"Default\" size=\"sm\" />\n <Button onPress={buttonPress} title=\"Default\" size=\"md\" />\n <Button onPress={buttonPress} title=\"Danger\" appearance=\"danger\" size=\"lg\" />\n </Row>\n <Row>\n <Button disabled onPress={buttonPress} title=\"Disabled\" size=\"sm\" />\n <Button disabled onPress={buttonPress} title=\"Disabled\" size=\"md\" />\n <Button disabled onPress={buttonPress} title=\"Disabled\" appearance=\"danger\" size=\"lg\" />\n </Row>\n <Row>\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"sm\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"md\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n <Row>\n <Button loading onPress={buttonPress} title=\"Default\" size=\"sm\" />\n <Button loading onPress={buttonPress} title=\"Default\" size=\"md\" />\n <Button loading onPress={buttonPress} title=\"Danger\" appearance=\"danger\" size=\"lg\" />\n </Row>\n <Row>\n <Button onPress={buttonPress} title=\"Default\" size=\"sm\" variant=\"outline\" />\n <Button onPress={buttonPress} title=\"Default\" size=\"md\" variant=\"outline\" />\n <Button\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n />\n </Row>\n <Row>\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"sm\"\n variant=\"outline\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"md\"\n variant=\"outline\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n <Row>\n <Button\n disabled\n onPress={buttonPress}\n title=\"Disabled\"\n size=\"sm\"\n variant=\"outline\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n disabled\n onPress={buttonPress}\n title=\"Disabled\"\n size=\"md\"\n variant=\"outline\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n disabled\n onPress={buttonPress}\n title=\"Disabled\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n <Row>\n <Button\n loading\n onPress={buttonPress}\n title=\"Default\"\n size=\"sm\"\n variant=\"outline\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n loading\n onPress={buttonPress}\n title=\"Default\"\n size=\"md\"\n variant=\"outline\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n loading\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n </Group>\n <Group\n title=\"IconButton\"\n description=\"Supports different appearances, sizes, along with loading & disabled states. Use `iconStyle` for custom colors and font sizes. Requires `accessibilityLabel` as icon's don't provide context to screen readers.\"\n >\n <Row>\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"md\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"danger\"\n size=\"lg\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"interaction\"\n size=\"xl\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n iconStyle={styles.customIconButtonColor}\n size=\"xxl\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"xxxl\"\n />\n </Row>\n <Row>\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"md\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"danger\"\n size=\"lg\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"interaction\"\n size=\"xl\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n iconStyle={styles.customIconButtonColor}\n size=\"xxl\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"xxxl\"\n disabled\n />\n </Row>\n <Row>\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"md\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"danger\"\n size=\"lg\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"interaction\"\n size=\"xl\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n iconStyle={styles.customIconButtonColor}\n size=\"xxl\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"xxxl\"\n loading\n />\n </Row>\n </Group>\n <Group\n title=\"TextButton\"\n description=\"Pressable text with default & danger appearance options. Can be disabled and accept `Text` variance props.\"\n >\n <Row>\n <TextButton onPress={buttonPress}>Default</TextButton>\n <TextButton onPress={buttonPress} variant=\"secondary\">\n Default\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"tertiary\">\n Default\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"footnote\">\n Default\n </TextButton>\n </Row>\n <Row>\n <TextButton onPress={buttonPress} appearance=\"danger\">\n Danger\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"secondary\" appearance=\"danger\">\n Danger\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"tertiary\" appearance=\"danger\">\n Danger\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"footnote\" appearance=\"danger\">\n Danger\n </TextButton>\n </Row>\n <Row>\n <TextButton onPress={buttonPress} disabled>\n Disabled\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"secondary\" disabled>\n Disabled\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"tertiary\" disabled>\n Disabled\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"footnote\" disabled>\n Disabled\n </TextButton>\n </Row>\n </Group>\n <Group\n title=\"TextInlineButton\"\n description=\"Supports nesting within `Text`. Temporary component until React Native fixes a layout bug in `Pressable` which used in `TextButton`.\"\n >\n <Row style={styles.alignRowLeft}>\n <Text>\n This text is next to{' '}\n <TextInlineButton onPress={buttonPress}>default button text</TextInlineButton> Lorem\n ipsum dolor{' '}\n <TextInlineButton onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n <Text variant=\"secondary\">\n This text is next to{' '}\n <TextInlineButton variant=\"secondary\" onPress={buttonPress}>\n default button text\n </TextInlineButton>{' '}\n Lorem ipsum dolor{' '}\n <TextInlineButton variant=\"secondary\" onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton variant=\"secondary\" onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n <Text variant=\"tertiary\">\n This text is next to{' '}\n <TextInlineButton variant=\"tertiary\" onPress={buttonPress}>\n default button text\n </TextInlineButton>{' '}\n Lorem ipsum dolor{' '}\n <TextInlineButton variant=\"tertiary\" onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton variant=\"tertiary\" onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n <Text variant=\"footnote\">\n This text is next to{' '}\n <TextInlineButton variant=\"footnote\" onPress={buttonPress}>\n default button text\n </TextInlineButton>{' '}\n Lorem ipsum dolor{' '}\n <TextInlineButton variant=\"footnote\" onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton variant=\"footnote\" onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction ImageIconsSection({ isLast }: SectionProps) {\n const styles = useStyles()\n const { colors } = useTheme()\n\n return (\n <CollapsableSection title=\"Images & Icons\" isLast={isLast}>\n <Group\n title=\"Image\"\n description=\"Foundational way of displaying images. Loading or broken images will fallback to show a spinner. Hide decortive images from screen readers with `alt=''`.\"\n >\n <Row>\n <Image source={{ uri: URL.broken }} style={styles.image} alt=\"Mountain sunrise\" />\n <Image source={{ uri: URL.image }} style={styles.image} alt=\"Mountain sunrise\" />\n <Image source={{ uri: URL.image }} style={styles.image} alt=\"\" />\n </Row>\n </Group>\n <Group\n title=\"Avatar\"\n description='Displays the profile image for a user in different sizes and has a loading fallback. Can optionally show an online/offline \"presence\" indicator.'\n >\n <Row>\n <Avatar sourceUri={URL.broken} />\n <Avatar size=\"md\" sourceUri={URL.avatar_fallback} />\n <Avatar sourceUri={URL.avatar} />\n </Row>\n <Row>\n <Avatar presence=\"offline\" sourceUri={URL.broken} />\n <Avatar presence=\"online\" size=\"md\" sourceUri={URL.avatar_fallback} />\n <Avatar presence=\"offline\" sourceUri={URL.avatar} />\n </Row>\n </Group>\n <Group\n title=\"AvatarGroup\"\n description=\"Shows 1-4 images in a grid at different sizes. Loading fallback shows until all images successfully load.\"\n >\n <Row>\n <AvatarGroup sourceUris={[URL.broken]} />\n <AvatarGroup sourceUris={[URL.broken, URL.broken, ...URL.two_avatars]} />\n <AvatarGroup sourceUris={[URL.avatar]} />\n <AvatarGroup sourceUris={URL.two_avatars} />\n <AvatarGroup sourceUris={URL.three_avatars} />\n <AvatarGroup sourceUris={URL.four_avatars} />\n </Row>\n </Group>\n <Group\n title=\"Icon\"\n description=\"Displays any icon from @planningcenter/icons. Missing icons will fallback to a grey circle. Styling with `fontSize` will allow it to scale with the device's text a11y size.\"\n >\n <Row>\n <Icon name=\"missingIcon\" size={20} />\n <Icon name=\"general.textMessage\" size={20} />\n <Icon name=\"general.bell\" size={20} color={colors.needsDesignPass} />\n <Icon name=\"churchCenter.sort\" style={styles.icon} />\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction FormControlsSection({ isLast }: SectionProps) {\n const [switchEnabled, setSwitchEnabled] = useState(false)\n return (\n <CollapsableSection title=\"Form Controls\" isLast={isLast}>\n <Group\n title=\"Switch\"\n description=\"Use to toggle a boolean value for some sort of contained setting. (ie. Muting a conversation) This is a light wrapper that takes into account themed colors.\"\n >\n <Row>\n <Switch value={switchEnabled} onValueChange={value => setSwitchEnabled(value)} />\n <Switch disabled />\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction StatusComponentsSection({ isLast }: SectionProps) {\n return (\n <CollapsableSection title=\"Status components\" isLast={isLast}>\n <Group\n title=\"Badge\"\n description=\"Badge that can convey a status and show an icon. It also supports a meta label and product logo for the conversation list and conversation header. Target products can change colors and hide the logo via theming.\"\n >\n <Row>\n <Badge label=\"Neutral\" appearance=\"neutral\" />\n <Badge label=\"Error\" appearance=\"error\" />\n <Badge label=\"Info\" appearance=\"info\" />\n <Badge label=\"Success\" appearance=\"success\" />\n <Badge label=\"Warning\" appearance=\"warning\" />\n </Row>\n <Row>\n <Badge label=\"Neutral\" appearance=\"neutral\" iconName=\"general.star\" />\n <Badge label=\"Error\" appearance=\"error\" iconName=\"general.exclamationTriangle\" />\n <Badge label=\"Info\" appearance=\"info\" iconName=\"general.outlinedInfoCircle\" />\n <Badge label=\"Success\" appearance=\"success\" iconName=\"general.check\" />\n <Badge label=\"Warning\" appearance=\"warning\" iconName=\"general.shieldExclamation\" />\n </Row>\n <Row>\n <Badge\n variant=\"meta\"\n productLogoName=\"groups\"\n label=\"Group\"\n metaLabel=\"Worlds longest group name that will probably overflow if it gets very much longer\"\n />\n <Badge variant=\"meta\" productLogoName=\"groups\" label=\"Group\" metaLabel=\"Young adults\" />\n <Badge variant=\"meta\" productLogoName=\"services\" label=\"Plan\" metaLabel=\"June 19, 2025\" />\n <Badge variant=\"meta\" productLogoName=\"services\" label=\"Team\" />\n </Row>\n <Row>\n <Badge\n variant=\"metaSubtle\"\n productLogoName=\"groups\"\n label=\"Group\"\n metaLabel=\"Worlds longest group name that will probably overflow if it gets very much longer\"\n />\n <Badge\n variant=\"metaSubtle\"\n productLogoName=\"groups\"\n label=\"Group\"\n metaLabel=\"Young adults\"\n />\n <Badge\n variant=\"metaSubtle\"\n productLogoName=\"services\"\n label=\"Plan\"\n metaLabel=\"June 19, 2025\"\n />\n <Badge variant=\"metaSubtle\" productLogoName=\"services\" label=\"Team\" />\n </Row>\n </Group>\n <Group\n title=\"Banner\"\n description=\"Banners that can convey a status with color and an optional icon. They render a description and optional heading. A `Banner.Link` can be used by wrapping it in `Banner.Text` and passing it to `description`. Target products can change colors via theming.\"\n >\n <Column>\n <Banner\n appearance=\"neutral\"\n showIcon={false}\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n <Banner\n appearance=\"info\"\n heading=\"Banner heading\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n <Banner\n appearance=\"success\"\n heading=\"Banner heading\"\n description={\n <BannerPrimitive.Text>\n Et sint Quis non excepturi{' '}\n <BannerPrimitive.Link onPress={buttonPress}>\n enim et conseq atur porro est\n </BannerPrimitive.Link>{' '}\n galisum labore ea volupt.\n </BannerPrimitive.Text>\n }\n />\n <Banner\n appearance=\"warning\"\n iconName=\"general.shieldExclamation\"\n heading=\"13 members under age 13\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n <Banner\n appearance=\"error\"\n heading=\"Banner heading\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n </Column>\n </Group>\n <Group\n title=\"BannerCollapsible\"\n description=\"Same as `Banner` but takes children that can be hidden/revealed on a tap.\"\n >\n <Column>\n <BannerCollapsible appearance=\"neutral\" showIcon={false} heading=\"Banner heading\">\n <BannerPrimitive.Text>\n Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible appearance=\"info\" heading=\"Banner heading\">\n <BannerPrimitive.Text>\n Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible appearance=\"success\" heading=\"Banner heading\">\n <BannerPrimitive.Text>\n Et sint Quis non excepturi{' '}\n <BannerPrimitive.Link onPress={buttonPress}>\n enim et conseq atur porro est\n </BannerPrimitive.Link>{' '}\n galisum labore ea volupt.\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible\n appearance=\"warning\"\n iconName=\"general.shieldExclamation\"\n heading=\"13 members under age 13\"\n description=\"Et sint Quis non excepturi enim et conse.\"\n >\n <BannerPrimitive.Text>\n More hdden content that can be revealed on a tap. Lorem ipsum dolor sit amet,\n consectetur\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible\n appearance=\"error\"\n heading=\"Banner heading\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n >\n <BannerPrimitive.Text>\n Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt. Et\n sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt. Et\n sint Quis non excepturi enim et .\n </BannerPrimitive.Text>\n </BannerCollapsible>\n </Column>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction MiscComponentsSection({ isLast }: SectionProps) {\n return (\n <CollapsableSection title=\"Misc components\" isLast={isLast}>\n <Group\n title=\"Person\"\n description=\"Takes a person object (`MemberResource` type) and displays an avatar, name, and badges. If person is a child we show a special badge and faded styles. Implomentation is based on a similar Chat Web component.\"\n >\n <Column>\n <Person person={personAdult} />\n <Person person={personChild} />\n </Column>\n </Group>\n </CollapsableSection>\n )\n}\n\n// =================================\n// ====== Docs UI ==================\n// =================================\ninterface CollapsableSectionProps {\n children: React.ReactNode\n title: string\n isLast?: boolean\n}\n\nfunction CollapsableSection({ children, title, isLast = false }: CollapsableSectionProps) {\n const styles = useStyles()\n const { colors } = useTheme()\n const [collapsed, setCollapsed] = useState(true)\n\n return (\n <View style={[styles.section, styles.sectionBorderTop, isLast && styles.sectionBorderBottom]}>\n <Pressable\n onPress={() => setCollapsed(!collapsed)}\n style={({ pressed }) => [styles.sectionHeader, pressed && platformPressedOpacityStyle]}\n android_ripple={{ color: colors.androidRippleNeutral, borderless: false, foreground: true }}\n >\n <Heading>{title}</Heading>\n <Icon name={collapsed ? 'general.plus' : 'general.minus'} size={16} />\n </Pressable>\n {!collapsed && <View style={styles.sectionChildren}>{children}</View>}\n </View>\n )\n}\n\ninterface GroupProps {\n title: string\n description?: string\n children: React.ReactNode\n}\n\nfunction Group({ title, description, children }: GroupProps) {\n const styles = useStyles()\n return (\n <View style={styles.group}>\n <View style={styles.groupHeading}>\n <Heading variant=\"h3\">{title}</Heading>\n {description && <Text variant=\"tertiary\">{description}</Text>}\n </View>\n {children}\n </View>\n )\n}\n\ninterface RowProps {\n children: React.ReactNode\n style?: ViewStyle\n}\n\nfunction Row({ children, style }: RowProps) {\n const styles = useStyles()\n return <View style={[styles.row, style]}>{children}</View>\n}\n\ninterface ColumnProps {\n children: React.ReactNode\n style?: ViewStyle\n}\n\nfunction Column({ children, style }: ColumnProps) {\n const styles = useStyles()\n return <View style={[styles.column, style]}>{children}</View>\n}\n\nfunction TextGroup({ children }: { children: React.ReactNode }) {\n const styles = useStyles()\n return <View style={styles.textGroup}>{children}</View>\n}\n\ninterface TextRowProps {\n children: React.ReactNode\n style?: ViewStyle\n}\n\nfunction TextRow({ children, style }: TextRowProps) {\n const styles = useStyles()\n return <View style={[styles.textRow, style]}>{children}</View>\n}\n\ninterface TextListItemProps {\n label: string\n children: React.ReactNode\n}\n\nfunction TextListItem({ label, children }: TextListItemProps) {\n const styles = useStyles()\n return (\n <Text variant=\"tertiary\">\n <Text variant=\"tertiary\" style={styles.mediumWeight}>\n {label}\n </Text>{' '}\n {children}\n </Text>\n )\n}\n\n// =================================\n// ====== Styles ===================\n// =================================\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n scrollView: {\n flex: 1,\n backgroundColor: colors.fillColorNeutral100Inverted,\n },\n container: {\n padding: space(3),\n },\n listItem: { color: colors.fillColorNeutral020 },\n section: {\n gap: space(1),\n borderColor: colors.fillColorNeutral020,\n },\n sectionBorderTop: {\n borderTopWidth: 1,\n },\n sectionBorderBottom: {\n borderBottomWidth: 1,\n },\n sectionHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: space(3),\n },\n sectionChildren: {\n paddingBottom: space(3),\n gap: space(6),\n },\n row: {\n gap: space(2),\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n },\n column: {\n gap: space(2),\n },\n columnCenter: {\n alignItems: 'center',\n },\n textRow: {\n gap: space(1.5),\n },\n textGroup: {\n gap: space(2.5),\n },\n mediumWeight: {\n fontWeight: platformFontWeightMedium,\n },\n alignRowLeft: {\n justifyContent: 'flex-start',\n },\n group: {\n gap: space(3),\n },\n groupHeading: {\n gap: space(1),\n },\n spinnerContainer: {\n height: space(2.5),\n },\n image: {\n width: 100,\n height: 100,\n },\n icon: {\n fontSize: 20,\n color: colors.iconColorDefaultSecondary,\n },\n customIconButtonColor: {\n color: 'purple',\n },\n })\n}\n"]}
1
+ {"version":3,"file":"design_system_screen.js","sourceRoot":"","sources":["../../src/screens/design_system_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState } from 'react'\nimport { Alert, Pressable, ScrollView, StyleSheet, View } from 'react-native'\nimport type { ViewStyle } from 'react-native'\nimport { useTheme } from '../hooks'\nimport {\n Avatar,\n AvatarGroup,\n Badge,\n Banner,\n BannerCollapsible,\n Button,\n ToggleButton,\n Heading,\n Icon,\n IconButton,\n Image,\n Person,\n Spinner,\n Switch,\n Text,\n TextButton,\n TextInlineButton,\n} from '../components/display'\nimport {\n space,\n MAX_FONT_SIZE_MULTIPLIER,\n platformPressedOpacityStyle,\n platformFontWeightMedium,\n} from '../utils'\nimport BannerPrimitive from '../components/primitive/banner_primitive'\n\n// =================================\n// ====== Docs Utils ===============\n// =================================\n\nconst URL = {\n image: 'https://picsum.photos/seed/picsum/200',\n broken: 'https://broken.url',\n avatar: 'https://i.pravatar.cc/200?img=22',\n avatar_fallback: 'https://avatars.planningcenteronline.com/uploads/initials/PR.png',\n two_avatars: ['https://i.pravatar.cc/200?img=22', 'https://i.pravatar.cc/200?img=23'],\n three_avatars: [\n 'https://i.pravatar.cc/200?img=22',\n 'https://i.pravatar.cc/200?img=23',\n 'https://i.pravatar.cc/200?img=24',\n ],\n four_avatars: [\n 'https://i.pravatar.cc/200?img=30',\n 'https://i.pravatar.cc/200?img=29',\n 'https://i.pravatar.cc/200?img=28',\n 'https://i.pravatar.cc/200?img=27',\n ],\n}\n\nconst personAdult = {\n id: 1,\n type: 'Member' as const,\n name: 'John Doe',\n avatar: URL.avatar,\n badges: [{ title: 'Conversation owner' }, { title: 'Leader' }],\n child: false,\n}\n\nconst personChild = {\n id: 2,\n type: 'Member' as const,\n name: 'Kid McChild',\n avatar: URL.two_avatars[1],\n badges: [],\n child: true,\n}\n\nconst buttonPress = () => Alert.alert('Button clicked')\n\n// =================================\n// ====== Component ================\n// =================================\n\nexport function DesignSystemScreen() {\n const styles = useStyles()\n\n return (\n <ScrollView contentContainerStyle={styles.container} style={styles.scrollView}>\n <ThemeSection />\n {/* TODO: Enable & update when we install @planningcenter/tapestry */}\n {/* <TokensSection /> */}\n <IndicatorsSection />\n <HeadingTextSection />\n <PressablesSection />\n <ImageIconsSection />\n <FormControlsSection />\n <StatusComponentsSection />\n <MiscComponentsSection isLast />\n </ScrollView>\n )\n}\n\n// =================================\n// ====== Sections =================\n// =================================\n\ninterface SectionProps {\n isLast?: boolean\n}\n\nfunction ThemeSection({ isLast }: SectionProps) {\n return (\n <CollapsableSection title=\"Theme\" isLast={isLast}>\n <TextGroup>\n <Text>There are four main parts to our theming system…</Text>\n <TextRow>\n <Heading variant=\"h3\">Default theme</Heading>\n <Text>\n Start at `src/utils/theme` when adding new theme values or checking what target apps\n have access to. The file has more instructions and examples.\n </Text>\n <Text>At a high level, it provides…</Text>\n <TextListItem label=\"1.\">\n Access to consuming app targets of what theme values that they can be customized.\n </TextListItem>\n <TextListItem label=\"2.\">\n Fallback values for our components to use if the values weren't overriden.\n </TextListItem>\n </TextRow>\n <TextRow>\n <Heading variant=\"h3\">Customizing the theme</Heading>\n <Text>\n Apps can override any default theme value by passing a `theme` object to our\n `ChatProvider` that holds a `theme` and a `colorScheme`.\n </Text>\n <Text>\n Currently types can be enforced by setting the parent theme object to\n `CreateChatThemeProps`.\n </Text>\n <Text variant=\"footnote\">\n Example setup: `apps/mobile/src/context/chat_context_provider.tsx`\n </Text>\n </TextRow>\n <TextRow>\n <Heading variant=\"h3\">Merged theme</Heading>\n <Text>\n In `src/contexts/chat_context.tsx` we merge the default theme and any custom values\n coming from a product target with the `useCreateChatTheme` hook. It creates a single\n `ChatTheme` type.\n </Text>\n </TextRow>\n <TextRow>\n <Heading variant=\"h3\">Using theme values</Heading>\n <Text>\n Inside of our own `chat-react-native` components we can access the merged `ChatTheme`\n object via our own `useTheme` hook.\n </Text>\n <Text variant=\"footnote\">Example setup: `src/components/display/button.tsx`</Text>\n </TextRow>\n </TextGroup>\n </CollapsableSection>\n )\n}\n\n// function TokensSection({ isLast }: SectionProps) {\n// return (\n// <CollapsableSection title=\"Tokens\" isLast={isLast}>\n// <TextGroup>\n// <TextRow>\n// <Heading variant=\"h3\">What are they?</Heading>\n// <Text>\n// Tokens are UX approved CSS values that we can use to style our UI in a consistent way.\n// (e.g. colors, spacing amounts, and font weights.)\n// </Text>\n// </TextRow>\n// <TextRow>\n// <Heading variant=\"h3\">Where do they come from?</Heading>\n// <Text>\n// Tokens primarily come from our internal `@planningcenter/tapestry` package. However, at\n// this time the package only support light mode colors, so Chat uses a workaround.\n// </Text>\n// <Text>Color-based tokens are infused into our theming system with two local files…</Text>\n// <TextListItem label=\"1. `src/vendor/tapestry/tokens`:\">\n// Primitive color values are stored* here. Primitives capture light or dark mode values,\n// but don't take into account the devices's colors scheme.\n// </TextListItem>\n// <TextListItem label=\"2. `src/vendor/tapestry/alias_tokens_color_map`:\">\n// Alias tokens reference the primitive color values token file* in light and dark mode\n// specfic objects. Our theming system then selects the right color to use based on the\n// device's color scheme.\n// </TextListItem>\n// <Text variant=\"footnote\">\n// *If available, reference the color from the Tapestry package instead.\n// </Text>\n// </TextRow>\n// <TextRow>\n// <Heading variant=\"h3\">How do we use them?</Heading>\n// <Text>There are two places to reference tokens at this time…</Text>\n// <TextListItem label=\"• Color tokens:\">\n// Reference them from our internal `useTheme` hook to ensure the correct light or dark\n// mode color token is used.\n// </TextListItem>\n// <TextListItem label=\"• All other tokens:\">\n// Use the `computedToken` function from `@planningcenter/tapestry` by passing it a string\n// with the token's name. This function provides Typescript support and maps to the token's\n// raw CSS value. There is another function called `token`, but it maps to CSS custom\n// properties which React Native doesn't support.\n// </TextListItem>\n// </TextRow>\n// </TextGroup>\n// </CollapsableSection>\n// )\n// }\n\nfunction IndicatorsSection({ isLast }: SectionProps) {\n const styles = useStyles()\n\n return (\n <CollapsableSection title=\"Indicators\" isLast={isLast}>\n <Group\n title=\"Spinner\"\n description=\"Loading indicators that can be used within or close to atomic components. Not intended for full-screen loading.\"\n >\n <Row style={styles.spinnerContainer}>\n <Spinner size={24} />\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction HeadingTextSection({ isLast }: SectionProps) {\n const styles = useStyles()\n\n return (\n <CollapsableSection title=\"Heading & Text\" isLast={isLast}>\n <Group\n title=\"Heading\"\n description=\"Use for headings & titles as it includes the a11y 'header' role. Change the size and style with the h1-h4 variants.\"\n >\n <Column style={styles.columnCenter}>\n <Heading>Heading 1</Heading>\n <Heading variant=\"h2\">Heading 2</Heading>\n <Heading variant=\"h3\">Heading 3</Heading>\n <Heading variant=\"h4\">Heading 4</Heading>\n </Column>\n </Group>\n <Group title=\"Text\" description=\"Use for body copy and supporting text.\">\n <Column style={styles.columnCenter}>\n <Text>Plain text</Text>\n <Text variant=\"secondary\">Secondary</Text>\n <Text variant=\"tertiary\">Tertiary</Text>\n <Text variant=\"footnote\">Footnote</Text>\n </Column>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction PressablesSection({ isLast }: SectionProps) {\n const styles = useStyles()\n const [filterSelected, setFilterSelected] = useState('Groups')\n\n return (\n <CollapsableSection title=\"Pressables\" isLast={isLast}>\n <Group\n title=\"Button\"\n description=\"Feature fill and outline variants for primary and danger usecases, along with disabled & loading states. Optionally shows icons to the left and right of the text.\"\n >\n <Row>\n <Button onPress={buttonPress} title=\"Default\" size=\"sm\" />\n <Button onPress={buttonPress} title=\"Default\" size=\"md\" />\n <Button onPress={buttonPress} title=\"Danger\" appearance=\"danger\" size=\"lg\" />\n </Row>\n <Row>\n <Button disabled onPress={buttonPress} title=\"Disabled\" size=\"sm\" />\n <Button disabled onPress={buttonPress} title=\"Disabled\" size=\"md\" />\n <Button disabled onPress={buttonPress} title=\"Disabled\" appearance=\"danger\" size=\"lg\" />\n </Row>\n <Row>\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"sm\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"md\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n <Row>\n <Button loading onPress={buttonPress} title=\"Default\" size=\"sm\" />\n <Button loading onPress={buttonPress} title=\"Default\" size=\"md\" />\n <Button loading onPress={buttonPress} title=\"Danger\" appearance=\"danger\" size=\"lg\" />\n </Row>\n <Row>\n <Button onPress={buttonPress} title=\"Default\" size=\"sm\" variant=\"outline\" />\n <Button onPress={buttonPress} title=\"Default\" size=\"md\" variant=\"outline\" />\n <Button\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n />\n </Row>\n <Row>\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"sm\"\n variant=\"outline\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Default\"\n size=\"md\"\n variant=\"outline\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n <Row>\n <Button\n disabled\n onPress={buttonPress}\n title=\"Disabled\"\n size=\"sm\"\n variant=\"outline\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n disabled\n onPress={buttonPress}\n title=\"Disabled\"\n size=\"md\"\n variant=\"outline\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n disabled\n onPress={buttonPress}\n title=\"Disabled\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n <Row>\n <Button\n loading\n onPress={buttonPress}\n title=\"Default\"\n size=\"sm\"\n variant=\"outline\"\n iconNameLeft=\"general.plus\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n loading\n onPress={buttonPress}\n title=\"Default\"\n size=\"md\"\n variant=\"outline\"\n iconNameRight=\"churchCenter.sort\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n <Button\n loading\n onPress={buttonPress}\n title=\"Danger\"\n appearance=\"danger\"\n size=\"lg\"\n variant=\"outline\"\n iconNameLeft=\"groups.cards\"\n iconNameRight=\"general.downChevron\"\n maxFontSizeMultiplier={MAX_FONT_SIZE_MULTIPLIER}\n />\n </Row>\n </Group>\n <Group\n title=\"ToggleButton\"\n description=\"Button with active and deactive states. Supports right & left icons, along with standard pressable props.\"\n >\n <Row>\n <ToggleButton\n onPress={() => setFilterSelected('Groups')}\n title=\"Groups\"\n active={filterSelected === 'Groups'}\n accessibilityLabel=\"Filter to group conversations\"\n />\n <ToggleButton\n onPress={() => setFilterSelected('Teams')}\n title=\"Teams\"\n active={filterSelected === 'Teams'}\n accessibilityLabel=\"Filter to team conversations\"\n />\n <ToggleButton\n onPress={() => setFilterSelected('More')}\n title=\"More\"\n active={filterSelected === 'More'}\n iconNameRight=\"general.threeReducingHorizontalBars\"\n accessibilityLabel=\"View more filters\"\n />\n </Row>\n </Group>\n <Group\n title=\"IconButton\"\n description=\"Supports different appearances, sizes, along with loading & disabled states. Use `iconStyle` for custom colors and font sizes. Requires `accessibilityLabel` as icon's don't provide context to screen readers.\"\n >\n <Row>\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"md\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"danger\"\n size=\"lg\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"interaction\"\n size=\"xl\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n iconStyle={styles.customIconButtonColor}\n size=\"xxl\"\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"xxxl\"\n />\n </Row>\n <Row>\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"md\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"danger\"\n size=\"lg\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"interaction\"\n size=\"xl\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n iconStyle={styles.customIconButtonColor}\n size=\"xxl\"\n disabled\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"xxxl\"\n disabled\n />\n </Row>\n <Row>\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"md\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"danger\"\n size=\"lg\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n appearance=\"interaction\"\n size=\"xl\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n iconStyle={styles.customIconButtonColor}\n size=\"xxl\"\n loading\n />\n <IconButton\n onPress={buttonPress}\n name=\"general.paperclip\"\n accessibilityLabel=\"Add attachment\"\n accessibilityHint=\"Opens your device's image gallary\"\n size=\"xxxl\"\n loading\n />\n </Row>\n </Group>\n <Group\n title=\"TextButton\"\n description=\"Pressable text with default & danger appearance options. Can be disabled and accept `Text` variance props.\"\n >\n <Row>\n <TextButton onPress={buttonPress}>Default</TextButton>\n <TextButton onPress={buttonPress} variant=\"secondary\">\n Default\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"tertiary\">\n Default\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"footnote\">\n Default\n </TextButton>\n </Row>\n <Row>\n <TextButton onPress={buttonPress} appearance=\"danger\">\n Danger\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"secondary\" appearance=\"danger\">\n Danger\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"tertiary\" appearance=\"danger\">\n Danger\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"footnote\" appearance=\"danger\">\n Danger\n </TextButton>\n </Row>\n <Row>\n <TextButton onPress={buttonPress} disabled>\n Disabled\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"secondary\" disabled>\n Disabled\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"tertiary\" disabled>\n Disabled\n </TextButton>\n <TextButton onPress={buttonPress} variant=\"footnote\" disabled>\n Disabled\n </TextButton>\n </Row>\n </Group>\n <Group\n title=\"TextInlineButton\"\n description=\"Supports nesting within `Text`. Temporary component until React Native fixes a layout bug in `Pressable` which used in `TextButton`.\"\n >\n <Row style={styles.alignRowLeft}>\n <Text>\n This text is next to{' '}\n <TextInlineButton onPress={buttonPress}>default button text</TextInlineButton> Lorem\n ipsum dolor{' '}\n <TextInlineButton onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n <Text variant=\"secondary\">\n This text is next to{' '}\n <TextInlineButton variant=\"secondary\" onPress={buttonPress}>\n default button text\n </TextInlineButton>{' '}\n Lorem ipsum dolor{' '}\n <TextInlineButton variant=\"secondary\" onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton variant=\"secondary\" onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n <Text variant=\"tertiary\">\n This text is next to{' '}\n <TextInlineButton variant=\"tertiary\" onPress={buttonPress}>\n default button text\n </TextInlineButton>{' '}\n Lorem ipsum dolor{' '}\n <TextInlineButton variant=\"tertiary\" onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton variant=\"tertiary\" onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n <Text variant=\"footnote\">\n This text is next to{' '}\n <TextInlineButton variant=\"footnote\" onPress={buttonPress}>\n default button text\n </TextInlineButton>{' '}\n Lorem ipsum dolor{' '}\n <TextInlineButton variant=\"footnote\" onPress={buttonPress} appearance=\"danger\">\n danger button text\n </TextInlineButton>{' '}\n consectetur{' '}\n <TextInlineButton variant=\"footnote\" onPress={buttonPress} disabled>\n disabled button text\n </TextInlineButton>{' '}\n elit.\n </Text>\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction ImageIconsSection({ isLast }: SectionProps) {\n const styles = useStyles()\n const { colors } = useTheme()\n\n return (\n <CollapsableSection title=\"Images & Icons\" isLast={isLast}>\n <Group\n title=\"Image\"\n description=\"Foundational way of displaying images. Loading or broken images will fallback to show a spinner. Hide decortive images from screen readers with `alt=''`.\"\n >\n <Row>\n <Image source={{ uri: URL.broken }} style={styles.image} alt=\"Mountain sunrise\" />\n <Image source={{ uri: URL.image }} style={styles.image} alt=\"Mountain sunrise\" />\n <Image source={{ uri: URL.image }} style={styles.image} alt=\"\" />\n </Row>\n </Group>\n <Group\n title=\"Avatar\"\n description='Displays the profile image for a user in different sizes and has a loading fallback. Can optionally show an online/offline \"presence\" indicator.'\n >\n <Row>\n <Avatar sourceUri={URL.broken} />\n <Avatar size=\"md\" sourceUri={URL.avatar_fallback} />\n <Avatar sourceUri={URL.avatar} />\n </Row>\n <Row>\n <Avatar presence=\"offline\" sourceUri={URL.broken} />\n <Avatar presence=\"online\" size=\"md\" sourceUri={URL.avatar_fallback} />\n <Avatar presence=\"offline\" sourceUri={URL.avatar} />\n </Row>\n </Group>\n <Group\n title=\"AvatarGroup\"\n description=\"Shows 1-4 images in a grid at different sizes. Loading fallback shows until all images successfully load.\"\n >\n <Row>\n <AvatarGroup sourceUris={[URL.broken]} />\n <AvatarGroup sourceUris={[URL.broken, URL.broken, ...URL.two_avatars]} />\n <AvatarGroup sourceUris={[URL.avatar]} />\n <AvatarGroup sourceUris={URL.two_avatars} />\n <AvatarGroup sourceUris={URL.three_avatars} />\n <AvatarGroup sourceUris={URL.four_avatars} />\n </Row>\n </Group>\n <Group\n title=\"Icon\"\n description=\"Displays any icon from @planningcenter/icons. Missing icons will fallback to a grey circle. Styling with `fontSize` will allow it to scale with the device's text a11y size.\"\n >\n <Row>\n {/* @ts-expect-error - Icon name is not a string */}\n <Icon name=\"missingIcon\" size={20} />\n <Icon name=\"general.textMessage\" size={20} />\n <Icon name=\"general.bell\" size={20} color={colors.needsDesignPass} />\n <Icon name=\"churchCenter.sort\" style={styles.icon} />\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction FormControlsSection({ isLast }: SectionProps) {\n const [switchEnabled, setSwitchEnabled] = useState(false)\n return (\n <CollapsableSection title=\"Form Controls\" isLast={isLast}>\n <Group\n title=\"Switch\"\n description=\"Use to toggle a boolean value for some sort of contained setting. (ie. Muting a conversation) This is a light wrapper that takes into account themed colors.\"\n >\n <Row>\n <Switch value={switchEnabled} onValueChange={value => setSwitchEnabled(value)} />\n <Switch disabled />\n </Row>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction StatusComponentsSection({ isLast }: SectionProps) {\n return (\n <CollapsableSection title=\"Status components\" isLast={isLast}>\n <Group\n title=\"Badge\"\n description=\"Badge that can convey a status and show an icon. It also supports a meta label and product logo for the conversation list and conversation header. Target products can change colors and hide the logo via theming.\"\n >\n <Row>\n <Badge label=\"Neutral\" appearance=\"neutral\" />\n <Badge label=\"Error\" appearance=\"error\" />\n <Badge label=\"Info\" appearance=\"info\" />\n <Badge label=\"Success\" appearance=\"success\" />\n <Badge label=\"Warning\" appearance=\"warning\" />\n </Row>\n <Row>\n <Badge label=\"Neutral\" appearance=\"neutral\" iconName=\"general.star\" />\n <Badge label=\"Error\" appearance=\"error\" iconName=\"general.exclamationTriangle\" />\n <Badge label=\"Info\" appearance=\"info\" iconName=\"general.outlinedInfoCircle\" />\n <Badge label=\"Success\" appearance=\"success\" iconName=\"general.check\" />\n <Badge label=\"Warning\" appearance=\"warning\" iconName=\"general.shieldExclamation\" />\n </Row>\n <Row>\n <Badge\n variant=\"meta\"\n productLogoName=\"groups\"\n label=\"Group\"\n metaLabel=\"Worlds longest group name that will probably overflow if it gets very much longer\"\n />\n <Badge variant=\"meta\" productLogoName=\"groups\" label=\"Group\" metaLabel=\"Young adults\" />\n <Badge variant=\"meta\" productLogoName=\"services\" label=\"Plan\" metaLabel=\"June 19, 2025\" />\n <Badge variant=\"meta\" productLogoName=\"services\" label=\"Team\" />\n </Row>\n <Row>\n <Badge\n variant=\"metaSubtle\"\n productLogoName=\"groups\"\n label=\"Group\"\n metaLabel=\"Worlds longest group name that will probably overflow if it gets very much longer\"\n />\n <Badge\n variant=\"metaSubtle\"\n productLogoName=\"groups\"\n label=\"Group\"\n metaLabel=\"Young adults\"\n />\n <Badge\n variant=\"metaSubtle\"\n productLogoName=\"services\"\n label=\"Plan\"\n metaLabel=\"June 19, 2025\"\n />\n <Badge variant=\"metaSubtle\" productLogoName=\"services\" label=\"Team\" />\n </Row>\n </Group>\n <Group\n title=\"Banner\"\n description=\"Banners that can convey a status with color and an optional icon. They render a description and optional heading. A `Banner.Link` can be used by wrapping it in `Banner.Text` and passing it to `description`. Target products can change colors via theming.\"\n >\n <Column>\n <Banner\n appearance=\"neutral\"\n showIcon={false}\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n <Banner\n appearance=\"info\"\n heading=\"Banner heading\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n <Banner\n appearance=\"success\"\n heading=\"Banner heading\"\n description={\n <BannerPrimitive.Text>\n Et sint Quis non excepturi{' '}\n <BannerPrimitive.Link onPress={buttonPress}>\n enim et conseq atur porro est\n </BannerPrimitive.Link>{' '}\n galisum labore ea volupt.\n </BannerPrimitive.Text>\n }\n />\n <Banner\n appearance=\"warning\"\n iconName=\"general.shieldExclamation\"\n heading=\"13 members under age 13\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n <Banner\n appearance=\"error\"\n heading=\"Banner heading\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n />\n </Column>\n </Group>\n <Group\n title=\"BannerCollapsible\"\n description=\"Same as `Banner` but takes children that can be hidden/revealed on a tap.\"\n >\n <Column>\n <BannerCollapsible appearance=\"neutral\" showIcon={false} heading=\"Banner heading\">\n <BannerPrimitive.Text>\n Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible appearance=\"info\" heading=\"Banner heading\">\n <BannerPrimitive.Text>\n Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible appearance=\"success\" heading=\"Banner heading\">\n <BannerPrimitive.Text>\n Et sint Quis non excepturi{' '}\n <BannerPrimitive.Link onPress={buttonPress}>\n enim et conseq atur porro est\n </BannerPrimitive.Link>{' '}\n galisum labore ea volupt.\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible\n appearance=\"warning\"\n iconName=\"general.shieldExclamation\"\n heading=\"13 members under age 13\"\n description=\"Et sint Quis non excepturi enim et conse.\"\n >\n <BannerPrimitive.Text>\n More hdden content that can be revealed on a tap. Lorem ipsum dolor sit amet,\n consectetur\n </BannerPrimitive.Text>\n </BannerCollapsible>\n <BannerCollapsible\n appearance=\"error\"\n heading=\"Banner heading\"\n description=\"Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt.\"\n >\n <BannerPrimitive.Text>\n Et sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt. Et\n sint Quis non excepturi enim et conseq atur porro est galisum labore ea volupt. Et\n sint Quis non excepturi enim et .\n </BannerPrimitive.Text>\n </BannerCollapsible>\n </Column>\n </Group>\n </CollapsableSection>\n )\n}\n\nfunction MiscComponentsSection({ isLast }: SectionProps) {\n return (\n <CollapsableSection title=\"Misc components\" isLast={isLast}>\n <Group\n title=\"Person\"\n description=\"Takes a person object (`MemberResource` type) and displays an avatar, name, and badges. If person is a child we show a special badge and faded styles. Implomentation is based on a similar Chat Web component.\"\n >\n <Column>\n <Person person={personAdult} />\n <Person person={personChild} />\n </Column>\n </Group>\n </CollapsableSection>\n )\n}\n\n// =================================\n// ====== Docs UI ==================\n// =================================\ninterface CollapsableSectionProps {\n children: React.ReactNode\n title: string\n isLast?: boolean\n}\n\nfunction CollapsableSection({ children, title, isLast = false }: CollapsableSectionProps) {\n const styles = useStyles()\n const { colors } = useTheme()\n const [collapsed, setCollapsed] = useState(true)\n\n return (\n <View style={[styles.section, styles.sectionBorderTop, isLast && styles.sectionBorderBottom]}>\n <Pressable\n onPress={() => setCollapsed(!collapsed)}\n style={({ pressed }) => [styles.sectionHeader, pressed && platformPressedOpacityStyle]}\n android_ripple={{ color: colors.androidRippleNeutral, borderless: false, foreground: true }}\n >\n <Heading>{title}</Heading>\n <Icon name={collapsed ? 'general.plus' : 'general.minus'} size={16} />\n </Pressable>\n {!collapsed && <View style={styles.sectionChildren}>{children}</View>}\n </View>\n )\n}\n\ninterface GroupProps {\n title: string\n description?: string\n children: React.ReactNode\n}\n\nfunction Group({ title, description, children }: GroupProps) {\n const styles = useStyles()\n return (\n <View style={styles.group}>\n <View style={styles.groupHeading}>\n <Heading variant=\"h3\">{title}</Heading>\n {description && <Text variant=\"tertiary\">{description}</Text>}\n </View>\n {children}\n </View>\n )\n}\n\ninterface RowProps {\n children: React.ReactNode\n style?: ViewStyle\n}\n\nfunction Row({ children, style }: RowProps) {\n const styles = useStyles()\n return <View style={[styles.row, style]}>{children}</View>\n}\n\ninterface ColumnProps {\n children: React.ReactNode\n style?: ViewStyle\n}\n\nfunction Column({ children, style }: ColumnProps) {\n const styles = useStyles()\n return <View style={[styles.column, style]}>{children}</View>\n}\n\nfunction TextGroup({ children }: { children: React.ReactNode }) {\n const styles = useStyles()\n return <View style={styles.textGroup}>{children}</View>\n}\n\ninterface TextRowProps {\n children: React.ReactNode\n style?: ViewStyle\n}\n\nfunction TextRow({ children, style }: TextRowProps) {\n const styles = useStyles()\n return <View style={[styles.textRow, style]}>{children}</View>\n}\n\ninterface TextListItemProps {\n label: string\n children: React.ReactNode\n}\n\nfunction TextListItem({ label, children }: TextListItemProps) {\n const styles = useStyles()\n return (\n <Text variant=\"tertiary\">\n <Text variant=\"tertiary\" style={styles.mediumWeight}>\n {label}\n </Text>{' '}\n {children}\n </Text>\n )\n}\n\n// =================================\n// ====== Styles ===================\n// =================================\n\nconst useStyles = () => {\n const { colors } = useTheme()\n\n return StyleSheet.create({\n scrollView: {\n flex: 1,\n backgroundColor: colors.fillColorNeutral100Inverted,\n },\n container: {\n padding: space(3),\n },\n listItem: { color: colors.fillColorNeutral020 },\n section: {\n gap: space(1),\n borderColor: colors.fillColorNeutral020,\n },\n sectionBorderTop: {\n borderTopWidth: 1,\n },\n sectionBorderBottom: {\n borderBottomWidth: 1,\n },\n sectionHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingVertical: space(3),\n },\n sectionChildren: {\n paddingBottom: space(3),\n gap: space(6),\n },\n row: {\n gap: space(2),\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n flexWrap: 'wrap',\n },\n column: {\n gap: space(2),\n },\n columnCenter: {\n alignItems: 'center',\n },\n textRow: {\n gap: space(1.5),\n },\n textGroup: {\n gap: space(2.5),\n },\n mediumWeight: {\n fontWeight: platformFontWeightMedium,\n },\n alignRowLeft: {\n justifyContent: 'flex-start',\n },\n group: {\n gap: space(3),\n },\n groupHeading: {\n gap: space(1),\n },\n spinnerContainer: {\n height: space(2.5),\n },\n image: {\n width: 100,\n height: 100,\n },\n icon: {\n fontSize: 20,\n color: colors.iconColorDefaultSecondary,\n },\n customIconButtonColor: {\n color: 'purple',\n },\n })\n}\n"]}
@@ -63,7 +63,7 @@ export function MessageActionsScreen({ route }) {
63
63
  }, [apiClient, conversation_id, message_id]);
64
64
  const { mutate: handleReaction, isPending } = useMutation({
65
65
  mutationFn: handleReactionPress,
66
- onSuccess: (result) => {
66
+ onSuccess: result => {
67
67
  const updatedMessage = result.data;
68
68
  queryClient.setQueryData(queryKey, data => updateRecordInPagesData({
69
69
  data,
@@ -1 +1 @@
1
- {"version":3,"file":"message_actions_screen.js","sourceRoot":"","sources":["../../src/screens/message_actions_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport { NativeStackNavigationOptions } from '@react-navigation/native-stack'\nimport { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query'\nimport React, { useCallback } from 'react'\nimport { Alert, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Text, TextButton } from '../components'\nimport { REACTION_EMOJIS, useReactionStyles } from '../components/conversation/message_reaction'\nimport { useTheme } from '../hooks'\nimport { useApiClient } from '../hooks/use_api_client'\nimport { getMessagesRequestArgs, useConversationMessages } from '../hooks/use_conversation_messages'\nimport { ApiCollection, ApiResource, MessageResource } from '../types'\nimport { ReactionCountResource } from '../types/resources/reaction'\nimport { updateRecordInPagesData } from '../utils'\nimport { Clipboard } from '../utils/native_adapters'\n\nexport const MessageActionsScreenOptions: NativeStackNavigationOptions = {\n presentation: 'formSheet',\n headerShown: false,\n sheetAllowedDetents: [0.25],\n sheetGrabberVisible: true,\n}\n\nexport type ReactionScreenProps = StaticScreenProps<{\n message_id: string\n conversation_id: number\n}>\n\nexport function MessageActionsScreen({ route }: ReactionScreenProps) {\n const navigation = useNavigation()\n const { conversation_id, message_id } = route.params\n\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const styles = useStyles()\n\n const { messages, queryKey, refetch } = useConversationMessages(\n { conversation_id },\n { refetchOnMount: false }\n )\n const message = messages.find(m => m.id === message_id)\n const myReactions = message?.reactionCounts\n .filter(reaction => reaction.mine)\n .map(reaction => reaction.value)\n\n const availableReactions = Object.entries(REACTION_EMOJIS).map(([value, emoji]) => {\n return {\n value: value as ReactionCountResource['value'],\n emoji,\n mine: myReactions?.includes(value as ReactionCountResource['value']),\n }\n })\n\n const handleCopyPress = (text?: string) => {\n Clipboard.setStringAsync(text || '')\n navigation.goBack()\n }\n\n const handleReactionPress = useCallback(\n ({ value, mine }: { value: keyof typeof REACTION_EMOJIS; mine?: boolean }) => {\n const requestParams = getMessagesRequestArgs({ conversation_id })\n\n // Value has already been updated\n const endpoint = !mine ? 'react' : 'unreact'\n const url = `/me/conversations/${conversation_id}/messages/${message_id}/${endpoint}`\n const fieldsWithValueJoined = Object.fromEntries(\n Object.entries(requestParams.data.fields).map(([k, v]) => [k, v.join(',')])\n )\n\n return apiClient.chat.post({\n url,\n data: {\n ...requestParams.data,\n data: {\n type: 'Message',\n attributes: { value: value },\n },\n fields: fieldsWithValueJoined,\n },\n })\n },\n [apiClient, conversation_id, message_id]\n )\n\n const deleteMessage = useCallback(() => {\n const url = `/me/conversations/${conversation_id}/messages/${message_id}/`\n\n return apiClient.chat.delete({ url })\n }, [apiClient, conversation_id, message_id])\n\n const { mutate: handleReaction, isPending } = useMutation({\n mutationFn: handleReactionPress,\n onSuccess: (result: ApiResource<MessageResource>) => {\n const updatedMessage = result.data\n type QueryData = InfiniteData<ApiCollection<MessageResource>>\n\n queryClient.setQueryData<QueryData>(queryKey, data =>\n updateRecordInPagesData({\n data,\n record: updatedMessage,\n })\n )\n navigation.goBack()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to react to this message. Please try again.')\n },\n })\n\n const { mutate: handleDeleteMessage } = useMutation({\n mutationFn: deleteMessage,\n onSuccess: () => {\n refetch()\n navigation.goBack()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to delete this message. Please try again.')\n },\n })\n\n return (\n <View style={styles.container}>\n <View style={styles.reactionList}>\n {availableReactions.map((reaction, index) => (\n <Reaction key={index} reaction={reaction} onPress={() => handleReaction(reaction)} />\n ))}\n </View>\n <View style={styles.actions}>\n <View style={styles.actionButton}>\n <TextButton onPress={() => handleCopyPress(message?.text)}>Copy</TextButton>\n <TextButton\n appearance=\"danger\"\n onPress={() => handleDeleteMessage()}\n disabled={isPending}\n >\n Delete\n </TextButton>\n </View>\n </View>\n </View>\n )\n}\n\nconst Reaction = ({\n reaction,\n onPress,\n}: {\n reaction: { value: ReactionCountResource['value']; emoji: string; mine: boolean | undefined }\n onPress: () => void\n}) => {\n const styles = useStyles()\n const reactionStyles = useReactionStyles({ mine: reaction.mine ? 1 : 0 })\n\n return (\n <PlatformPressable\n key={reaction.value}\n style={[reactionStyles.reaction, styles.reaction]}\n onPress={onPress}\n >\n <Text style={reactionStyles.reactionEmoji}>{REACTION_EMOJIS[reaction.value]}</Text>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const theme = useTheme()\n const { height } = useWindowDimensions()\n const { bottom } = useSafeAreaInsets()\n const btnBorderWidth = 1\n const baseSize = 44\n const reactionBtnSize = Platform.select({\n ios: baseSize,\n android: baseSize + btnBorderWidth * 2,\n })\n\n return StyleSheet.create({\n container: {\n justifyContent: 'flex-start',\n paddingTop: 12,\n paddingBottom: bottom,\n width: '100%',\n backgroundColor: theme.colors.fillColorNeutral100Inverted,\n height,\n },\n reaction: {\n height: reactionBtnSize,\n width: reactionBtnSize,\n borderWidth: btnBorderWidth,\n borderRadius: 32,\n justifyContent: 'center',\n },\n reactionList: {\n justifyContent: 'center',\n gap: 24,\n paddingVertical: 12,\n flexDirection: 'row',\n borderBottomColor: theme.colors.fillColorNeutral040,\n borderBottomWidth: 1,\n },\n actions: { flex: 1 },\n actionButton: { padding: 12, paddingBottom: 100, gap: 12 },\n })\n}\n"]}
1
+ {"version":3,"file":"message_actions_screen.js","sourceRoot":"","sources":["../../src/screens/message_actions_screen.tsx"],"names":[],"mappings":"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","sourcesContent":["import { PlatformPressable } from '@react-navigation/elements'\nimport { StaticScreenProps, useNavigation } from '@react-navigation/native'\nimport { NativeStackNavigationOptions } from '@react-navigation/native-stack'\nimport { InfiniteData, useMutation, useQueryClient } from '@tanstack/react-query'\nimport React, { useCallback } from 'react'\nimport { Alert, Platform, StyleSheet, useWindowDimensions, View } from 'react-native'\nimport { useSafeAreaInsets } from 'react-native-safe-area-context'\nimport { Text, TextButton } from '../components'\nimport { REACTION_EMOJIS, useReactionStyles } from '../components/conversation/message_reaction'\nimport { useTheme } from '../hooks'\nimport { useApiClient } from '../hooks/use_api_client'\nimport { getMessagesRequestArgs, useConversationMessages } from '../hooks/use_conversation_messages'\nimport { ApiCollection, ApiResource, MessageResource } from '../types'\nimport { ReactionCountResource } from '../types/resources/reaction'\nimport { updateRecordInPagesData } from '../utils'\nimport { Clipboard } from '../utils/native_adapters'\n\nexport const MessageActionsScreenOptions: NativeStackNavigationOptions = {\n presentation: 'formSheet',\n headerShown: false,\n sheetAllowedDetents: [0.25],\n sheetGrabberVisible: true,\n}\n\nexport type ReactionScreenProps = StaticScreenProps<{\n message_id: string\n conversation_id: number\n}>\n\nexport function MessageActionsScreen({ route }: ReactionScreenProps) {\n const navigation = useNavigation()\n const { conversation_id, message_id } = route.params\n\n const apiClient = useApiClient()\n const queryClient = useQueryClient()\n const styles = useStyles()\n\n const { messages, queryKey, refetch } = useConversationMessages(\n { conversation_id },\n { refetchOnMount: false }\n )\n const message = messages.find(m => m.id === message_id)\n const myReactions = message?.reactionCounts\n .filter(reaction => reaction.mine)\n .map(reaction => reaction.value)\n\n const availableReactions = Object.entries(REACTION_EMOJIS).map(([value, emoji]) => {\n return {\n value: value as ReactionCountResource['value'],\n emoji,\n mine: myReactions?.includes(value as ReactionCountResource['value']),\n }\n })\n\n const handleCopyPress = (text?: string) => {\n Clipboard.setStringAsync(text || '')\n navigation.goBack()\n }\n\n const handleReactionPress = useCallback(\n ({ value, mine }: { value: keyof typeof REACTION_EMOJIS; mine?: boolean }) => {\n const requestParams = getMessagesRequestArgs({ conversation_id })\n\n // Value has already been updated\n const endpoint = !mine ? 'react' : 'unreact'\n const url = `/me/conversations/${conversation_id}/messages/${message_id}/${endpoint}`\n const fieldsWithValueJoined = Object.fromEntries(\n Object.entries(requestParams.data.fields).map(([k, v]) => [k, v.join(',')])\n )\n\n return apiClient.chat.post<ApiResource<MessageResource>>({\n url,\n data: {\n ...requestParams.data,\n data: {\n type: 'Message',\n attributes: { value: value },\n },\n fields: fieldsWithValueJoined,\n },\n })\n },\n [apiClient, conversation_id, message_id]\n )\n\n const deleteMessage = useCallback(() => {\n const url = `/me/conversations/${conversation_id}/messages/${message_id}/`\n\n return apiClient.chat.delete({ url })\n }, [apiClient, conversation_id, message_id])\n\n const { mutate: handleReaction, isPending } = useMutation({\n mutationFn: handleReactionPress,\n onSuccess: result => {\n const updatedMessage = result.data\n type QueryData = InfiniteData<ApiCollection<MessageResource>>\n\n queryClient.setQueryData<QueryData>(queryKey, data =>\n updateRecordInPagesData({\n data,\n record: updatedMessage,\n })\n )\n navigation.goBack()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to react to this message. Please try again.')\n },\n })\n\n const { mutate: handleDeleteMessage } = useMutation({\n mutationFn: deleteMessage,\n onSuccess: () => {\n refetch()\n navigation.goBack()\n },\n onError: () => {\n Alert.alert('Oops', 'We were unable to delete this message. Please try again.')\n },\n })\n\n return (\n <View style={styles.container}>\n <View style={styles.reactionList}>\n {availableReactions.map((reaction, index) => (\n <Reaction key={index} reaction={reaction} onPress={() => handleReaction(reaction)} />\n ))}\n </View>\n <View style={styles.actions}>\n <View style={styles.actionButton}>\n <TextButton onPress={() => handleCopyPress(message?.text)}>Copy</TextButton>\n <TextButton\n appearance=\"danger\"\n onPress={() => handleDeleteMessage()}\n disabled={isPending}\n >\n Delete\n </TextButton>\n </View>\n </View>\n </View>\n )\n}\n\nconst Reaction = ({\n reaction,\n onPress,\n}: {\n reaction: { value: ReactionCountResource['value']; emoji: string; mine: boolean | undefined }\n onPress: () => void\n}) => {\n const styles = useStyles()\n const reactionStyles = useReactionStyles({ mine: reaction.mine ? 1 : 0 })\n\n return (\n <PlatformPressable\n key={reaction.value}\n style={[reactionStyles.reaction, styles.reaction]}\n onPress={onPress}\n >\n <Text style={reactionStyles.reactionEmoji}>{REACTION_EMOJIS[reaction.value]}</Text>\n </PlatformPressable>\n )\n}\n\nconst useStyles = () => {\n const theme = useTheme()\n const { height } = useWindowDimensions()\n const { bottom } = useSafeAreaInsets()\n const btnBorderWidth = 1\n const baseSize = 44\n const reactionBtnSize = Platform.select({\n ios: baseSize,\n android: baseSize + btnBorderWidth * 2,\n })\n\n return StyleSheet.create({\n container: {\n justifyContent: 'flex-start',\n paddingTop: 12,\n paddingBottom: bottom,\n width: '100%',\n backgroundColor: theme.colors.fillColorNeutral100Inverted,\n height,\n },\n reaction: {\n height: reactionBtnSize,\n width: reactionBtnSize,\n borderWidth: btnBorderWidth,\n borderRadius: 32,\n justifyContent: 'center',\n },\n reactionList: {\n justifyContent: 'center',\n gap: 24,\n paddingVertical: 12,\n flexDirection: 'row',\n borderBottomColor: theme.colors.fillColorNeutral040,\n borderBottomWidth: 1,\n },\n actions: { flex: 1 },\n actionButton: { padding: 12, paddingBottom: 100, gap: 12 },\n })\n}\n"]}
@@ -20,8 +20,8 @@ export declare class Client {
20
20
  onUnauthorizedResponse?: OnUnauthorizedResponse;
21
21
  constructor({ version, defaultHeaders, session, app, onUnauthorizedResponse }: ClientArgs);
22
22
  get<T extends ApiCollection | ApiResource>(args: GetRequest): Promise<T>;
23
- patch(args: PatchRequest): Promise<any>;
24
- post(args: PostRequest): Promise<any>;
23
+ patch<T extends ApiCollection | ApiResource>(args: PatchRequest): Promise<T>;
24
+ post<T extends ApiCollection | ApiResource>(args: PostRequest): Promise<T>;
25
25
  delete(args: DeleteRequest): Promise<any>;
26
26
  handleNotOk: (response: Response) => Promise<never>;
27
27
  parseErrorResponse: (response: Response) => Promise<Partial<ApiError>>;
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAU5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,SAAS,CAAA;AAE3F,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAC3B;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAA;AAEvE,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,qBAAa,MAAM;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAC3C,GAAG,EAAE,GAAG,CAAA;IACR,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;gBAEnC,EAAE,OAAO,EAAE,cAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE,UAAU;IAOxF,GAAG,CAAC,CAAC,SAAS,aAAa,GAAG,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IAuCxE,KAAK,CAAC,IAAI,EAAE,YAAY;IASxB,IAAI,CAAC,IAAI,EAAE,WAAW;IAStB,MAAM,CAAC,IAAI,EAAE,aAAa;IAShC,WAAW,aAAoB,QAAQ,oBAUtC;IAED,kBAAkB,aAAoB,QAAQ,KAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAM1E;IAED,IAAI,OAAO;;;;;;MAQV;CACF;AAED,eAAe,MAAM,CAAA"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AACpC,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAA;AAU5B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAe,MAAM,SAAS,CAAA;AAE3F,MAAM,WAAW,aAAc,SAAQ,QAAQ;IAC7C,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAA;CAC3B;AAED,MAAM,MAAM,sBAAsB,GAAG,CAAC,SAAS,EAAE,aAAa,KAAK,IAAI,CAAA;AAEvE,KAAK,UAAU,GAAG;IAChB,OAAO,EAAE,MAAM,CAAA;IACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACvC,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;IAC/C,OAAO,EAAE,OAAO,CAAA;IAChB,GAAG,EAAE,MAAM,CAAA;CACZ,CAAA;AAED,qBAAa,MAAM;IACjB,OAAO,EAAE,MAAM,CAAK;IACpB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAK;IAC3C,GAAG,EAAE,GAAG,CAAA;IACR,sBAAsB,CAAC,EAAE,sBAAsB,CAAA;gBAEnC,EAAE,OAAO,EAAE,cAAmB,EAAE,OAAO,EAAE,GAAG,EAAE,sBAAsB,EAAE,EAAE,UAAU;IAOxF,GAAG,CAAC,CAAC,SAAS,aAAa,GAAG,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC;IA2CxE,KAAK,CAAC,CAAC,SAAS,aAAa,GAAG,WAAW,EAAE,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,CAAC,CAAC;IAW5E,IAAI,CAAC,CAAC,SAAS,aAAa,GAAG,WAAW,EAAE,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,CAAC,CAAC;IAW1E,MAAM,CAAC,IAAI,EAAE,aAAa;IAShC,WAAW,aAAoB,QAAQ,oBAUtC;IAED,kBAAkB,aAAoB,QAAQ,KAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAM1E;IAED,IAAI,OAAO;;;;;;MAQV;CACF;AAED,eAAe,MAAM,CAAA"}
@@ -36,20 +36,28 @@ export class Client {
36
36
  }
37
37
  });
38
38
  };
39
- const handler = isWalking ? walkRequest : makeRequest;
40
- return throwErrorIfFieldsMissing(handler, requestArgs).catch(this.handleNotOk);
39
+ const handler = isWalking
40
+ ? (a) => walkRequest(a)
41
+ : (a) => makeRequest(a);
42
+ return throwErrorIfFieldsMissing(handler, requestArgs)
43
+ .then(response => response)
44
+ .catch(this.handleNotOk);
41
45
  }
42
46
  async patch(args) {
43
47
  const headers = { ...this.headers, ...args.headers };
44
48
  const url = this.uri.appUrl(args.url);
45
49
  const requestArgs = { data: args.data, url, action: 'PATCH', headers };
46
- return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleNotOk);
50
+ return ensureNoQueryParamsInDev(makeRequest, requestArgs)
51
+ .then(response => response)
52
+ .catch(this.handleNotOk);
47
53
  }
48
54
  async post(args) {
49
55
  const headers = { ...this.headers, ...args.headers };
50
56
  const url = this.uri.appUrl(args.url);
51
57
  const requestArgs = { ...args, data: args.data, url, action: 'POST', headers };
52
- return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleNotOk);
58
+ return ensureNoQueryParamsInDev(makeRequest, requestArgs)
59
+ .then(response => response)
60
+ .catch(this.handleNotOk);
53
61
  }
54
62
  async delete(args) {
55
63
  const headers = { ...this.headers, ...args.headers };
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApiCollection, ApiError, ApiResource } from '../../types'\nimport { Session } from '../session'\nimport { Uri } from '../uri'\nimport {\n concatRecords,\n ensureNoQueryParamsInDev,\n makeRequest,\n MakeRequestArgs,\n throwErrorIfFieldsMissing,\n throwErrorIfQueryParams,\n} from './request_helpers'\n\nimport { DeleteRequest, GetRequest, PatchRequest, PostRequest, WalkRequest } from './types'\n\nexport interface ResponseError extends Response {\n errors: ApiError['errors']\n}\n\nexport type OnUnauthorizedResponse = (_response: ResponseError) => void\n\ntype ClientArgs = {\n version: string\n defaultHeaders?: Record<string, string>\n onUnauthorizedResponse?: OnUnauthorizedResponse\n session: Session\n app: string\n}\n\nexport class Client {\n version: string = ''\n defaultHeaders: Record<string, string> = {}\n uri: Uri\n onUnauthorizedResponse?: OnUnauthorizedResponse\n\n constructor({ version, defaultHeaders = {}, session, app, onUnauthorizedResponse }: ClientArgs) {\n this.version = version\n this.uri = new Uri({ session, app })\n this.defaultHeaders = defaultHeaders\n this.onUnauthorizedResponse = onUnauthorizedResponse\n }\n\n async get<T extends ApiCollection | ApiResource>(args: GetRequest): Promise<T> {\n const { walk, ...data } = args.data\n const isWalking = Boolean(walk)\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n await throwErrorIfQueryParams(url)\n\n const requestArgs: MakeRequestArgs = { data, url, action: 'GET', headers }\n\n const walkRequest = ({\n url: requestUrl,\n data: d = { fields: {} },\n acc = { data: [], included: [], meta: {}, links: {} },\n ...options\n }: WalkRequest) => {\n return makeRequest({\n action: 'GET',\n data: d,\n url: requestUrl,\n ...options,\n headers,\n }).then(({ links, ...rest }) => {\n const records = Array.isArray(rest.data) ? concatRecords(acc, rest) : rest\n\n // `next` will have our params in the link so we do not want to pass them back in\n if (links?.next) {\n return walkRequest({ ...options, data: d, url: links.next, acc: records })\n } else {\n return records\n }\n })\n }\n\n const handler = isWalking ? walkRequest : makeRequest\n\n return throwErrorIfFieldsMissing(handler, requestArgs).catch(this.handleNotOk)\n }\n\n async patch(args: PatchRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { data: args.data, url, action: 'PATCH', headers }\n\n return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleNotOk)\n }\n\n async post(args: PostRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { ...args, data: args.data, url, action: 'POST', headers }\n\n return ensureNoQueryParamsInDev(makeRequest, requestArgs).catch(this.handleNotOk)\n }\n\n async delete(args: DeleteRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { url, action: 'DELETE', headers }\n\n return makeRequest(requestArgs).catch(this.handleNotOk)\n }\n\n handleNotOk = async (response: Response) => {\n if (response.status === 401) {\n const { errors } = await this.parseErrorResponse(response)\n this.onUnauthorizedResponse?.({\n ...response,\n errors: errors || [],\n })\n }\n\n return Promise.reject(response)\n }\n\n parseErrorResponse = async (response: Response): Promise<Partial<ApiError>> => {\n try {\n return (await response.json()) as ApiError\n } catch {\n return {}\n }\n }\n\n get headers() {\n return {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/json',\n 'X-PCO-API-Version': this.version,\n ...this.uri.headers,\n ...this.defaultHeaders,\n }\n }\n}\n\nexport default Client\n"]}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/utils/client/client.ts"],"names":[],"mappings":"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","sourcesContent":["import { ApiCollection, ApiError, ApiResource } from '../../types'\nimport { Session } from '../session'\nimport { Uri } from '../uri'\nimport {\n concatRecords,\n ensureNoQueryParamsInDev,\n makeRequest,\n MakeRequestArgs,\n throwErrorIfFieldsMissing,\n throwErrorIfQueryParams,\n} from './request_helpers'\n\nimport { DeleteRequest, GetRequest, PatchRequest, PostRequest, WalkRequest } from './types'\n\nexport interface ResponseError extends Response {\n errors: ApiError['errors']\n}\n\nexport type OnUnauthorizedResponse = (_response: ResponseError) => void\n\ntype ClientArgs = {\n version: string\n defaultHeaders?: Record<string, string>\n onUnauthorizedResponse?: OnUnauthorizedResponse\n session: Session\n app: string\n}\n\nexport class Client {\n version: string = ''\n defaultHeaders: Record<string, string> = {}\n uri: Uri\n onUnauthorizedResponse?: OnUnauthorizedResponse\n\n constructor({ version, defaultHeaders = {}, session, app, onUnauthorizedResponse }: ClientArgs) {\n this.version = version\n this.uri = new Uri({ session, app })\n this.defaultHeaders = defaultHeaders\n this.onUnauthorizedResponse = onUnauthorizedResponse\n }\n\n async get<T extends ApiCollection | ApiResource>(args: GetRequest): Promise<T> {\n const { walk, ...data } = args.data\n const isWalking = Boolean(walk)\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n await throwErrorIfQueryParams(url)\n\n const requestArgs: MakeRequestArgs = { data, url, action: 'GET', headers }\n\n const walkRequest = ({\n url: requestUrl,\n data: d = { fields: {} },\n acc = { data: [], included: [], meta: {}, links: {} },\n ...options\n }: WalkRequest): Promise<ApiCollection | ApiResource> => {\n return makeRequest({\n action: 'GET',\n data: d,\n url: requestUrl,\n ...options,\n headers,\n }).then(({ links, ...rest }) => {\n const records = Array.isArray(rest.data) ? concatRecords(acc, rest) : rest\n\n // `next` will have our params in the link so we do not want to pass them back in\n if (links?.next) {\n return walkRequest({ ...options, data: d, url: links.next, acc: records })\n } else {\n return records\n }\n })\n }\n\n const handler = isWalking\n ? (a: MakeRequestArgs | WalkRequest) => walkRequest(a as WalkRequest)\n : (a: MakeRequestArgs | WalkRequest) => makeRequest(a as MakeRequestArgs)\n\n return throwErrorIfFieldsMissing(handler, requestArgs)\n .then(response => response as T)\n .catch(this.handleNotOk)\n }\n\n async patch<T extends ApiCollection | ApiResource>(args: PatchRequest): Promise<T> {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { data: args.data, url, action: 'PATCH', headers }\n\n return ensureNoQueryParamsInDev(makeRequest, requestArgs)\n .then(response => response as T)\n .catch(this.handleNotOk)\n }\n\n async post<T extends ApiCollection | ApiResource>(args: PostRequest): Promise<T> {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { ...args, data: args.data, url, action: 'POST', headers }\n\n return ensureNoQueryParamsInDev(makeRequest, requestArgs)\n .then(response => response as T)\n .catch(this.handleNotOk)\n }\n\n async delete(args: DeleteRequest) {\n const headers = { ...this.headers, ...args.headers }\n const url = this.uri.appUrl(args.url)\n\n const requestArgs: MakeRequestArgs = { url, action: 'DELETE', headers }\n\n return makeRequest(requestArgs).catch(this.handleNotOk)\n }\n\n handleNotOk = async (response: Response) => {\n if (response.status === 401) {\n const { errors } = await this.parseErrorResponse(response)\n this.onUnauthorizedResponse?.({\n ...response,\n errors: errors || [],\n })\n }\n\n return Promise.reject(response)\n }\n\n parseErrorResponse = async (response: Response): Promise<Partial<ApiError>> => {\n try {\n return (await response.json()) as ApiError\n } catch {\n return {}\n }\n }\n\n get headers() {\n return {\n Accept: 'application/vnd.api+json',\n 'Content-Type': 'application/json',\n 'X-PCO-API-Version': this.version,\n ...this.uri.headers,\n ...this.defaultHeaders,\n }\n }\n}\n\nexport default Client\n"]}