@planningcenter/chat-react-native 3.44.2-qa-staging.0 → 3.44.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 (50) hide show
  1. package/build/components/conversation/message.js +2 -2
  2. package/build/components/conversation/message.js.map +1 -1
  3. package/build/components/conversation/message_form.js +2 -2
  4. package/build/components/conversation/message_form.js.map +1 -1
  5. package/build/components/conversation/message_reaction.js +4 -4
  6. package/build/components/conversation/message_reaction.js.map +1 -1
  7. package/build/components/display/toggle_button.js +5 -9
  8. package/build/components/display/toggle_button.js.map +1 -1
  9. package/build/hooks/index.d.ts +1 -2
  10. package/build/hooks/index.d.ts.map +1 -1
  11. package/build/hooks/index.js +1 -2
  12. package/build/hooks/index.js.map +1 -1
  13. package/build/hooks/use_interaction_ghost_color.d.ts +2 -0
  14. package/build/hooks/use_interaction_ghost_color.d.ts.map +1 -0
  15. package/build/hooks/use_interaction_ghost_color.js +14 -0
  16. package/build/hooks/use_interaction_ghost_color.js.map +1 -0
  17. package/build/hooks/use_rest_away_from_dismiss_edge.d.ts +0 -4
  18. package/build/hooks/use_rest_away_from_dismiss_edge.d.ts.map +1 -1
  19. package/build/hooks/use_rest_away_from_dismiss_edge.js +0 -4
  20. package/build/hooks/use_rest_away_from_dismiss_edge.js.map +1 -1
  21. package/build/screens/design_system_screen.js +3 -3
  22. package/build/screens/design_system_screen.js.map +1 -1
  23. package/build/utils/theme.d.ts +0 -16
  24. package/build/utils/theme.d.ts.map +1 -1
  25. package/build/utils/theme.js +0 -9
  26. package/build/utils/theme.js.map +1 -1
  27. package/package.json +8 -3
  28. package/src/__tests__/utils/theme.ts +0 -23
  29. package/src/components/conversation/message.tsx +2 -2
  30. package/src/components/conversation/message_form.tsx +2 -2
  31. package/src/components/conversation/message_reaction.tsx +4 -4
  32. package/src/components/display/toggle_button.tsx +5 -9
  33. package/src/hooks/index.ts +1 -2
  34. package/src/hooks/use_interaction_ghost_color.ts +15 -0
  35. package/src/hooks/use_rest_away_from_dismiss_edge.ts +0 -4
  36. package/src/screens/design_system_screen.tsx +3 -3
  37. package/src/utils/theme.ts +0 -28
  38. package/build/hooks/use_interaction_tinted_background_color.d.ts +0 -6
  39. package/build/hooks/use_interaction_tinted_background_color.d.ts.map +0 -1
  40. package/build/hooks/use_interaction_tinted_background_color.js +0 -15
  41. package/build/hooks/use_interaction_tinted_background_color.js.map +0 -1
  42. package/build/hooks/use_selected_chip_background_color.d.ts +0 -7
  43. package/build/hooks/use_selected_chip_background_color.d.ts.map +0 -1
  44. package/build/hooks/use_selected_chip_background_color.js +0 -16
  45. package/build/hooks/use_selected_chip_background_color.js.map +0 -1
  46. package/src/__tests__/hooks/use_interaction_tinted_background_color.test.tsx +0 -67
  47. package/src/__tests__/hooks/use_selected_chip_background_color.test.tsx +0 -78
  48. package/src/components/display/__tests__/toggle_button.test.tsx +0 -135
  49. package/src/hooks/use_interaction_tinted_background_color.ts +0 -20
  50. package/src/hooks/use_selected_chip_background_color.ts +0 -21
@@ -12,9 +12,6 @@ export const defaultTheme = (colorScheme) => {
12
12
  button: {
13
13
  borderRadius: 40,
14
14
  },
15
- chip: {
16
- hslLightnessChipSelected: scheme === 'dark' ? 12 : 92,
17
- },
18
15
  showBadgeProductLogo: true, // Overrides visibility of the product logo in `src/display/badge.tsx`
19
16
  };
20
17
  };
@@ -62,9 +59,6 @@ const colorsChatLight = {
62
59
  statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimary,
63
60
  statusNeutralComposedText: tokens.textColorStatusNeutral,
64
61
  statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhost,
65
- borderColorChip: tokens.colorNeutral88,
66
- fillColorChip: 'transparent',
67
- textColorChip: tokens.colorNeutral45,
68
62
  };
