@hivemindhq/core 0.4.0 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/README.md +16 -16
  2. package/dist/{chunk-2RGM3KJL.js → chunk-K2544PJ5.js} +42 -20
  3. package/dist/chunk-K2544PJ5.js.map +1 -0
  4. package/dist/{chunk-P5E2XNDI.js → chunk-K4XDMY2V.js} +3 -3
  5. package/dist/{chunk-P5E2XNDI.js.map → chunk-K4XDMY2V.js.map} +1 -1
  6. package/dist/{chunk-ERZSVDIB.js → chunk-RW4JXOAM.js} +11 -3
  7. package/dist/chunk-RW4JXOAM.js.map +1 -0
  8. package/dist/chunk-VU3OPG32.js +907 -0
  9. package/dist/chunk-VU3OPG32.js.map +1 -0
  10. package/dist/components/index.d.ts +28 -3
  11. package/dist/components/index.js +2 -2
  12. package/dist/components/ui/index.js +2 -2
  13. package/dist/index.d.ts +2 -2
  14. package/dist/index.js +6 -6
  15. package/dist/utils/index.d.ts +312 -6
  16. package/dist/utils/index.js +2 -2
  17. package/package.json +15 -11
  18. package/src/components/AtomIcon.tsx +21 -0
  19. package/src/components/CryptoAmount.tsx +447 -0
  20. package/src/components/ErrorBanner.tsx +35 -0
  21. package/src/components/IpfsImage.tsx +21 -0
  22. package/src/components/LoadingDots.tsx +55 -0
  23. package/src/components/TripleAreaChart.tsx +108 -0
  24. package/src/components/TriplePositionsTornadoMinGraph.tsx +71 -0
  25. package/src/components/UnknownImage.tsx +55 -0
  26. package/src/components/index.ts +24 -0
  27. package/src/components/ui/alert.tsx +59 -0
  28. package/src/components/ui/avatar.tsx +47 -0
  29. package/src/components/ui/badge.tsx +35 -0
  30. package/src/components/ui/breadcrumb.tsx +108 -0
  31. package/src/components/ui/button.tsx +56 -0
  32. package/src/components/ui/card.tsx +75 -0
  33. package/src/components/ui/carousel.tsx +239 -0
  34. package/src/components/ui/chart.tsx +350 -0
  35. package/src/components/ui/checkbox.tsx +28 -0
  36. package/src/components/ui/collapsible.tsx +10 -0
  37. package/src/components/ui/command.tsx +177 -0
  38. package/src/components/ui/dialog.tsx +119 -0
  39. package/src/components/ui/dropdown-menu.tsx +202 -0
  40. package/src/components/ui/form.tsx +175 -0
  41. package/src/components/ui/index.ts +183 -0
  42. package/src/components/ui/input.tsx +21 -0
  43. package/src/components/ui/label.tsx +25 -0
  44. package/src/components/ui/loader.tsx +20 -0
  45. package/src/components/ui/pagination.tsx +104 -0
  46. package/src/components/ui/popover.tsx +45 -0
  47. package/src/components/ui/progress.tsx +25 -0
  48. package/src/components/ui/radio-group.tsx +42 -0
  49. package/src/components/ui/scroll-area.tsx +45 -0
  50. package/src/components/ui/select.tsx +178 -0
  51. package/src/components/ui/separator.tsx +28 -0
  52. package/src/components/ui/sheet.tsx +139 -0
  53. package/src/components/ui/sidebar.tsx +723 -0
  54. package/src/components/ui/skeleton.tsx +15 -0
  55. package/src/components/ui/sonner.tsx +27 -0
  56. package/src/components/ui/spinner.tsx +67 -0
  57. package/src/components/ui/switch.tsx +26 -0
  58. package/src/components/ui/table.tsx +113 -0
  59. package/src/components/ui/tabs.tsx +63 -0
  60. package/src/components/ui/textarea.tsx +21 -0
  61. package/src/components/ui/toast.tsx +146 -0
  62. package/src/components/ui/toaster.tsx +33 -0
  63. package/src/components/ui/toggle-group.tsx +58 -0
  64. package/src/components/ui/toggle.tsx +44 -0
  65. package/src/components/ui/tooltip.tsx +61 -0
  66. package/src/hooks/index.ts +7 -0
  67. package/src/hooks/use-mobile.ts +20 -0
  68. package/src/hooks/use-toast.ts +190 -0
  69. package/src/index.ts +25 -0
  70. package/src/types/index.ts +17 -0
  71. package/src/utils/atom-label-detection.ts +689 -0
  72. package/src/utils/atom.ts +279 -0
  73. package/src/utils/cn.ts +18 -0
  74. package/src/utils/formatting.ts +624 -0
  75. package/src/utils/index.ts +11 -0
  76. package/src/utils/multivault-errors.ts +581 -0
  77. package/src/utils/search/formatting.tsx +95 -0
  78. package/src/utils/search/index.ts +28 -0
  79. package/src/utils/search/ranking.ts +203 -0
  80. package/src/utils/search/types.ts +114 -0
  81. package/tailwind.config.js +3 -3
  82. package/dist/chunk-2RGM3KJL.js.map +0 -1
  83. package/dist/chunk-ERZSVDIB.js.map +0 -1
  84. package/dist/chunk-H4RMZQ2Z.js +0 -213
  85. package/dist/chunk-H4RMZQ2Z.js.map +0 -1
