@hivemindhq/core 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +224 -0
- package/dist/chunk-2RGM3KJL.js +351 -0
- package/dist/chunk-2RGM3KJL.js.map +1 -0
- package/dist/chunk-E5TTKYNS.js +55 -0
- package/dist/chunk-E5TTKYNS.js.map +1 -0
- package/dist/chunk-ERZSVDIB.js +270 -0
- package/dist/chunk-ERZSVDIB.js.map +1 -0
- package/dist/chunk-H4RMZQ2Z.js +213 -0
- package/dist/chunk-H4RMZQ2Z.js.map +1 -0
- package/dist/chunk-K7EIJSYQ.js +3 -0
- package/dist/chunk-K7EIJSYQ.js.map +1 -0
- package/dist/chunk-OJF67RNM.js +3 -0
- package/dist/chunk-OJF67RNM.js.map +1 -0
- package/dist/chunk-P5E2XNDI.js +2758 -0
- package/dist/chunk-P5E2XNDI.js.map +1 -0
- package/dist/chunk-T2XWV636.js +137 -0
- package/dist/chunk-T2XWV636.js.map +1 -0
- package/dist/chunk-VIRNUAYY.js +11 -0
- package/dist/chunk-VIRNUAYY.js.map +1 -0
- package/dist/components/index.d.ts +277 -0
- package/dist/components/index.js +6 -0
- package/dist/components/index.js.map +1 -0
- package/dist/components/ui/index.d.ts +396 -0
- package/dist/components/ui/index.js +6 -0
- package/dist/components/ui/index.js.map +1 -0
- package/dist/hooks/index.d.ts +27 -0
- package/dist/hooks/index.js +4 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/index.d.ts +34 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/toast-D090UYOq.d.ts +19 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/utils/index.d.ts +573 -0
- package/dist/utils/index.js +5 -0
- package/dist/utils/index.js.map +1 -0
- package/package.json +107 -0
- package/tailwind.config.js +96 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/utils/atom.ts","../src/utils/search/ranking.ts","../src/utils/search/formatting.tsx"],"names":[],"mappings":"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","file":"chunk-H4RMZQ2Z.js","sourcesContent":["/**\n * Atom-related utility functions for Intuition protocol\n */\n\n/**\n * All possible atom types from the Intuition protocol.\n * These correspond to the PostgreSQL enum and Rust AtomType.\n */\nexport const ATOM_TYPES = [\n 'Account',\n 'Book',\n 'ByteObject',\n 'Caip10',\n 'FollowAction',\n 'JsonObject',\n 'Keywords',\n 'LikeAction',\n 'Organization',\n 'OrganizationPredicate',\n 'Person',\n 'PersonPredicate',\n 'TextObject',\n 'Thing',\n 'ThingPredicate',\n 'Unknown',\n] as const\n\nexport type AtomType = typeof ATOM_TYPES[number]\n\n/**\n * Detects atom type from data string patterns.\n * Used as a fallback when type field is not available.\n *\n * @param data - The raw atom data string\n * @returns Detected atom type or undefined\n */\nfunction detectTypeFromData(data: string): AtomType | undefined {\n if (!data) return undefined\n\n const lowered = data.toLowerCase()\n const trimmed = data.trim()\n\n // EVM addresses\n if (data.startsWith('0x') && data.length === 42) {\n return 'Account'\n }\n\n // CAIP-10 identifiers\n if (lowered.startsWith('caip10:') || lowered.includes('eip155:')) {\n return 'Caip10'\n }\n\n // Schema.org predicate URLs\n if (lowered.includes('schema.org/')) {\n if (lowered.includes('person')) return 'PersonPredicate'\n if (lowered.includes('organization')) return 'OrganizationPredicate'\n if (lowered.includes('thing')) return 'ThingPredicate'\n if (lowered.includes('likeaction')) return 'LikeAction'\n if (lowered.includes('followaction')) return 'FollowAction'\n }\n\n // IPFS URIs typically contain JSON data\n if (data.startsWith('ipfs://')) {\n return undefined // Can't determine type without fetching\n }\n\n // HTTP/HTTPS URLs - could be many types, can't determine without fetching\n if (trimmed.startsWith('http://') || trimmed.startsWith('https://')) {\n return undefined\n }\n\n // JSON-like strings (starts with { or [) - likely JsonObject, but can't parse here\n const firstChar = trimmed[0]\n if (firstChar === '{' || firstChar === '[') {\n return undefined // Could be JsonObject, but needs parsing to confirm\n }\n\n // Plain text strings that don't match other patterns are likely TextObject\n // This matches the indexer behavior: if data is not JSON, not an address,\n // not a CAIP10, not a schema.org URL, and not IPFS, it becomes a TextObject\n if (trimmed.length > 0) {\n return 'TextObject'\n }\n\n return undefined\n}\n\n/**\n * Shape of atom data that can be passed to getAtomType.\n * Supports various atom object shapes from GraphQL responses.\n */\nexport interface AtomTypeInput {\n /** Direct type field from GraphQL (primary source) */\n type?: string\n /** Alternate naming used in some contexts */\n atomType?: string\n /** Value object with typed sub-objects (secondary source) */\n value?: {\n // Structured entity types (schema.org)\n thing?: unknown\n person?: unknown\n organization?: unknown\n book?: unknown\n // Identity types\n account?: unknown\n // Raw data types\n text_object?: unknown // Plain text like \"Kylan Hurt\", \"Revel8\"\n json_object?: unknown // JSON without schema.org context\n byte_object?: unknown // Binary data\n }\n /** Raw atom data string for pattern detection (tertiary source) */\n data?: string\n}\n\n/**\n * Extracts the atom type from an atom object using a cascade/fallback strategy:\n *\n * 1. **Primary**: Direct `type` or `atomType` field from GraphQL\n * 2. **Secondary**: Inferred from populated `value.*` sub-objects\n * 3. **Tertiary**: Pattern detection from `data` string\n *\n * @param atom - Atom object with type information\n * @returns The atom type string, or undefined if not determinable\n *\n * @example\n * // From GraphQL type field\n * getAtomType({ type: 'Person' }) // Returns: 'Person'\n *\n * @example\n * // From value sub-object\n * getAtomType({ value: { person: { name: 'Vitalik' } } }) // Returns: 'Person'\n *\n * @example\n * // From text_object value (plain text atoms)\n * getAtomType({ value: { text_object: { data: 'Revel8' } } }) // Returns: 'TextObject'\n *\n * @example\n * // From data pattern\n * getAtomType({ data: '0x1234...5678' }) // Returns: 'Account'\n *\n * @example\n * // Plain text detection\n * getAtomType({ data: 'Revel8' }) // Returns: 'TextObject'\n * getAtomType({ data: 'Kylan Hurt' }) // Returns: 'TextObject'\n */\nexport function getAtomType(atom: AtomTypeInput): AtomType | undefined {\n console.log('getAtomType', atom)\n if (!atom) return undefined\n\n // 1. Primary: Direct type field\n if (atom.type && typeof atom.type === 'string') {\n return atom.type as AtomType\n }\n if (atom.atomType && typeof atom.atomType === 'string') {\n return atom.atomType as AtomType\n }\n\n // 2. Secondary: Infer from value sub-objects\n // Only check value sub-objects if they are truthy (not null/undefined/false)\n if (atom.value) {\n // Structured entity types (schema.org)\n if (atom.value.person) return 'Person'\n if (atom.value.organization) return 'Organization'\n if (atom.value.book) return 'Book'\n if (atom.value.thing) return 'Thing'\n // Identity types\n if (atom.value.account) return 'Account'\n // Raw data types\n if (atom.value.text_object) return 'TextObject'\n if (atom.value.json_object) return 'JsonObject'\n if (atom.value.byte_object) return 'ByteObject'\n }\n\n // 3. Tertiary: Pattern detection from data\n if (atom.data && typeof atom.data === 'string') {\n return detectTypeFromData(atom.data)\n }\n\n return undefined\n}\n\n/**\n * Formats an atom type for display purposes.\n * Converts internal type names to user-friendly labels.\n *\n * @param type - The atom type string\n * @returns Formatted display string\n *\n * @example\n * formatAtomType('TextObject') // Returns: 'Text'\n * formatAtomType('PersonPredicate') // Returns: 'Person Predicate'\n * formatAtomType('FollowAction') // Returns: 'Follow'\n */\nexport function formatAtomType(type: string | undefined): string {\n console.log('formatAtomType', type)\n if (!type) return ''\n\n // Handle \"Object\" suffix types\n if (type.endsWith('Object')) {\n return type.replace('Object', '')\n }\n\n // Handle \"Predicate\" suffix types\n if (type.endsWith('Predicate')) {\n const base = type.replace('Predicate', '')\n return `${base} Predicate`\n }\n\n // Handle \"Action\" suffix types\n if (type.endsWith('Action')) {\n return type.replace('Action', '')\n }\n\n return type\n}\n\n/**\n * Checks if an atom type is a predicate type.\n * Predicates are used as the middle component of triples.\n *\n * @param type - The atom type to check\n * @returns True if the type is a predicate\n *\n * @example\n * isPredicateType('ThingPredicate') // Returns: true\n * isPredicateType('Person') // Returns: false\n */\nexport function isPredicateType(type: string | undefined): boolean {\n if (!type) return false\n return (\n type.endsWith('Predicate') ||\n type === 'LikeAction' ||\n type === 'FollowAction'\n )\n}\n\n/**\n * Checks if an atom type represents a structured entity (Person, Organization, Thing).\n * These types typically have rich metadata from schema.org.\n *\n * @param type - The atom type to check\n * @returns True if the type is a structured entity\n */\nexport function isEntityType(type: string | undefined): boolean {\n if (!type) return false\n return ['Person', 'Organization', 'Thing', 'Book'].includes(type)\n}\n\n/**\n * Checks if an atom type is a raw data type (TextObject, JsonObject, ByteObject).\n * These types contain data without schema.org structure.\n *\n * @param type - The atom type to check\n * @returns True if the type is a raw data type\n *\n * @example\n * isRawDataType('TextObject') // Returns: true\n * isRawDataType('Person') // Returns: false\n */\nexport function isRawDataType(type: string | undefined): boolean {\n if (!type) return false\n return ['TextObject', 'JsonObject', 'ByteObject'].includes(type)\n}\n\n/**\n * Checks if an atom type is plain text (TextObject).\n * Plain text atoms contain simple strings like names, labels, or concepts.\n *\n * @param type - The atom type to check\n * @returns True if the type is TextObject\n *\n * @example\n * isPlainTextType('TextObject') // Returns: true\n * isPlainTextType('Person') // Returns: false\n */\nexport function isPlainTextType(type: string | undefined): boolean {\n return type === 'TextObject'\n}\n\n","/**\n * Atom search ranking utilities\n * Provides stake-first ranking with relevance as secondary sort\n *\n * @example\n * import { rankAtoms } from '@revel8/core'\n * const rankedResults = rankAtoms(response.data.atoms, searchTerm)\n */\n\nimport type { GraphQLAtom, RankedAtom } from './types'\n\n/**\n * Calculate match score between text and search term\n * Used for relevance ranking in search results\n *\n * @param text - The text to check for matches\n * @param searchTerm - The search term to match against\n * @returns Score from 0-100 based on match quality\n *\n * @example\n * calculateMatchScore('Vitalik Buterin', 'vitalik') // 90 (starts with)\n * calculateMatchScore('About Vitalik', 'vitalik') // ~47 (contains at position 6)\n * calculateMatchScore('Vitalik', 'vitalik') // 100 (exact match)\n */\nexport function calculateMatchScore(text: string, searchTerm: string): number {\n if (!text || !searchTerm) return 0\n\n const lowerText = text.toLowerCase()\n const lowerSearch = searchTerm.toLowerCase()\n\n // Exact match\n if (lowerText === lowerSearch) return 100\n\n // Starts with search term\n if (lowerText.startsWith(lowerSearch)) return 90\n\n // Contains search term\n if (lowerText.includes(lowerSearch)) {\n // Calculate position score (earlier matches score higher)\n const position = lowerText.indexOf(lowerSearch)\n return 50 - position * 0.5\n }\n\n return 0\n}\n\n/**\n * Rank and sort atoms by stake amount with relevance as secondary sort\n *\n * Algorithm:\n * 1. Exact term_id matches always come first\n * 2. Primary sort: By stake (market_cap, highest first)\n * 3. Secondary sort: By match quality score\n *\n * @param atoms - Array of atoms from GraphQL response\n * @param searchTerm - The search term used for relevance scoring\n * @returns Sorted array with ranking metadata added\n *\n * @example\n * const atoms = response.data.atoms\n * const ranked = rankAtoms(atoms, 'vitalik')\n * // Returns atoms sorted by stake, with matchScore, stakeScore, etc. added\n */\nexport function rankAtoms<T extends GraphQLAtom>(\n atoms: T[],\n searchTerm: string\n): (T & RankedAtom)[] {\n const rankedAtoms = atoms\n .map((atom) => {\n // Calculate match quality (for relevance filtering and secondary sorting)\n let matchScore = 0\n\n // Check for exact term_id match (highest priority)\n const isExactTermIdMatch =\n atom.term_id?.toLowerCase() === searchTerm.toLowerCase()\n\n if (isExactTermIdMatch) {\n matchScore = 1000 // Give maximum score for exact term_id matches\n } else {\n // Score label (highest weight for relevance)\n matchScore += calculateMatchScore(atom.label || '', searchTerm) * 3\n\n // Score name fields from value sub-objects\n const name =\n atom.value?.thing?.name ||\n atom.value?.person?.name ||\n atom.value?.organization?.name ||\n ''\n matchScore += calculateMatchScore(name, searchTerm) * 2\n\n // Score data field (for addresses and other data)\n if (atom.data) {\n matchScore += calculateMatchScore(atom.data, searchTerm) * 2.5\n }\n\n // Score descriptions (lower weight)\n const description =\n atom.value?.thing?.description ||\n atom.value?.person?.description ||\n atom.value?.organization?.description ||\n ''\n matchScore += calculateMatchScore(description, searchTerm) * 0.5\n }\n\n // Calculate stake score (primary sorting criterion)\n const marketCap = atom.term?.vaults?.[0]?.market_cap || '0'\n const stakeScore = Number(marketCap)\n\n // Track if it's an exact match (for potential boost)\n const isExactMatch =\n atom.label?.toLowerCase() === searchTerm.toLowerCase() ||\n isExactTermIdMatch\n\n return {\n ...atom,\n matchScore,\n stakeScore,\n isExactMatch,\n isExactTermIdMatch,\n // Combined score for display/debugging\n totalScore: matchScore + Math.log10(stakeScore + 1),\n } as T & RankedAtom\n })\n // For exact term_id matches, don't filter out (they should always show)\n // For other searches, filter out atoms with very low relevance\n .filter((atom) => atom.isExactTermIdMatch || atom.matchScore > 10)\n .sort((a, b) => {\n // Exact term_id matches always come first\n if (a.isExactTermIdMatch && !b.isExactTermIdMatch) return -1\n if (!a.isExactTermIdMatch && b.isExactTermIdMatch) return 1\n\n // PRIMARY SORT: By stake (highest first)\n if (a.stakeScore !== b.stakeScore) {\n return b.stakeScore - a.stakeScore\n }\n\n // SECONDARY SORT: By match quality\n // (Optional: boost exact matches slightly)\n const aMatchScore = a.matchScore + (a.isExactMatch ? 50 : 0)\n const bMatchScore = b.matchScore + (b.isExactMatch ? 50 : 0)\n\n return bMatchScore - aMatchScore\n })\n\n return rankedAtoms\n}\n\n/**\n * Get the display name for an atom\n * Checks value sub-objects first, falls back to label, then data\n *\n * @param atom - The atom to get display name for\n * @returns The best display name available\n */\nexport function getAtomDisplayName(atom: GraphQLAtom): string {\n return (\n atom.value?.thing?.name ||\n atom.value?.person?.name ||\n atom.value?.organization?.name ||\n atom.label ||\n atom.data ||\n ''\n )\n}\n\n/**\n * Get the description for an atom from value sub-objects\n *\n * @param atom - The atom to get description for\n * @returns The description if available, empty string otherwise\n */\nexport function getAtomDescription(atom: GraphQLAtom): string {\n return (\n atom.value?.thing?.description ||\n atom.value?.person?.description ||\n atom.value?.organization?.description ||\n ''\n )\n}\n\n/**\n * Get the image URL for an atom from value sub-objects\n * Handles IPFS URLs by converting to gateway URLs\n *\n * @param atom - The atom to get image for\n * @returns The image URL or empty string\n */\nexport function getAtomImage(atom: GraphQLAtom): string {\n const image =\n atom.image ||\n atom.value?.thing?.image ||\n atom.value?.person?.image ||\n atom.value?.organization?.image ||\n ''\n\n // Convert IPFS URLs to gateway URLs\n if (image.startsWith('ipfs://')) {\n return image.replace('ipfs://', 'https://ipfs.io/ipfs/')\n }\n\n return image\n}\n\n","import React from 'react'\n\n/**\n * Format stake amount for display (converts from wei to TRUST with suffixes)\n *\n * @param marketCap - The market cap in wei (18 decimals)\n * @returns Formatted string like \"1.5K\", \"2.3M\", etc.\n *\n * @example\n * formatStake('1000000000000000000') // \"1\"\n * formatStake('1500000000000000000000') // \"1.5K\"\n * formatStake('2300000000000000000000000') // \"2.3M\"\n */\nexport function formatStake(marketCap: string | number | undefined): string {\n if (!marketCap) return '0'\n\n // Convert from wei (18 decimals) to TRUST\n const trustValue = Number(BigInt(marketCap)) / 1e18\n\n if (trustValue === 0) return '0'\n\n // Helper to format with proper decimals and remove trailing zeros\n const formatWithDecimals = (value: number, decimals: number = 2): string => {\n return value.toFixed(decimals).replace(/\\.?0+$/, '')\n }\n\n // Format in TRUST with K/M/B suffixes\n if (trustValue >= 1e9) {\n return `${formatWithDecimals(trustValue / 1e9, 2)}B`\n } else if (trustValue >= 1e6) {\n return `${formatWithDecimals(trustValue / 1e6, 2)}M`\n } else if (trustValue >= 1e3) {\n return `${formatWithDecimals(trustValue / 1e3, 2)}K`\n } else {\n // For smaller values, show up to 2 decimals\n return formatWithDecimals(trustValue, 2)\n }\n}\n\n/**\n * Highlight matching text in search results\n * Returns React elements with highlighted portions\n *\n * @param text - The text to highlight\n * @param searchTerm - The search term to highlight\n * @returns React elements with matching text highlighted\n *\n * @example\n * highlightMatch('Vitalik Buterin', 'vitalik')\n * // Returns: [<strong>Vitalik</strong>, ' Buterin']\n */\nexport function highlightMatch(\n text: string,\n searchTerm: string\n): React.ReactNode {\n if (!text || !searchTerm) return text\n\n const regex = new RegExp(`(${escapeRegExp(searchTerm)})`, 'gi')\n const parts = text.split(regex)\n\n return parts.map((part, i) =>\n part.toLowerCase() === searchTerm.toLowerCase() ? (\n <strong key={i} className=\"bg-yellow-500/20 text-yellow-500\">\n {part}\n </strong>\n ) : (\n part\n )\n )\n}\n\n/**\n * Escape special regex characters in a string\n */\nfunction escapeRegExp(string: string): string {\n return string.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')\n}\n\n/**\n * Format a term_id for display (first 5 characters after 0x)\n *\n * @param termId - The full term_id (e.g., \"0x123456789...\")\n * @returns Shortened display format (e.g., \"12345\")\n *\n * @example\n * formatTermId('0x123456789098765432') // \"12345\"\n */\nexport function formatTermId(termId: string): string {\n if (!termId) return ''\n if (termId.startsWith('0x')) {\n return termId.slice(2, 7)\n }\n return termId.slice(0, 5)\n}\n\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-K7EIJSYQ.js"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"chunk-OJF67RNM.js"}
|