@teamvortexsoftware/vortex-react-native 0.0.13 → 1.0.1

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 (228) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +1227 -11
  3. package/dist/InviteFormCore-D4HkMMo0.d.mts +721 -0
  4. package/dist/InviteFormCore-D9oUCbu7.d.ts +721 -0
  5. package/dist/VortexClient.js +192 -0
  6. package/dist/VortexClient.js.map +1 -0
  7. package/dist/VortexDeferredLinks.js +127 -0
  8. package/dist/VortexDeferredLinks.js.map +1 -0
  9. package/dist/clientInfo.js +45 -0
  10. package/dist/clientInfo.js.map +1 -0
  11. package/dist/components/ContactsPickerModal.js +182 -0
  12. package/dist/components/ContactsPickerModal.js.map +1 -0
  13. package/dist/components/InviteFormCore.js +2141 -0
  14. package/dist/components/InviteFormCore.js.map +1 -0
  15. package/dist/components/InviteFormMobile.js +463 -0
  16. package/dist/components/InviteFormMobile.js.map +1 -0
  17. package/dist/components/InviteFormWeb.js +295 -0
  18. package/dist/components/InviteFormWeb.js.map +1 -0
  19. package/dist/components/PlacedItemToolbar.js +147 -0
  20. package/dist/components/PlacedItemToolbar.js.map +1 -0
  21. package/dist/components/ShareButtons.js +1 -0
  22. package/dist/components/ShareButtons.js.map +1 -0
  23. package/dist/components/VrtxContactsImport.js +234 -0
  24. package/dist/components/VrtxContactsImport.js.map +1 -0
  25. package/dist/components/VrtxEmailInvitations.js +341 -0
  26. package/dist/components/VrtxEmailInvitations.js.map +1 -0
  27. package/dist/components/VrtxFindFriends.js +400 -0
  28. package/dist/components/VrtxFindFriends.js.map +1 -0
  29. package/dist/components/VrtxHeading.js +58 -0
  30. package/dist/components/VrtxHeading.js.map +1 -0
  31. package/dist/components/VrtxIncomingInvitations.js +657 -0
  32. package/dist/components/VrtxIncomingInvitations.js.map +1 -0
  33. package/dist/components/VrtxInvitationSuggestions.js +506 -0
  34. package/dist/components/VrtxInvitationSuggestions.js.map +1 -0
  35. package/dist/components/VrtxInviteContacts.js +512 -0
  36. package/dist/components/VrtxInviteContacts.js.map +1 -0
  37. package/dist/components/VrtxOutgoingInvitations.js +572 -0
  38. package/dist/components/VrtxOutgoingInvitations.js.map +1 -0
  39. package/dist/components/VrtxSearchBox.js +487 -0
  40. package/dist/components/VrtxSearchBox.js.map +1 -0
  41. package/dist/components/VrtxSelect.js +27 -0
  42. package/dist/components/VrtxSelect.js.map +1 -0
  43. package/dist/components/VrtxShareOptions.js +435 -0
  44. package/dist/components/VrtxShareOptions.js.map +1 -0
  45. package/dist/components/VrtxSubmit.js +132 -0
  46. package/dist/components/VrtxSubmit.js.map +1 -0
  47. package/dist/components/VrtxText.js +146 -0
  48. package/dist/components/VrtxText.js.map +1 -0
  49. package/dist/constants/mockData.d.mts +7 -0
  50. package/dist/constants/mockData.d.ts +7 -0
  51. package/dist/constants/mockData.js +48 -0
  52. package/dist/constants/mockData.js.map +1 -0
  53. package/dist/constants/mockData.mjs +22 -0
  54. package/dist/constants/mockData.mjs.map +1 -0
  55. package/dist/context/VortexModulesContext.js +135 -0
  56. package/dist/context/VortexModulesContext.js.map +1 -0
  57. package/dist/hooks/useInvitationFormLogic.d.mts +2 -0
  58. package/dist/hooks/useInvitationFormLogic.d.ts +2 -0
  59. package/dist/hooks/useInvitationFormLogic.js +300 -0
  60. package/dist/hooks/useInvitationFormLogic.js.map +1 -0
  61. package/dist/hooks/useInvitationFormLogic.mjs +276 -0
  62. package/dist/hooks/useInvitationFormLogic.mjs.map +1 -0
  63. package/dist/hooks/usePrefetchWidgetConfiguration.js +117 -0
  64. package/dist/hooks/usePrefetchWidgetConfiguration.js.map +1 -0
  65. package/dist/hooks/useThemeStyles.js +2 -0
  66. package/dist/hooks/useThemeStyles.js.map +1 -0
  67. package/dist/hooks/useVortexInvite.js +467 -56
  68. package/dist/hooks/useVortexInvite.js.map +1 -0
  69. package/dist/index-web.d.mts +93 -0
  70. package/dist/index-web.d.ts +93 -0
  71. package/dist/index-web.js +7397 -0
  72. package/dist/index-web.js.map +1 -0
  73. package/dist/index-web.mjs +7445 -0
  74. package/dist/index-web.mjs.map +1 -0
  75. package/dist/index.d.mts +656 -0
  76. package/dist/index.d.ts +656 -0
  77. package/dist/index.js +10205 -4
  78. package/dist/index.js.map +1 -0
  79. package/dist/index.mjs +10244 -0
  80. package/dist/index.mjs.map +1 -0
  81. package/dist/types/VortexClient.d.ts +106 -0
  82. package/dist/types/VortexClient.d.ts.map +1 -0
  83. package/dist/types/VortexDeferredLinks.d.ts +73 -0
  84. package/dist/types/VortexDeferredLinks.d.ts.map +1 -0
  85. package/dist/types/clientInfo.d.ts +5 -0
  86. package/dist/types/clientInfo.d.ts.map +1 -0
  87. package/dist/types/components/ContactsPickerModal.d.ts +18 -0
  88. package/dist/types/components/ContactsPickerModal.d.ts.map +1 -0
  89. package/dist/types/components/InviteFormCore.d.ts +166 -0
  90. package/dist/types/components/InviteFormCore.d.ts.map +1 -0
  91. package/dist/types/components/InviteFormMobile.d.ts +42 -0
  92. package/dist/types/components/InviteFormMobile.d.ts.map +1 -0
  93. package/dist/types/components/InviteFormWeb.d.ts +87 -0
  94. package/dist/types/components/InviteFormWeb.d.ts.map +1 -0
  95. package/dist/types/components/PlacedItemToolbar.d.ts +16 -0
  96. package/dist/types/components/PlacedItemToolbar.d.ts.map +1 -0
  97. package/dist/types/components/VrtxContactsImport.d.ts +14 -0
  98. package/dist/types/components/VrtxContactsImport.d.ts.map +1 -0
  99. package/dist/types/components/VrtxEmailInvitations.d.ts +31 -0
  100. package/dist/types/components/VrtxEmailInvitations.d.ts.map +1 -0
  101. package/dist/types/components/VrtxFindFriends.d.ts +25 -0
  102. package/dist/types/components/VrtxFindFriends.d.ts.map +1 -0
  103. package/dist/types/components/VrtxHeading.d.ts +6 -0
  104. package/dist/types/components/VrtxHeading.d.ts.map +1 -0
  105. package/dist/types/components/VrtxIncomingInvitations.d.ts +27 -0
  106. package/dist/types/components/VrtxIncomingInvitations.d.ts.map +1 -0
  107. package/dist/types/components/VrtxInvitationSuggestions.d.ts +25 -0
  108. package/dist/types/components/VrtxInvitationSuggestions.d.ts.map +1 -0
  109. package/dist/types/components/VrtxInviteContacts.d.ts +24 -0
  110. package/dist/types/components/VrtxInviteContacts.d.ts.map +1 -0
  111. package/dist/types/components/VrtxOutgoingInvitations.d.ts +27 -0
  112. package/dist/types/components/VrtxOutgoingInvitations.d.ts.map +1 -0
  113. package/dist/types/components/VrtxSearchBox.d.ts +28 -0
  114. package/dist/types/components/VrtxSearchBox.d.ts.map +1 -0
  115. package/dist/types/components/VrtxSelect.d.ts +6 -0
  116. package/dist/types/components/VrtxSelect.d.ts.map +1 -0
  117. package/dist/types/components/VrtxShareOptions.d.ts +41 -0
  118. package/dist/types/components/VrtxShareOptions.d.ts.map +1 -0
  119. package/dist/types/components/VrtxSubmit.d.ts +18 -0
  120. package/dist/types/components/VrtxSubmit.d.ts.map +1 -0
  121. package/dist/types/components/VrtxText.d.ts +8 -0
  122. package/dist/types/components/VrtxText.d.ts.map +1 -0
  123. package/dist/types/constants/mockData.d.ts +4 -0
  124. package/dist/types/constants/mockData.d.ts.map +1 -0
  125. package/dist/types/context/VortexModulesContext.d.ts +238 -0
  126. package/dist/types/context/VortexModulesContext.d.ts.map +1 -0
  127. package/dist/types/findFriends.js +10 -0
  128. package/dist/types/findFriends.js.map +1 -0
  129. package/dist/types/hooks/useInvitationFormLogic.d.ts +55 -0
  130. package/dist/types/hooks/useInvitationFormLogic.d.ts.map +1 -0
  131. package/dist/types/hooks/usePrefetchWidgetConfiguration.d.ts +39 -0
  132. package/dist/types/hooks/usePrefetchWidgetConfiguration.d.ts.map +1 -0
  133. package/dist/types/hooks/useThemeStyles.d.ts +1 -0
  134. package/dist/types/hooks/useThemeStyles.d.ts.map +1 -1
  135. package/dist/types/hooks/useVortexInvite.d.ts +48 -6
  136. package/dist/types/hooks/useVortexInvite.d.ts.map +1 -1
  137. package/dist/types/index-web.d.ts +23 -0
  138. package/dist/types/index-web.d.ts.map +1 -0
  139. package/dist/types/index.d.ts +21 -0
  140. package/dist/types/index.d.ts.map +1 -1
  141. package/dist/types/invitations.js +13 -0
  142. package/dist/types/invitations.js.map +1 -0
  143. package/dist/types/inviteContacts.js +14 -0
  144. package/dist/types/inviteContacts.js.map +1 -0
  145. package/dist/{shared/InvitationResult.js → types/platformOperations.js} +1 -0
  146. package/dist/types/platformOperations.js.map +1 -0
  147. package/dist/types/searchBox.js +11 -0
  148. package/dist/types/searchBox.js.map +1 -0
  149. package/dist/types/types/findFriends.d.ts +101 -0
  150. package/dist/types/types/findFriends.d.ts.map +1 -0
  151. package/dist/types/types/invitations.d.ts +301 -0
  152. package/dist/types/types/invitations.d.ts.map +1 -0
  153. package/dist/types/types/inviteContacts.d.ts +86 -0
  154. package/dist/types/types/inviteContacts.d.ts.map +1 -0
  155. package/dist/types/types/platformOperations.d.ts +185 -0
  156. package/dist/types/types/platformOperations.d.ts.map +1 -0
  157. package/dist/types/types/searchBox.d.ts +69 -0
  158. package/dist/types/types/searchBox.d.ts.map +1 -0
  159. package/dist/types/types/unfurlConfig.d.ts +34 -0
  160. package/dist/types/types/unfurlConfig.d.ts.map +1 -0
  161. package/dist/types/unfurlConfig.js +21 -0
  162. package/dist/types/unfurlConfig.js.map +1 -0
  163. package/dist/types/utils/analytics.d.ts +54 -0
  164. package/dist/types/utils/analytics.d.ts.map +1 -0
  165. package/dist/types/utils/configCache.d.ts +34 -0
  166. package/dist/types/utils/configCache.d.ts.map +1 -0
  167. package/dist/types/utils/contactUtils.d.ts +9 -0
  168. package/dist/types/utils/contactUtils.d.ts.map +1 -0
  169. package/dist/types/utils/featureWarnings.d.ts +56 -0
  170. package/dist/types/utils/featureWarnings.d.ts.map +1 -0
  171. package/dist/types/utils/formUtils.d.ts +11 -3
  172. package/dist/types/utils/formUtils.d.ts.map +1 -1
  173. package/dist/types/utils/gradientUtils.d.ts +67 -0
  174. package/dist/types/utils/gradientUtils.d.ts.map +1 -0
  175. package/dist/types/utils/invitationEvents.d.ts +21 -0
  176. package/dist/types/utils/invitationEvents.d.ts.map +1 -0
  177. package/dist/types/utils/moduleLoaders.d.ts +115 -0
  178. package/dist/types/utils/moduleLoaders.d.ts.map +1 -0
  179. package/dist/types/utils/moduleLoaders.web.d.ts +73 -0
  180. package/dist/types/utils/moduleLoaders.web.d.ts.map +1 -0
  181. package/dist/types/utils/nameUtils.d.ts +15 -0
  182. package/dist/types/utils/nameUtils.d.ts.map +1 -0
  183. package/dist/types/utils/themeUtils.d.ts +3 -1
  184. package/dist/types/utils/themeUtils.d.ts.map +1 -1
  185. package/dist/types/vortexInvite.d.ts +145 -5
  186. package/dist/types/vortexInvite.d.ts.map +1 -1
  187. package/dist/useInvitationFormLogic-Ct73M19B.d.mts +242 -0
  188. package/dist/useInvitationFormLogic-Ct73M19B.d.ts +242 -0
  189. package/dist/utils/analytics.js +92 -0
  190. package/dist/utils/analytics.js.map +1 -0
  191. package/dist/utils/configCache.js +68 -0
  192. package/dist/utils/configCache.js.map +1 -0
  193. package/dist/utils/contactUtils.d.mts +12 -0
  194. package/dist/utils/contactUtils.d.ts +12 -0
  195. package/dist/utils/contactUtils.js +37 -0
  196. package/dist/utils/contactUtils.js.map +1 -0
  197. package/dist/utils/contactUtils.mjs +12 -0
  198. package/dist/utils/contactUtils.mjs.map +1 -0
  199. package/dist/utils/featureWarnings.js +214 -0
  200. package/dist/utils/featureWarnings.js.map +1 -0
  201. package/dist/utils/formUtils.js +161 -51
  202. package/dist/utils/formUtils.js.map +1 -0
  203. package/dist/utils/gradientUtils.js +120 -0
  204. package/dist/utils/gradientUtils.js.map +1 -0
  205. package/dist/utils/invitationEvents.js +45 -0
  206. package/dist/utils/invitationEvents.js.map +1 -0
  207. package/dist/utils/moduleLoaders.js +275 -0
  208. package/dist/utils/moduleLoaders.js.map +1 -0
  209. package/dist/utils/moduleLoaders.web.js +72 -0
  210. package/dist/utils/moduleLoaders.web.js.map +1 -0
  211. package/dist/utils/nameUtils.js +51 -0
  212. package/dist/utils/nameUtils.js.map +1 -0
  213. package/dist/utils/themeUtils.js +117 -32
  214. package/dist/utils/themeUtils.js.map +1 -0
  215. package/dist/vortexInvite.js +78 -167
  216. package/dist/vortexInvite.js.map +1 -0
  217. package/package.json +69 -31
  218. package/dist/components/Clipboard.js +0 -64
  219. package/dist/shared/api.js +0 -90
  220. package/dist/tests/TestVortexInvite.js +0 -134
  221. package/dist/types/components/Clipboard.d.ts +0 -16
  222. package/dist/types/components/Clipboard.d.ts.map +0 -1
  223. package/dist/types/shared/InvitationResult.d.ts +0 -24
  224. package/dist/types/shared/InvitationResult.d.ts.map +0 -1
  225. package/dist/types/shared/api.d.ts +0 -14
  226. package/dist/types/shared/api.d.ts.map +0 -1
  227. package/dist/types/tests/TestVortexInvite.d.ts +0 -4
  228. package/dist/types/tests/TestVortexInvite.d.ts.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VrtxSearchBox.js","sourceRoot":"","sources":["../../src/components/VrtxSearchBox.tsx"],"names":[],"mappings":"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","sourcesContent":["import React, { useState, useCallback } from 'react';\nimport {\n View,\n Text,\n StyleSheet,\n FlatList,\n TouchableOpacity,\n ActivityIndicator,\n Image,\n TextInput,\n Platform,\n} from 'react-native';\nimport { FindFriendsContact } from '../types/findFriends';\nimport { SearchBoxConfig } from '../types/searchBox';\nimport type { SimpleAnalyticsEvent } from '../utils/analytics';\nimport type { IconRendererProps } from './InviteFormCore';\n\nconst isWeb = Platform.OS === 'web';\n\n// Parse CSS linear-gradient to extract first color for fallback on native\nfunction parseGradientFirstColor(gradientString: string): string | null {\n if (!gradientString || !gradientString.includes('linear-gradient')) {\n return null;\n }\n\n const stopsRegex = /(rgba?\\([^)]+\\)|#[0-9a-fA-F]{3,8}|[a-z]+)\\s+(\\d+)%/i;\n const match = stopsRegex.exec(gradientString);\n\n if (match) {\n return match[1].trim();\n }\n\n return null;\n}\n\nexport interface VrtxSearchBoxProps {\n block: any;\n /** Search Box configuration with callbacks */\n searchBoxConfig?: SearchBoxConfig;\n /** Function to create an invitation with internal ID target type */\n createUserIdInvitation?: (userId: string, name?: string, avatarUrl?: string, metadata?: Record<string, unknown>) => Promise<void>;\n /** Trigger haptic feedback */\n triggerHaptic?: (style: 'light' | 'medium' | 'heavy') => Promise<void>;\n /** Callback to emit analytics events */\n onAnalyticsEvent?: (event: SimpleAnalyticsEvent) => void;\n /** Function to render icons (from InviteFormCore) */\n renderIcon?: (props: IconRendererProps) => React.ReactNode;\n /** Theme colors from widget configuration */\n theme?: {\n primaryBackground?: string;\n primaryForeground?: string;\n secondaryBackground?: string;\n secondaryForeground?: string;\n foreground?: string;\n border?: string;\n };\n}\n\nexport function VrtxSearchBox({\n block,\n searchBoxConfig,\n createUserIdInvitation,\n triggerHaptic,\n onAnalyticsEvent,\n renderIcon,\n theme,\n}: VrtxSearchBoxProps) {\n const [query, setQuery] = useState('');\n const [results, setResults] = useState<FindFriendsContact[] | null>(null);\n const [isSearching, setIsSearching] = useState(false);\n const [actionInProgress, setActionInProgress] = useState<string | null>(null);\n\n // Get title from block title attribute (configured in Styles tab)\n const title = block?.attributes?.title || '';\n\n // Extract customization from block settings (editor) or config props, with defaults\n const blockCustomizations = block?.settings?.customizations;\n const placeholder =\n blockCustomizations?.searchPlaceholder?.textContent ??\n 'Search...';\n const connectButtonText =\n blockCustomizations?.connectButton?.textContent ??\n searchBoxConfig?.connectButtonText ??\n 'Connect';\n const noResultsMessage =\n blockCustomizations?.noResultsMessage?.textContent ??\n searchBoxConfig?.noResultsMessage ??\n 'No results found';\n\n // Helper to get theme option value from block.theme.options\n const getBlockThemeValue = (key: string): string | undefined => {\n const options = block?.theme?.options;\n if (!options || !Array.isArray(options)) return undefined;\n const option = options.find((opt: any) => opt.key === key);\n return option?.value || undefined;\n };\n\n // Theme colors with defaults\n const colors = {\n primaryBackground: theme?.primaryBackground ?? '#6291d5',\n primaryForeground: theme?.primaryForeground ?? '#ffffff',\n secondaryBackground: theme?.secondaryBackground ?? '#ffffff',\n secondaryForeground: theme?.secondaryForeground ?? '#353e5c',\n foreground: theme?.foreground ?? '#334153',\n border: theme?.border ?? '#cccccc',\n };\n\n // Button styles from block.theme.options (microTheme)\n const connectButtonStyles = {\n background:\n getBlockThemeValue('--vrtx-search-box-connect-button-background') ||\n colors.primaryBackground,\n color:\n getBlockThemeValue('--vrtx-search-box-connect-button-color') ||\n colors.primaryForeground,\n borderRadius: getBlockThemeValue('--vrtx-search-box-connect-button-border-radius'),\n border: getBlockThemeValue('--vrtx-search-box-connect-button-border'),\n padding: getBlockThemeValue('--vrtx-search-box-connect-button-padding'),\n fontSize: getBlockThemeValue('--vrtx-search-box-connect-button-font-size'),\n fontWeight: getBlockThemeValue('--vrtx-search-box-connect-button-font-weight'),\n };\n\n // Avatar/initials styles from block.theme.options (microTheme)\n const avatarStyles = {\n background:\n getBlockThemeValue('--vrtx-search-box-avatar-background') || colors.primaryBackground,\n color: getBlockThemeValue('--vrtx-search-box-avatar-color') || colors.primaryForeground,\n };\n\n // Contact name styles from block.theme.options (microTheme)\n const contactNameStyles = {\n color: getBlockThemeValue('--vrtx-search-box-contact-name-color') || colors.foreground,\n fontFamily: getBlockThemeValue('--vrtx-search-box-contact-name-font-family'),\n fontSize: getBlockThemeValue('--vrtx-search-box-contact-name-font-size'),\n fontWeight: getBlockThemeValue('--vrtx-search-box-contact-name-font-weight'),\n };\n\n // Contact subtitle styles from block.theme.options (microTheme)\n const contactSubtitleStyles = {\n color:\n getBlockThemeValue('--vrtx-search-box-contact-subtitle-color') ||\n colors.secondaryForeground,\n fontFamily: getBlockThemeValue('--vrtx-search-box-contact-subtitle-font-family'),\n fontSize: getBlockThemeValue('--vrtx-search-box-contact-subtitle-font-size'),\n };\n\n // Title styles from block.theme.options (microTheme)\n const titleStyles = {\n color: getBlockThemeValue('--vrtx-search-box-title-color') || colors.foreground,\n fontFamily: getBlockThemeValue('--vrtx-search-box-title-font-family'),\n fontSize: getBlockThemeValue('--vrtx-search-box-title-font-size'),\n fontWeight: getBlockThemeValue('--vrtx-search-box-title-font-weight'),\n };\n\n // Search button styles from block.theme.options (microTheme)\n const searchButtonStyles = {\n background:\n getBlockThemeValue('--vrtx-search-box-search-button-background') ||\n colors.primaryBackground,\n color:\n getBlockThemeValue('--vrtx-search-box-search-button-color') ||\n colors.primaryForeground,\n borderRadius: getBlockThemeValue('--vrtx-search-box-search-button-border-radius'),\n border: getBlockThemeValue('--vrtx-search-box-search-button-border'),\n padding: getBlockThemeValue('--vrtx-search-box-search-button-padding'),\n };\n\n // Handle search button press\n const handleSearch = useCallback(async () => {\n if (!searchBoxConfig?.onSearch || !query.trim()) return;\n\n setIsSearching(true);\n try {\n const searchResults = await searchBoxConfig.onSearch(query.trim());\n setResults(searchResults);\n } catch (err) {\n console.error('[VrtxSearchBox] Search failed:', err);\n setResults([]);\n } finally {\n setIsSearching(false);\n }\n }, [searchBoxConfig, query]);\n\n // Handle Connect button press\n const handleConnect = useCallback(\n async (contact: FindFriendsContact) => {\n if (!searchBoxConfig?.onConnect) return;\n\n setActionInProgress(contact.userId);\n await triggerHaptic?.('light');\n\n try {\n const shouldCreateInvitation = await searchBoxConfig.onConnect(contact);\n\n if (shouldCreateInvitation && createUserIdInvitation) {\n await createUserIdInvitation(contact.userId, contact.name, contact.avatarUrl, contact.metadata);\n searchBoxConfig.onInvitationCreated?.(contact);\n }\n } catch (err) {\n console.error('[VrtxSearchBox] Connect failed:', err);\n searchBoxConfig.onInvitationError?.(\n contact,\n err instanceof Error ? err : new Error(String(err))\n );\n } finally {\n setActionInProgress(null);\n }\n },\n [searchBoxConfig, createUserIdInvitation, triggerHaptic]\n );\n\n // Render avatar or initials\n const renderAvatar = (contact: FindFriendsContact) => {\n if (contact.avatarUrl) {\n return <Image source={{ uri: contact.avatarUrl }} style={styles.avatar} />;\n }\n\n const initials = contact.name\n .split(' ')\n .map((part) => part[0])\n .join('')\n .toUpperCase()\n .slice(0, 2);\n\n const avatarBackground = avatarStyles.background;\n const isAvatarGradient = avatarBackground?.includes('linear-gradient');\n const avatarBgStyle: any = {};\n\n if (isWeb && avatarBackground) {\n avatarBgStyle.background = avatarBackground;\n } else if (isAvatarGradient && avatarBackground) {\n const fallbackColor = parseGradientFirstColor(avatarBackground);\n avatarBgStyle.backgroundColor = fallbackColor || colors.primaryBackground;\n } else {\n avatarBgStyle.backgroundColor = avatarBackground || colors.primaryBackground;\n }\n\n return (\n <View style={[styles.avatarPlaceholder, avatarBgStyle]}>\n <Text style={[styles.avatarInitials, { color: avatarStyles.color }]}>{initials}</Text>\n </View>\n );\n };\n\n // Helper to parse CSS padding string to React Native padding object\n const parsePadding = (paddingStr: string | undefined) => {\n if (!paddingStr) return {};\n const parts = paddingStr.trim().split(/\\s+/);\n if (parts.length === 1) {\n const val = parseInt(parts[0], 10);\n return isNaN(val) ? {} : { paddingVertical: val, paddingHorizontal: val };\n }\n if (parts.length === 2) {\n const vertical = parseInt(parts[0], 10);\n const horizontal = parseInt(parts[1], 10);\n return {\n ...(isNaN(vertical) ? {} : { paddingVertical: vertical }),\n ...(isNaN(horizontal) ? {} : { paddingHorizontal: horizontal }),\n };\n }\n return {};\n };\n\n // Helper to parse border string (e.g., \"1px solid #ccc\")\n const parseBorder = (borderStr: string | undefined) => {\n if (!borderStr) return {};\n const match = borderStr.match(/^(\\d+)px\\s+(\\w+)\\s+(.+)$/);\n if (match) {\n return {\n borderWidth: parseInt(match[1], 10),\n borderColor: match[3],\n };\n }\n return {};\n };\n\n // Render a single contact item\n const renderContactItem = ({ item }: { item: FindFriendsContact }) => {\n const isLoading = actionInProgress === item.userId;\n\n const backgroundValue = connectButtonStyles.background;\n const isGradient = backgroundValue?.includes('linear-gradient');\n\n const dynamicButtonStyle: any = {\n ...(connectButtonStyles.borderRadius\n ? { borderRadius: parseInt(connectButtonStyles.borderRadius, 10) }\n : {}),\n ...parsePadding(connectButtonStyles.padding),\n ...parseBorder(connectButtonStyles.border),\n };\n\n if (isWeb && backgroundValue) {\n dynamicButtonStyle.background = backgroundValue;\n } else if (isGradient && backgroundValue) {\n const fallbackColor = parseGradientFirstColor(backgroundValue);\n dynamicButtonStyle.backgroundColor = fallbackColor || colors.primaryBackground;\n } else {\n dynamicButtonStyle.backgroundColor = backgroundValue || colors.primaryBackground;\n }\n\n const dynamicTextStyle: any = {\n color: connectButtonStyles.color,\n ...(connectButtonStyles.fontSize\n ? { fontSize: parseInt(connectButtonStyles.fontSize, 10) }\n : {}),\n ...(connectButtonStyles.fontWeight ? { fontWeight: connectButtonStyles.fontWeight } : {}),\n };\n\n const dynamicNameStyle: any = {\n color: contactNameStyles.color,\n ...(contactNameStyles.fontFamily ? { fontFamily: contactNameStyles.fontFamily } : {}),\n ...(contactNameStyles.fontSize\n ? { fontSize: parseInt(contactNameStyles.fontSize, 10) }\n : {}),\n ...(contactNameStyles.fontWeight ? { fontWeight: contactNameStyles.fontWeight } : {}),\n };\n\n const dynamicSubtitleStyle: any = {\n color: contactSubtitleStyles.color,\n ...(contactSubtitleStyles.fontFamily\n ? { fontFamily: contactSubtitleStyles.fontFamily }\n : {}),\n ...(contactSubtitleStyles.fontSize\n ? { fontSize: parseInt(contactSubtitleStyles.fontSize, 10) }\n : {}),\n };\n\n return (\n <View style={styles.contactItem}>\n {renderAvatar(item)}\n <View style={styles.contactInfo}>\n <Text style={[styles.contactName, dynamicNameStyle]} numberOfLines={1}>\n {item.name}\n </Text>\n {item.subtitle && (\n <Text style={[styles.contactSubtitle, dynamicSubtitleStyle]} numberOfLines={1}>\n {item.subtitle}\n </Text>\n )}\n </View>\n <TouchableOpacity\n style={[styles.actionButton, dynamicButtonStyle]}\n onPress={() => handleConnect(item)}\n disabled={isLoading}\n activeOpacity={0.7}\n >\n {isLoading ? (\n <ActivityIndicator size=\"small\" color={connectButtonStyles.color} />\n ) : (\n <Text style={[styles.actionButtonText, dynamicTextStyle]}>{connectButtonText}</Text>\n )}\n </TouchableOpacity>\n </View>\n );\n };\n\n // Build dynamic title style\n const dynamicTitleStyle: any = {\n color: titleStyles.color,\n ...(titleStyles.fontFamily ? { fontFamily: titleStyles.fontFamily } : {}),\n ...(titleStyles.fontSize ? { fontSize: parseInt(titleStyles.fontSize, 10) } : {}),\n ...(titleStyles.fontWeight ? { fontWeight: titleStyles.fontWeight } : {}),\n };\n\n // Show placeholder if no config provided\n if (!searchBoxConfig) {\n return (\n <View style={styles.container}>\n {title ? (\n <Text style={[styles.title, dynamicTitleStyle]}>{title}</Text>\n ) : null}\n <Text style={[styles.placeholderText, { color: colors.secondaryForeground }]}>\n Search Box component - provide searchBoxConfig to enable\n </Text>\n </View>\n );\n }\n\n return (\n <View style={styles.listContainer}>\n {title ? (\n <Text style={[styles.title, dynamicTitleStyle]}>{title}</Text>\n ) : null}\n\n {/* Search input row */}\n <View style={styles.searchRow}>\n <View style={[styles.searchContainer, { borderColor: colors.border }]}>\n <TextInput\n style={[styles.searchInput, { color: colors.foreground }]}\n placeholder={placeholder}\n placeholderTextColor={colors.secondaryForeground}\n value={query}\n onChangeText={setQuery}\n onSubmitEditing={handleSearch}\n autoCapitalize=\"none\"\n autoCorrect={false}\n returnKeyType=\"search\"\n />\n </View>\n <TouchableOpacity\n style={[\n styles.searchButton,\n (() => {\n const btnStyle: any = {};\n const bg = searchButtonStyles.background;\n const isGradient = bg?.includes('linear-gradient');\n if (isWeb && bg) {\n btnStyle.background = bg;\n } else if (isGradient && bg) {\n const fallback = parseGradientFirstColor(bg);\n btnStyle.backgroundColor = fallback || colors.primaryBackground;\n } else {\n btnStyle.backgroundColor = bg || colors.primaryBackground;\n }\n if (searchButtonStyles.borderRadius) {\n btnStyle.borderRadius = parseInt(searchButtonStyles.borderRadius, 10);\n }\n if (searchButtonStyles.border) {\n const match = searchButtonStyles.border.match(/^(\\d+)px\\s+(\\w+)\\s+(.+)$/);\n if (match) {\n btnStyle.borderWidth = parseInt(match[1], 10);\n btnStyle.borderColor = match[3];\n }\n }\n if (searchButtonStyles.padding) {\n const val = parseInt(searchButtonStyles.padding, 10);\n if (!isNaN(val)) {\n btnStyle.padding = val;\n }\n }\n return btnStyle;\n })(),\n ]}\n onPress={handleSearch}\n disabled={isSearching || !query.trim()}\n activeOpacity={0.7}\n >\n {isSearching ? (\n <ActivityIndicator size=\"small\" color={searchButtonStyles.color} />\n ) : renderIcon ? (\n renderIcon({ name: 'search', size: 20, color: searchButtonStyles.color || '#ffffff' })\n ) : (\n <View style={styles.searchIconContainer}>\n <View\n style={[\n styles.searchIconCircle,\n {\n borderColor: searchButtonStyles.color || '#ffffff',\n },\n ]}\n />\n <View\n style={[\n styles.searchIconHandle,\n {\n backgroundColor: searchButtonStyles.color || '#ffffff',\n },\n ]}\n />\n </View>\n )}\n </TouchableOpacity>\n </View>\n\n {/* Results */}\n {results !== null && results.length === 0 && !isSearching && (\n <View style={styles.emptyContainer}>\n <Text style={[styles.emptyText, { color: colors.secondaryForeground }]}>\n {noResultsMessage}\n </Text>\n </View>\n )}\n\n {results !== null && results.length > 0 && (\n <FlatList\n data={results}\n keyExtractor={(item) => item.userId}\n renderItem={renderContactItem}\n showsVerticalScrollIndicator={false}\n contentContainerStyle={styles.listContent}\n />\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n container: {\n padding: 16,\n alignItems: 'center',\n justifyContent: 'center',\n minHeight: 120,\n },\n listContainer: {\n flex: 1,\n },\n title: {\n fontSize: 18,\n fontWeight: '600',\n marginBottom: 16,\n },\n placeholderText: {\n fontSize: 14,\n textAlign: 'center',\n },\n searchRow: {\n flexDirection: 'row',\n alignItems: 'center',\n marginBottom: 12,\n },\n searchContainer: {\n flex: 1,\n borderWidth: 1,\n borderRadius: 8,\n paddingHorizontal: 12,\n height: 44,\n justifyContent: 'center',\n },\n searchInput: {\n fontSize: 16,\n height: 44,\n },\n searchButton: {\n width: 44,\n height: 44,\n borderRadius: 8,\n marginLeft: 8,\n alignItems: 'center',\n justifyContent: 'center',\n },\n searchIconContainer: {\n width: 20,\n height: 20,\n position: 'relative',\n },\n searchIconCircle: {\n width: 14,\n height: 14,\n borderRadius: 7,\n borderWidth: 2.5,\n position: 'absolute',\n top: 0,\n left: 0,\n },\n searchIconHandle: {\n width: 7,\n height: 2.5,\n borderRadius: 1.25,\n position: 'absolute',\n bottom: 2,\n right: 0,\n transform: [{ rotate: '45deg' }],\n },\n emptyContainer: {\n padding: 16,\n alignItems: 'center',\n justifyContent: 'center',\n },\n emptyText: {\n fontSize: 14,\n textAlign: 'center',\n },\n listContent: {\n paddingBottom: 16,\n },\n contactItem: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 12,\n },\n avatar: {\n width: 44,\n height: 44,\n borderRadius: 22,\n },\n avatarPlaceholder: {\n width: 44,\n height: 44,\n borderRadius: 22,\n alignItems: 'center',\n justifyContent: 'center',\n },\n avatarInitials: {\n fontSize: 16,\n fontWeight: '600',\n },\n contactInfo: {\n flex: 1,\n marginLeft: 12,\n marginRight: 12,\n },\n contactName: {\n fontSize: 16,\n fontWeight: '500',\n },\n contactSubtitle: {\n fontSize: 13,\n marginTop: 2,\n },\n actionButton: {\n paddingHorizontal: 16,\n paddingVertical: 8,\n borderRadius: 8,\n minWidth: 80,\n alignItems: 'center',\n justifyContent: 'center',\n },\n actionButtonText: {\n fontSize: 14,\n fontWeight: '600',\n },\n});\n"]}
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.VrtxSelect = VrtxSelect;
7
+ const react_1 = __importDefault(require("react"));
8
+ const react_native_1 = require("react-native");
9
+ function VrtxSelect({ block }) {
10
+ var _a;
11
+ // Simple select - would need proper state management for production
12
+ return (<react_native_1.View key={block.id} style={styles.section}>
13
+ <react_native_1.Text style={styles.subtitle}>{((_a = block.attributes) === null || _a === void 0 ? void 0 : _a.label) || 'Select an option'}</react_native_1.Text>
14
+ {/* Placeholder - would render actual select component */}
15
+ </react_native_1.View>);
16
+ }
17
+ const styles = react_native_1.StyleSheet.create({
18
+ section: {
19
+ marginBottom: 24,
20
+ },
21
+ subtitle: {
22
+ fontSize: 16,
23
+ color: '#666',
24
+ marginBottom: 16,
25
+ },
26
+ });
27
+ //# sourceMappingURL=VrtxSelect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VrtxSelect.js","sourceRoot":"","sources":["../../src/components/VrtxSelect.tsx"],"names":[],"mappings":";;;;;AAOA,gCAQC;AAfD,kDAA0B;AAC1B,+CAAsD;AAMtD,SAAgB,UAAU,CAAC,EAAE,KAAK,EAAmB;;IACnD,oEAAoE;IACpE,OAAO,CACL,CAAC,mBAAI,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACzC;MAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAA,MAAA,KAAK,CAAC,UAAU,0CAAE,KAAK,KAAI,kBAAkB,CAAC,EAAE,mBAAI,CACnF;MAAA,CAAC,wDAAwD,CAC3D;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC;AAED,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,OAAO,EAAE;QACP,YAAY,EAAE,EAAE;KACjB;IACD,QAAQ,EAAE;QACR,QAAQ,EAAE,EAAE;QACZ,KAAK,EAAE,MAAM;QACb,YAAY,EAAE,EAAE;KACjB;CACF,CAAC,CAAC","sourcesContent":["import React from 'react';\nimport { View, Text, StyleSheet } from 'react-native';\n\nexport interface VrtxSelectProps {\n block: any;\n}\n\nexport function VrtxSelect({ block }: VrtxSelectProps) {\n // Simple select - would need proper state management for production\n return (\n <View key={block.id} style={styles.section}>\n <Text style={styles.subtitle}>{block.attributes?.label || 'Select an option'}</Text>\n {/* Placeholder - would render actual select component */}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n section: {\n marginBottom: 24,\n },\n subtitle: {\n fontSize: 16,\n color: '#666',\n marginBottom: 16,\n },\n});\n"]}
@@ -0,0 +1,435 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ var __importDefault = (this && this.__importDefault) || function (mod) {
12
+ return (mod && mod.__esModule) ? mod : { "default": mod };
13
+ };
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.VrtxShareOptions = VrtxShareOptions;
16
+ const react_1 = __importDefault(require("react"));
17
+ const react_native_1 = require("react-native");
18
+ const VortexModulesContext_1 = require("../context/VortexModulesContext");
19
+ const isWeb = react_native_1.Platform.OS === 'web';
20
+ const ButtonWrapper = ({ children, style, gradientString, onPress, disabled, wrapperStyle, }) => {
21
+ // Get the gradient module and loaders from context
22
+ const { gradientModule, loaders } = (0, VortexModulesContext_1.useVortexModules)();
23
+ const styleArray = Array.isArray(style) ? style : [style];
24
+ const combinedStyle = wrapperStyle ? [wrapperStyle, ...styleArray] : styleArray;
25
+ // On web, use CSS gradients directly
26
+ if (gradientString && isWeb) {
27
+ return (<react_native_1.TouchableOpacity style={[...combinedStyle, { background: gradientString }]} onPress={onPress} disabled={disabled} activeOpacity={0.7}>
28
+ {children}
29
+ </react_native_1.TouchableOpacity>);
30
+ }
31
+ // On native, try to use gradient library if specified
32
+ if (gradientString && gradientModule && loaders) {
33
+ const GradientComponent = loaders.loadGradientComponent(gradientModule);
34
+ const parsed = loaders.parseCSSLinearGradient(gradientString);
35
+ if (GradientComponent && parsed) {
36
+ const points = loaders.angleToGradientPoints(parsed.angle);
37
+ return (<react_native_1.TouchableOpacity onPress={onPress} disabled={disabled} activeOpacity={0.7} style={wrapperStyle}>
38
+ <GradientComponent colors={parsed.colors} locations={parsed.locations} start={points.start} end={points.end} style={styleArray}>
39
+ {children}
40
+ </GradientComponent>
41
+ </react_native_1.TouchableOpacity>);
42
+ }
43
+ }
44
+ // Fallback: solid color from first gradient stop
45
+ const fallbackColor = gradientString && loaders ? loaders.parseGradientFirstColor(gradientString) : null;
46
+ const finalStyle = fallbackColor
47
+ ? [...combinedStyle, { backgroundColor: fallbackColor }]
48
+ : combinedStyle;
49
+ return (<react_native_1.TouchableOpacity style={finalStyle} onPress={onPress} disabled={disabled} activeOpacity={0.7}>
50
+ {children}
51
+ </react_native_1.TouchableOpacity>);
52
+ };
53
+ function VrtxShareOptions({ block, renderIcon, isCopyLinkEnabled, isShareEnabled, isEmailShareEnabled, isSmsEnabled, isTwitterDmsEnabled, isInstagramDmsEnabled, isWhatsAppEnabled, isLineEnabled, isLineLiffEnabled, isQrCodeEnabled, isFacebookMessengerEnabled, isTelegramEnabled, isDiscordEnabled, handleCopyLink, handleShare, handleEmailShare, handleSmsShare, handleTwitterShare, handleInstagramShare, handleWhatsAppShare, handleLineShare, handleLineLiffShare, handleQrCode, handleFacebookMessengerShare, handleTelegramShare, handleDiscordShare, triggerHaptic, loadingCopy, loadingShare, copySuccess, shareSuccess, isEditMode = false, shareOptionsOrder = [], }) {
54
+ var _a, _b;
55
+ // Get loaders from context
56
+ const { loaders } = (0, VortexModulesContext_1.useVortexModules)();
57
+ const handleCopyLinkWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
58
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
59
+ yield handleCopyLink();
60
+ });
61
+ const handleShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
62
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
63
+ yield handleShare();
64
+ });
65
+ const handleEmailShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
66
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
67
+ yield handleEmailShare();
68
+ });
69
+ const handleSmsShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
70
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
71
+ yield handleSmsShare();
72
+ });
73
+ const handleTwitterShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
74
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
75
+ yield handleTwitterShare();
76
+ });
77
+ const handleInstagramShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
78
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
79
+ yield handleInstagramShare();
80
+ });
81
+ const handleWhatsAppShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
82
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
83
+ yield handleWhatsAppShare();
84
+ });
85
+ const handleLineShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
86
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
87
+ yield handleLineShare();
88
+ });
89
+ const handleLineLiffShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
90
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
91
+ yield handleLineLiffShare();
92
+ });
93
+ const handleQrCodeWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
94
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
95
+ yield handleQrCode();
96
+ });
97
+ const handleFacebookMessengerShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
98
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
99
+ yield handleFacebookMessengerShare();
100
+ });
101
+ const handleTelegramShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
102
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
103
+ yield handleTelegramShare();
104
+ });
105
+ const handleDiscordShareWithHaptics = () => __awaiter(this, void 0, void 0, function* () {
106
+ yield (triggerHaptic === null || triggerHaptic === void 0 ? void 0 : triggerHaptic('light'));
107
+ yield handleDiscordShare();
108
+ });
109
+ const showCopyLink = isCopyLinkEnabled();
110
+ const showShare = isShareEnabled();
111
+ const showEmail = isEmailShareEnabled();
112
+ const showSms = isSmsEnabled();
113
+ const showTwitter = isTwitterDmsEnabled();
114
+ const showInstagram = isInstagramDmsEnabled();
115
+ const showWhatsApp = isWhatsAppEnabled();
116
+ const showLine = isLineEnabled();
117
+ const showLineLiff = isLineLiffEnabled();
118
+ const showQrCode = isQrCodeEnabled();
119
+ const showFacebookMessenger = isFacebookMessengerEnabled();
120
+ const showTelegram = isTelegramEnabled();
121
+ const showDiscord = isDiscordEnabled();
122
+ if (!showCopyLink &&
123
+ !showShare &&
124
+ !showEmail &&
125
+ !showSms &&
126
+ !showTwitter &&
127
+ !showInstagram &&
128
+ !showWhatsApp &&
129
+ !showLine &&
130
+ !showLineLiff &&
131
+ !showQrCode &&
132
+ !showFacebookMessenger &&
133
+ !showTelegram &&
134
+ !showDiscord)
135
+ return null;
136
+ // Convert theme options to inline styles
137
+ const themeToStyle = (theme) => {
138
+ if (!(theme === null || theme === void 0 ? void 0 : theme.options) || !Array.isArray(theme.options))
139
+ return {};
140
+ const style = {};
141
+ theme.options.forEach((option) => {
142
+ if (!option.value)
143
+ return;
144
+ const { key, value } = option;
145
+ // Map CSS custom properties to React Native style properties
146
+ // Example: --vrtx-icon-button-background -> background
147
+ // Example: --vrtx-icon-button-color -> color
148
+ // Handle padding and margin with shorthand expansion
149
+ if (key === '--vrtx-icon-button-padding' && value) {
150
+ const parts = value.trim().split(/\s+/);
151
+ if (parts.length === 1) {
152
+ style.paddingTop = style.paddingRight = style.paddingBottom = style.paddingLeft = value;
153
+ }
154
+ else if (parts.length === 2) {
155
+ style.paddingTop = style.paddingBottom = parts[0];
156
+ style.paddingRight = style.paddingLeft = parts[1];
157
+ }
158
+ else if (parts.length === 3) {
159
+ style.paddingTop = parts[0];
160
+ style.paddingRight = style.paddingLeft = parts[1];
161
+ style.paddingBottom = parts[2];
162
+ }
163
+ else if (parts.length === 4) {
164
+ style.paddingTop = parts[0];
165
+ style.paddingRight = parts[1];
166
+ style.paddingBottom = parts[2];
167
+ style.paddingLeft = parts[3];
168
+ }
169
+ return;
170
+ }
171
+ if (key === '--vrtx-icon-button-margin' && value) {
172
+ const parts = value.trim().split(/\s+/);
173
+ if (parts.length === 1) {
174
+ style.marginTop = style.marginRight = style.marginBottom = style.marginLeft = value;
175
+ }
176
+ else if (parts.length === 2) {
177
+ style.marginTop = style.marginBottom = parts[0];
178
+ style.marginRight = style.marginLeft = parts[1];
179
+ }
180
+ else if (parts.length === 3) {
181
+ style.marginTop = parts[0];
182
+ style.marginRight = style.marginLeft = parts[1];
183
+ style.marginBottom = parts[2];
184
+ }
185
+ else if (parts.length === 4) {
186
+ style.marginTop = parts[0];
187
+ style.marginRight = parts[1];
188
+ style.marginBottom = parts[2];
189
+ style.marginLeft = parts[3];
190
+ }
191
+ return;
192
+ }
193
+ const propertyMap = {
194
+ '--vrtx-icon-button-color': 'color',
195
+ '--vrtx-icon-button-background': 'background',
196
+ '--vrtx-icon-button-background-color': 'backgroundColor',
197
+ '--vrtx-icon-button-text-align': 'textAlign',
198
+ '--vrtx-icon-button-font-family': 'fontFamily',
199
+ '--vrtx-icon-button-font-size': 'fontSize',
200
+ '--vrtx-icon-button-font-weight': 'fontWeight',
201
+ '--vrtx-icon-button-text-decoration': 'textDecoration',
202
+ '--vrtx-icon-button-text-transform': 'textTransform',
203
+ '--vrtx-icon-button-border': 'border',
204
+ '--vrtx-icon-button-border-radius': 'borderRadius',
205
+ '--vrtx-icon-button-display': 'display',
206
+ };
207
+ const styleProperty = propertyMap[key];
208
+ if (styleProperty) {
209
+ style[styleProperty] = value;
210
+ }
211
+ });
212
+ return style;
213
+ };
214
+ // Extract styles from both block.style and block.theme
215
+ const blockStyle = (block === null || block === void 0 ? void 0 : block.style) || {};
216
+ const themeStyle = themeToStyle(block === null || block === void 0 ? void 0 : block.theme);
217
+ // Merge styles (theme styles take precedence)
218
+ const mergedStyle = Object.assign(Object.assign({}, blockStyle), themeStyle);
219
+ // Extract gradient string and fallback color
220
+ // On native, 'background' is a CSS property that doesn't work — convert solid colors to 'backgroundColor'
221
+ const rawBackground = mergedStyle.background || null;
222
+ const isGradient = rawBackground === null || rawBackground === void 0 ? void 0 : rawBackground.includes('gradient');
223
+ const gradientString = isGradient ? rawBackground : null;
224
+ const fallbackColor = isGradient
225
+ ? loaders === null || loaders === void 0 ? void 0 : loaders.parseGradientFirstColor(rawBackground)
226
+ : rawBackground || mergedStyle.backgroundColor;
227
+ // Extract icon color (use text color from merged style, fallback to #333)
228
+ const iconColor = mergedStyle.color || '#333';
229
+ // Create text style that removes background
230
+ const textStyle = Object.assign(Object.assign({}, mergedStyle), { backgroundColor: 'transparent', background: 'transparent' });
231
+ // Map textAlign to flexbox justifyContent for button content alignment
232
+ const getJustifyContent = (align) => {
233
+ switch (align) {
234
+ case 'left':
235
+ case 'start':
236
+ return 'flex-start';
237
+ case 'right':
238
+ case 'end':
239
+ return 'flex-end';
240
+ default:
241
+ return 'center';
242
+ }
243
+ };
244
+ const buttonJustifyContent = getJustifyContent(mergedStyle.textAlign);
245
+ // Extract label from block attributes
246
+ const label = (_a = block === null || block === void 0 ? void 0 : block.attributes) === null || _a === void 0 ? void 0 : _a.label;
247
+ // Extract customizations from block settings
248
+ const customizations = ((_b = block === null || block === void 0 ? void 0 : block.settings) === null || _b === void 0 ? void 0 : _b.customizations) || {};
249
+ // Helper function to get button text from customizations with flat key resolution
250
+ const getButtonText = (optionKey, defaultLabel) => {
251
+ var _a, _b, _c, _d;
252
+ if (!customizations) {
253
+ return defaultLabel;
254
+ }
255
+ // Priority order (most specific to least specific):
256
+ // 1. Flat key format with host (e.g., 'mobile.copyLink') - PREFERRED for new saves
257
+ const flatKey = `mobile.${optionKey}`;
258
+ if (((_a = customizations[flatKey]) === null || _a === void 0 ? void 0 : _a.textContent) !== undefined) {
259
+ const textContent = (_b = customizations[flatKey]) === null || _b === void 0 ? void 0 : _b.textContent;
260
+ return textContent === null || textContent === undefined ? defaultLabel : textContent;
261
+ }
262
+ // 2. Legacy format: textContent directly on customization key (e.g., 'copyLink')
263
+ // This is for data already in production without host prefix
264
+ const legacyCustomization = customizations[optionKey];
265
+ if ((legacyCustomization === null || legacyCustomization === void 0 ? void 0 : legacyCustomization.textContent) !== undefined) {
266
+ const textContent = legacyCustomization.textContent;
267
+ return textContent === null || textContent === undefined ? defaultLabel : textContent;
268
+ }
269
+ // 3. Nested object format (customizations.mobile.copyLink) - old legacy format
270
+ if (customizations.mobile) {
271
+ const textContent = (_d = (_c = customizations.mobile) === null || _c === void 0 ? void 0 : _c[optionKey]) === null || _d === void 0 ? void 0 : _d.textContent;
272
+ if (textContent !== undefined) {
273
+ return textContent === null ? defaultLabel : textContent;
274
+ }
275
+ }
276
+ return defaultLabel;
277
+ };
278
+ // Map of option keys to their button configurations
279
+ const buttonConfigs = {
280
+ copyLink: {
281
+ show: showCopyLink,
282
+ icon: 'link',
283
+ label: getButtonText('copyLink', 'Copy Link'),
284
+ onPress: handleCopyLinkWithHaptics,
285
+ isLoading: loadingCopy,
286
+ successLabel: '✓ Copied!',
287
+ showSuccess: copySuccess,
288
+ },
289
+ nativeShareSheet: {
290
+ show: showShare,
291
+ icon: 'share',
292
+ label: getButtonText('nativeShareSheet', 'Share Link'),
293
+ onPress: handleShareWithHaptics,
294
+ isLoading: loadingShare,
295
+ successLabel: '✓ Shared!',
296
+ showSuccess: shareSuccess,
297
+ },
298
+ email: {
299
+ show: showEmail,
300
+ icon: 'email',
301
+ label: getButtonText('email', 'Share via Email'),
302
+ onPress: handleEmailShareWithHaptics,
303
+ },
304
+ sms: {
305
+ show: showSms,
306
+ icon: 'sms',
307
+ label: getButtonText('sms', 'Share via SMS'),
308
+ onPress: handleSmsShareWithHaptics,
309
+ },
310
+ twitterDms: {
311
+ show: showTwitter,
312
+ icon: 'x-twitter',
313
+ label: getButtonText('twitterDms', 'Share via X'),
314
+ onPress: handleTwitterShareWithHaptics,
315
+ },
316
+ instagramDms: {
317
+ show: showInstagram,
318
+ icon: 'instagram',
319
+ label: getButtonText('instagramDms', 'Share via Instagram'),
320
+ onPress: handleInstagramShareWithHaptics,
321
+ },
322
+ whatsApp: {
323
+ show: showWhatsApp,
324
+ icon: 'whatsapp',
325
+ label: getButtonText('whatsApp', 'Share via WhatsApp'),
326
+ onPress: handleWhatsAppShareWithHaptics,
327
+ },
328
+ line: {
329
+ show: showLine,
330
+ icon: 'line',
331
+ label: getButtonText('line', 'Share via LINE'),
332
+ onPress: handleLineShareWithHaptics,
333
+ },
334
+ lineLiff: {
335
+ show: showLineLiff,
336
+ icon: 'line',
337
+ label: getButtonText('lineLiff', 'Share via LINE (LIFF)'),
338
+ onPress: handleLineLiffShareWithHaptics,
339
+ },
340
+ qrCode: {
341
+ show: showQrCode,
342
+ icon: 'qr-code',
343
+ label: getButtonText('qrCode', 'Show QR Code'),
344
+ onPress: handleQrCodeWithHaptics,
345
+ },
346
+ facebookMessenger: {
347
+ show: showFacebookMessenger,
348
+ icon: 'facebook-messenger',
349
+ label: getButtonText('facebookMessenger', 'Share via Messenger'),
350
+ onPress: handleFacebookMessengerShareWithHaptics,
351
+ },
352
+ telegram: {
353
+ show: showTelegram,
354
+ icon: 'telegram',
355
+ label: getButtonText('telegram', 'Share via Telegram'),
356
+ onPress: handleTelegramShareWithHaptics,
357
+ },
358
+ discord: {
359
+ show: showDiscord,
360
+ icon: 'discord',
361
+ label: getButtonText('discord', 'Share via Discord'),
362
+ onPress: handleDiscordShareWithHaptics,
363
+ },
364
+ };
365
+ // Render a single share button
366
+ const renderShareButton = (option) => {
367
+ const config = buttonConfigs[option];
368
+ if (!config || !config.show)
369
+ return null;
370
+ const displayLabel = config.showSuccess && config.successLabel ? config.successLabel : config.label;
371
+ return (<ButtonWrapper key={option} wrapperStyle={[styles.button, styles.fullButton]} style={[styles.tertiaryButton, mergedStyle, fallbackColor ? { backgroundColor: fallbackColor } : undefined]} gradientString={gradientString} onPress={isEditMode ? undefined : config.onPress} disabled={config.isLoading || isEditMode}>
372
+ {config.isLoading ? (<react_native_1.View style={styles.buttonContent}>
373
+ <react_native_1.ActivityIndicator size="small" color="#333"/>
374
+ </react_native_1.View>) : (<react_native_1.View style={[styles.buttonContent, { justifyContent: buttonJustifyContent }]}>
375
+ <react_native_1.View style={styles.buttonIconContainer}>
376
+ {renderIcon({ name: config.icon, size: 18, color: iconColor })}
377
+ </react_native_1.View>
378
+ <react_native_1.Text style={[styles.tertiaryButtonText, textStyle]}>{displayLabel}</react_native_1.Text>
379
+ </react_native_1.View>)}
380
+ </ButtonWrapper>);
381
+ };
382
+ // Determine the order to render buttons
383
+ // If shareOptionsOrder is provided and non-empty, use it; otherwise fall back to default order
384
+ const defaultOrder = ['copyLink', 'nativeShareSheet', 'email', 'sms', 'twitterDms', 'instagramDms', 'whatsApp', 'facebookMessenger', 'telegram', 'discord', 'line', 'lineLiff', 'qrCode'];
385
+ const orderToUse = shareOptionsOrder.length > 0 ? shareOptionsOrder : defaultOrder;
386
+ return (<react_native_1.View key={block.id} style={styles.contactButtonsContainer}>
387
+ {/* Section label from block attributes */}
388
+ {label && (<react_native_1.Text style={styles.sectionLabel}>{label}</react_native_1.Text>)}
389
+ {orderToUse.map(renderShareButton)}
390
+ </react_native_1.View>);
391
+ }
392
+ const styles = react_native_1.StyleSheet.create({
393
+ contactButtonsContainer: {
394
+ gap: 12,
395
+ marginBottom: 16,
396
+ },
397
+ sectionLabel: {
398
+ fontSize: 14,
399
+ fontWeight: '500',
400
+ color: '#666',
401
+ marginBottom: 4,
402
+ },
403
+ button: {
404
+ borderRadius: 8,
405
+ overflow: 'hidden', // Important for gradient clipping
406
+ },
407
+ tertiaryButton: {
408
+ backgroundColor: '#f5f5f5',
409
+ paddingVertical: 12,
410
+ paddingHorizontal: 16,
411
+ borderRadius: 8,
412
+ },
413
+ fullButton: {
414
+ width: '100%',
415
+ },
416
+ buttonContent: {
417
+ flexDirection: 'row',
418
+ alignItems: 'center',
419
+ justifyContent: 'center',
420
+ gap: 8,
421
+ },
422
+ buttonIconContainer: {
423
+ width: 24,
424
+ height: 18,
425
+ alignItems: 'center',
426
+ justifyContent: 'center',
427
+ overflow: 'visible',
428
+ },
429
+ tertiaryButtonText: {
430
+ color: '#333',
431
+ fontSize: 16,
432
+ fontWeight: '500',
433
+ },
434
+ });
435
+ //# sourceMappingURL=VrtxShareOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VrtxShareOptions.js","sourceRoot":"","sources":["../../src/components/VrtxShareOptions.tsx"],"names":[],"mappings":"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","sourcesContent":["import React from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n ActivityIndicator,\n StyleSheet,\n ViewStyle,\n Platform,\n} from 'react-native';\nimport { IconRendererProps, IconName } from './InviteFormCore';\nimport { useVortexModules } from '../context/VortexModulesContext';\n\nconst isWeb = Platform.OS === 'web';\n\nexport interface VrtxShareOptionsProps {\n block: any;\n renderIcon: (props: IconRendererProps) => React.ReactNode;\n isCopyLinkEnabled: () => boolean;\n isShareEnabled: () => boolean;\n isEmailShareEnabled: () => boolean;\n isSmsEnabled: () => boolean;\n isTwitterDmsEnabled: () => boolean;\n isInstagramDmsEnabled: () => boolean;\n isWhatsAppEnabled: () => boolean;\n isLineEnabled: () => boolean;\n isLineLiffEnabled: () => boolean;\n isQrCodeEnabled: () => boolean;\n isFacebookMessengerEnabled: () => boolean;\n isTelegramEnabled: () => boolean;\n isDiscordEnabled: () => boolean;\n handleCopyLink: () => Promise<void>;\n handleShare: () => Promise<void>;\n handleEmailShare: () => Promise<void>;\n handleSmsShare: () => Promise<void>;\n handleTwitterShare: () => Promise<void>;\n handleInstagramShare: () => Promise<void>;\n handleWhatsAppShare: () => Promise<void>;\n handleLineShare: () => Promise<void>;\n handleLineLiffShare: () => Promise<void>;\n handleQrCode: () => Promise<void>;\n handleFacebookMessengerShare: () => Promise<void>;\n handleTelegramShare: () => Promise<void>;\n handleDiscordShare: () => Promise<void>;\n triggerHaptic?: (style: 'light' | 'medium' | 'heavy') => Promise<void>;\n loadingCopy: boolean;\n loadingShare: boolean;\n copySuccess: boolean;\n shareSuccess: boolean;\n isEditMode?: boolean;\n shareOptionsOrder?: string[];\n}\n\n// Button wrapper component that handles gradients on web, native gradient libraries, or solid color fallback\ninterface ButtonWrapperProps {\n children: React.ReactNode;\n style: ViewStyle | ViewStyle[];\n gradientString: string | null;\n onPress?: () => void;\n disabled?: boolean;\n wrapperStyle?: ViewStyle | ViewStyle[];\n}\n\nconst ButtonWrapper: React.FC<ButtonWrapperProps> = ({\n children,\n style,\n gradientString,\n onPress,\n disabled,\n wrapperStyle,\n}) => {\n // Get the gradient module and loaders from context\n const { gradientModule, loaders } = useVortexModules();\n const styleArray = Array.isArray(style) ? style : [style];\n const combinedStyle = wrapperStyle ? [wrapperStyle, ...styleArray] : styleArray;\n\n // On web, use CSS gradients directly\n if (gradientString && isWeb) {\n return (\n <TouchableOpacity\n style={[...combinedStyle, { background: gradientString } as any]}\n onPress={onPress}\n disabled={disabled}\n activeOpacity={0.7}\n >\n {children}\n </TouchableOpacity>\n );\n }\n\n // On native, try to use gradient library if specified\n if (gradientString && gradientModule && loaders) {\n const GradientComponent = loaders.loadGradientComponent(gradientModule);\n const parsed = loaders.parseCSSLinearGradient(gradientString);\n\n if (GradientComponent && parsed) {\n const points = loaders.angleToGradientPoints(parsed.angle);\n\n return (\n <TouchableOpacity\n onPress={onPress}\n disabled={disabled}\n activeOpacity={0.7}\n style={wrapperStyle}\n >\n <GradientComponent\n colors={parsed.colors}\n locations={parsed.locations}\n start={points.start}\n end={points.end}\n style={styleArray}\n >\n {children}\n </GradientComponent>\n </TouchableOpacity>\n );\n }\n }\n\n // Fallback: solid color from first gradient stop\n const fallbackColor = gradientString && loaders ? loaders.parseGradientFirstColor(gradientString) : null;\n const finalStyle = fallbackColor\n ? [...combinedStyle, { backgroundColor: fallbackColor }]\n : combinedStyle;\n\n return (\n <TouchableOpacity\n style={finalStyle}\n onPress={onPress}\n disabled={disabled}\n activeOpacity={0.7}\n >\n {children}\n </TouchableOpacity>\n );\n};\n\nexport function VrtxShareOptions({\n block,\n renderIcon,\n isCopyLinkEnabled,\n isShareEnabled,\n isEmailShareEnabled,\n isSmsEnabled,\n isTwitterDmsEnabled,\n isInstagramDmsEnabled,\n isWhatsAppEnabled,\n isLineEnabled,\n isLineLiffEnabled,\n isQrCodeEnabled,\n isFacebookMessengerEnabled,\n isTelegramEnabled,\n isDiscordEnabled,\n handleCopyLink,\n handleShare,\n handleEmailShare,\n handleSmsShare,\n handleTwitterShare,\n handleInstagramShare,\n handleWhatsAppShare,\n handleLineShare,\n handleLineLiffShare,\n handleQrCode,\n handleFacebookMessengerShare,\n handleTelegramShare,\n handleDiscordShare,\n triggerHaptic,\n loadingCopy,\n loadingShare,\n copySuccess,\n shareSuccess,\n isEditMode = false,\n shareOptionsOrder = [],\n}: VrtxShareOptionsProps) {\n // Get loaders from context\n const { loaders } = useVortexModules();\n const handleCopyLinkWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleCopyLink();\n };\n\n const handleShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleShare();\n };\n\n const handleEmailShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleEmailShare();\n };\n\n const handleSmsShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleSmsShare();\n };\n\n const handleTwitterShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleTwitterShare();\n };\n\n const handleInstagramShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleInstagramShare();\n };\n\n const handleWhatsAppShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleWhatsAppShare();\n };\n\n const handleLineShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleLineShare();\n };\n\n const handleLineLiffShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleLineLiffShare();\n };\n\n const handleQrCodeWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleQrCode();\n };\n\n const handleFacebookMessengerShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleFacebookMessengerShare();\n };\n\n const handleTelegramShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleTelegramShare();\n };\n\n const handleDiscordShareWithHaptics = async () => {\n await triggerHaptic?.('light');\n await handleDiscordShare();\n };\n\n const showCopyLink = isCopyLinkEnabled();\n const showShare = isShareEnabled();\n const showEmail = isEmailShareEnabled();\n const showSms = isSmsEnabled();\n const showTwitter = isTwitterDmsEnabled();\n const showInstagram = isInstagramDmsEnabled();\n const showWhatsApp = isWhatsAppEnabled();\n const showLine = isLineEnabled();\n const showLineLiff = isLineLiffEnabled();\n const showQrCode = isQrCodeEnabled();\n const showFacebookMessenger = isFacebookMessengerEnabled();\n const showTelegram = isTelegramEnabled();\n const showDiscord = isDiscordEnabled();\n\n if (\n !showCopyLink &&\n !showShare &&\n !showEmail &&\n !showSms &&\n !showTwitter &&\n !showInstagram &&\n !showWhatsApp &&\n !showLine &&\n !showLineLiff &&\n !showQrCode &&\n !showFacebookMessenger &&\n !showTelegram &&\n !showDiscord\n )\n return null;\n\n // Convert theme options to inline styles\n const themeToStyle = (theme: any): Record<string, any> => {\n if (!theme?.options || !Array.isArray(theme.options)) return {};\n\n const style: Record<string, any> = {};\n\n theme.options.forEach((option: any) => {\n if (!option.value) return;\n\n const { key, value } = option;\n\n // Map CSS custom properties to React Native style properties\n // Example: --vrtx-icon-button-background -> background\n // Example: --vrtx-icon-button-color -> color\n\n // Handle padding and margin with shorthand expansion\n if (key === '--vrtx-icon-button-padding' && value) {\n const parts = value.trim().split(/\\s+/);\n if (parts.length === 1) {\n style.paddingTop = style.paddingRight = style.paddingBottom = style.paddingLeft = value;\n } else if (parts.length === 2) {\n style.paddingTop = style.paddingBottom = parts[0];\n style.paddingRight = style.paddingLeft = parts[1];\n } else if (parts.length === 3) {\n style.paddingTop = parts[0];\n style.paddingRight = style.paddingLeft = parts[1];\n style.paddingBottom = parts[2];\n } else if (parts.length === 4) {\n style.paddingTop = parts[0];\n style.paddingRight = parts[1];\n style.paddingBottom = parts[2];\n style.paddingLeft = parts[3];\n }\n return;\n }\n\n if (key === '--vrtx-icon-button-margin' && value) {\n const parts = value.trim().split(/\\s+/);\n if (parts.length === 1) {\n style.marginTop = style.marginRight = style.marginBottom = style.marginLeft = value;\n } else if (parts.length === 2) {\n style.marginTop = style.marginBottom = parts[0];\n style.marginRight = style.marginLeft = parts[1];\n } else if (parts.length === 3) {\n style.marginTop = parts[0];\n style.marginRight = style.marginLeft = parts[1];\n style.marginBottom = parts[2];\n } else if (parts.length === 4) {\n style.marginTop = parts[0];\n style.marginRight = parts[1];\n style.marginBottom = parts[2];\n style.marginLeft = parts[3];\n }\n return;\n }\n\n const propertyMap: Record<string, string> = {\n '--vrtx-icon-button-color': 'color',\n '--vrtx-icon-button-background': 'background',\n '--vrtx-icon-button-background-color': 'backgroundColor',\n '--vrtx-icon-button-text-align': 'textAlign',\n '--vrtx-icon-button-font-family': 'fontFamily',\n '--vrtx-icon-button-font-size': 'fontSize',\n '--vrtx-icon-button-font-weight': 'fontWeight',\n '--vrtx-icon-button-text-decoration': 'textDecoration',\n '--vrtx-icon-button-text-transform': 'textTransform',\n '--vrtx-icon-button-border': 'border',\n '--vrtx-icon-button-border-radius': 'borderRadius',\n '--vrtx-icon-button-display': 'display',\n };\n\n const styleProperty = propertyMap[key];\n if (styleProperty) {\n style[styleProperty] = value;\n }\n });\n\n return style;\n };\n\n // Extract styles from both block.style and block.theme\n const blockStyle = block?.style || {};\n const themeStyle = themeToStyle(block?.theme);\n\n // Merge styles (theme styles take precedence)\n const mergedStyle = { ...blockStyle, ...themeStyle };\n\n // Extract gradient string and fallback color\n // On native, 'background' is a CSS property that doesn't work — convert solid colors to 'backgroundColor'\n const rawBackground = mergedStyle.background || null;\n const isGradient = rawBackground?.includes('gradient');\n const gradientString = isGradient ? rawBackground : null;\n const fallbackColor = isGradient\n ? loaders?.parseGradientFirstColor(rawBackground)\n : rawBackground || mergedStyle.backgroundColor;\n\n // Extract icon color (use text color from merged style, fallback to #333)\n const iconColor = mergedStyle.color || '#333';\n\n // Create text style that removes background\n const textStyle = { ...mergedStyle, backgroundColor: 'transparent', background: 'transparent' };\n\n // Map textAlign to flexbox justifyContent for button content alignment\n const getJustifyContent = (align: string | undefined): 'flex-start' | 'center' | 'flex-end' => {\n switch (align) {\n case 'left':\n case 'start':\n return 'flex-start';\n case 'right':\n case 'end':\n return 'flex-end';\n default:\n return 'center';\n }\n };\n const buttonJustifyContent = getJustifyContent(mergedStyle.textAlign);\n\n // Extract label from block attributes\n const label = block?.attributes?.label;\n\n // Extract customizations from block settings\n const customizations = block?.settings?.customizations || {};\n\n // Helper function to get button text from customizations with flat key resolution\n const getButtonText = (optionKey: string, defaultLabel: string): string => {\n if (!customizations) {\n return defaultLabel;\n }\n\n // Priority order (most specific to least specific):\n\n // 1. Flat key format with host (e.g., 'mobile.copyLink') - PREFERRED for new saves\n const flatKey = `mobile.${optionKey}`;\n if (customizations[flatKey]?.textContent !== undefined) {\n const textContent = customizations[flatKey]?.textContent;\n return textContent === null || textContent === undefined ? defaultLabel : textContent;\n }\n\n // 2. Legacy format: textContent directly on customization key (e.g., 'copyLink')\n // This is for data already in production without host prefix\n const legacyCustomization = customizations[optionKey];\n if (legacyCustomization?.textContent !== undefined) {\n const textContent = legacyCustomization.textContent;\n return textContent === null || textContent === undefined ? defaultLabel : textContent;\n }\n\n // 3. Nested object format (customizations.mobile.copyLink) - old legacy format\n if (customizations.mobile) {\n const textContent = customizations.mobile?.[optionKey]?.textContent;\n if (textContent !== undefined) {\n return textContent === null ? defaultLabel : textContent;\n }\n }\n\n return defaultLabel;\n };\n\n // Map of option keys to their button configurations\n const buttonConfigs: Record<string, {\n show: boolean;\n icon: IconName;\n label: string;\n onPress: () => void;\n isLoading?: boolean;\n successLabel?: string;\n showSuccess?: boolean;\n }> = {\n copyLink: {\n show: showCopyLink,\n icon: 'link',\n label: getButtonText('copyLink', 'Copy Link'),\n onPress: handleCopyLinkWithHaptics,\n isLoading: loadingCopy,\n successLabel: '✓ Copied!',\n showSuccess: copySuccess,\n },\n nativeShareSheet: {\n show: showShare,\n icon: 'share',\n label: getButtonText('nativeShareSheet', 'Share Link'),\n onPress: handleShareWithHaptics,\n isLoading: loadingShare,\n successLabel: '✓ Shared!',\n showSuccess: shareSuccess,\n },\n email: {\n show: showEmail,\n icon: 'email',\n label: getButtonText('email', 'Share via Email'),\n onPress: handleEmailShareWithHaptics,\n },\n sms: {\n show: showSms,\n icon: 'sms',\n label: getButtonText('sms', 'Share via SMS'),\n onPress: handleSmsShareWithHaptics,\n },\n twitterDms: {\n show: showTwitter,\n icon: 'x-twitter',\n label: getButtonText('twitterDms', 'Share via X'),\n onPress: handleTwitterShareWithHaptics,\n },\n instagramDms: {\n show: showInstagram,\n icon: 'instagram',\n label: getButtonText('instagramDms', 'Share via Instagram'),\n onPress: handleInstagramShareWithHaptics,\n },\n whatsApp: {\n show: showWhatsApp,\n icon: 'whatsapp',\n label: getButtonText('whatsApp', 'Share via WhatsApp'),\n onPress: handleWhatsAppShareWithHaptics,\n },\n line: {\n show: showLine,\n icon: 'line',\n label: getButtonText('line', 'Share via LINE'),\n onPress: handleLineShareWithHaptics,\n },\n lineLiff: {\n show: showLineLiff,\n icon: 'line',\n label: getButtonText('lineLiff', 'Share via LINE (LIFF)'),\n onPress: handleLineLiffShareWithHaptics,\n },\n qrCode: {\n show: showQrCode,\n icon: 'qr-code',\n label: getButtonText('qrCode', 'Show QR Code'),\n onPress: handleQrCodeWithHaptics,\n },\n facebookMessenger: {\n show: showFacebookMessenger,\n icon: 'facebook-messenger',\n label: getButtonText('facebookMessenger', 'Share via Messenger'),\n onPress: handleFacebookMessengerShareWithHaptics,\n },\n telegram: {\n show: showTelegram,\n icon: 'telegram',\n label: getButtonText('telegram', 'Share via Telegram'),\n onPress: handleTelegramShareWithHaptics,\n },\n discord: {\n show: showDiscord,\n icon: 'discord',\n label: getButtonText('discord', 'Share via Discord'),\n onPress: handleDiscordShareWithHaptics,\n },\n };\n\n // Render a single share button\n const renderShareButton = (option: string) => {\n const config = buttonConfigs[option];\n if (!config || !config.show) return null;\n\n const displayLabel = config.showSuccess && config.successLabel ? config.successLabel : config.label;\n\n return (\n <ButtonWrapper\n key={option}\n wrapperStyle={[styles.button, styles.fullButton]}\n style={[styles.tertiaryButton, mergedStyle, fallbackColor ? { backgroundColor: fallbackColor } : undefined]}\n gradientString={gradientString}\n onPress={isEditMode ? undefined : config.onPress}\n disabled={config.isLoading || isEditMode}\n >\n {config.isLoading ? (\n <View style={styles.buttonContent}>\n <ActivityIndicator size=\"small\" color=\"#333\" />\n </View>\n ) : (\n <View style={[styles.buttonContent, { justifyContent: buttonJustifyContent }]}>\n <View style={styles.buttonIconContainer}>\n {renderIcon({ name: config.icon, size: 18, color: iconColor })}\n </View>\n <Text style={[styles.tertiaryButtonText, textStyle]}>{displayLabel}</Text>\n </View>\n )}\n </ButtonWrapper>\n );\n };\n\n // Determine the order to render buttons\n // If shareOptionsOrder is provided and non-empty, use it; otherwise fall back to default order\n const defaultOrder = ['copyLink', 'nativeShareSheet', 'email', 'sms', 'twitterDms', 'instagramDms', 'whatsApp', 'facebookMessenger', 'telegram', 'discord', 'line', 'lineLiff', 'qrCode'];\n const orderToUse = shareOptionsOrder.length > 0 ? shareOptionsOrder : defaultOrder;\n\n return (\n <View key={block.id} style={styles.contactButtonsContainer}>\n {/* Section label from block attributes */}\n {label && (\n <Text style={styles.sectionLabel}>{label}</Text>\n )}\n {orderToUse.map(renderShareButton)}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n contactButtonsContainer: {\n gap: 12,\n marginBottom: 16,\n },\n sectionLabel: {\n fontSize: 14,\n fontWeight: '500',\n color: '#666',\n marginBottom: 4,\n },\n button: {\n borderRadius: 8,\n overflow: 'hidden', // Important for gradient clipping\n },\n tertiaryButton: {\n backgroundColor: '#f5f5f5',\n paddingVertical: 12,\n paddingHorizontal: 16,\n borderRadius: 8,\n },\n fullButton: {\n width: '100%',\n },\n buttonContent: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n gap: 8,\n },\n buttonIconContainer: {\n width: 24,\n height: 18,\n alignItems: 'center',\n justifyContent: 'center',\n overflow: 'visible',\n },\n tertiaryButtonText: {\n color: '#333',\n fontSize: 16,\n fontWeight: '500',\n },\n});\n"]}