@@ -292,7 +292,7 @@ interface AtomTypeInput {
292
292
  *
293
293
  * @example
294
294
  * // From text_object value (plain text atoms)
295
- * getAtomType({ value: { text_object: { data: 'Revel8' } } }) // Returns: 'TextObject'
295
+ * getAtomType({ value: { text_object: { data: 'Hive Mind' } } }) // Returns: 'TextObject'
296
296
  *
297
297
  * @example
298
298
  * // From data pattern
@@ -300,8 +300,8 @@ interface AtomTypeInput {
300
300
  *
301
301
  * @example
302
302
  * // Plain text detection
303
- * getAtomType({ data: 'Revel8' }) // Returns: 'TextObject'
304
- * getAtomType({ data: 'Kylan Hurt' }) // Returns: 'TextObject'
303
+ * getAtomType({ data: 'Hive Mind' }) // Returns: 'TextObject'
304
+ * getAtomType({ data: 'John Doe' }) // Returns: 'TextObject'
305
305
  */
306
306
  declare function getAtomType(atom: AtomTypeInput): AtomType | undefined;
307
307
  /**
@@ -362,9 +362,208 @@ declare function isRawDataType(type: string | undefined): boolean;
362
362
  */
363
363
  declare function isPlainTextType(type: string | undefined): boolean;
364
364
 
365
+ /**
366
+ * Atom Label Detection System
367
+ *
368
+ * Provides unified detection and formatting of atom labels across Hive Mind applications.
369
+ * Takes a raw label string and returns a rich typed object with:
370
+ * - Detected kind (address, atom-id, ens, social, url, domain, ipfs, text)
371
+ * - Normalized/canonical form for storage
372
+ * - Shortened form for display in tight spaces
373
+ * - Human-readable display name
374
+ * - Type-specific metadata
375
+ *
376
+ * @module atom-label-detection
377
+ */
378
+ /**
379
+ * Supported social media platforms.
380
+ * Extend this as new platforms are added.
381
+ */
382
+ type SocialPlatform = 'twitter' | 'github' | 'linkedin' | 'farcaster' | 'lens' | 'youtube' | 'instagram' | 'tiktok' | 'discord' | 'telegram' | 'reddit' | 'medium';
383
+ /** Base properties shared by all detection results */
384
+ interface BaseDetectionResult {
385
+ /** Original input string */
386
+ raw: string;
387
+ /** Canonical/normalized form for storage and comparison */
388
+ normalized: string;
389
+ /** Shortened form for display in tight spaces */
390
+ shortened: string;
391
+ /** Human-readable display name */
392
+ displayName: string;
393
+ }
394
+ /** EVM address (42 characters, 0x + 40 hex) */
395
+ interface AddressDetectionResult extends BaseDetectionResult {
396
+ kind: 'address';
397
+ /** The checksummed address (if valid) or original */
398
+ address: `0x${string}`;
399
+ /** Whether the address was provided in checksummed format */
400
+ isChecksummed: boolean;
401
+ }
402
+ /** Atom ID (66 characters, 0x + 64 hex) */
403
+ interface AtomIdDetectionResult extends BaseDetectionResult {
404
+ kind: 'atom-id';
405
+ /** The atom ID */
406
+ id: `0x${string}`;
407
+ }
408
+ /** ENS domain name */
409
+ interface EnsDetectionResult extends BaseDetectionResult {
410
+ kind: 'ens';
411
+ /** The full ENS name (e.g., "vitalik.eth") */
412
+ name: string;
413
+ }
414
+ /** Social media profile */
415
+ interface SocialDetectionResult extends BaseDetectionResult {
416
+ kind: 'social';
417
+ /** The detected platform */
418
+ platform: SocialPlatform;
419
+ /** The extracted handle/username */
420
+ handle: string;
421
+ /** Full profile URL (normalized) */
422
+ profileUrl: string;
423
+ /** Unavatar URL for profile image (if available) */
424
+ avatarUrl?: string;
425
+ }
426
+ /** Generic URL (not matching any social platform) */
427
+ interface UrlDetectionResult extends BaseDetectionResult {
428
+ kind: 'url';
429
+ /** Full normalized URL */
430
+ url: string;
431
+ /** Origin (protocol + hostname) */
432
+ origin: string;
433
+ /** Hostname only */
434
+ hostname: string;
435
+ /** Path after hostname */
436
+ pathname: string;
437
+ }
438
+ /** Domain/hostname without protocol */
439
+ interface DomainDetectionResult extends BaseDetectionResult {
440
+ kind: 'domain';
441
+ /** The domain name */
442
+ domain: string;
443
+ /** Top-level domain */
444
+ tld: string;
445
+ }
446
+ /** IPFS content identifier */
447
+ interface IpfsDetectionResult extends BaseDetectionResult {
448
+ kind: 'ipfs';
449
+ /** The content identifier */
450
+ cid: string;
451
+ /** CID version (0 for Qm..., 1 for bafy...) */
452
+ version: 0 | 1;
453
+ /** Gateway URL for accessing content */
454
+ gatewayUrl: string;
455
+ }
456
+ /** Arweave content identifier */
457
+ interface ArweaveDetectionResult extends BaseDetectionResult {
458
+ kind: 'arweave';
459
+ /** The transaction ID */
460
+ txId: string;
461
+ /** Gateway URL for accessing content */
462
+ gatewayUrl: string;
463
+ }
464
+ /** Plain text (fallback) */
465
+ interface TextDetectionResult extends BaseDetectionResult {
466
+ kind: 'text';
467
+ /** The text content (normalized) */
468
+ text: string;
469
+ }
470
+ /**
471
+ * Discriminated union of all detection result types.
472
+ * Use TypeScript's type narrowing with `result.kind` to access type-specific properties.
473
+ *
474
+ * @example
475
+ * const result = detectAtomLabel('https://x.com/vitalik')
476
+ * if (result.kind === 'social') {
477
+ * console.log(result.handle) // 'vitalik'
478
+ * console.log(result.platform) // 'twitter'
479
+ * }
480
+ */
481
+ type AtomLabelDetectionResult = AddressDetectionResult | AtomIdDetectionResult | EnsDetectionResult | SocialDetectionResult | UrlDetectionResult | DomainDetectionResult | IpfsDetectionResult | ArweaveDetectionResult | TextDetectionResult;
482
+ /**
483
+ * Detects the type of an atom label and returns a rich typed result.
484
+ *
485
+ * This is the primary function for understanding what kind of entity a label represents.
486
+ * Use this when you need to:
487
+ * - Display a label appropriately (shortened, with icon, etc.)
488
+ * - Generate creation data for new atoms
489
+ * - Compare two labels to see if they represent the same entity
490
+ *
491
+ * Detection priority (most specific first):
492
+ * 1. ENS (.eth suffix)
493
+ * 2. IPFS (ipfs:// or CID patterns)
494
+ * 3. Arweave (ar://)
495
+ * 4. Atom ID (66-char hex)
496
+ * 5. EVM Address (42-char hex)
497
+ * 6. Social Profile (known platform URLs)
498
+ * 7. URL (has protocol)
499
+ * 8. Domain (matches TLD pattern)
500
+ * 9. Text (fallback)
501
+ *
502
+ * @param label - The raw label string to detect
503
+ * @returns A discriminated union result with kind-specific properties
504
+ *
505
+ * @example
506
+ * // EVM Address
507
+ * detectAtomLabel('0x1234567890123456789012345678901234567890')
508
+ * // { kind: 'address', shortened: '0x1234...7890', ... }
509
+ *
510
+ * @example
511
+ * // Social Profile
512
+ * detectAtomLabel('https://x.com/vitalik')
513
+ * // { kind: 'social', platform: 'twitter', handle: 'vitalik', shortened: '@vitalik', ... }
514
+ *
515
+ * @example
516
+ * // ENS
517
+ * detectAtomLabel('vitalik.eth')
518
+ * // { kind: 'ens', name: 'vitalik.eth', shortened: 'vitalik.eth', ... }
519
+ */
520
+ declare function detectAtomLabel(label: string): AtomLabelDetectionResult;
521
+ /**
522
+ * Compares two labels to determine if they represent the same entity.
523
+ * Handles various representations of the same entity:
524
+ * - Case insensitivity
525
+ * - Protocol variations (http vs https)
526
+ * - Domain aliases (x.com vs twitter.com)
527
+ * - Trailing slashes
528
+ *
529
+ * @param labelA - First label to compare
530
+ * @param labelB - Second label to compare
531
+ * @returns True if labels represent the same entity
532
+ *
533
+ * @example
534
+ * isSameAtomLabel('0xABC...', '0xabc...') // true (case insensitive)
535
+ * isSameAtomLabel('x.com/vitalik', 'https://x.com/vitalik') // true
536
+ * isSameAtomLabel('twitter.com/vitalik', 'x.com/vitalik') // true (same platform)
537
+ */
538
+ declare function isSameAtomLabel(labelA: string, labelB: string): boolean;
539
+ /**
540
+ * Type guard to check if result is a specific kind.
541
+ *
542
+ * @example
543
+ * const result = detectAtomLabel(input)
544
+ * if (isAtomLabelKind(result, 'address')) {
545
+ * console.log(result.address) // TypeScript knows this is AddressDetectionResult
546
+ * }
547
+ */
548
+ declare function isAtomLabelKind<K extends AtomLabelDetectionResult['kind']>(result: AtomLabelDetectionResult, kind: K): result is Extract<AtomLabelDetectionResult, {
549
+ kind: K;
550
+ }>;
551
+ /**
552
+ * Checks if a result is an on-chain identity (address or atom ID).
553
+ */
554
+ declare function isOnChainIdentity(result: AtomLabelDetectionResult): result is AddressDetectionResult | AtomIdDetectionResult;
555
+ /**
556
+ * Checks if a result is a web reference (URL, domain, social).
557
+ */
558
+ declare function isWebReference(result: AtomLabelDetectionResult): result is UrlDetectionResult | DomainDetectionResult | SocialDetectionResult;
559
+ /**
560
+ * Checks if a result is decentralized storage (IPFS, Arweave).
561
+ */
562
+ declare function isDecentralizedStorage(result: AtomLabelDetectionResult): result is IpfsDetectionResult | ArweaveDetectionResult;
563
+
365
564
  /**
366
565
  * Shared type definitions for atom search functionality
367
- * Used by both revel8-explorer and intuition-extension
566
+ * Used by both hivemind-explorer and intuition-extension
368
567
  */
369
568
  /**
370
569
  * Vault data from GraphQL response
@@ -474,7 +673,7 @@ interface SearchResult<T extends GraphQLAtom = GraphQLAtom> {
474
673
  * Provides stake-first ranking with relevance as secondary sort
475
674
  *
476
675
  * @example
477
- * import { rankAtoms } from '@revel8/core'
676
+ * import { rankAtoms } from '@hivemindhq/core'
478
677
  * const rankedResults = rankAtoms(response.data.atoms, searchTerm)
479
678
  */
480
679
 
@@ -570,4 +769,111 @@ declare function highlightMatch(text: string, searchTerm: string): React__defaul
570
769
  */
571
770
  declare function formatTermId(termId: string): string;
572
771
 
573
- export { ATOM_TYPES, type AtomCreator, type AtomType, type AtomTypeInput, type AtomValue, type AtomVault, type FormatCryptoAmountOptions, type FormattedCryptoAmount, type GraphQLAtom, type RankedAtom, type SearchResult, type SearchSummary, calculateMatchScore, capitalize, capitalizeFirstLetter, cn, ellipsizeHex, ellipsizeString, formatAtomType, formatCompact, formatCryptoAmount, formatStake, formatTermId, getAtomDescription, getAtomDisplayName, getAtomImage, getAtomType, highlightMatch, ipfsToHttp, isEntityType, isPlainTextType, isPredicateType, isRawDataType, rankAtoms, secondsToDhms, secondsToHms, shortenLabel, strengthenImageUrl, timeAgo, truncateId, truncateSignificantDigits, truncateString };
772
+ /**
773
+ * MultiVault Contract Error Mappings
774
+ *
775
+ * Maps Solidity error names from the MultiVault contract to user-friendly messages.
776
+ * These errors are thrown by the Intuition Protocol's MultiVault contract.
777
+ *
778
+ * @see intuition-contracts-v2/src/protocol/MultiVault.sol
779
+ * @see intuition-contracts-v2/src/protocol/MultiVaultCore.sol
780
+ */
781
+ interface MultiVaultErrorInfo {
782
+ /** The Solidity error name as it appears in the contract */
783
+ errorName: string;
784
+ /** User-friendly message to display in the UI */
785
+ userMessage: string;
786
+ /** More detailed explanation for tooltips or error details */
787
+ description: string;
788
+ /** Category for grouping/filtering errors */
789
+ category: 'atom' | 'triple' | 'deposit' | 'redeem' | 'balance' | 'limits' | 'batch' | 'approval' | 'existence' | 'epoch' | 'wallet' | 'internal';
790
+ /** Whether this error is commonly encountered by users */
791
+ isCommon: boolean;
792
+ }
793
+ /**
794
+ * Result of parsing a MultiVault error
795
+ */
796
+ interface ParsedMultiVaultError {
797
+ /** User-friendly message to display in the UI */
798
+ userMessage: string;
799
+ /** More detailed explanation for tooltips or error details */
800
+ description: string;
801
+ /** Whether this error is commonly encountered by users */
802
+ isCommon: boolean;
803
+ /** The original error name if matched, undefined if fallback */
804
+ errorName?: string;
805
+ /** The error category if matched */
806
+ category?: MultiVaultErrorInfo['category'];
807
+ /** Whether this was a known MultiVault error */
808
+ isMultiVaultError: boolean;
809
+ }
810
+ /**
811
+ * Complete mapping of MultiVault contract errors to user-friendly messages.
812
+ *
813
+ * @example
814
+ * ```typescript
815
+ * const errorInfo = MULTIVAULT_ERRORS['MultiVault_AtomExists']
816
+ * toast.error(errorInfo.userMessage)
817
+ * ```
818
+ */
819
+ declare const MULTIVAULT_ERRORS: Record<string, MultiVaultErrorInfo>;
820
+ /**
821
+ * All error categories for filtering/grouping
822
+ */
823
+ declare const ERROR_CATEGORIES: readonly ["atom", "triple", "deposit", "redeem", "balance", "limits", "batch", "approval", "existence", "epoch", "wallet", "internal"];
824
+ type ErrorCategory = (typeof ERROR_CATEGORIES)[number];
825
+ /**
826
+ * Get all errors marked as commonly encountered by users
827
+ */
828
+ declare const COMMON_ERRORS: Record<string, MultiVaultErrorInfo>;
829
+ /**
830
+ * Total count of mapped errors
831
+ */
832
+ declare const TOTAL_ERROR_COUNT: number;
833
+ /**
834
+ * Parse a contract error and return user-friendly error information
835
+ *
836
+ * This function attempts to match the error against known MultiVault errors
837
+ * and returns structured information for display in the UI.
838
+ *
839
+ * @param error - The error object from a contract call
840
+ * @returns Parsed error information with user-friendly message
841
+ *
842
+ * @example
843
+ * ```typescript
844
+ * try {
845
+ * await createAtom(...)
846
+ * } catch (err) {
847
+ * const parsed = parseMultiVaultError(err)
848
+ * toast.error(parsed.userMessage)
849
+ * if (parsed.isMultiVaultError) {
850
+ * console.log('Contract error:', parsed.errorName)
851
+ * }
852
+ * }
853
+ * ```
854
+ */
855
+ declare function parseMultiVaultError(error: unknown): ParsedMultiVaultError;
856
+ /**
857
+ * Check if an error is a specific MultiVault error
858
+ *
859
+ * @param error - The error to check
860
+ * @param errorName - The specific error name to check for
861
+ * @returns True if the error matches the specified error name
862
+ *
863
+ * @example
864
+ * ```typescript
865
+ * if (isMultiVaultError(err, 'MultiVault_AtomExists')) {
866
+ * // Handle atom already exists case
867
+ * }
868
+ * ```
869
+ */
870
+ declare function isMultiVaultError(error: unknown, errorName: keyof typeof MULTIVAULT_ERRORS): boolean;
871
+ /**
872
+ * Check if an error is any known MultiVault error
873
+ *
874
+ * @param error - The error to check
875
+ * @returns True if the error is a known MultiVault error
876
+ */
877
+ declare function isKnownMultiVaultError(error: unknown): boolean;
878
+
879
+ export { ATOM_TYPES, type AddressDetectionResult, type ArweaveDetectionResult, type AtomCreator, type AtomIdDetectionResult, type AtomLabelDetectionResult, type AtomType, type AtomTypeInput, type AtomValue, type AtomVault, COMMON_ERRORS, type DomainDetectionResult, ERROR_CATEGORIES, type EnsDetectionResult, type ErrorCategory, type FormatCryptoAmountOptions, type FormattedCryptoAmount, type GraphQLAtom, type IpfsDetectionResult, MULTIVAULT_ERRORS, type MultiVaultErrorInfo, type ParsedMultiVaultError, type RankedAtom, type SearchResult, type SearchSummary, type SocialDetectionResult, type SocialPlatform, TOTAL_ERROR_COUNT, type TextDetectionResult, type UrlDetectionResult, calculateMatchScore, capitalize, capitalizeFirstLetter, cn, detectAtomLabel, ellipsizeHex, ellipsizeString, formatAtomType, formatCompact, formatCryptoAmount, formatStake, formatTermId, getAtomDescription, getAtomDisplayName, getAtomImage, getAtomType, highlightMatch, ipfsToHttp, isAtomLabelKind, isDecentralizedStorage, isEntityType, isKnownMultiVaultError, isMultiVaultError, isOnChainIdentity, isPlainTextType, isPredicateType, isRawDataType, isSameAtomLabel, isWebReference, parseMultiVaultError, rankAtoms, secondsToDhms, secondsToHms, shortenLabel, strengthenImageUrl, timeAgo, truncateId, truncateSignificantDigits, truncateString };
@@ -1,5 +1,5 @@
1
- export { ATOM_TYPES, calculateMatchScore, formatAtomType, formatStake, formatTermId, getAtomDescription, getAtomDisplayName, getAtomImage, getAtomType, highlightMatch, isEntityType, isPlainTextType, isPredicateType, isRawDataType, rankAtoms } from '../chunk-H4RMZQ2Z.js';
2
- export { capitalize, capitalizeFirstLetter, ellipsizeHex, ellipsizeString, formatCompact, formatCryptoAmount, ipfsToHttp, secondsToDhms, secondsToHms, shortenLabel, strengthenImageUrl, timeAgo, truncateId, truncateSignificantDigits, truncateString } from '../chunk-ERZSVDIB.js';
1
+ export { ATOM_TYPES, COMMON_ERRORS, ERROR_CATEGORIES, MULTIVAULT_ERRORS, TOTAL_ERROR_COUNT, calculateMatchScore, detectAtomLabel, formatAtomType, formatStake, formatTermId, getAtomDescription, getAtomDisplayName, getAtomImage, getAtomType, highlightMatch, isAtomLabelKind, isDecentralizedStorage, isEntityType, isKnownMultiVaultError, isMultiVaultError, isOnChainIdentity, isPlainTextType, isPredicateType, isRawDataType, isSameAtomLabel, isWebReference, parseMultiVaultError, rankAtoms } from '../chunk-VU3OPG32.js';
2
+ export { capitalize, capitalizeFirstLetter, ellipsizeHex, ellipsizeString, formatCompact, formatCryptoAmount, ipfsToHttp, secondsToDhms, secondsToHms, shortenLabel, strengthenImageUrl, timeAgo, truncateId, truncateSignificantDigits, truncateString } from '../chunk-RW4JXOAM.js';
3
3
  export { cn } from '../chunk-VIRNUAYY.js';
4
4
  //# sourceMappingURL=index.js.map
5
5
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hivemindhq/core",
3
- "version": "0.4.0",
3
+ "version": "0.5.0",
4
4
  "description": "Shared components, utilities, and types for hivemindhq applications",
5
5
  "author": "Kylan Hurt <kylan@hivemindhq.io>",
6
6
  "license": "ISC",
@@ -32,15 +32,9 @@
32
32
  },
33
33
  "files": [
34
34
  "dist",
35
+ "src",
35
36
  "tailwind.config.js"
36
37
  ],
37
- "scripts": {
38
- "build": "tsup",
39
- "dev": "tsup --watch",
40
- "clean": "rm -rf dist",
41
- "typecheck": "tsc --noEmit",
42
- "prepublishOnly": "pnpm run build"
43
- },
44
38
  "peerDependencies": {
45
39
  "react": "^18.0.0 || ^19.0.0",
46
40
  "react-dom": "^18.0.0 || ^19.0.0",
@@ -87,8 +81,8 @@
87
81
  "devDependencies": {
88
82
  "@types/react": "^18.0.0 || ^19.0.0",
89
83
  "@types/react-dom": "^18.0.0 || ^19.0.0",
90
- "react": "^19.0.0",
91
- "react-dom": "^19.0.0",
84
+ "react": "19.2.0",
85
+ "react-dom": "19.2.0",
92
86
  "tsup": "^8.0.0",
93
87
  "typescript": "^5.0.0"
94
88
  },
@@ -103,5 +97,15 @@
103
97
  "repository": {
104
98
  "type": "git",
105
99
  "url": "https://github.com/hivemindhq-io/core.git"
100
+ },
101
+ "scripts": {
102
+ "build": "tsup",
103
+ "dev": "tsup --watch",
104
+ "clean": "rm -rf dist",
105
+ "typecheck": "tsc --noEmit",
106
+ "version:patch": "pnpm version patch --no-git-tag-version",
107
+ "version:minor": "pnpm version minor --no-git-tag-version",
108
+ "version:major": "pnpm version major --no-git-tag-version",
109
+ "release": "pnpm run build && pnpm publish --no-git-checks --access public"
106
110
  }
107
- }
111
+ }
@@ -0,0 +1,21 @@
1
+ export const AtomIcon = ({ ...props }: React.SVGProps<SVGSVGElement>) => {
2
+ return (
3
+ <svg
4
+ xmlns="http://www.w3.org/2000/svg"
5
+ width="24"
6
+ height="24"
7
+ viewBox="0 0 24 24"
8
+ fill="none"
9
+ stroke="rgba(255,255,255,0.6)"
10
+ strokeWidth="1.5"
11
+ strokeLinecap="round"
12
+ strokeLinejoin="round"
13
+ className="lucide lucide-atom"
14
+ {...props}
15
+ >
16
+ <circle cx="12" cy="12" r="1" />
17
+ <path d="M20.2 20.2c2.04-2.03.02-7.36-4.5-11.9-4.54-4.52-9.87-6.54-11.9-4.5-2.04 2.03-.02 7.36 4.5 11.9 4.54 4.52 9.87 6.54 11.9 4.5Z" />
18
+ <path d="M15.7 15.7c4.52-4.54 6.54-9.87 4.5-11.9-2.03-2.04-7.36-.02-11.9 4.5-4.52 4.54-6.54 9.87-4.5 11.9 2.03 2.04 7.36.02 11.9-4.5Z" />
19
+ </svg>
20
+ )
21
+ }