69
63
  const colorsChatDark = {
70
64
  name: 'dark',
@@ -108,9 +102,6 @@ const colorsChatDark = {
108
102
  statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimaryDark,
109
103
  statusNeutralComposedText: tokens.textColorStatusNeutralDark,
110
104
  statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhostDark,
111
- borderColorChip: tokens.colorNeutral24,
112
- fillColorChip: 'transparent',
113
- textColorChip: tokens.colorNeutral68,
114
105
  };
115
106
  const chatThemeColorMap = {
116
107
  light: colorsChatLight,
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/utils/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAEtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,2CAA2C,CAAA;AAC/E,OAAO,EAAE,MAAM,EAAE,MAAM,2BAA2B,CAAA;AAiClD,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,WAAmC,EAAa,EAAE;IAC7E,MAAM,MAAM,GAAqB,WAAW,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAA;IAE1E,MAAM,aAAa,GAAG;QACpB,GAAG,iBAAiB,CAAC,MAAM,CAAC;QAC5B,GAAG,mBAAmB,CAAC,MAAM,CAAC;KAC/B,CAAA;IAED,OAAO;QACL,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE;YACN,YAAY,EAAE,EAAE;SACjB;QACD,IAAI,EAAE;YACJ,wBAAwB,EAAE,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;SACtD;QACD,oBAAoB,EAAE,IAAI,EAAE,sEAAsE;KACnG,CAAA;AACH,CAAC,CAAA;AA+DD,4EAA4E;AAC5E,gFAAgF;AAChF,MAAM,YAAY,GAAG,QAAQ,CAAC,EAAE,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;AAE9E,MAAM,eAAe,GAAe;IAClC,IAAI,EAAE,OAAO;IACb,iCAAiC,EAAE,MAAM,CAAC,2BAA2B;IACrE,6BAA6B,EAAE,YAAY;IAC3C,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,MAAM,CAAC,2BAA2B;IAC/C,uBAAuB,EAAE,SAAS;IAClC,6BAA6B,EAAE,MAAM,CAAC,oBAAoB;IAC1D,SAAS,EAAE,SAAS;IACpB,cAAc,EAAE,MAAM,CAAC,0BAA0B;IACjD,cAAc,EAAE,MAAM,CAAC,mBAAmB;IAC1C,gBAAgB,EAAE,MAAM,CAAC,qBAAqB;IAC9C,cAAc,EAAE,MAAM,CAAC,wBAAwB;IAC/C,iBAAiB,EAAE,MAAM,CAAC,6BAA6B;IACvD,iBAAiB,EAAE,MAAM,CAAC,sBAAsB;IAChD,mBAAmB,EAAE,MAAM,CAAC,wBAAwB;IACpD,iBAAiB,EAAE,MAAM,CAAC,2BAA2B;IACrD,iBAAiB,EAAE,MAAM,CAAC,6BAA6B;IACvD,iBAAiB,EAAE,MAAM,CAAC,sBAAsB;IAChD,mBAAmB,EAAE,MAAM,CAAC,wBAAwB;IACpD,iBAAiB,EAAE,MAAM,CAAC,2BAA2B;IACrD,eAAe,EAAE,MAAM,CAAC,2BAA2B;IACnD,eAAe,EAAE,MAAM,CAAC,oBAAoB;IAC5C,iBAAiB,EAAE,MAAM,CAAC,sBAAsB;IAChD,eAAe,EAAE,MAAM,CAAC,yBAAyB;IACjD,sBAAsB,EAAE,MAAM,CAAC,0BAA0B;IACzD,sBAAsB,EAAE,MAAM,CAAC,mBAAmB;IAClD,4BAA4B,EAAE,MAAM,CAAC,wBAAwB;IAC7D,yBAAyB,EAAE,MAAM,CAAC,6BAA6B;IAC/D,yBAAyB,EAAE,MAAM,CAAC,sBAAsB;IACxD,+BAA+B,EAAE,MAAM,CAAC,2BAA2B;IACnE,yBAAyB,EAAE,MAAM,CAAC,6BAA6B;IAC/D,yBAAyB,EAAE,MAAM,CAAC,sBAAsB;IACxD,+BAA+B,EAAE,MAAM,CAAC,2BAA2B;IACnE,uBAAuB,EAAE,MAAM,CAAC,2BAA2B;IAC3D,uBAAuB,EAAE,MAAM,CAAC,oBAAoB;IACpD,6BAA6B,EAAE,MAAM,CAAC,yBAAyB;IAC/D,yBAAyB,EAAE,MAAM,CAAC,6BAA6B;IAC/D,yBAAyB,EAAE,MAAM,CAAC,sBAAsB;IACxD,+BAA+B,EAAE,MAAM,CAAC,2BAA2B;IACnE,eAAe,EAAE,MAAM,CAAC,cAAc;IACtC,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC,cAAc;CACrC,CAAA;AAED,MAAM,cAAc,GAAe;IACjC,IAAI,EAAE,MAAM;IACZ,iCAAiC,EAAE,MAAM,CAAC,+BAA+B;IACzE,6BAA6B,EAAE,YAAY;IAC3C,WAAW,EAAE,SAAS;IACtB,SAAS,EAAE,SAAS;IACpB,WAAW,EAAE,MAAM,CAAC,+BAA+B;IACnD,uBAAuB,EAAE,SAAS;IAClC,6BAA6B,EAAE,MAAM,CAAC,aAAa;IACnD,SAAS,EAAE,MAAM;IACjB,cAAc,EAAE,MAAM,CAAC,8BAA8B;IACrD,cAAc,EAAE,MAAM,CAAC,uBAAuB;IAC9C,gBAAgB,EAAE,MAAM,CAAC,yBAAyB;IAClD,cAAc,EAAE,MAAM,CAAC,4BAA4B;IACnD,iBAAiB,EAAE,MAAM,CAAC,iCAAiC;IAC3D,iBAAiB,EAAE,MAAM,CAAC,0BAA0B;IACpD,mBAAmB,EAAE,MAAM,CAAC,4BAA4B;IACxD,iBAAiB,EAAE,MAAM,CAAC,+BAA+B;IACzD,iBAAiB,EAAE,MAAM,CAAC,iCAAiC;IAC3D,iBAAiB,EAAE,MAAM,CAAC,0BAA0B;IACpD,mBAAmB,EAAE,MAAM,CAAC,4BAA4B;IACxD,iBAAiB,EAAE,MAAM,CAAC,+BAA+B;IACzD,eAAe,EAAE,MAAM,CAAC,+BAA+B;IACvD,eAAe,EAAE,MAAM,CAAC,wBAAwB;IAChD,iBAAiB,EAAE,MAAM,CAAC,0BAA0B;IACpD,eAAe,EAAE,MAAM,CAAC,6BAA6B;IAErD,wDAAwD;IACxD,sBAAsB,EAAE,MAAM,CAAC,8BAA8B;IAC7D,sBAAsB,EAAE,MAAM,CAAC,uBAAuB;IACtD,4BAA4B,EAAE,MAAM,CAAC,4BAA4B;IACjE,yBAAyB,EAAE,MAAM,CAAC,iCAAiC;IACnE,yBAAyB,EAAE,MAAM,CAAC,0BAA0B;IAC5D,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;IACvE,yBAAyB,EAAE,MAAM,CAAC,iCAAiC;IACnE,yBAAyB,EAAE,MAAM,CAAC,0BAA0B;IAC5D,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;IACvE,uBAAuB,EAAE,MAAM,CAAC,+BAA+B;IAC/D,uBAAuB,EAAE,MAAM,CAAC,wBAAwB;IACxD,6BAA6B,EAAE,MAAM,CAAC,6BAA6B;IACnE,yBAAyB,EAAE,MAAM,CAAC,iCAAiC;IACnE,yBAAyB,EAAE,MAAM,CAAC,0BAA0B;IAC5D,+BAA+B,EAAE,MAAM,CAAC,+BAA+B;IACvE,eAAe,EAAE,MAAM,CAAC,cAAc;IACtC,aAAa,EAAE,aAAa;IAC5B,aAAa,EAAE,MAAM,CAAC,cAAc;CACrC,CAAA;AAED,MAAM,iBAAiB,GAAG;IACxB,KAAK,EAAE,eAAe;IACtB,IAAI,EAAE,cAAc;CACrB,CAAA","sourcesContent":["import { Platform, PlatformColor } from 'react-native'\nimport type { ColorSchemeName, ColorValue, OpaqueColorValue } from 'react-native'\nimport { aliasTokensColorMap } from '../vendor/tapestry/alias_tokens_color_map'\nimport { tokens } from '../vendor/tapestry/tokens'\n\nexport interface ChatTheme extends DefaultTheme {\n colors: DefaultTheme['colors'] &\n (typeof aliasTokensColorMap.light | typeof aliasTokensColorMap.dark)\n}\n\n/** =============================================\n NOTE: The specific values for `colors` and the `productBadge` are temporary examples that can be replaced once we start building out UI. This line's comment can be removed at that time too.\n\n The default theme is intended to support two types of customizations:\n 1. Specific color properties for a chat component (eg. `primaryButtonBackgroundColor`)\n 2. Any styles for a specific component. (Use only one level of nesting.)\n ```\n primaryButton: {\n borderRadius: number\n container: ViewStyle\n text: TextStyle\n }\n ```\n============================================= */\n\nexport interface DefaultTheme {\n colors: ChatColors\n button: {\n borderRadius: number\n }\n chip: {\n hslLightnessChipSelected: number\n }\n showBadgeProductLogo: boolean\n}\n\nexport const defaultTheme = (colorScheme: ColorSchemeName | null): ChatTheme => {\n const scheme: 'light' | 'dark' = colorScheme === 'dark' ? 'dark' : 'light'\n\n const defaultColors = {\n ...chatThemeColorMap[scheme],\n ...aliasTokensColorMap[scheme],\n }\n\n return {\n colors: defaultColors,\n button: {\n borderRadius: 40,\n },\n chip: {\n hslLightnessChipSelected: scheme === 'dark' ? 12 : 92,\n },\n showBadgeProductLogo: true, // Overrides visibility of the product logo in `src/display/badge.tsx`\n }\n}\n\nexport type TemporaryDefaultColorsType = Partial<ChatColors>\n\ninterface ChatColors {\n name: string\n buttonStart: string | undefined\n buttonEnd: string | undefined\n interaction: string\n androidModalHeaderButtonTextColor: ColorValue | string | undefined\n iOSModalHeaderButtonTextColor: OpaqueColorValue | string | undefined\n androidSwitchThumbColor: string | undefined\n conversationActionsBackground: string\n testColor: string\n statusSuccessIcon: string\n statusSuccessText: string\n statusSuccessBorder: string\n statusSuccessFill: string\n statusInfoIcon: string\n statusInfoText: string\n statusInfoBorder: string\n statusInfoFill: string\n statusWarningIcon: string\n statusWarningText: string\n statusWarningBorder: string\n statusWarningFill: string\n statusErrorIcon: string\n statusErrorText: string\n statusErrorBorder: string\n statusErrorFill: string\n statusSuccessComposedIcon: string\n statusSuccessComposedText: string\n statusSuccessComposedBackground: string\n statusInfoComposedIcon: string\n statusInfoComposedText: string\n statusInfoComposedBackground: string\n statusWarningComposedIcon: string\n statusWarningComposedText: string\n statusWarningComposedBackground: string\n statusErrorComposedIcon: string\n statusErrorComposedText: string\n statusErrorComposedBackground: string\n statusNeutralComposedIcon: string\n statusNeutralComposedText: string\n statusNeutralComposedBackground: string\n // borderColorChip / textColorChip match the alias tokens\n // `borderColorDefaultBase` / `textColorDefaultSecondary` the unselected\n // `ToggleButton` state used before dedicated chip tokens existed.\n borderColorChip: string\n fillColorChip: string\n textColorChip: string\n /**\n * Selected-chip colors (border/fill/text). Never assign a static default\n * directly — these stay optional so they always fall back to\n * `colors.interaction` via `??` at the read site. Every current consumer\n * overrides `interaction` at runtime, and a seeded default here could win\n * over that override depending on merge order.\n */\n borderColorChipSelected?: string\n fillColorChipSelected?: string\n textColorChipSelected?: string\n}\n\n// 'link' is an iOS-only semantic color name — constructing it on Android is\n// undefined behavior, so only build it when the code is actually running on iOS\nconst iOSLinkColor = Platform.OS === 'ios' ? PlatformColor('link') : undefined\n\nconst colorsChatLight: ChatColors = {\n name: 'light',\n androidModalHeaderButtonTextColor: tokens.fillColorInteractionDefault,\n iOSModalHeaderButtonTextColor: iOSLinkColor,\n buttonStart: undefined,\n buttonEnd: undefined,\n interaction: tokens.fillColorInteractionDefault,\n androidSwitchThumbColor: undefined,\n conversationActionsBackground: tokens.colorNeutral100White,\n testColor: 'hotpink',\n statusInfoIcon: tokens.iconColorStatusInfoPrimary,\n statusInfoText: tokens.textColorStatusInfo,\n statusInfoBorder: tokens.borderColorStatusInfo,\n statusInfoFill: tokens.fillColorStatusInfoSolid,\n statusSuccessIcon: tokens.iconColorStatusSuccessPrimary,\n statusSuccessText: tokens.textColorStatusSuccess,\n statusSuccessBorder: tokens.borderColorStatusSuccess,\n statusSuccessFill: tokens.fillColorStatusSuccessSolid,\n statusWarningIcon: tokens.iconColorStatusWarningPrimary,\n statusWarningText: tokens.textColorStatusWarning,\n statusWarningBorder: tokens.borderColorStatusWarning,\n statusWarningFill: tokens.fillColorStatusWarningSolid,\n statusErrorIcon: tokens.iconColorStatusErrorPrimary,\n statusErrorText: tokens.textColorStatusError,\n statusErrorBorder: tokens.borderColorStatusError,\n statusErrorFill: tokens.fillColorStatusErrorSolid,\n statusInfoComposedIcon: tokens.iconColorStatusInfoPrimary,\n statusInfoComposedText: tokens.textColorStatusInfo,\n statusInfoComposedBackground: tokens.fillColorStatusInfoGhost,\n statusSuccessComposedIcon: tokens.iconColorStatusSuccessPrimary,\n statusSuccessComposedText: tokens.textColorStatusSuccess,\n statusSuccessComposedBackground: tokens.fillColorStatusSuccessGhost,\n statusWarningComposedIcon: tokens.iconColorStatusWarningPrimary,\n statusWarningComposedText: tokens.textColorStatusWarning,\n statusWarningComposedBackground: tokens.fillColorStatusWarningGhost,\n statusErrorComposedIcon: tokens.iconColorStatusErrorPrimary,\n statusErrorComposedText: tokens.textColorStatusError,\n statusErrorComposedBackground: tokens.fillColorStatusErrorGhost,\n statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimary,\n statusNeutralComposedText: tokens.textColorStatusNeutral,\n statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhost,\n borderColorChip: tokens.colorNeutral88,\n fillColorChip: 'transparent',\n textColorChip: tokens.colorNeutral45,\n}\n\nconst colorsChatDark: ChatColors = {\n name: 'dark',\n androidModalHeaderButtonTextColor: tokens.fillColorInteractionDefaultDark,\n iOSModalHeaderButtonTextColor: iOSLinkColor,\n buttonStart: undefined,\n buttonEnd: undefined,\n interaction: tokens.fillColorInteractionDefaultDark,\n androidSwitchThumbColor: undefined,\n conversationActionsBackground: tokens.colorNeutral7,\n testColor: 'pink',\n statusInfoIcon: tokens.iconColorStatusInfoPrimaryDark,\n statusInfoText: tokens.textColorStatusInfoDark,\n statusInfoBorder: tokens.borderColorStatusInfoDark,\n statusInfoFill: tokens.fillColorStatusInfoSolidDark,\n statusSuccessIcon: tokens.iconColorStatusSuccessPrimaryDark,\n statusSuccessText: tokens.textColorStatusSuccessDark,\n statusSuccessBorder: tokens.borderColorStatusSuccessDark,\n statusSuccessFill: tokens.fillColorStatusSuccessSolidDark,\n statusWarningIcon: tokens.iconColorStatusWarningPrimaryDark,\n statusWarningText: tokens.textColorStatusWarningDark,\n statusWarningBorder: tokens.borderColorStatusWarningDark,\n statusWarningFill: tokens.fillColorStatusWarningSolidDark,\n statusErrorIcon: tokens.iconColorStatusErrorPrimaryDark,\n statusErrorText: tokens.textColorStatusErrorDark,\n statusErrorBorder: tokens.borderColorStatusErrorDark,\n statusErrorFill: tokens.fillColorStatusErrorSolidDark,\n\n // Note: CCA inverts composed status colors in dark mode\n statusInfoComposedIcon: tokens.iconColorStatusInfoPrimaryDark,\n statusInfoComposedText: tokens.textColorStatusInfoDark,\n statusInfoComposedBackground: tokens.fillColorStatusInfoGhostDark,\n statusSuccessComposedIcon: tokens.iconColorStatusSuccessPrimaryDark,\n statusSuccessComposedText: tokens.textColorStatusSuccessDark,\n statusSuccessComposedBackground: tokens.fillColorStatusSuccessGhostDark,\n statusWarningComposedIcon: tokens.iconColorStatusWarningPrimaryDark,\n statusWarningComposedText: tokens.textColorStatusWarningDark,\n statusWarningComposedBackground: tokens.fillColorStatusWarningGhostDark,\n statusErrorComposedIcon: tokens.iconColorStatusErrorPrimaryDark,\n statusErrorComposedText: tokens.textColorStatusErrorDark,\n statusErrorComposedBackground: tokens.fillColorStatusErrorGhostDark,\n statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimaryDark,\n statusNeutralComposedText: tokens.textColorStatusNeutralDark,\n statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhostDark,\n borderColorChip: tokens.colorNeutral24,\n fillColorChip: 'transparent',\n textColorChip: tokens.colorNeutral68,\n}\n\nconst chatThemeColorMap = {\n light: colorsChatLight,\n dark: colorsChatDark,\n}\n"]}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/utils/theme.ts"],"names":[],"mappings":"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","sourcesContent":["import { Platform, PlatformColor } from 'react-native'\nimport type { ColorSchemeName, ColorValue, OpaqueColorValue } from 'react-native'\nimport { aliasTokensColorMap } from '../vendor/tapestry/alias_tokens_color_map'\nimport { tokens } from '../vendor/tapestry/tokens'\n\nexport interface ChatTheme extends DefaultTheme {\n colors: DefaultTheme['colors'] &\n (typeof aliasTokensColorMap.light | typeof aliasTokensColorMap.dark)\n}\n\n/** =============================================\n NOTE: The specific values for `colors` and the `productBadge` are temporary examples that can be replaced once we start building out UI. This line's comment can be removed at that time too.\n\n The default theme is intended to support two types of customizations:\n 1. Specific color properties for a chat component (eg. `primaryButtonBackgroundColor`)\n 2. Any styles for a specific component. (Use only one level of nesting.)\n ```\n primaryButton: {\n borderRadius: number\n container: ViewStyle\n text: TextStyle\n }\n ```\n============================================= */\n\nexport interface DefaultTheme {\n colors: ChatColors\n button: {\n borderRadius: number\n }\n showBadgeProductLogo: boolean\n}\n\nexport const defaultTheme = (colorScheme: ColorSchemeName | null): ChatTheme => {\n const scheme: 'light' | 'dark' = colorScheme === 'dark' ? 'dark' : 'light'\n\n const defaultColors = {\n ...chatThemeColorMap[scheme],\n ...aliasTokensColorMap[scheme],\n }\n\n return {\n colors: defaultColors,\n button: {\n borderRadius: 40,\n },\n showBadgeProductLogo: true, // Overrides visibility of the product logo in `src/display/badge.tsx`\n }\n}\n\nexport type TemporaryDefaultColorsType = Partial<ChatColors>\n\ninterface ChatColors {\n name: string\n buttonStart: string | undefined\n buttonEnd: string | undefined\n interaction: string\n androidModalHeaderButtonTextColor: ColorValue | string | undefined\n iOSModalHeaderButtonTextColor: OpaqueColorValue | string | undefined\n androidSwitchThumbColor: string | undefined\n conversationActionsBackground: string\n testColor: string\n statusSuccessIcon: string\n statusSuccessText: string\n statusSuccessBorder: string\n statusSuccessFill: string\n statusInfoIcon: string\n statusInfoText: string\n statusInfoBorder: string\n statusInfoFill: string\n statusWarningIcon: string\n statusWarningText: string\n statusWarningBorder: string\n statusWarningFill: string\n statusErrorIcon: string\n statusErrorText: string\n statusErrorBorder: string\n statusErrorFill: string\n statusSuccessComposedIcon: string\n statusSuccessComposedText: string\n statusSuccessComposedBackground: string\n statusInfoComposedIcon: string\n statusInfoComposedText: string\n statusInfoComposedBackground: string\n statusWarningComposedIcon: string\n statusWarningComposedText: string\n statusWarningComposedBackground: string\n statusErrorComposedIcon: string\n statusErrorComposedText: string\n statusErrorComposedBackground: string\n statusNeutralComposedIcon: string\n statusNeutralComposedText: string\n statusNeutralComposedBackground: string\n}\n\n// 'link' is an iOS-only semantic color name — constructing it on Android is\n// undefined behavior, so only build it when the code is actually running on iOS\nconst iOSLinkColor = Platform.OS === 'ios' ? PlatformColor('link') : undefined\n\nconst colorsChatLight: ChatColors = {\n name: 'light',\n androidModalHeaderButtonTextColor: tokens.fillColorInteractionDefault,\n iOSModalHeaderButtonTextColor: iOSLinkColor,\n buttonStart: undefined,\n buttonEnd: undefined,\n interaction: tokens.fillColorInteractionDefault,\n androidSwitchThumbColor: undefined,\n conversationActionsBackground: tokens.colorNeutral100White,\n testColor: 'hotpink',\n statusInfoIcon: tokens.iconColorStatusInfoPrimary,\n statusInfoText: tokens.textColorStatusInfo,\n statusInfoBorder: tokens.borderColorStatusInfo,\n statusInfoFill: tokens.fillColorStatusInfoSolid,\n statusSuccessIcon: tokens.iconColorStatusSuccessPrimary,\n statusSuccessText: tokens.textColorStatusSuccess,\n statusSuccessBorder: tokens.borderColorStatusSuccess,\n statusSuccessFill: tokens.fillColorStatusSuccessSolid,\n statusWarningIcon: tokens.iconColorStatusWarningPrimary,\n statusWarningText: tokens.textColorStatusWarning,\n statusWarningBorder: tokens.borderColorStatusWarning,\n statusWarningFill: tokens.fillColorStatusWarningSolid,\n statusErrorIcon: tokens.iconColorStatusErrorPrimary,\n statusErrorText: tokens.textColorStatusError,\n statusErrorBorder: tokens.borderColorStatusError,\n statusErrorFill: tokens.fillColorStatusErrorSolid,\n statusInfoComposedIcon: tokens.iconColorStatusInfoPrimary,\n statusInfoComposedText: tokens.textColorStatusInfo,\n statusInfoComposedBackground: tokens.fillColorStatusInfoGhost,\n statusSuccessComposedIcon: tokens.iconColorStatusSuccessPrimary,\n statusSuccessComposedText: tokens.textColorStatusSuccess,\n statusSuccessComposedBackground: tokens.fillColorStatusSuccessGhost,\n statusWarningComposedIcon: tokens.iconColorStatusWarningPrimary,\n statusWarningComposedText: tokens.textColorStatusWarning,\n statusWarningComposedBackground: tokens.fillColorStatusWarningGhost,\n statusErrorComposedIcon: tokens.iconColorStatusErrorPrimary,\n statusErrorComposedText: tokens.textColorStatusError,\n statusErrorComposedBackground: tokens.fillColorStatusErrorGhost,\n statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimary,\n statusNeutralComposedText: tokens.textColorStatusNeutral,\n statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhost,\n}\n\nconst colorsChatDark: ChatColors = {\n name: 'dark',\n androidModalHeaderButtonTextColor: tokens.fillColorInteractionDefaultDark,\n iOSModalHeaderButtonTextColor: iOSLinkColor,\n buttonStart: undefined,\n buttonEnd: undefined,\n interaction: tokens.fillColorInteractionDefaultDark,\n androidSwitchThumbColor: undefined,\n conversationActionsBackground: tokens.colorNeutral7,\n testColor: 'pink',\n statusInfoIcon: tokens.iconColorStatusInfoPrimaryDark,\n statusInfoText: tokens.textColorStatusInfoDark,\n statusInfoBorder: tokens.borderColorStatusInfoDark,\n statusInfoFill: tokens.fillColorStatusInfoSolidDark,\n statusSuccessIcon: tokens.iconColorStatusSuccessPrimaryDark,\n statusSuccessText: tokens.textColorStatusSuccessDark,\n statusSuccessBorder: tokens.borderColorStatusSuccessDark,\n statusSuccessFill: tokens.fillColorStatusSuccessSolidDark,\n statusWarningIcon: tokens.iconColorStatusWarningPrimaryDark,\n statusWarningText: tokens.textColorStatusWarningDark,\n statusWarningBorder: tokens.borderColorStatusWarningDark,\n statusWarningFill: tokens.fillColorStatusWarningSolidDark,\n statusErrorIcon: tokens.iconColorStatusErrorPrimaryDark,\n statusErrorText: tokens.textColorStatusErrorDark,\n statusErrorBorder: tokens.borderColorStatusErrorDark,\n statusErrorFill: tokens.fillColorStatusErrorSolidDark,\n\n // Note: CCA inverts composed status colors in dark mode\n statusInfoComposedIcon: tokens.iconColorStatusInfoPrimaryDark,\n statusInfoComposedText: tokens.textColorStatusInfoDark,\n statusInfoComposedBackground: tokens.fillColorStatusInfoGhostDark,\n statusSuccessComposedIcon: tokens.iconColorStatusSuccessPrimaryDark,\n statusSuccessComposedText: tokens.textColorStatusSuccessDark,\n statusSuccessComposedBackground: tokens.fillColorStatusSuccessGhostDark,\n statusWarningComposedIcon: tokens.iconColorStatusWarningPrimaryDark,\n statusWarningComposedText: tokens.textColorStatusWarningDark,\n statusWarningComposedBackground: tokens.fillColorStatusWarningGhostDark,\n statusErrorComposedIcon: tokens.iconColorStatusErrorPrimaryDark,\n statusErrorComposedText: tokens.textColorStatusErrorDark,\n statusErrorComposedBackground: tokens.fillColorStatusErrorGhostDark,\n statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimaryDark,\n statusNeutralComposedText: tokens.textColorStatusNeutralDark,\n statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhostDark,\n}\n\nconst chatThemeColorMap = {\n light: colorsChatLight,\n dark: colorsChatDark,\n}\n"]}
package/package.json CHANGED
@@ -1,7 +1,12 @@
1
1
  {
2
2
  "name": "@planningcenter/chat-react-native",
3
- "version": "3.44.2-qa-staging.0",
3
+ "version": "3.44.2",
4
4
  "description": "",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/planningcenter/chat-mobile.git",
8
+ "directory": "packages/chat-react-native"
9
+ },
5
10
  "main": "build/index.js",
6
11
  "react-native": "./src/index.tsx",
7
12
  "types": "build/index.d.ts",
@@ -26,7 +31,7 @@
26
31
  "dependencies": {
27
32
  "@fortawesome/fontawesome-svg-core": "^7.2.0",
28
33
  "@fortawesome/react-native-fontawesome": "^0.3.2",
29
- "@planningcenter/emoji-keyboard": "3.44.2-qa-staging.0",
34
+ "@planningcenter/emoji-keyboard": "3.44.1",
30
35
  "lodash-inflection": "^1.5.0",
31
36
  "react-compiler-runtime": "^1.0.0"
32
37
  },
@@ -73,5 +78,5 @@
73
78
  "sf-symbols-typescript": "^2.2.0",
74
79
  "typescript": "~6.0.3"
75
80
  },
76
- "gitHead": "957f4e73466b263f91d3cb44e3a653251ecd0148"
81
+ "gitHead": "706a3a93624eb117fdb18eec191c6e91dc59edbd"
77
82
  }
@@ -20,27 +20,4 @@ describe('defaultTheme', () => {
20
20
  // render an unstyled or misthemed UI.
21
21
  expect(defaultTheme('unspecified').colors).toMatchObject(aliasTokensColorMap.light)
22
22
  })
23
-
24
- describe('chip tokens', () => {
25
- test('seeds static defaults for the non-selected chip trio in both schemes', () => {
26
- const light = defaultTheme('light').colors
27
- const dark = defaultTheme('dark').colors
28
-
29
- expect(light.borderColorChip).toBe('hsl(0, 0%, 88%)')
30
- expect(light.fillColorChip).toBe('transparent')
31
- expect(light.textColorChip).toBe('hsl(0, 0%, 45%)')
32
-
33
- expect(dark.borderColorChip).toBe('hsl(0, 0%, 24%)')
34
- expect(dark.fillColorChip).toBe('transparent')
35
- expect(dark.textColorChip).toBe('hsl(0, 0%, 68%)')
36
- })
37
-
38
- test('never seeds a static default for the selected chip trio', () => {
39
- const { colors } = defaultTheme('light')
40
-
41
- expect(colors.borderColorChipSelected).toBeUndefined()
42
- expect(colors.fillColorChipSelected).toBeUndefined()
43
- expect(colors.textColorChipSelected).toBeUndefined()
44
- })
45
- })
46
23
  })
@@ -13,7 +13,7 @@ import { MessageReaction } from '../../components/conversation/message_reaction'
13
13
  import { Avatar, Icon, Spinner, Text, TextButton, TextInlineButton } from '../../components/display'
14
14
  import {
15
15
  useAnimatedMessageBackgroundColor,
16
- useInteractionTintedBackgroundColor,
16
+ useInteractionGhostBackgroundColor,
17
17
  useTheme,
18
18
  } from '../../hooks'
19
19
  import { useDeletingIds } from '../../hooks'
@@ -341,7 +341,7 @@ export function Message({
341
341
 
342
342
  const useMessageStyles = (mine: boolean, isDeleting: boolean) => {
343
343
  const { colors } = useTheme()
344
- const myMessageBackgroundColor = useInteractionTintedBackgroundColor()
344
+ const myMessageBackgroundColor = useInteractionGhostBackgroundColor()
345
345
  const { width } = useWindowDimensions()
346
346
  const tabletWidth = width >= 744 // Smallest iPad Mini's width
347
347
 
@@ -17,7 +17,7 @@ import { ChatContext } from '../../contexts/chat_context'
17
17
  import {
18
18
  useCreateAndroidRippleColor,
19
19
  useTheme,
20
- useInteractionTintedBackgroundColor,
20
+ useInteractionGhostBackgroundColor,
21
21
  useScalableNumberOfLines,
22
22
  useFontScale,
23
23
  } from '../../hooks'
@@ -783,7 +783,7 @@ const useMessageFormStyles = () => {
783
783
  const navigationTheme = useNavigationTheme()
784
784
  const buttonSize = 38
785
785
 
786
- const giphyBadgeBackgroundColor = useInteractionTintedBackgroundColor()
786
+ const giphyBadgeBackgroundColor = useInteractionGhostBackgroundColor()
787
787
 
788
788
  return StyleSheet.create({
789
789
  container: {
@@ -3,7 +3,7 @@ import colorFunction from 'color'
3
3
  import React, { useMemo } from 'react'
4
4
  import { StyleSheet } from 'react-native'
5
5
  import { Text } from '../../components/display'
6
- import { useSelectedChipBackgroundColor, useTheme } from '../../hooks'
6
+ import { useInteractionGhostBackgroundColor, useTheme } from '../../hooks'
7
7
  import { useCreateAndroidRippleColor } from '../../hooks/use_create_android_ripple_color'
8
8
  import { useMessageReactionToggle } from '../../hooks/use_message_reaction_toggle'
9
9
  import { MessageResource } from '../../types'
@@ -57,12 +57,12 @@ export function MessageReaction({
57
57
  export const useReactionStyles = ({ mine }: { mine: number }) => {
58
58
  const { colors } = useTheme()
59
59
  const activeBorderColor = useMemo(() => {
60
- return colorFunction(colors.borderColorChipSelected ?? colors.interaction)
60
+ return colorFunction(colors.interaction)
61
61
  .hsl()
62
62
  .lightness(colors.name === 'dark' ? 20 : 80)
63
63
  .string()
64
- }, [colors.borderColorChipSelected, colors.interaction, colors.name])
65
- const activeBackgroundColor = useSelectedChipBackgroundColor()
64
+ }, [colors.interaction, colors.name])
65
+ const activeBackgroundColor = useInteractionGhostBackgroundColor()
66
66
 
67
67
  return StyleSheet.create({
68
68
  reaction: {
@@ -5,7 +5,7 @@ import {
5
5
  useTheme,
6
6
  useFontScale,
7
7
  useCreateAndroidRippleColor,
8
- useSelectedChipBackgroundColor,
8
+ useInteractionGhostBackgroundColor,
9
9
  } from '../../hooks'
10
10
  import {
11
11
  MAX_FONT_SIZE_MULTIPLIER_LANDMARK,
@@ -164,20 +164,16 @@ const useStyles = ({ active, maxFontSizeMultiplier }: Partial<ToggleButtonProps>
164
164
  const { colors, button } = useTheme()
165
165
  const fontScale = useFontScale({ maxFontSizeMultiplier })
166
166
 
167
- const activeBackgroundColor = useSelectedChipBackgroundColor()
167
+ const activeBackgroundColor = useInteractionGhostBackgroundColor()
168
168
 
169
- const borderColor = active
170
- ? (colors.borderColorChipSelected ?? colors.interaction)
171
- : colors.borderColorChip
172
- const fillColor = active ? activeBackgroundColor : colors.fillColorChip
173
- const color = active ? (colors.textColorChipSelected ?? colors.interaction) : colors.textColorChip
169
+ const color = active ? colors.interaction : colors.textColorDefaultSecondary
174
170
 
175
171
  return StyleSheet.create({
176
172
  pressable: {
177
173
  borderRadius: button.borderRadius * fontScale,
178
174
  borderWidth: 1,
179
- borderColor,
180
- backgroundColor: fillColor,
175
+ borderColor: active ? colors.interaction : colors.borderColorDefaultBase,
176
+ backgroundColor: active ? activeBackgroundColor : 'transparent',
181
177
  paddingHorizontal: 16 * fontScale,
182
178
  flexDirection: 'row',
183
179
  alignItems: 'center',
@@ -13,8 +13,7 @@ export * from './use_font_scale'
13
13
  export * from './use_has_direct_messages'
14
14
  export * from './use_groups_groups'
15
15
  export * from './use_groups'
16
- export * from './use_selected_chip_background_color'
17
- export * from './use_interaction_tinted_background_color'
16
+ export * from './use_interaction_ghost_color'
18
17
  export * from './use_message_reaction_toggle'
19
18
  export * from './use_new_conversation_entry'
20
19
  export * from './use_organization'
@@ -0,0 +1,15 @@
1
+ import colorFunction from 'color'
2
+ import { useMemo } from 'react'
3
+ import { useTheme } from './use_theme'
4
+
5
+ export function useInteractionGhostBackgroundColor() {
6
+ const { colors } = useTheme()
7
+ const interactionGhostColor = useMemo(() => {
8
+ return colorFunction(colors.interaction)
9
+ .hsl()
10
+ .lightness(colors.name === 'dark' ? 12 : 92)
11
+ .string()
12
+ }, [colors.interaction, colors.name])
13
+
14
+ return interactionGhostColor
15
+ }
@@ -9,10 +9,6 @@ const REST_OFFSET = 1
9
9
  * top content edge — for an inverted list, wherever the newest message rests. Resting
10
10
  * the list 1pt in from that edge keeps a drag at the bottom of a conversation scrolling
11
11
  * history instead of swiping the modal away.
12
- *
13
- * Returns the offset the list rests at plus the scroll listeners that nudge it back
14
- * there: once on first layout, then after each gesture settles. On Android there is no
15
- * sheet gesture to avoid, so the offset is 0 and the listeners are undefined.
16
12
  */
17
13
  export const useRestAwayFromDismissEdge = ({
18
14
  listRef,
@@ -29,7 +29,7 @@ import {
29
29
  import { VideoAttachmentPreview } from '../components/display/video_attachment_preview'
30
30
  import BannerPrimitive from '../components/primitive/banner_primitive'
31
31
  import BlankState from '../components/primitive/blank_state_primitive'
32
- import { useSelectedChipBackgroundColor, useTheme } from '../hooks'
32
+ import { useInteractionGhostBackgroundColor, useTheme } from '../hooks'
33
33
  import {
34
34
  MAX_FONT_SIZE_MULTIPLIER,
35
35
  platformPressedOpacityStyle,
@@ -1325,7 +1325,7 @@ function HapticButton({ title, onPress }: { title: string; onPress: () => void }
1325
1325
 
1326
1326
  const useStyles = () => {
1327
1327
  const { colors } = useTheme()
1328
- const selectedChipBackgroundColor = useSelectedChipBackgroundColor()
1328
+ const interactionGhostBackgroundColor = useInteractionGhostBackgroundColor()
1329
1329
 
1330
1330
  return StyleSheet.create({
1331
1331
  hapticButton: {
@@ -1334,7 +1334,7 @@ const useStyles = () => {
1334
1334
  padding: 16,
1335
1335
  alignItems: 'center',
1336
1336
  justifyContent: 'center',
1337
- backgroundColor: selectedChipBackgroundColor,
1337
+ backgroundColor: interactionGhostBackgroundColor,
1338
1338
  borderWidth: 1,
1339
1339
  borderColor: colors.interaction,
1340
1340
  borderRadius: 8,
@@ -28,9 +28,6 @@ export interface DefaultTheme {
28
28
  button: {
29
29
  borderRadius: number
30
30
  }
31
- chip: {
32
- hslLightnessChipSelected: number
33
- }
34
31
  showBadgeProductLogo: boolean
35
32
  }
36
33
 
@@ -47,9 +44,6 @@ export const defaultTheme = (colorScheme: ColorSchemeName | null): ChatTheme =>
47
44
  button: {
48
45
  borderRadius: 40,
49
46
  },
50
- chip: {
51
- hslLightnessChipSelected: scheme === 'dark' ? 12 : 92,
52
- },
53
47
  showBadgeProductLogo: true, // Overrides visibility of the product logo in `src/display/badge.tsx`
54
48
  }
55
49
  }
@@ -97,22 +91,6 @@ interface ChatColors {
97
91
  statusNeutralComposedIcon: string
98
92
  statusNeutralComposedText: string
99
93
  statusNeutralComposedBackground: string
100
- // borderColorChip / textColorChip match the alias tokens
101
- // `borderColorDefaultBase` / `textColorDefaultSecondary` the unselected
102
- // `ToggleButton` state used before dedicated chip tokens existed.
103
- borderColorChip: string
104
- fillColorChip: string
105
- textColorChip: string
106
- /**
107
- * Selected-chip colors (border/fill/text). Never assign a static default
108
- * directly — these stay optional so they always fall back to
109
- * `colors.interaction` via `??` at the read site. Every current consumer
110
- * overrides `interaction` at runtime, and a seeded default here could win
111
- * over that override depending on merge order.
112
- */
113
- borderColorChipSelected?: string
114
- fillColorChipSelected?: string
115
- textColorChipSelected?: string
116
94
  }
117
95
 
118
96
  // 'link' is an iOS-only semantic color name — constructing it on Android is
@@ -160,9 +138,6 @@ const colorsChatLight: ChatColors = {
160
138
  statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimary,
161
139
  statusNeutralComposedText: tokens.textColorStatusNeutral,
162
140
  statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhost,
163
- borderColorChip: tokens.colorNeutral88,
164
- fillColorChip: 'transparent',
165
- textColorChip: tokens.colorNeutral45,
166
141
  }
167
142
 
168
143
  const colorsChatDark: ChatColors = {
@@ -208,9 +183,6 @@ const colorsChatDark: ChatColors = {
208
183
  statusNeutralComposedIcon: tokens.iconColorStatusNeutralPrimaryDark,
209
184
  statusNeutralComposedText: tokens.textColorStatusNeutralDark,
210
185
  statusNeutralComposedBackground: tokens.fillColorStatusNeutralGhostDark,
211
- borderColorChip: tokens.colorNeutral24,
212
- fillColorChip: 'transparent',
213
- textColorChip: tokens.colorNeutral68,
214
186
  }
215
187
 
216
188
  const chatThemeColorMap = {
@@ -1,6 +0,0 @@
1
- /**
2
- * Background color for non-chip surfaces (message bubbles, the Giphy badge)
3
- * that are tinted from `colors.interaction`. Unaffected by chip tokens.
4
- */
5
- export declare function useInteractionTintedBackgroundColor(): string;
6
- //# sourceMappingURL=use_interaction_tinted_background_color.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_interaction_tinted_background_color.d.ts","sourceRoot":"","sources":["../../src/hooks/use_interaction_tinted_background_color.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAgB,mCAAmC,WAWlD"}
@@ -1,15 +0,0 @@
1
- import colorFunction from 'color';
2
- import { useMemo } from 'react';
3
- import { useTheme } from './use_theme';
4
- /**
5
- * Background color for non-chip surfaces (message bubbles, the Giphy badge)
6
- * that are tinted from `colors.interaction`. Unaffected by chip tokens.
7
- */
8
- export function useInteractionTintedBackgroundColor() {
9
- const { colors } = useTheme();
10
- return useMemo(() => colorFunction(colors.interaction)
11
- .hsl()
12
- .lightness(colors.name === 'dark' ? 12 : 92)
13
- .string(), [colors.interaction, colors.name]);
14
- }
15
- //# sourceMappingURL=use_interaction_tinted_background_color.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_interaction_tinted_background_color.js","sourceRoot":"","sources":["../../src/hooks/use_interaction_tinted_background_color.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC;;;GAGG;AACH,MAAM,UAAU,mCAAmC;IACjD,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAA;IAE7B,OAAO,OAAO,CACZ,GAAG,EAAE,CACH,aAAa,CAAC,MAAM,CAAC,WAAW,CAAC;SAC9B,GAAG,EAAE;SACL,SAAS,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3C,MAAM,EAAE,EACb,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,CAClC,CAAA;AACH,CAAC","sourcesContent":["import colorFunction from 'color'\nimport { useMemo } from 'react'\nimport { useTheme } from './use_theme'\n\n/**\n * Background color for non-chip surfaces (message bubbles, the Giphy badge)\n * that are tinted from `colors.interaction`. Unaffected by chip tokens.\n */\nexport function useInteractionTintedBackgroundColor() {\n const { colors } = useTheme()\n\n return useMemo(\n () =>\n colorFunction(colors.interaction)\n .hsl()\n .lightness(colors.name === 'dark' ? 12 : 92)\n .string(),\n [colors.interaction, colors.name]\n )\n}\n"]}
@@ -1,7 +0,0 @@
1
- /**
2
- * Background color for a chip surface (filter button, reaction pill) in its
3
- * selected state. Falls back to `colors.interaction` when a consumer hasn't
4
- * supplied `colors.fillColorChipSelected`.
5
- */
6
- export declare function useSelectedChipBackgroundColor(): string;
7
- //# sourceMappingURL=use_selected_chip_background_color.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_selected_chip_background_color.d.ts","sourceRoot":"","sources":["../../src/hooks/use_selected_chip_background_color.ts"],"names":[],"mappings":"AAIA;;;;GAIG;AACH,wBAAgB,8BAA8B,WAW7C"}
@@ -1,16 +0,0 @@
1
- import colorFunction from 'color';
2
- import { useMemo } from 'react';
3
- import { useTheme } from './use_theme';
4
- /**
5
- * Background color for a chip surface (filter button, reaction pill) in its
6
- * selected state. Falls back to `colors.interaction` when a consumer hasn't
7
- * supplied `colors.fillColorChipSelected`.
8
- */
9
- export function useSelectedChipBackgroundColor() {
10
- const { colors, chip } = useTheme();
11
- return useMemo(() => colorFunction(colors.fillColorChipSelected ?? colors.interaction)
12
- .hsl()
13
- .lightness(chip.hslLightnessChipSelected)
14
- .string(), [colors.fillColorChipSelected, colors.interaction, chip.hslLightnessChipSelected]);
15
- }
16
- //# sourceMappingURL=use_selected_chip_background_color.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"use_selected_chip_background_color.js","sourceRoot":"","sources":["../../src/hooks/use_selected_chip_background_color.ts"],"names":[],"mappings":"AAAA,OAAO,aAAa,MAAM,OAAO,CAAA;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAA;AAC/B,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAEtC;;;;GAIG;AACH,MAAM,UAAU,8BAA8B;IAC5C,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,EAAE,CAAA;IAEnC,OAAO,OAAO,CACZ,GAAG,EAAE,CACH,aAAa,CAAC,MAAM,CAAC,qBAAqB,IAAI,MAAM,CAAC,WAAW,CAAC;SAC9D,GAAG,EAAE;SACL,SAAS,CAAC,IAAI,CAAC,wBAAwB,CAAC;SACxC,MAAM,EAAE,EACb,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,WAAW,EAAE,IAAI,CAAC,wBAAwB,CAAC,CAClF,CAAA;AACH,CAAC","sourcesContent":["import colorFunction from 'color'\nimport { useMemo } from 'react'\nimport { useTheme } from './use_theme'\n\n/**\n * Background color for a chip surface (filter button, reaction pill) in its\n * selected state. Falls back to `colors.interaction` when a consumer hasn't\n * supplied `colors.fillColorChipSelected`.\n */\nexport function useSelectedChipBackgroundColor() {\n const { colors, chip } = useTheme()\n\n return useMemo(\n () =>\n colorFunction(colors.fillColorChipSelected ?? colors.interaction)\n .hsl()\n .lightness(chip.hslLightnessChipSelected)\n .string(),\n [colors.fillColorChipSelected, colors.interaction, chip.hslLightnessChipSelected]\n )\n}\n"]}
@@ -1,67 +0,0 @@
1
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
2
- import { renderHook } from '@testing-library/react-native'
3
- import React from 'react'
4
- import { buildTestQueryClient } from '../../__utils__/query_client'
5
- import { ChatProvider, CreateChatThemeProps } from '../../contexts/chat_context'
6
- import { useInteractionTintedBackgroundColor } from '../../hooks'
7
-
8
- let themeProps: CreateChatThemeProps
9
- let queryClient: QueryClient
10
-
11
- beforeEach(() => {
12
- queryClient = buildTestQueryClient({
13
- defaultOptions: {
14
- queries: {
15
- refetchInterval: false,
16
- refetchOnWindowFocus: false,
17
- refetchOnReconnect: false,
18
- },
19
- },
20
- })
21
- })
22
-
23
- afterEach(() => {
24
- queryClient.clear()
25
- queryClient.cancelQueries()
26
- queryClient.removeQueries()
27
- })
28
-
29
- const Wrapper = ({ children }: { children: React.ReactNode }) => {
30
- return (
31
- <QueryClientProvider client={queryClient}>
32
- <ChatProvider value={{ onUnauthorizedResponse: () => {}, theme: themeProps }}>
33
- {children}
34
- </ChatProvider>
35
- </QueryClientProvider>
36
- )
37
- }
38
-
39
- describe('useInteractionTintedBackgroundColor (non-chip surfaces)', () => {
40
- test('ignores fillColorChipSelected', () => {
41
- themeProps = {
42
- theme: {
43
- colors: {
44
- interaction: 'rgb(0, 255, 0)',
45
- fillColorChipSelected: 'rgb(9, 9, 9)',
46
- },
47
- },
48
- }
49
-
50
- const { result: withChipToken } = renderHook(() => useInteractionTintedBackgroundColor(), {
51
- wrapper: Wrapper,
52
- })
53
-
54
- themeProps = {
55
- theme: {
56
- colors: { interaction: 'rgb(0, 255, 0)' },
57
- },
58
- }
59
-
60
- const { result: withoutChipToken } = renderHook(() => useInteractionTintedBackgroundColor(), {
61
- wrapper: Wrapper,
62
- })
63
-
64
- expect(withChipToken.current).toBe(withoutChipToken.current)
65
- expect(withoutChipToken.current).toBe('hsl(120, 100%, 92%)')
66
- })
67
- })
@@ -1,78 +0,0 @@
1
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
2
- import { renderHook } from '@testing-library/react-native'
3
- import React from 'react'
4
- import { buildTestQueryClient } from '../../__utils__/query_client'
5
- import { ChatProvider, CreateChatThemeProps } from '../../contexts/chat_context'
6
- import { useSelectedChipBackgroundColor } from '../../hooks'
7
-
8
- let themeProps: CreateChatThemeProps
9
- let queryClient: QueryClient
10
-
11
- beforeEach(() => {
12
- queryClient = buildTestQueryClient({
13
- defaultOptions: {
14
- queries: {
15
- refetchInterval: false,
16
- refetchOnWindowFocus: false,
17
- refetchOnReconnect: false,
18
- },
19
- },
20
- })
21
- })
22
-
23
- afterEach(() => {
24
- queryClient.clear()
25
- queryClient.cancelQueries()
26
- queryClient.removeQueries()
27
- })
28
-
29
- const Wrapper = ({ children }: { children: React.ReactNode }) => {
30
- return (
31
- <QueryClientProvider client={queryClient}>
32
- <ChatProvider value={{ onUnauthorizedResponse: () => {}, theme: themeProps }}>
33
- {children}
34
- </ChatProvider>
35
- </QueryClientProvider>
36
- )
37
- }
38
-
39
- describe('useSelectedChipBackgroundColor', () => {
40
- test('falls back to colors.interaction when fillColorChipSelected is absent', () => {
41
- themeProps = { theme: { colors: { interaction: 'rgb(0, 255, 0)' } } }
42
-
43
- const { result } = renderHook(() => useSelectedChipBackgroundColor(), {
44
- wrapper: Wrapper,
45
- })
46
-
47
- expect(result.current).toBe('hsl(120, 100%, 92%)')
48
- })
49
-
50
- test('prefers fillColorChipSelected over colors.interaction when supplied', () => {
51
- themeProps = {
52
- theme: {
53
- colors: { interaction: 'rgb(0, 255, 0)', fillColorChipSelected: 'rgb(255, 0, 0)' },
54
- },
55
- }
56
-
57
- const { result } = renderHook(() => useSelectedChipBackgroundColor(), {
58
- wrapper: Wrapper,
59
- })
60
-
61
- expect(result.current).toBe('hsl(0, 100%, 92%)')
62
- })
63
-
64
- test('respects a custom hslLightnessChipSelected', () => {
65
- themeProps = {
66
- theme: {
67
- colors: { interaction: 'rgb(0, 255, 0)' },
68
- chip: { hslLightnessChipSelected: 50 },
69
- },
70
- }
71
-
72
- const { result } = renderHook(() => useSelectedChipBackgroundColor(), {
73
- wrapper: Wrapper,
74
- })
75
-
76
- expect(result.current).toBe('hsl(120, 100%, 50%)')
77
- })
78
- })