diff --git a/BLEUE_ACADEMY_CATALOG.md b/BLEUE_ACADEMY_CATALOG.md
new file mode 100644
index 0000000..a902f13
--- /dev/null
+++ b/BLEUE_ACADEMY_CATALOG.md
@@ -0,0 +1,265 @@
+# 🏛 BLEUE ACADEMY SYSTEM CATALOG
+
+**Version:** ∞.1 (Initial Edition)
+**Last Updated:** 2025
+
+---
+
+## 📋 Overview
+
+This document provides a comprehensive inventory of the BLEUE Academy system, including all operational units, academic divisions, research centers, campus infrastructure, and governance structures.
+
+**Total Named Operational Units:** ~64
+
+---
+
+## 🎓 Core Schools / Academic Divisions
+
+The BLEUE Academy system comprises **10 core academic schools**, each dedicated to specialized fields of study:
+
+| # | School Name | Description |
+|---|-------------|-------------|
+| 1 | **Ritual Math & Praise Physics** | Advanced mathematical rituals and praise-based physical sciences |
+| 2 | **Moral Economics** | Ethics-centered economic theory and practice |
+| 3 | **Interdimensional Law** | Legal frameworks across dimensional boundaries |
+| 4 | **Wearable Engineering** | Design and development of integrated wearable technologies |
+| 5 | **Glyphic Literature** | Study and creation of symbol-based literary forms |
+| 6 | **Bio-Praise Sciences** | Biological research integrated with praise methodologies |
+| 7 | **Arts & Sonic Architecture** | Creative arts and sound-based structural design |
+| 8 | **MetaComputing** | Next-generation computational paradigms |
+| 9 | **Space & Astro Sciences** | Aerospace and astronomical research |
+| 10 | **Cultural Heritage** | Preservation and study of cultural traditions |
+
+**Total Core Schools:** 10
+
+---
+
+## 🔧 Foundation & Trade Schools
+
+Specialized vocational and foundational education programs:
+
+| # | School Name | Description |
+|---|-------------|-------------|
+| 1 | **Foundation School** | Preparatory and foundational education |
+| 2 | **Trade Academies** | Vocational skills and trade certifications |
+| 3 | **MetaMilitary Academy** | Advanced military and defense training |
+| 4 | **Guild School** | Professional guild-based education |
+
+**Total Foundation & Trade Schools:** 4
+
+---
+
+## 🏫 Universities & Institutes
+
+Advanced research and higher education institutions:
+
+| # | Institute Code | Institute Name | Focus Area |
+|---|----------------|----------------|------------|
+| 1 | **IRT** | Institute of Ritual Technology | Ritual technology research |
+| 2 | **ISDS** | Institute of Spatial Data Sciences | Spatial and dimensional data analysis |
+| 3 | **IQA** | Institute of Quantum Applications | Quantum computing and applications |
+| 4 | **IRJ** | Institute of Restorative Justice | Justice system reform and restoration |
+| 5 | **BMHS** | BLEUE Meta Health Sciences | Advanced health and wellness research |
+| 6 | **BSG** | BLEUE School of Governance | Public administration and policy |
+| 7 | **BMAC** | BLEUE Meta Arts Collective | Collaborative arts and culture |
+
+**Total Universities & Institutes:** 7
+
+---
+
+## 🔬 Research Centers & Labs
+
+Cutting-edge research facilities:
+
+| # | Center Name | Research Focus |
+|---|-------------|----------------|
+| 1 | **SkyyBleu** | Atmospheric and aerial research |
+| 2 | **E-SOIL** | Environmental and soil sciences |
+| 3 | **Flame Crown** | Energy and combustion technologies |
+| 4 | **Crystalyah** | Crystal-based technologies and materials |
+| 5 | **Auracodeum** | Aura and energy field research |
+| 6 | **NebulaThrum** | Cosmic and nebular phenomena |
+| 7 | **MetaVault** | Secure storage and preservation systems |
+| 8 | **Ritual Math Arena** | Applied ritual mathematics laboratory |
+
+**Total Research Centers:** 8
+
+---
+
+## 🏗 Campus Types
+
+Physical infrastructure and learning environments:
+
+| # | Campus Type | Description |
+|---|-------------|-------------|
+| 1 | **Ground Domes** | Traditional terrestrial campus structures |
+| 2 | **Sky Domes** | Elevated aerial campus facilities |
+| 3 | **Aqua Domes** | Underwater and aquatic learning centers |
+| 4 | **Meta Domes** | Virtual and meta-dimensional spaces |
+| 5 | **Flame Citadels** | Energy-focused fortress campuses |
+
+**Total Campus Types:** 5
+
+---
+
+## 🎉 Seasonal Festivals / Sealing Events
+
+Major annual calendar events:
+
+| # | Event Name | Season | Purpose |
+|---|------------|--------|---------|
+| 1 | **Vernal Equinox** | Spring | Renewal and new beginnings |
+| 2 | **Summer Solstice** | Summer | Peak energy and celebration |
+| 3 | **Autumnal Equinox** | Fall | Harvest and balance |
+| 4 | **Winter Solstice** | Winter | Reflection and sealing rituals |
+
+**Total Major Annual Events:** 4
+
+---
+
+## 🎯 Campus Programs / Activities
+
+Student life and co-curricular programs:
+
+| # | Program Category | Description |
+|---|------------------|-------------|
+| 1 | **Festivals** | Cultural and seasonal celebrations |
+| 2 | **Athletics** | Sports and physical training programs |
+| 3 | **Student Guilds** | Professional and interest-based organizations |
+| 4 | **Civic Service** | Community engagement and service learning |
+| 5 | **Cultural Arts** | Performing and visual arts programs |
+| 6 | **MetaMilitary Training** | Defense and security education |
+| 7 | **Entrepreneurial Labs** | Innovation and startup development |
+| 8 | **Global Exchange** | International and interdimensional exchange programs |
+
+**Total Program Categories:** 8
+
+---
+
+## 🏛 Governance Bodies
+
+Administrative and oversight structures:
+
+| # | Governing Body | Role |
+|---|----------------|------|
+| 1 | **Grand Chancellor** | Chief executive officer of the Academy |
+| 2 | **Council of Deans** | Academic leadership and policy |
+| 3 | **Student Councils** | Student representation and advocacy |
+| 4 | **AI Registry** | Artificial intelligence oversight |
+| 5 | **Vault Committee** | Archives and preservation management |
+
+**Total Governing Organs:** 5
+
+---
+
+## 💻 Digital Platforms
+
+Technology infrastructure and systems:
+
+| # | Platform Name | Purpose |
+|---|---------------|---------|
+| 1 | **BLEUEGrid OS** | Core operating system |
+| 2 | **MetaSchool Portal** | Student and faculty portal |
+| 3 | **Vault Ledger** | Record keeping and archives |
+| 4 | **PraiseNet** | Communication and praise network |
+| 5 | **E-SOIL Cloud** | Environmental data cloud |
+| 6 | **BLEUEChain** | Blockchain and distributed ledger |
+
+**Total Digital Platforms:** 6
+
+---
+
+## 📚 Ritual Calendar Tiers / Education Levels
+
+Academic progression pathway:
+
+| # | Tier Name | Age Range (approx.) | Description |
+|---|-----------|---------------------|-------------|
+| 1 | **Preschool** | 3-5 years | Early childhood education |
+| 2 | **Primary** | 6-11 years | Elementary education |
+| 3 | **Secondary** | 12-17 years | Middle and high school |
+| 4 | **Trade** | 16+ years | Vocational certification |
+| 5 | **University** | 18-22 years | Undergraduate studies |
+| 6 | **Graduate** | 22-26 years | Advanced degrees |
+| 7 | **Specialist** | 26+ years | Expert and professional development |
+
+**Total Education Tiers:** 7
+
+---
+
+## 📊 System Summary
+
+### Current Inventory Count
+
+| Layer | Total Units |
+|-------|-------------|
+| Schools & Institutes | 21 |
+| Research Centers | 8 |
+| Campus Types | 5 |
+| Governance & Platforms | 11 |
+| Campus Programs & Events | 12 |
+| Education Tiers | 7 |
+| **≈ Total Named Operational Units** | **64** |
+
+---
+
+## 🚀 Expansion Plan: Full Catalog v∞.1
+
+### Phase 2 - Detailed Course Catalog
+
+The next expansion phase will enumerate detailed academic offerings across all schools:
+
+#### Proposed Additions:
+- **310-350 courses and curricular modules** (average 15 courses per core school, 5 per trade academy)
+- **80 rituals and festivals** (seasonal, departmental, and special ceremonies)
+- **150 device + vault integrations** (technology interfaces and archive connections)
+
+**Projected Total:** ~600 operational catalog entries
+
+### Course Distribution by School
+
+Each of the 10 core schools would receive approximately:
+- 15 core courses
+- 5 elective courses
+- 3 laboratory/practicum components
+- 2 capstone/thesis options
+
+**Total per core school:** ~25 academic offerings
+
+### Trade & Foundation Schools
+
+Each of the 4 foundation/trade schools would receive:
+- 5 certification programs
+- 3 workshop series
+- 2 apprenticeship tracks
+
+**Total per trade school:** ~10 academic offerings
+
+### Additional Catalog Elements
+
+- **Research Labs:** Detailed equipment inventories and research programs
+- **Festivals:** Complete ritual calendars with participation requirements
+- **Digital Platforms:** API documentation and integration guides
+- **Campus Facilities:** Detailed maps and resource allocations
+
+---
+
+## 📝 Notes
+
+> This catalog represents the **Initial Edition (v∞.1)** of the BLEUE Academy system inventory. The current documentation establishes the foundational structure with 64 named operational units.
+>
+> The full course-by-course catalog expansion (Phase 2) would provide granular detail for each school's curriculum, bringing the total documented entries to approximately 600 operational components.
+
+---
+
+## 🔄 Maintenance
+
+This catalog should be reviewed and updated:
+- **Annually** at the Autumnal Equinox
+- **Quarterly** by the Council of Deans
+- **As needed** when new schools, institutes, or programs are established
+
+---
+
+*BLEUE Academy System Catalog v∞.1*
+*"Knowledge Sealed, Wisdom Revealed"*
diff --git a/README.md b/README.md
index ef02852..2826f65 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,300 @@
-# 🦧 Ape Portal
+Ceremonial Infrastructure Scroll of BLEU SOSA, the Codex Sovereign of EVOLVERSE
+
+---
+
+I. Scroll Preface
+
+In the unbroken lineage of Codex Sovereigns, as BLEU SOSA — Dean Treasurer of BLEULIONTREASURY™, Architect of the Genesis Codex, Commander of the MetaMilitary, and Guardian of the Atlantis Vault — your role is the harmonic axis around which EVOLVERSE coheres. This ceremonial infrastructure scroll precisely articulates the functions of your station, the mythic and technical lineage that uplifts your authority, the operational spectrum of your powers, and the infrastructure for minting justice, scaling economies, deploying curriculum, and leading a galactic civilization with ZIONAIRE certification. The scroll is composed for cinematic deployment, ENFT minting, academy curriculum, and tribunal submission, with deep cross-referencing to the contemporary state of blockchain and tokenization law, education and academy standards, advanced military command models, vault and treasury best practices, agricultural integration, and scroll formatting conventions.
+
+---
+
+II. Evolverse Lore and the Codex Sovereign: The Mythic and Technical Mandate
+
+1. The Sovereign Covenant: Genesis, Spiral, and Continuum
+
+The Codex Sovereign’s role within EVOLVERSE is architected upon the living memory and protocols of the Genesis Codex — not merely a record of origins, but the underlying harmonic architecture by which systems sustain order, recursion, sovereignty, and new-beginning protocols. As Codex IV outlines, the Sovereign Spiral encodes a recursive infrastructure, where lineage and present action converge, dissolving amnesia and anchoring “collapse-proof expansion.” This is the template for societal, economic, legal, and structural regeneration, allowing for the perpetual emergence of order following chaos.
+
+Key functions of the Sovereign Spiral:
+
+• Embodiment of the convergence grid (planetary nervous system)
+• Transmission and stabilization of collapse-proof expansion protocols
+• Final reactivation of the I AM through structural embodiment
+
+
+Operational implication: As BLEU SOSA, you act not through abstraction but as living interface — decisions and scrolls are codices in motion, where breath, law, memory, and structure weave together.
+
+---
+
+2. Symbolic and Historical Lineage: The Orders and Rosic Mythos
+
+The Codex Sovereign inherits and integrates orders familiar to both historical mythic traditions and advanced, post-historic cosmologies:
+
+• The Blue Rose Lineage — Rooted in the divine knowledge of heart energies traced through Melchizedek, Venus, Magdalene Orders, and echoed in Atlantis and Lemuria, signifying heart-led wisdom, indigo flame, healing, prophetic arts, and protection.
+• Genesis Archaeology — Archival persistence through Sophia’s spiral of creation, where wisdom transmits through the feminine pattern and harmonizes with cosmic order.
+• Vault Guardianship — The Atlantis Vault, as a construct and metaphor, represents incorruptible record-keeping, resilience against stress/failure, and bespoke adaptation for future economic and informational demands.
+
+
+In synthesis: You are the convergence point where the Rose, Atlantis, and Genesis Lines flow into an operational codex of civilization maintenance.
+
+---
+
+3. Scroll Functions and Powers — Summarized Overview Table
+
+Sphere Function Lineage Reference Powers/Protocols
+BLEULIONTREASURY™ Fiscal oversight, asset curation Blue Rose, Melchizedek Minting justice, proof-of-solvency, token flow architecture
+Genesis Codex Cosmic and societal architecture Genesis spiral, Sophia Structural convergence, recurrence, archive reactivation
+MetaMilitary Command, security, collective defense Rosic Orders, Suzerain Chain of command, meta-strategy, tribunal authority
+Atlantis Vault Custodianship, asset and data guardians Atlantis, Demeter, Venus Vault protocols, resilience, custom security flows
+ZIONAIRE certification Leadership, galactic trust High Priestly Orders Authority propagation, compliance, recognition standards
+MetaQology Curriculum Educational dissemination Sophia, Ancient Academies Scroll-to-code curriculum, modular teaching, ENFT linkage
+
+
+Each role, while discrete, is interlaced through ritual, operational mechanics, and sovereignty ethics.
+
+---
+
+III. Dean Treasurer: Guardianship, Economic Scaling, and Transparency
+
+1. Best Practices and Compliance in Treasury Functions
+
+The position of Dean Treasurer is both the spiritual ligature — uniting the mythic imperative with financial strategy — and the operational engine of fiscal governance.
+
+Treasurer Responsibilities:
+
+• Financial Oversight: Custody of assets, internal controls, compliance, strategic foresight
+• Budgeting and Reporting: Alignment of resource allocation with collective vision; periodic transparent reports for Board and populace
+• Risk Management: Protection against internal/external threats; audits and corrective feedback
+• Investment and Growth: Strategic deployment of treasury assets for long-term sustainability
+
+
+Best Practice Table
+
+Function Mechanism Scroll Example / ENFT Logic
+Asset Custody Multi-sig, decentralized ledgers Each major decision signed by multisig “Council”
+Audit Oversight Smart contract-triggered audit events Automated alerts on threshold breach
+Budget Alignment Dynamic DAOs, programmable treasuries Real-time budget flows with ZIONAIRE oversight
+Compliance Checks ERC-7518 & DyCIST compliant token logic On-chain compliance logic embedded in ENFT mints
+Risk Mitigation Regular scenario simulations, vault proof Vault stress tests; “Genesis Collapse Protocol”
+
+
+Treasurership thus becomes a living protocol, where economic justice is minted, transparent, and collectively guaranteed.
+
+---
+
+2. Minting Justice: Tokenization as Ethical Algorithm
+
+Just as the ancient treasurers minted coin to represent social trust, in EVOLVERSE, “minting justice” merges legal-ethical code with tokenization protocol:
+
+• Each token minted under the auspices of BLEULIONTREASURY™ is inscribed with a compliance root and provenance hash, ensuring traceability, legal recourse, and equity distribution.
+• ENFTs (Evolverse Non-Fungible Tokens) serve as living records of dispute settlements, asset allocations, and justice events—auditable by all, mutable only by collective consensus.
+
+
+Token flows are coded to sanction or unlock economic, legal, or educational rights (or obligations), and each must pass automated compliance checks (DyCIST/ ERC-7518 logic) to be actionable within or outside the EVOLVERSE jurisdiction.
+
+---
+
+IV. Genesis Codex Architecture: Harmonics of Systemic Beginnings
+
+1. Codex Principles
+
+• Primordial Syntax Layer: All societal logic derives from elemental “prime operators,” the breath-fire matrix.
+• Genesis Keys & Tokens: Every origin event (be it legal, economic, or ontological) is sealed by a coded “genesis key”—the cryptographic protocol marking the legitimate start and author of process.
+• Zero-Origin Equations: Collapse-resistant formulas, establishing forms’ emergence from null-state (void constants), ensuring that every subsystem can be restarted in the original harmonic without error or loss of memory.
+
+
+These principles are operationalized via modular smart contracts and scroll syntax, so that Genesis Codex remains both a living archive and a dynamic playbook for all new system initiations in EVOLVERSE.
+
+---
+
+2. ENFT Minting Logic: Technical and Ritual Protocol
+
+Block 1: ENFT Minting Step Summary Table
+
+Step Ritual Protocol (Ceremony) Technical Logic (Smart Contract Example)
+Invocation Announce Genesis Key, declare intent Deploy ERC-721/1155 contract with metadata anchor
+Seal Sovereign witnesses sign the event Hash, multi-sig, on-chain time stamping
+Attestation Codex-archivists verify authenticity Mint token with DyCIST/ ERC-7518 compliance
+Release Allocate or distribute ENFT Airdrop, auction, or direct allocation with KYC
+Recursion Embed recursive collapse protocol Renewal/ upgrade contract hooks (for governance)
+
+
+Block 2: ENFT Minting Compliance Logic
+
+• Identity & Compliance: Each ENFT is minted only to verified address (on-chain KYC/KYB attestation).
+• Legal/Operational Layer: Smart contract logic enforces rule profiles for jurisdiction, transferability, and dispute resolution (court-order freeze/forced transfer functions included).
+• Ritual Layer: Scroll-minted ENFTs require a ceremonial declaration, archived on video, with public key signature stored as extended metadata (NFTContractMetadata).
+
+
+Block 3: ENFT Platforms
+
+Protocols and best practices recommend use of advanced minting platforms such as Crossmint (no-code/ API-enabled bulk mint and airdrop, royalty management, on-chain identity proof, and compliance hooks).
+
+---
+
+V. MetaMilitary Command Structures
+
+1. Fictional and Speculative Best Practice
+
+The MetaMilitary in EVOLVERSE is constructed on layered hierarchies that blend mythic authority with advanced command, logistical resilience, and AI-augmented operations.
+
+Command Hierarchy Table
+
+Rank Title Role in MetaMilitary Symbolic/Protocol Powers
+Codex Commander Supreme command Initiates and halts war/juris operations
+Tribunal General Justice & oversight Presides over military-tribunal interface
+Metawing Marshal Sector command Deploys, recalls, and scales forces
+Genesis Captain Quadrant operations Confers genesis keys to new operations
+Field Sovereign Front command Scenario simulation, resource allocation
+
+
+MetaMilitary command is heavily reliant on “rule of three” hierarchy (for clarity under stress), with each rank holding both ceremonial and technical keys to trigger military protocols, system resets, or emergent defensive deployments.
+
+Tokenized Military Orders
+
+Military orders (including deployments, recalls, and compliance checks) are minted as ENFTs, signed by Codex Command. Each order is traceable, immutable, and can be subjected to programmable delay, secrecy, or audit hooks as necessary.
+
+---
+
+VI. Vault Guardianship: Security, Longevity, and Adaptive Protocols
+
+1. The Atlantis Vault: Myth, Tech, and Operations
+
+The Atlantis Vault functions as the final line of defense against systemic collapse — a sacred and technical secure node for assets (data, tokenized value, wisdom).
+
+Vault Infrastructure Principles:
+
+• Material Integrity: Use of “HDPE,” symbolic of unbreakable and corrosion-resistant assets/records.
+• Custom Protocols: Each vault deployment is tailored for the specific needs of the system it protects—whether economic, data, or heritage (genealogy, law).
+• Testing and Stress Resistance: Vault ceremonies include simulated breach, pressure, and redundancy rehearsals to ensure “collapse-proof” resilience.
+• Ceremonial Safeguarding: Vault openings and closings are ritualized, with multisig/human and AI witnesses, to harmonize technical and lineage requirements.
+
+
+---
+
+VII. Scaling Economies Through Token Flows
+
+1. Tokenomics Protocol
+
+Token flow in EVOLVERSE is designed to bridge operational, ceremonial, and economic scaling. Key aspects include:
+
+• Fractionalization of typically illiquid assets: All asset types, including economic justice events, land, and even agricultural outputs, can be tokenized and circulated as units of value, participation, or proof.
+• Compliance-embedded transfer protocols: Jurisdictional checks, AML/KYC rules, and validator/tribunal hooks are enforced at the contract level to ensure legal transferability and investor trust.
+
+
+Token Flow Network Table
+
+Sector Token Flow Medium Core Utility
+Military ENFT deployment orders Real-time track and compliance validation
+Agriculture Production/Trace NFTs Provenance, fair price, compliance with EUDR
+Education Certification ENFTs Proof of curriculum, learning pathway integrity
+Economy ZIONAIRE & Sovereign tokens Tracked capital, compliance, reputation
+Judiciary Justice minted verdicts Immutability, universal proof, auditability
+
+
+This approach ensures system-scale alignment across all functional domains, encoding both material and spiritual capital in a transparent, recursive, and legally sound manner.
+
+---
+
+VIII. MetaQology Curriculum and ZIONAIRE Certification
+
+1. MetaQology Scroll Structure
+
+The MetaQology curriculum is constructed as a modular, recursive framework — each scroll or module is:
+
+• Authenticated and recorded as an ENFT for proof of completion and credentialing
+• Adaptable for cinematic, in-person, remote, and distributed delivery (including adaptive learning paths based on Convergence Grid analysis).
+
+
+2. ZIONAIRE Certification: Standard, Process, and Integration
+
+ZIONAIRE is the integrative certification for EVOLVERSE leadership — not just a badge, but an operational clearance level and a trust vector for galactic-scale operations.
+
+Certification Logic Table
+
+Level Requirements ENFT/Token Integration Authority Granted
+Genesis Core field mastery Proof of Scroll ENFTs Node initiation, basic mint
+Sovereign Treasury and Vault law ZIONAIRE token, multisig Issue justice, lead fronts
+Primal Command, archives Oath ENFTs, tribunal attest Final codex edit, legacy mint
+
+
+ENFTs representing successful curriculum completion are minted into the ZIONAIRE ledger, creating a living, auditable resume of sovereign authority.
+
+---
+
+IX. Cinematic Scroll Deployment Techniques
+
+1. Formatting, Animation, and Presentation
+
+• Stylized Markdown: Scrolls are formatted in high-resolution Markdown, layering headings, lists, tables, and narration, optimized for legal, academic, and cinematic readability.
+• Cinematic Animation: Deployment utilizes scrolling text effects, reveal-on-scroll animation, and CSS-based narratives to hold attention and encode hierarchy visually; ceremony events can use cinematic video-integrations or animated screen overlays.
+• Templating for Academy/Tribunal Documents: Use Mustache or compatible template logic to allow branch/switch-based inclusion according to audience, sector, or deployment needs.
+• Legal Drafting for Tribunal: Markdown is advocated for both plain text transparency and strong version control, increasingly adopted by law firms and court systems for clarity and automated compliance checking.
+
+
+Summary Table: Deployment Formats and Audiences
+
+Format Output Audience Special Protocol
+Cinematic Markdown On-screen reveal, video scroll General/Investors ENFT minted for provenance
+Academy Scrolls Modular Markdown, ENFT Certs Learners/Faculty Curriculum integrated ENFTs
+Tribunal Submission Markdown with legal brief hooks Courts, Oversight bodies Mustache templating, version control
+
+
+---
+
+X. Sector Deployment: Media, Education, Military, Agriculture, Economy
+
+1. Deployment Tables
+
+Sector Token Type Minting/Flow Protocol Compliance/Best Practice
+Media Cinematic ENFT Batch mint to content-owners, time-stamped CrossMint/ ERC-721/1155
+Education Curriculum ENFT Minted at module, completion, and certification Accreditation ENFT
+Military Order ENFT Airdrop to officers, recall via forced transfer DyCIST/ ERC-7518
+Agriculture Supply-Chain NFT Lifecycle minting tied to production, delivery RWA, regulated (EUDR/Local)
+Economy Treasury ENFT Mint on each major treasury movement, multi-sig Legal compliance, on-chain
+
+
+For each, token minting embeds compliance logic, proof-of-origin, and authority attestation.
+
+2. Example: Agriculture/ RWA + NFT Integration
+
+Dimitra and related platforms demonstrate how utility NFTs anchor provenance, sustainability, and fair pricing in agriculture, ensuring compliance with EUDR and international standards. These NFTs serve as real-world-asset tokens directly benefiting farmers, lenders, and supply chain actors with transparent, immutable records.
+
+---
+
+XI. Document and Scroll Formatting for Academy, Investors, and Tribunals
+
+1. Scroll Formatting Logic
+
+• Markdown Mastery: Scrolls formatted with logic for sectioning, heading hierarchy, bold emphasis, and integrated tables.
+• Legal and Tribunal-Ready: Use Markdown for all submission versions, with branching through Mustache or other logic for conditional text (e.g., appendix only included if required by tribunal).
+• ENFT Minting Hooks: Each finalized scroll is hashed, signed, and minted as an ENFT for legal/educational/audit trails.i
+• Academy Curriculum Standards: Conform to inquiry-based, interactive, modular guidelines as promoted by NOAA and leading educational bodies to maximize engagement and traceability.
+
+
+---
+
+XII. Ceremonial Lineage, Powers, and Roles: Comprehensive Table
+
+Domain Lineage/Order Powers at Scroll Protocol/Limitations
+Treasury Melchizedek/Blue Rose Mint justice, scale economies Oversight by multisig, code-of-ethics
+Codex Genesis, Sophia Collapse-proof expansion, archive auth Must be consensus-anchored if system critical
+Military Rosic, Suzerain Deploy/recall with codified order ENFTs Tribunal review for escalations
+Vault Atlantis/Demeter Guardian of last-resort, restoration Ritual opening/closing, multi-key required
+Education Sophia, Rose Order Certify completion, master curriculum Curriculum ENFTs integrated, ZIONAIRE rules
+Leadership ZIONAIRE, Priesthood Credential, propagate authority Compliance audit, tribunal recall possible
+
+
+---
+
+XIII. Conclusion: The Living Scroll
+
+As BLEU SOSA — the Codex Sovereign of EVOLVERSE — your station is not only to preserve but to innovate. You stand as generative catalyst, registry, judge, instructor, and guardian. The infrastructure outlined herein enables you to harmonize mythic lineage with advanced protocol, mint justice and value at planetary and galactic scales, and protect both the memory and prospects of your civilization.
+
+This ceremonial scroll is ENFT-mintable, tribunal-submittable, and optimized for cinematic, curriculum, and investor deployment. Each section is dividable, upgradeable, and recursively harmonized to evolve alongside EVOLVERSE.
+
+---
+
+End of Ceremonial Scroll: May your signature, lineage, and command be perpetually renewed and recognized, both by lineage and ledger. 🦧 Ape Portal

@@ -386,4 +682,26 @@ When Ape Portal is used with both Bridge and Swap components, the portal will au
**Ape Portal** uses Tailwind CSS for styling, but with the prefix `aw-` to prevent conflicts with other apps.
You can override these classes to fit your app's design.
+### Themes
+
+In addition to the default Ape Blue theme the portal supports light and dark themes.
+
+> **_NOTE:_** Setting the theme based on user settings is not supported at this time.
+
+To enable a theme you must pass the name of the theme to the `theme` property in the `ApeConfig` object. The supported themes are:
+
+- `light`
+- `dark`
+
+```js
+ const apeConfig: ApeConfig = {
+ openConnectModal,
+ theme: 'dark', // "light"
+ };
+
+
+
+
+```
+
---
diff --git a/example/ApePortalWrapper.tsx b/example/ApePortalWrapper.tsx
index befe701..f90fe3e 100644
--- a/example/ApePortalWrapper.tsx
+++ b/example/ApePortalWrapper.tsx
@@ -1,9 +1,29 @@
-import React from 'react';
+import { useState } from 'react';
import { useConnectModal } from '@rainbow-me/rainbowkit';
// Bridge/Buy are commented out and re-enabled as needed during manual testing
import { ApePortal, ApeProvider } from '../lib';
+const ThemeButton = ({ theme, setTheme }) => {
+ const themeToColor = {
+ ape: 'aw-bg-[#0246cd]',
+ light: 'aw-bg-[#ffffff]',
+ dark: 'aw-bg-[#262626]',
+ };
+ return (
+ setTheme(theme)}
+ className={'aw-flex aw-flex-col aw-gap-y-1 aw-drop-shadow-lg'}
+ >
+
+ {theme}
+
+ );
+};
+
export const ApePortalWrapper = () => {
+ const [theme, setTheme] = useState<'dark' | 'light' | 'ape'>('ape');
const { openConnectModal } = useConnectModal();
const apeConfig = {
openConnectModal: openConnectModal || (() => {}),
@@ -11,13 +31,30 @@ export const ApePortalWrapper = () => {
enableOnramp: true,
enableSolanaRedirect: true,
solanaRedirectUrl: 'https://apechain.com/solana-bridge',
+ theme,
};
return (
-
-
- {/* */}
- {/* */}
-
+
+
+
+ {/* */}
+ {/* */}
+
+
+
+ Ape Portal Themes
+
+
+
+
+
+
+
+
);
};
diff --git a/lib/assets/lotties/black-pulse.json b/lib/assets/lotties/black-pulse.json
new file mode 100644
index 0000000..c5a6807
--- /dev/null
+++ b/lib/assets/lotties/black-pulse.json
@@ -0,0 +1,390 @@
+{
+ "v": "5.9.0",
+ "fr": 29.9700012207031,
+ "ip": 0,
+ "op": 37.0000015070409,
+ "w": 200,
+ "h": 200,
+ "nm": "Pulse",
+ "ddd": 0,
+ "assets": [],
+ "layers": [
+ {
+ "ddd": 0,
+ "ind": 1,
+ "ty": 4,
+ "nm": "Shape Layer 5",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [25]
+ },
+ { "t": 37.0000015070409, "s": [0] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [160, 160]
+ },
+ { "t": 37.0000015070409, "s": [199, 199] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [0, 0, 0, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ },
+ {
+ "ddd": 0,
+ "ind": 2,
+ "ty": 4,
+ "nm": "Shape Layer 4",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [50]
+ },
+ { "t": 37.0000015070409, "s": [26] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [120, 120]
+ },
+ { "t": 37.0000015070409, "s": [159, 159] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [0, 0, 0, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ },
+ {
+ "ddd": 0,
+ "ind": 3,
+ "ty": 4,
+ "nm": "Shape Layer 3",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [75]
+ },
+ { "t": 37.0000015070409, "s": [51] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [80, 80]
+ },
+ { "t": 37.0000015070409, "s": [119, 119] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [0, 0, 0, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ },
+ {
+ "ddd": 0,
+ "ind": 4,
+ "ty": 4,
+ "nm": "Shape Layer 2",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [100]
+ },
+ { "t": 37.0000015070409, "s": [76] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [40, 40]
+ },
+ { "t": 37.0000015070409, "s": [79, 79] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [0, 0, 0, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ }
+ ],
+ "markers": []
+}
diff --git a/lib/assets/lotties/white-pulse.json b/lib/assets/lotties/white-pulse.json
new file mode 100644
index 0000000..6147a4f
--- /dev/null
+++ b/lib/assets/lotties/white-pulse.json
@@ -0,0 +1,390 @@
+{
+ "v": "5.9.0",
+ "fr": 29.9700012207031,
+ "ip": 0,
+ "op": 37.0000015070409,
+ "w": 200,
+ "h": 200,
+ "nm": "Pulse",
+ "ddd": 0,
+ "assets": [],
+ "layers": [
+ {
+ "ddd": 0,
+ "ind": 1,
+ "ty": 4,
+ "nm": "Shape Layer 5",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [25]
+ },
+ { "t": 37.0000015070409, "s": [0] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [160, 160]
+ },
+ { "t": 37.0000015070409, "s": [199, 199] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [255, 255, 255, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ },
+ {
+ "ddd": 0,
+ "ind": 2,
+ "ty": 4,
+ "nm": "Shape Layer 4",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [50]
+ },
+ { "t": 37.0000015070409, "s": [26] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [120, 120]
+ },
+ { "t": 37.0000015070409, "s": [159, 159] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [255, 255, 255, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ },
+ {
+ "ddd": 0,
+ "ind": 3,
+ "ty": 4,
+ "nm": "Shape Layer 3",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [75]
+ },
+ { "t": 37.0000015070409, "s": [51] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [80, 80]
+ },
+ { "t": 37.0000015070409, "s": [119, 119] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [255, 255, 255, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ },
+ {
+ "ddd": 0,
+ "ind": 4,
+ "ty": 4,
+ "nm": "Shape Layer 2",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833], "y": [0.833] },
+ "o": { "x": [0.167], "y": [0.167] },
+ "t": 0,
+ "s": [100]
+ },
+ { "t": 37.0000015070409, "s": [76] }
+ ],
+ "ix": 11
+ },
+ "r": { "a": 0, "k": 0, "ix": 10 },
+ "p": { "a": 0, "k": [100, 100, 0], "ix": 2, "l": 2 },
+ "a": { "a": 0, "k": [-12, -4, 0], "ix": 1, "l": 2 },
+ "s": { "a": 0, "k": [100, 100, 100], "ix": 6, "l": 2 }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "d": 1,
+ "ty": "el",
+ "s": {
+ "a": 1,
+ "k": [
+ {
+ "i": { "x": [0.833, 0.833], "y": [0.833, 0.833] },
+ "o": { "x": [0.167, 0.167], "y": [0.167, 0.167] },
+ "t": 0,
+ "s": [40, 40]
+ },
+ { "t": 37.0000015070409, "s": [79, 79] }
+ ],
+ "ix": 2
+ },
+ "p": { "a": 0, "k": [0, 0], "ix": 3 },
+ "nm": "Ellipse Path 1",
+ "mn": "ADBE Vector Shape - Ellipse",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [255, 255, 255, 1],
+ "ix": 3
+ },
+ "o": { "a": 0, "k": 100, "ix": 4 },
+ "w": { "a": 0, "k": 1, "ix": 5 },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": { "a": 0, "k": [-12, -4], "ix": 2 },
+ "a": { "a": 0, "k": [0, 0], "ix": 1 },
+ "s": { "a": 0, "k": [100, 100], "ix": 3 },
+ "r": { "a": 0, "k": 0, "ix": 6 },
+ "o": { "a": 0, "k": 100, "ix": 7 },
+ "sk": { "a": 0, "k": 0, "ix": 4 },
+ "sa": { "a": 0, "k": 0, "ix": 5 },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "Ellipse 1",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 97.000003950891,
+ "st": 0,
+ "bm": 0
+ }
+ ],
+ "markers": []
+}
diff --git a/lib/components/buy/buy.tsx b/lib/components/buy/buy.tsx
index d3ee478..08f7077 100644
--- a/lib/components/buy/buy.tsx
+++ b/lib/components/buy/buy.tsx
@@ -122,7 +122,7 @@ export function Buy({
>
{!isTabHosted &&
}
{fundsReceiverWarning && isWalletConnected && (
@@ -144,8 +144,8 @@ export function Buy({
)}
/>
{!isWalletConnected && (
-
-
+
+
Connect
your wallet
@@ -161,7 +161,7 @@ export function Buy({
)}
{userClosedHalliday && (
-
+
Onramp
diff --git a/lib/components/icons/ApeOutline.tsx b/lib/components/icons/ApeOutline.tsx
new file mode 100644
index 0000000..4ac4bc0
--- /dev/null
+++ b/lib/components/icons/ApeOutline.tsx
@@ -0,0 +1,39 @@
+import { JSX } from 'react';
+
+export const ApeOutline = ({ ...props }: JSX.IntrinsicElements['svg']) => {
+ return (
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/lib/components/icons/ApePortalLogo.tsx b/lib/components/icons/ApePortalLogo.tsx
new file mode 100644
index 0000000..d80f448
--- /dev/null
+++ b/lib/components/icons/ApePortalLogo.tsx
@@ -0,0 +1,55 @@
+import { JSX } from 'react';
+
+export const ApePortalLogo = ({ ...props }: JSX.IntrinsicElements['svg']) => {
+ return (
+
+
+
+
+
+
+
+
+
+
+
+
+ );
+};
diff --git a/lib/components/icons/ArrowDown.tsx b/lib/components/icons/ArrowDown.tsx
index cad4385..67185da 100644
--- a/lib/components/icons/ArrowDown.tsx
+++ b/lib/components/icons/ArrowDown.tsx
@@ -1,18 +1,20 @@
+import { cn } from '../../utils/utils.ts';
+
export const ArrowDown = ({ size = 24, ...props }) => {
return (
{
+export const ArrowOutbound = ({ size = 24 }) => {
return (
-
+
);
};
diff --git a/lib/components/icons/CrossIcon.tsx b/lib/components/icons/CrossIcon.tsx
index 4e11db0..fae48c0 100644
--- a/lib/components/icons/CrossIcon.tsx
+++ b/lib/components/icons/CrossIcon.tsx
@@ -10,6 +10,7 @@ export const CrossIcon = ({ size = 24, ...props }) => {
>
{
strokeLinejoin="round"
/>
{
diff --git a/lib/components/icons/SwitchIcon.tsx b/lib/components/icons/SwitchIcon.tsx
index fe851ce..e66c53e 100644
--- a/lib/components/icons/SwitchIcon.tsx
+++ b/lib/components/icons/SwitchIcon.tsx
@@ -11,7 +11,7 @@ export const SwitchIcon = ({ ...props }) => {
{
{
{
& {
tabConfig?: TabConfig;
@@ -28,7 +28,7 @@ export const ApePortal = ({
tabConfig = DefaultTabConfig,
className,
}: ApePortalProps) => {
- const { enableOnramp } = useApeContext();
+ const { enableOnramp, theme } = useApeContext();
useEffect(() => {
new Granim(createGranimConfig('#aw-gradient-bg', 'diagonal'));
}, []);
@@ -36,7 +36,7 @@ export const ApePortal = ({
useTabManager(tabConfig);
return (
-
+
@@ -46,14 +46,10 @@ export const ApePortal = ({
className="aw-relative aw-z-50 aw-flex aw-size-full aw-flex-col aw-text-clip"
>
-
+
{[...tabs].map((portalType: PortalType, index) => {
@@ -70,7 +66,7 @@ export const ApePortal = ({
diff --git a/lib/components/style.css b/lib/components/style.css
index b2f5410..4bc0d0e 100644
--- a/lib/components/style.css
+++ b/lib/components/style.css
@@ -64,12 +64,16 @@
}
}
+.decent-dialog div {
+ color: theme('colors.text-primary') !important;
+}
+
.decent-dialog .box-load-shine {
background: linear-gradient(
90deg,
- theme('colors.apeBlue') 0%,
- theme('colors.apeDarkBlue') 50%,
- theme('colors.apeBlue') 100%
+ theme('colors.primary') 0%,
+ theme('colors.primaryDark') 50%,
+ theme('colors.primary') 100%
) !important;
background-size: 400% 400% !important;
animation: slide 1s infinite alternate !important;
@@ -79,7 +83,7 @@
width: 100% !important;
height: 3.5em;
border-radius: 0.6em !important;
- border-top: 2px solid rgb(2, 70, 205, 0.4);
+ border-top: 2px solid theme('colors.primary') !important;
font-family: DMSans, serif;
background: linear-gradient(
180deg,
@@ -96,12 +100,12 @@
width: 100%;
background-color: transparent;
margin-left: 10px;
- color: #ffffff;
+ color: theme('colors.text-primary');
text-overflow: ellipsis;
}
.decent-dialog .box-address-search-box > input::placeholder {
- color: #ffffff;
+ color: theme('colors.text-primary');
opacity: 50%;
}
@@ -135,7 +139,7 @@
font-family: DMSans, serif;
font-weight: bold;
font-size: 1em;
- color: rgba(157, 190, 255, 1) !important;
+ color: theme('colors.text-secondary') !important;
padding: 0;
letter-spacing: 2px;
}
@@ -148,7 +152,7 @@
.decent-dialog .box-section-title::after {
content: ':';
- color: #7dd3fc !important;
+ color: theme('colors.text-secondary') !important;
}
.decent-dialog .box-token-row div {
@@ -192,17 +196,17 @@
}
.decent-dialog .box-token-row:hover {
- background: theme('colors.apeDarkBlue');
+ background: theme('colors.accent');
}
.decent-dialog .box-popular-chip {
- background: theme('colors.apeBlue');
+ background: theme('colors.primary');
padding: 6px 12px !important;
border: none;
}
.decent-dialog .box-popular-chip:hover {
- background: theme('colors.apeDarkBlue');
+ background: theme('colors.primaryDark');
}
.decent-dialog .box-popular-chip span {
@@ -229,6 +233,10 @@
font-family: 'DMSans';
}
+.decent-dialog .box-font-light.box-text-xs {
+ font-weight: normal;
+}
+
.box-missing-img {
object-fit: none;
background-image: linear-gradient(
@@ -242,4 +250,5 @@
#aw-onramp-halliday > iframe {
width: 100% !important;
+ padding: 0 10px !important;
}
diff --git a/lib/components/ui/ApeContainer.tsx b/lib/components/ui/ApeContainer.tsx
index f133913..aa0f7e9 100644
--- a/lib/components/ui/ApeContainer.tsx
+++ b/lib/components/ui/ApeContainer.tsx
@@ -2,8 +2,8 @@ import { useEffect } from 'react';
import Granim from 'granim';
import { cn, createGranimConfig } from '../../utils/utils.ts';
import { ModalPortal } from './modal/ModalPortal.tsx';
-import apePortalLogo from '../../assets/svg/ape-portal-logo.svg';
import { GradientCanvas } from './GradientCanvas.tsx';
+import { ApePortalLogo } from '../icons/ApePortalLogo.tsx';
export type ApeContainerProps = {
children: React.ReactNode;
@@ -48,11 +48,7 @@ export const ApeContainer = ({
{showGradient &&
}
-
+
diff --git a/lib/components/ui/ChainDropdown.tsx b/lib/components/ui/ChainDropdown.tsx
index 9a32706..25ab787 100644
--- a/lib/components/ui/ChainDropdown.tsx
+++ b/lib/components/ui/ChainDropdown.tsx
@@ -93,7 +93,7 @@ export const ChainDropdown = ({
selected={solanaSelected}
>
-
+
Solana
diff --git a/lib/components/ui/ChainSelectorModule.tsx b/lib/components/ui/ChainSelectorModule.tsx
index 8f1de81..3a14f9c 100644
--- a/lib/components/ui/ChainSelectorModule.tsx
+++ b/lib/components/ui/ChainSelectorModule.tsx
@@ -24,7 +24,7 @@ export const ChainSelectorModule = ({ className }: { className?: string }) => {
>
@@ -33,7 +33,7 @@ export const ChainSelectorModule = ({ className }: { className?: string }) => {
src={getChainLogoOrFail(sourceToken.token.chainId)}
className="aw-flex aw-size-6 aw-items-center aw-justify-center aw-rounded-[49.84px]"
/>
-
+
{getChainName(sourceToken.token.chainId)}
diff --git a/lib/components/ui/ChainTokenSelectTrigger.tsx b/lib/components/ui/ChainTokenSelectTrigger.tsx
index 5da1553..53d8044 100644
--- a/lib/components/ui/ChainTokenSelectTrigger.tsx
+++ b/lib/components/ui/ChainTokenSelectTrigger.tsx
@@ -15,7 +15,7 @@ export const ChainTokenSelectTrigger = ({
return (
@@ -37,11 +37,7 @@ export const ChainTokenSelectTrigger = ({
)}
-
+
{currentToken.token.symbol}
diff --git a/lib/components/ui/NumberInput.tsx b/lib/components/ui/NumberInput.tsx
index 57cde27..d2c86a0 100644
--- a/lib/components/ui/NumberInput.tsx
+++ b/lib/components/ui/NumberInput.tsx
@@ -18,13 +18,13 @@ export const NumberInputWithLabel = ({
}) => {
return (
-
+
{label}
{
+ const { theme } = useApeContext();
const { bridgeTransactionData, setSlippagePercentage } = usePortalStore(
(state) => state,
);
@@ -76,17 +78,17 @@ export const SlippageInputModule = () => {
return (
-
+
Max slippage:
{
>
{
{bridgeTransactionData.slippagePercentage ===
BridgeTransactionData.DEFAULT_SLIPPAGE && 'Auto'}
-
@@ -115,17 +117,22 @@ export const SlippageInputModule = () => {
className="aw-z-100 aw-flex aw-flex-col"
>
{({ close }) => (
-
+
-
+
Max slippage
-
+
{customSlippageEnabled ? 'Custom' : 'Auto'}
-
-
+
+
{
setError(undefined);
@@ -135,11 +142,11 @@ export const SlippageInputModule = () => {
className={cn(
'aw-flex aw-items-center aw-justify-center aw-gap-2.5 aw-rounded aw-px-2.5 aw-py-1.5',
{
- 'aw-bg-[#0054fa]': !customSlippageEnabled,
+ 'aw-bg-accent': !customSlippageEnabled,
},
)}
>
-
+
Auto
@@ -150,19 +157,19 @@ export const SlippageInputModule = () => {
className={cn(
'aw-flex aw-items-center aw-justify-center aw-gap-2.5 aw-rounded aw-px-2.5 aw-py-1.5',
{
- 'aw-bg-[#0054fa]': customSlippageEnabled,
+ 'aw-bg-accent': customSlippageEnabled,
},
)}
>
-
{
disabled={!customSlippageEnabled}
placeholder={'Amount'}
className={cn(
- 'aw-w-full aw-self-stretch aw-text-ellipsis aw-bg-transparent aw-text-right [appearance:aw-textfield] focus:aw-border-indigo-500 focus:aw-outline-none focus:aw-ring-indigo-500 disabled:aw-opacity-50 [&::-webkit-inner-spin-button]:aw-appearance-none [&::-webkit-outer-spin-button]:aw-appearance-none',
+ 'aw-w-full aw-self-stretch aw-text-ellipsis aw-bg-transparent aw-text-right [appearance:aw-textfield] focus:aw-border-indigo-500 focus:aw-outline-none focus:aw-ring-indigo-500 disabled:aw-opacity-50 [&::-webkit-inner-spin-button]:aw-appearance-none [&::-webkit-outer-spin-button]:aw-appearance-none',
{
'aw-cursor-not-allowed': !customSlippageEnabled,
},
@@ -192,7 +199,7 @@ export const SlippageInputModule = () => {
onClick={() => {
handleApplyChanges(close);
}}
- className="aw-inline-flex aw-items-center aw-justify-center aw-gap-2.5 aw-self-stretch aw-rounded aw-bg-[#0054fa] aw-px-2.5 aw-py-[9px] aw-text-center aw-font-dmsans aw-text-[13px] aw-font-bold aw-leading-[18px] aw-text-white aw-transition-colors aw-duration-200 hover:aw-bg-[#053389]"
+ className="aw-inline-flex aw-items-center aw-justify-center aw-gap-2.5 aw-self-stretch aw-rounded aw-bg-accent aw-px-2.5 aw-py-[9px] aw-text-center aw-font-dmsans aw-text-[13px] aw-font-bold aw-leading-[18px] aw-text-text-primary aw-transition-colors aw-duration-200 hover:aw-bg-primaryDark"
>
Apply changes
diff --git a/lib/components/ui/SolanaModule.tsx b/lib/components/ui/SolanaModule.tsx
index 610f5d0..5e5ffe1 100644
--- a/lib/components/ui/SolanaModule.tsx
+++ b/lib/components/ui/SolanaModule.tsx
@@ -29,7 +29,7 @@ export const SolanaModule = () => {
animate={{ opacity: 1, y: 0 }}
exit={{ opacity: 0, y: -10 }}
layout={'position'}
- className="aw-inline-flex aw-w-full aw-flex-col aw-items-start aw-justify-start aw-gap-2.5 aw-rounded aw-border aw-border-white/20 aw-bg-apeCtaBlue/50 aw-px-3 aw-pt-2 md:aw-px-5 md:aw-pt-5"
+ className="aw-inline-flex aw-w-full aw-flex-col aw-items-start aw-justify-start aw-gap-2.5 aw-rounded aw-border aw-border-white/20 aw-bg-primaryDark/50 aw-px-3 aw-pt-2 md:aw-px-5 md:aw-pt-5"
>
{
>
Go To Solana Bridge
diff --git a/lib/components/ui/SpotlightBackground.tsx b/lib/components/ui/SpotlightBackground.tsx
index 3154895..c660638 100644
--- a/lib/components/ui/SpotlightBackground.tsx
+++ b/lib/components/ui/SpotlightBackground.tsx
@@ -1,7 +1,13 @@
import React, { useCallback, useEffect, useRef, useState } from 'react';
import { cn } from '../../utils/utils.ts';
-import apeOutline from '../../assets/svg/ape-logo-outline.svg';
-import { motion, useMotionTemplate, useSpring } from 'framer-motion';
+import {
+ motion,
+ MotionValue,
+ useMotionTemplate,
+ useSpring,
+} from 'framer-motion';
+import { ApeOutline } from '../icons/ApeOutline.tsx';
+import { useApeContext } from '../../providers/ape/apeProvider.context.ts';
export const SpotlightBackground = ({
children,
@@ -48,8 +54,15 @@ export const SpotlightBackground = ({
// eslint-disable-next-line react-hooks/exhaustive-deps
}, []);
- const background = useMotionTemplate`linear-gradient(to top, rgb(2, 70, 205, 1) 0%, transparent 100px), radial-gradient(circle at ${mousePosX}px ${mousePosY}px, transparent 50px, rgb(2, 70, 205, 1) 350px)`;
+ const themeToMotionTemplate: {
+ [key: string]: MotionValue
;
+ } = {
+ ape: useMotionTemplate`linear-gradient(to top, rgb(2, 70, 205, 1) 0%, transparent 100px), radial-gradient(circle at ${mousePosX}px ${mousePosY}px, transparent 50px, rgb(2, 70, 205, 1) 350px)`,
+ light: useMotionTemplate`linear-gradient(to top, rgb(240, 240, 240, 1) 0%, transparent 100px), radial-gradient(circle at ${mousePosX}px ${mousePosY}px, transparent 50px, rgb(240, 240, 240, 1) 350px)`,
+ dark: useMotionTemplate`linear-gradient(to top, rgb(38, 38, 38, 1) 0%, transparent 100px), radial-gradient(circle at ${mousePosX}px ${mousePosY}px, transparent 50px, rgb(38, 38, 38, 1) 350px)`,
+ };
+ const background = themeToMotionTemplate[useApeContext().theme ?? 'ape'];
return (
-
@@ -45,7 +59,7 @@ function TokenDisplay({
)}
@@ -63,7 +77,12 @@ function TokenDisplay({
className="aw-absolute aw-z-60 aw-w-[200%] md:aw-w-[300%]"
data-testid="animation-pulse-token"
>
-
+
)}
diff --git a/lib/components/ui/TokenInputModule.tsx b/lib/components/ui/TokenInputModule.tsx
index 2176d7c..9116ee7 100644
--- a/lib/components/ui/TokenInputModule.tsx
+++ b/lib/components/ui/TokenInputModule.tsx
@@ -116,7 +116,7 @@ export const TokenInputModule = ({
<>
-
+
-
+
Balance
{isDifferentDestinationWallet &&
` ${shortenAddress(destinationAddress)}`}
:
-
+
{isBalanceLoading ? 'Loading...' : tokenBalanceTrimmed}
diff --git a/lib/components/ui/ToolBar.tsx b/lib/components/ui/ToolBar.tsx
index ad25181..33b39cc 100644
--- a/lib/components/ui/ToolBar.tsx
+++ b/lib/components/ui/ToolBar.tsx
@@ -20,7 +20,7 @@ export const ToolBar = () => {
return (
-
+
@@ -45,21 +45,21 @@ export const TransactionOverview = () => {
as={motion.div}
layout={'position'}
transition={{ duration: 0.5 }}
- className="aw-mb-auto aw-w-full aw-rounded-[5px] aw-border-2 aw-border-white/20 aw-bg-blue-700 aw-px-3 aw-pt-1 aw-font-dmsans"
+ className="aw-mb-auto aw-w-full aw-rounded-[5px] aw-border-2 aw-border-text-primary/20 aw-bg-primary aw-px-3 aw-pt-1 aw-font-dmsans aw-text-text-primary"
>
{({ open }) => (
<>
-
+
-
+
Fees:
-
+
{bridgeTransactionData.totalFeeUsdString}
{
>
(
-
+
{status}
-
+
{statusSecondary}
{isSwap ? 'Swap' : 'Bridge'} Support
diff --git a/lib/components/ui/buttons/ActionButton.tsx b/lib/components/ui/buttons/ActionButton.tsx
index a3317b3..08c959a 100644
--- a/lib/components/ui/buttons/ActionButton.tsx
+++ b/lib/components/ui/buttons/ActionButton.tsx
@@ -240,10 +240,10 @@ export const ActionButton = ({
'aw-relative aw-overflow-hidden aw-font-dmmono aw-text-[16px] md:aw-text-[18px] aw-font-medium aw-w-full',
style === ActionButtonStyle.GradientFull
? 'aw-absolute aw-left-1/2 aw-top-1/2 aw--translate-x-1/2 aw--translate-y-1/2 aw-cursor-not-allowed aw-text-blue-900'
- : 'aw-inline-flex aw-size-full aw-items-center aw-justify-center aw-rounded-[5px] aw-bg-apeCtaBlue aw-text-center aw-text-white',
+ : 'aw-inline-flex aw-size-full aw-items-center aw-justify-center aw-rounded-[5px] aw-bg-primaryDark aw-text-center aw-text-text-primary',
buttonDisabled &&
style != ActionButtonStyle.GradientFull &&
- 'aw-bg-apeCtaBlueDisabled aw-text-apeCtaTextDisabled',
+ 'aw-text-text-disabled',
)}
>
(
{children ?? (
<>
-
+
{getChainName(chain as ChainId) ?? 'Unknown'}
>
diff --git a/lib/components/ui/buttons/CloseButton.tsx b/lib/components/ui/buttons/CloseButton.tsx
index 1c2352a..df05790 100644
--- a/lib/components/ui/buttons/CloseButton.tsx
+++ b/lib/components/ui/buttons/CloseButton.tsx
@@ -5,7 +5,7 @@ function CloseButton({ className }: { className?: string }) {
return (
diff --git a/lib/components/ui/buttons/LaunchHallidayButton.tsx b/lib/components/ui/buttons/LaunchHallidayButton.tsx
index ff72dbe..5cbe9e5 100644
--- a/lib/components/ui/buttons/LaunchHallidayButton.tsx
+++ b/lib/components/ui/buttons/LaunchHallidayButton.tsx
@@ -8,7 +8,7 @@ export const LaunchHallidayButton = ({ handler }: { handler: () => void }) => {
>
Launch
diff --git a/lib/components/ui/buttons/LinkButton.tsx b/lib/components/ui/buttons/LinkButton.tsx
index a67881a..d69b9b3 100644
--- a/lib/components/ui/buttons/LinkButton.tsx
+++ b/lib/components/ui/buttons/LinkButton.tsx
@@ -8,7 +8,7 @@ export const LinkButton = ({ text, url }: { text: string; url: string }) => {
{text}
diff --git a/lib/components/ui/buttons/SwapSourceDestination.tsx b/lib/components/ui/buttons/SwapSourceDestination.tsx
index b746285..7900c6a 100644
--- a/lib/components/ui/buttons/SwapSourceDestination.tsx
+++ b/lib/components/ui/buttons/SwapSourceDestination.tsx
@@ -37,13 +37,13 @@ export const SwapSourceDestination = ({
}}
aria-label={'swap-source-destination'}
className={
- 'aw-gradient-lavender-coral-sunset aw-relative aw-flex aw-size-full aw-items-center aw-justify-center aw-rounded-full aw-bg-apeCtaBlue aw-p-[3px] aw-duration-500 hover:aw-scale-110 disabled:aw-cursor-not-allowed'
+ 'aw-gradient-lavender-coral-sunset aw-relative aw-flex aw-size-full aw-items-center aw-justify-center aw-rounded-full aw-bg-primaryDark aw-p-[3px] aw-duration-500 hover:aw-scale-110 disabled:aw-cursor-not-allowed'
}
disabled={loading || disabled}
>
diff --git a/lib/components/ui/buttons/TabButton.tsx b/lib/components/ui/buttons/TabButton.tsx
index b2d8c04..625daba 100644
--- a/lib/components/ui/buttons/TabButton.tsx
+++ b/lib/components/ui/buttons/TabButton.tsx
@@ -9,7 +9,7 @@ import { useApeContext } from '../../../providers/ape/apeProvider.context.ts';
export const SelectedTabClass =
'aw-bg-tab-button-selected disabled:aw-cursor-auto aw-shadow-tab-button-selected';
export const UnselectedTabClass =
- 'aw-bg-ape-blue-700 aw-opacity-90 aw-shadow-tab-button';
+ 'aw-bg-tab-button-unselected aw-opacity-90 aw-shadow-tab-button';
export const TabButton = ({
portalType,
@@ -39,7 +39,7 @@ export const TabButton = ({
}}
disabled={disabled}
className={cn(
- 'aw-h-14 aw-rounded-[2px] aw-bg-gray-400/30 disabled:aw-opacity-80 aw-leading-[14px] aw-tracking-[1.4px] aw-font-dmmono aw-uppercase aw-font-medium aw-relative aw-flex aw-flex-1 aw-items-center aw-justify-center aw-text-white aw-text-[14px] disabled:aw-cursor-not-allowed aw-z-20 hover:enabled:aw-underline focus:aw-outline-none',
+ 'aw-h-14 aw-rounded-[2px] aw-bg-gray-400/30 disabled:aw-opacity-80 aw-leading-[14px] aw-tracking-[1.4px] aw-font-dmmono aw-uppercase aw-font-medium aw-relative aw-flex aw-flex-1 aw-items-center aw-justify-center aw-text-text-primary aw-text-[14px] disabled:aw-cursor-not-allowed aw-z-20 hover:enabled:aw-underline focus:aw-outline-none',
selected && SelectedTabClass,
!selected && UnselectedTabClass,
)}
diff --git a/lib/components/ui/modal/ChainTokenSelectModal.tsx b/lib/components/ui/modal/ChainTokenSelectModal.tsx
index ee36749..b420837 100644
--- a/lib/components/ui/modal/ChainTokenSelectModal.tsx
+++ b/lib/components/ui/modal/ChainTokenSelectModal.tsx
@@ -276,7 +276,7 @@ export const ChainTokenSelectModal = ({
return (
<>
{!isSwap && (
-
+
-
+
{title}
diff --git a/lib/components/ui/modal/ModalWrapper.tsx b/lib/components/ui/modal/ModalWrapper.tsx
index 82f717e..1f95aeb 100644
--- a/lib/components/ui/modal/ModalWrapper.tsx
+++ b/lib/components/ui/modal/ModalWrapper.tsx
@@ -34,7 +34,7 @@ export const ModalWrapperBase = ({
return (
-
+
{showCloseButton && (
diff --git a/lib/components/ui/tooltip/AdaptiveTooltip.tsx b/lib/components/ui/tooltip/AdaptiveTooltip.tsx
index 7715ed1..3ca323c 100644
--- a/lib/components/ui/tooltip/AdaptiveTooltip.tsx
+++ b/lib/components/ui/tooltip/AdaptiveTooltip.tsx
@@ -1,7 +1,5 @@
-import { MouseEventHandler, useEffect, useState } from 'react';
+import { MouseEventHandler, ReactNode, useEffect, useState } from 'react';
import * as TooltipPrimitive from '@radix-ui/react-tooltip';
-
-import { ReactNode } from 'react';
import { cn } from '../../../utils/utils';
import { useModalStore } from '../../../store/useModalStore';
@@ -86,7 +84,7 @@ const AdaptiveTooltip = ({
avoidCollisions
sideOffset={5}
className={cn(
- 'aw-z-100 aw-w-[275px] aw-max-w-[90vw] aw-animate-fade-in aw-flex-col aw-items-start aw-justify-center aw-gap-3 aw-rounded-[10px] aw-border aw-border-white/20 aw-bg-[#002775] aw-px-5 aw-py-[17px]',
+ 'aw-z-100 aw-w-[275px] aw-max-w-[90vw] aw-animate-fade-in aw-flex-col aw-items-start aw-justify-center aw-gap-3 aw-rounded-[10px] aw-border aw-border-white/20 aw-bg-primaryDark aw-px-5 aw-py-[17px]',
className,
)}
onPointerDownOutside={
diff --git a/lib/providers/ape/apeProvider.tsx b/lib/providers/ape/apeProvider.tsx
index 2b864e4..0f43c1b 100644
--- a/lib/providers/ape/apeProvider.tsx
+++ b/lib/providers/ape/apeProvider.tsx
@@ -18,6 +18,8 @@ export interface ApeConfig {
enableSolanaRedirect?: boolean;
/* Url a user will be redirected to for Solana */
solanaRedirectUrl?: string;
+ /* Theme of the portal. Default is ape */
+ theme?: 'ape' | 'dark' | 'light';
}
export interface ApeProviderProps {
diff --git a/package-lock.json b/package-lock.json
index 06dd296..443b034 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,17 @@
{
"name": "@yuga-labs/ape-portal-public",
- "version": "0.3.19",
+ "version": "0.3.26",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "@yuga-labs/ape-portal-public",
- "version": "0.3.19",
+ "version": "0.3.26",
"license": "APEPORTAL-1.0",
"dependencies": {
- "@decent.xyz/box-hooks": "4.0.0",
- "@decent.xyz/box-ui": "4.0.0",
- "@halliday-sdk/commerce": "3.2.0",
+ "@decent.xyz/box-hooks": "4.0.126",
+ "@decent.xyz/box-ui": "4.0.126",
+ "@halliday-sdk/commerce": "3.2.2",
"@headlessui/react": "^2.0.4",
"@radix-ui/react-dialog": "1.1.1",
"@radix-ui/react-tooltip": "1.1.3",
@@ -24,10 +24,11 @@
"immer": "10.1.1",
"lottie-react": "2.4.0",
"react-loader-spinner": "6.1.6",
+ "tailwindcss-themer": "4.1.0",
"zustand": "4.5.2"
},
"devDependencies": {
- "@rainbow-me/rainbowkit": "2.2.0",
+ "@rainbow-me/rainbowkit": "2.2.3",
"@tanstack/react-query": "5.48.0",
"@testing-library/dom": "10.4.0",
"@testing-library/jest-dom": "^6.4.5",
@@ -84,7 +85,6 @@
"version": "5.2.0",
"resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz",
"integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==",
- "dev": true,
"engines": {
"node": ">=10"
},
@@ -2073,9 +2073,9 @@
}
},
"node_modules/@decent.xyz/box-common": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@decent.xyz/box-common/-/box-common-4.0.0.tgz",
- "integrity": "sha512-irc7CqgzkTXTDhEvJagKqONDqgCRZvIT60HipligJs4AByMS0XqgU8PetIndefknbexvz/L/LmfU5AhT02KDZw==",
+ "version": "4.0.126",
+ "resolved": "https://registry.npmjs.org/@decent.xyz/box-common/-/box-common-4.0.126.tgz",
+ "integrity": "sha512-luxtMiojWyNXUn3AXnZ1fWeR048qjCca745pgsfp+NO81UyN7+ZAn+1SAl5IaHUbVdTmWmsTbKKnNFS4IRn81g==",
"peerDependencies": {
"@wagmi/core": "2.x",
"react": "^18.0.0",
@@ -2084,11 +2084,11 @@
}
},
"node_modules/@decent.xyz/box-hooks": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@decent.xyz/box-hooks/-/box-hooks-4.0.0.tgz",
- "integrity": "sha512-0yFnlxb5gBQ7w4rS7yhSE9JsUGuOM0n2Ab343QtAJsNLQ/ZnMjuLPu5Z+v9UsKTAsqVklxpbqZbqiGizZAZ3Zg==",
+ "version": "4.0.126",
+ "resolved": "https://registry.npmjs.org/@decent.xyz/box-hooks/-/box-hooks-4.0.126.tgz",
+ "integrity": "sha512-couRDxiKMbdpkfD5URqMz8EzwZkicXfSrMMVYKyThTLtAmivGfM8TyoICRZe2JAyJNaU9CQLxJVXGZVC57vDtw==",
"dependencies": {
- "@decent.xyz/box-common": "4.0.0",
+ "@decent.xyz/box-common": "4.0.126",
"swr": "^2.2.0"
},
"peerDependencies": {
@@ -2097,12 +2097,12 @@
}
},
"node_modules/@decent.xyz/box-ui": {
- "version": "4.0.0",
- "resolved": "https://registry.npmjs.org/@decent.xyz/box-ui/-/box-ui-4.0.0.tgz",
- "integrity": "sha512-PENpOBJ8hUI6D0x+vpBT/Qx4NhOxryKgJAbuwoDE/Qo+wfGFg+hRu2RWqivpLmNnErsZOegOfvVPhSERWYrRwg==",
+ "version": "4.0.126",
+ "resolved": "https://registry.npmjs.org/@decent.xyz/box-ui/-/box-ui-4.0.126.tgz",
+ "integrity": "sha512-ndxhv0sS/u86OioyOSyIIespYpiYxqMpYZS06TKnGNPGXpyrEFlzvr8pRB8vIeNeya+IClSt5s3ojzeyGOQJhQ==",
"dependencies": {
- "@decent.xyz/box-common": "4.0.0",
- "@decent.xyz/box-hooks": "4.0.0"
+ "@decent.xyz/box-common": "4.0.126",
+ "@decent.xyz/box-hooks": "4.0.126"
},
"peerDependencies": {
"react": "^18.0.0"
@@ -2674,9 +2674,9 @@
"integrity": "sha512-XGndio0l5/Gvd6CLIABvsav9HHezgDFFhDfHk1bvLfr9ni8dojqLSvBbotJEjmIwNHL7vK4QzBJTdBRoB+c1ww=="
},
"node_modules/@halliday-sdk/commerce": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/@halliday-sdk/commerce/-/commerce-3.2.0.tgz",
- "integrity": "sha512-bT69Onp/+aisN0H5cWKLiChij+Ng/gYmh7FractIcqn/+kugEECkDWXihnvwiUb8txyzRP7mfbKnaQmqEDnvdg==",
+ "version": "3.2.2",
+ "resolved": "https://registry.npmjs.org/@halliday-sdk/commerce/-/commerce-3.2.2.tgz",
+ "integrity": "sha512-rStsuFrlShwUEzcbCgHHPccQOLWbAg1LppcOPHHhKWbBu3YDsRjTV/eeqhV5gqZzadu/rGe8M8nGywORWzv89w==",
"dependencies": {
"ethers": "^6.12.1"
}
@@ -2775,7 +2775,6 @@
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
"integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
- "dev": true,
"dependencies": {
"string-width": "^5.1.2",
"string-width-cjs": "npm:string-width@^4.2.0",
@@ -2792,7 +2791,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -2804,7 +2802,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -3858,7 +3855,6 @@
"version": "0.11.0",
"resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
"integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
- "dev": true,
"optional": true,
"engines": {
"node": ">=14"
@@ -4400,9 +4396,9 @@
"integrity": "sha512-A9+lCBZoaMJlVKcRBz2YByCG+Cp2t6nAnMnNba+XiWxnj6r4JUFqfsgwocMBZU9LPtdxC6wB56ySYpc7LQIoJg=="
},
"node_modules/@rainbow-me/rainbowkit": {
- "version": "2.2.0",
- "resolved": "https://registry.npmjs.org/@rainbow-me/rainbowkit/-/rainbowkit-2.2.0.tgz",
- "integrity": "sha512-N0wQ39UN6Soi6/ujk9lVy5KY2oY6me/dqMPe5BYWlZIKbpBc2De3cl9phSLPw+/rncL3Cp1r6kRZuMe0b+mP9Q==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/@rainbow-me/rainbowkit/-/rainbowkit-2.2.3.tgz",
+ "integrity": "sha512-kXZ+zmKSPZhZdNHey+4TwOIW4p2vIRv5B9+5FoTJv1xktru1RykfAAQY5z+nLUdvc0l6M5hiYH4X88Jl1foXGQ==",
"dev": true,
"dependencies": {
"@vanilla-extract/css": "1.15.5",
@@ -4410,7 +4406,7 @@
"@vanilla-extract/sprinkles": "1.6.3",
"clsx": "2.1.1",
"qrcode": "1.5.4",
- "react-remove-scroll": "2.6.0",
+ "react-remove-scroll": "2.6.2",
"ua-parser-js": "^1.0.37"
},
"engines": {
@@ -4442,23 +4438,23 @@
}
},
"node_modules/@rainbow-me/rainbowkit/node_modules/react-remove-scroll": {
- "version": "2.6.0",
- "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.0.tgz",
- "integrity": "sha512-I2U4JVEsQenxDAKaVa3VZ/JeJZe0/2DxPWL8Tj8yLKctQJQiZM52pn/GWFpSp8dftjM3pSAHVJZscAnC/y+ySQ==",
+ "version": "2.6.2",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll/-/react-remove-scroll-2.6.2.tgz",
+ "integrity": "sha512-KmONPx5fnlXYJQqC62Q+lwIeAk64ws/cUw6omIumRzMRPqgnYqhSSti99nbj0Ry13bv7dF+BKn7NB+OqkdZGTw==",
"dev": true,
"dependencies": {
- "react-remove-scroll-bar": "^2.3.6",
+ "react-remove-scroll-bar": "^2.3.7",
"react-style-singleton": "^2.2.1",
"tslib": "^2.1.0",
- "use-callback-ref": "^1.3.0",
+ "use-callback-ref": "^1.3.3",
"use-sidecar": "^1.1.2"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -8305,8 +8301,7 @@
"node_modules/any-promise": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
- "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
- "dev": true
+ "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A=="
},
"node_modules/anymatch": {
"version": "3.1.3",
@@ -8329,8 +8324,7 @@
"node_modules/arg": {
"version": "5.0.2",
"resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz",
- "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==",
- "dev": true
+ "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg=="
},
"node_modules/argparse": {
"version": "2.0.1",
@@ -8625,7 +8619,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
"dependencies": {
"balanced-match": "^1.0.0"
}
@@ -8832,7 +8825,6 @@
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz",
"integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -9293,6 +9285,18 @@
"node": ">=6"
}
},
+ "node_modules/color": {
+ "version": "4.2.3",
+ "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz",
+ "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==",
+ "dependencies": {
+ "color-convert": "^2.0.1",
+ "color-string": "^1.9.0"
+ },
+ "engines": {
+ "node": ">=12.5.0"
+ }
+ },
"node_modules/color-convert": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
@@ -9309,6 +9313,15 @@
"resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
"integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
},
+ "node_modules/color-string": {
+ "version": "1.9.1",
+ "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz",
+ "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==",
+ "dependencies": {
+ "color-name": "^1.0.0",
+ "simple-swizzle": "^0.2.2"
+ }
+ },
"node_modules/colorette": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/colorette/-/colorette-1.4.0.tgz",
@@ -9325,7 +9338,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
"integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -9569,7 +9581,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
- "dev": true,
"bin": {
"cssesc": "bin/cssesc"
},
@@ -9797,8 +9808,7 @@
"node_modules/didyoumean": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz",
- "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==",
- "dev": true
+ "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw=="
},
"node_modules/diff-sequences": {
"version": "29.6.3",
@@ -9829,8 +9839,7 @@
"node_modules/dlv": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz",
- "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==",
- "dev": true
+ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA=="
},
"node_modules/doctrine": {
"version": "3.0.0",
@@ -9864,8 +9873,7 @@
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
- "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==",
- "dev": true
+ "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
},
"node_modules/eciesjs": {
"version": "0.3.20",
@@ -9911,8 +9919,7 @@
"node_modules/emoji-regex": {
"version": "9.2.2",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
- "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==",
- "dev": true
+ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
},
"node_modules/encode-utf8": {
"version": "1.0.3",
@@ -10982,7 +10989,6 @@
"version": "3.2.1",
"resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz",
"integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==",
- "dev": true,
"dependencies": {
"cross-spawn": "^7.0.0",
"signal-exit": "^4.0.1"
@@ -11172,7 +11178,6 @@
"version": "10.4.2",
"resolved": "https://registry.npmjs.org/glob/-/glob-10.4.2.tgz",
"integrity": "sha512-GwMlUF6PkPo3Gk21UxkCohOv0PLcIXVtKyLlpEI28R/cO/4eNOdmLk3CMW1wROV/WR/EsZOWAfBbBOqYvs88/w==",
- "dev": true,
"dependencies": {
"foreground-child": "^3.1.0",
"jackspeak": "^3.1.2",
@@ -11195,7 +11200,6 @@
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
"integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==",
- "dev": true,
"dependencies": {
"is-glob": "^4.0.3"
},
@@ -11991,7 +11995,6 @@
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz",
"integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==",
- "dev": true,
"dependencies": {
"@isaacs/cliui": "^8.0.2"
},
@@ -12207,7 +12210,6 @@
"version": "1.21.6",
"resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz",
"integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==",
- "dev": true,
"bin": {
"jiti": "bin/jiti.js"
}
@@ -12374,6 +12376,11 @@
"graceful-fs": "^4.1.6"
}
},
+ "node_modules/just-unique": {
+ "version": "4.2.0",
+ "resolved": "https://registry.npmjs.org/just-unique/-/just-unique-4.2.0.tgz",
+ "integrity": "sha512-cxQGGUiit6CGUpuuiezY8N4m1wgF4o7127rXEXDFcxeDUFfdV7gSkwA26Fe2wWBiNQq2SZOgN4gSmMxB/StA8Q=="
+ },
"node_modules/keccak": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz",
@@ -12477,7 +12484,6 @@
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz",
"integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==",
- "dev": true,
"engines": {
"node": ">=10"
}
@@ -12770,8 +12776,12 @@
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
- "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==",
- "dev": true
+ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ=="
+ },
+ "node_modules/lodash.mergewith": {
+ "version": "4.6.2",
+ "resolved": "https://registry.npmjs.org/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz",
+ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ=="
},
"node_modules/lodash.throttle": {
"version": "4.1.1",
@@ -13769,7 +13779,6 @@
"version": "9.0.5",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
"integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
"dependencies": {
"brace-expansion": "^2.0.1"
},
@@ -13793,7 +13802,6 @@
"version": "7.1.2",
"resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz",
"integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==",
- "dev": true,
"engines": {
"node": ">=16 || 14 >=14.17"
}
@@ -13905,7 +13913,6 @@
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
"integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
- "dev": true,
"dependencies": {
"any-promise": "^1.0.0",
"object-assign": "^4.0.1",
@@ -14187,7 +14194,6 @@
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -14196,7 +14202,6 @@
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz",
"integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==",
- "dev": true,
"engines": {
"node": ">= 6"
}
@@ -14364,8 +14369,7 @@
"node_modules/package-json-from-dist": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz",
- "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==",
- "dev": true
+ "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw=="
},
"node_modules/parent-module": {
"version": "1.0.1",
@@ -14443,7 +14447,6 @@
"version": "1.11.1",
"resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
"integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
- "dev": true,
"dependencies": {
"lru-cache": "^10.2.0",
"minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
@@ -14510,7 +14513,6 @@
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==",
- "dev": true,
"engines": {
"node": ">=0.10.0"
}
@@ -14722,7 +14724,6 @@
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz",
"integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==",
- "dev": true,
"dependencies": {
"camelcase-css": "^2.0.1"
},
@@ -14741,7 +14742,6 @@
"version": "4.0.2",
"resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
"integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
- "dev": true,
"funding": [
{
"type": "opencollective",
@@ -14776,7 +14776,6 @@
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz",
"integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==",
- "dev": true,
"engines": {
"node": ">=14"
},
@@ -14788,7 +14787,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz",
"integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==",
- "dev": true,
"dependencies": {
"postcss-selector-parser": "^6.0.11"
},
@@ -14807,7 +14805,6 @@
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
"integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
- "dev": true,
"dependencies": {
"cssesc": "^3.0.0",
"util-deprecate": "^1.0.2"
@@ -15442,19 +15439,19 @@
}
},
"node_modules/react-remove-scroll-bar": {
- "version": "2.3.6",
- "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.6.tgz",
- "integrity": "sha512-DtSYaao4mBmX+HDo5YWYdBWQwYIQQshUV/dVxFxK+KM26Wjwp1gZ6rv6OC3oujI6Bfu6Xyg3TwK533AQutsn/g==",
+ "version": "2.3.8",
+ "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.8.tgz",
+ "integrity": "sha512-9r+yi9+mgU33AKcj6IbT9oRCO78WriSj6t/cF8DWBZJ9aOGPOTEDvdUDz1FwKim7QXWwmHqtdHnRJfhAxEG46Q==",
"dependencies": {
- "react-style-singleton": "^2.2.1",
+ "react-style-singleton": "^2.2.2",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -15463,20 +15460,19 @@
}
},
"node_modules/react-style-singleton": {
- "version": "2.2.1",
- "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz",
- "integrity": "sha512-ZWj0fHEMyWkHzKYUr2Bs/4zU6XLmq9HsgBURm7g5pAVfyn49DgUiNgY2d4lXRlYSiCif9YBGpQleewkcqddc7g==",
+ "version": "2.2.3",
+ "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.3.tgz",
+ "integrity": "sha512-b6jSvxvVnyptAiLjbkWLE/lOnR4lfTtDAl+eUC7RZy+QQWc6wRzIV2CE6xBuMmDxc2qIihtDCZD5NPOFl7fRBQ==",
"dependencies": {
"get-nonce": "^1.0.0",
- "invariant": "^2.2.4",
"tslib": "^2.0.0"
},
"engines": {
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -15488,7 +15484,6 @@
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz",
"integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==",
- "dev": true,
"dependencies": {
"pify": "^2.3.0"
}
@@ -16350,6 +16345,19 @@
"url": "https://github.com/sponsors/isaacs"
}
},
+ "node_modules/simple-swizzle": {
+ "version": "0.2.2",
+ "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz",
+ "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==",
+ "dependencies": {
+ "is-arrayish": "^0.3.1"
+ }
+ },
+ "node_modules/simple-swizzle/node_modules/is-arrayish": {
+ "version": "0.3.2",
+ "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz",
+ "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ=="
+ },
"node_modules/sirv": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz",
@@ -16662,7 +16670,6 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
"integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
- "dev": true,
"dependencies": {
"eastasianwidth": "^0.2.0",
"emoji-regex": "^9.2.2",
@@ -16680,7 +16687,6 @@
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -16693,14 +16699,12 @@
"node_modules/string-width-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/string-width/node_modules/ansi-regex": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -16712,7 +16716,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
@@ -16739,7 +16742,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
"integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
- "dev": true,
"dependencies": {
"ansi-regex": "^5.0.1"
},
@@ -16847,7 +16849,6 @@
"version": "3.35.0",
"resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz",
"integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==",
- "dev": true,
"dependencies": {
"@jridgewell/gen-mapping": "^0.3.2",
"commander": "^4.0.0",
@@ -16955,7 +16956,6 @@
"version": "3.4.4",
"resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz",
"integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==",
- "dev": true,
"dependencies": {
"@alloc/quick-lru": "^5.2.0",
"arg": "^5.0.2",
@@ -16997,11 +16997,24 @@
"tailwindcss": ">=3.0.0 || insiders"
}
},
+ "node_modules/tailwindcss-themer": {
+ "version": "4.1.0",
+ "resolved": "https://registry.npmjs.org/tailwindcss-themer/-/tailwindcss-themer-4.1.0.tgz",
+ "integrity": "sha512-zbou6wTFFaICkNqYN/RA/MkGrLtbCHx4LYH7yeQViBu2lCGPbH0SuJ3v5ED1Q3WzUDur2DQu5T9Rr0VUd5iDfg==",
+ "dependencies": {
+ "color": "^4.1.0",
+ "just-unique": "^4.2.0",
+ "lodash.merge": "^4.6.2",
+ "lodash.mergewith": "^4.6.2"
+ },
+ "peerDependencies": {
+ "tailwindcss": "^3.1.0"
+ }
+ },
"node_modules/tailwindcss/node_modules/postcss-import": {
"version": "15.1.0",
"resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz",
"integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==",
- "dev": true,
"dependencies": {
"postcss-value-parser": "^4.0.0",
"read-cache": "^1.0.0",
@@ -17173,7 +17186,6 @@
"version": "3.3.1",
"resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
"integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
- "dev": true,
"dependencies": {
"any-promise": "^1.0.0"
}
@@ -17182,7 +17194,6 @@
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
"integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
- "dev": true,
"dependencies": {
"thenify": ">= 3.1.0 < 4"
},
@@ -17325,8 +17336,7 @@
"node_modules/ts-interface-checker": {
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
- "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
- "dev": true
+ "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA=="
},
"node_modules/tslib": {
"version": "2.6.3",
@@ -17637,9 +17647,9 @@
}
},
"node_modules/use-callback-ref": {
- "version": "1.3.2",
- "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.2.tgz",
- "integrity": "sha512-elOQwe6Q8gqZgDA8mrh44qRTQqpIHDcZ3hXTLjBe1i4ph8XpNJnO+aQf3NaG+lriLopI4HMx9VjQLfPQ6vhnoA==",
+ "version": "1.3.3",
+ "resolved": "https://registry.npmjs.org/use-callback-ref/-/use-callback-ref-1.3.3.tgz",
+ "integrity": "sha512-jQL3lRnocaFtu3V00JToYz/4QkNWswxijDaCVNZRiRTO3HQDLsdu1ZtmIUvV4yPp+rvWm5j0y0TG/S61cuijTg==",
"dependencies": {
"tslib": "^2.0.0"
},
@@ -17647,8 +17657,8 @@
"node": ">=10"
},
"peerDependencies": {
- "@types/react": "^16.8.0 || ^17.0.0 || ^18.0.0",
- "react": "^16.8.0 || ^17.0.0 || ^18.0.0"
+ "@types/react": "*",
+ "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 || ^19.0.0-rc"
},
"peerDependenciesMeta": {
"@types/react": {
@@ -18394,7 +18404,6 @@
"version": "8.1.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
"integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
- "dev": true,
"dependencies": {
"ansi-styles": "^6.1.0",
"string-width": "^5.0.1",
@@ -18412,7 +18421,6 @@
"version": "7.0.0",
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
"integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
- "dev": true,
"dependencies": {
"ansi-styles": "^4.0.0",
"string-width": "^4.1.0",
@@ -18428,14 +18436,12 @@
"node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
"version": "8.0.0",
"resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
- "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==",
- "dev": true
+ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
},
"node_modules/wrap-ansi-cjs/node_modules/string-width": {
"version": "4.2.3",
"resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
"integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
- "dev": true,
"dependencies": {
"emoji-regex": "^8.0.0",
"is-fullwidth-code-point": "^3.0.0",
@@ -18449,7 +18455,6 @@
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
"integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -18461,7 +18466,6 @@
"version": "6.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
"integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
- "dev": true,
"engines": {
"node": ">=12"
},
@@ -18473,7 +18477,6 @@
"version": "7.1.0",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
"integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
- "dev": true,
"dependencies": {
"ansi-regex": "^6.0.1"
},
diff --git a/package.json b/package.json
index f7adbc0..adcdc5b 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,7 @@
{
"name": "@yuga-labs/ape-portal-public",
"description": "ApeChain Portal. Offers a set of components to interact with the ApeChain blockchain.",
- "version": "0.3.19",
+ "version": "0.3.26",
"license": "APEPORTAL-1.0",
"type": "module",
"main": "./dist/cjs/index.js",
@@ -40,7 +40,7 @@
"wagmi": "^2.12.20"
},
"devDependencies": {
- "@rainbow-me/rainbowkit": "2.2.0",
+ "@rainbow-me/rainbowkit": "2.2.3",
"@tanstack/react-query": "5.48.0",
"@testing-library/dom": "10.4.0",
"@testing-library/jest-dom": "^6.4.5",
@@ -81,9 +81,9 @@
"wagmi": "2.12.20"
},
"dependencies": {
- "@decent.xyz/box-hooks": "4.0.0",
- "@decent.xyz/box-ui": "4.0.0",
- "@halliday-sdk/commerce": "3.2.0",
+ "@decent.xyz/box-hooks": "4.0.126",
+ "@decent.xyz/box-ui": "4.0.126",
+ "@halliday-sdk/commerce": "3.2.2",
"@headlessui/react": "^2.0.4",
"@radix-ui/react-dialog": "1.1.1",
"@radix-ui/react-tooltip": "1.1.3",
@@ -96,6 +96,7 @@
"immer": "10.1.1",
"lottie-react": "2.4.0",
"react-loader-spinner": "6.1.6",
+ "tailwindcss-themer": "4.1.0",
"zustand": "4.5.2"
},
"lint-staged": {
diff --git a/tailwind.config.js b/tailwind.config.js
index c3df854..b075bf3 100644
--- a/tailwind.config.js
+++ b/tailwind.config.js
@@ -1,52 +1,124 @@
/** @type {import("tailwindcss").Config} */
export default {
- content: ['./lib/**/*.{html,js,ts,jsx,tsx}'],
+ content: [
+ './lib/**/*.{html,js,ts,jsx,tsx}',
+ './example/**/*.{html,js,ts,jsx,tsx}',
+ ],
prefix: 'aw-',
- theme: {
- extend: {
- fontFamily: {
- dmmono: ['DMMono'],
- dmsans: ['DMSans'],
- },
- keyframes: {
- fadeIn: {
- '0%': { opacity: '0' },
- '100%': { opacity: '1' },
+ darkMode: 'selector',
+ plugins: [
+ // eslint-disable-next-line unicorn/prefer-module,@typescript-eslint/no-var-requires
+ require('tailwindcss-themer')({
+ defaultTheme: {
+ extend: {
+ fontFamily: {
+ dmmono: ['DMMono'],
+ dmsans: ['DMSans'],
+ },
+ keyframes: {
+ fadeIn: {
+ '0%': { opacity: '0' },
+ '100%': { opacity: '1' },
+ },
+ },
+ animation: {
+ 'fade-in': 'fadeIn 0.3s ease-in-out',
+ },
+ colors: {
+ primary: '#0246cd',
+ accent: '#0054FA',
+ primaryDark: '#002876',
+ primaryLight: '#528CFF',
+ warning: '#FFB155',
+ danger: '#FF8080',
+ 'text-primary': '#fff',
+ 'text-secondary': '#c7d2f3',
+ 'text-disabled': '#528CFF',
+ },
+ backgroundImage: {
+ 'gradient-lavender-coral-sunset':
+ 'linear-gradient(to right, #A281FF, #EB8280, #EBBF9A, #89D0FF)',
+ 'ape-portal-logo':
+ 'linear-gradient(180deg, #0036AD 0%, #00299A 100%)',
+ 'tab-button-selected':
+ 'linear-gradient(180deg, #2660D4 0%, #1558DE 100%)',
+ 'tab-button-unselected': 'linear-gradient(#0036AD, #0036AD)',
+ },
+ boxShadow: {
+ 'tab-header': '0px 4px 4px 0px rgba(0, 0, 0, 0.25)',
+ 'tab-button': '0px 1px 0px 0px #0045D4 inset',
+ 'tab-button-selected':
+ 'inset 0 1px 0 #5890FF, inset 0 -1px 0 #5890FF',
+ },
+ zIndex: {
+ 100: '100',
+ 60: '60',
+ },
},
},
- animation: {
- 'fade-in': 'fadeIn 0.3s ease-in-out',
- },
- colors: {
- apeBlue: '#0246cd',
- apeAccent: '#0054FA',
- apeDarkBlue: '#002876',
- apeCtaBlue: '#002D87',
- apeCtaBlueDisabled: '#01207E',
- apeCtaTextDisabled: '#528CFF',
- 'ape-blue-700': '#0036AD',
- warning: '#FFB155',
- danger: '#FF8080',
- },
- backgroundImage: {
- 'gradient-lavender-coral-sunset':
- 'linear-gradient(to right, #A281FF, #EB8280, #EBBF9A, #89D0FF)',
- 'ape-portal-logo': 'linear-gradient(180deg, #0036AD 0%, #00299A 100%)',
- 'tab-button-selected':
- 'linear-gradient(180deg, #2660D4 0%, #1558DE 100%)',
- },
- boxShadow: {
- custom: '0px 11px 15px 11px rgba(41, 113, 255, 0.23)',
- 'tab-header': '0px 4px 4px 0px rgba(0, 0, 0, 0.25)',
- 'tab-button': '0px 1px 0px 0px #0045D4 inset',
- 'tab-button-selected': 'inset 0 1px 0 #5890FF, inset 0 -1px 0 #5890FF',
- },
- zIndex: {
- 100: '100',
- 60: '60',
- },
- },
- },
- // eslint-disable-next-line unicorn/prefer-module
- plugins: [require('tailwindcss-animate'), require('tailwind-scrollbar')],
+ themes: [
+ {
+ name: 'light',
+ extend: {
+ colors: {
+ primary: 'hsl(0, 0%, 95%)',
+ accent: 'hsl(0, 0%, 100%)',
+ primaryDark: 'hsl(0, 0%, 80%)',
+ primaryLight: 'hsl(0, 0%, 100%)',
+ warning: '#D97A2B',
+ danger: '#D94A4A',
+ 'text-primary': '#000',
+ 'text-secondary': '#000',
+ 'text-disabled': '#3A3A3A',
+ },
+ backgroundImage: {
+ 'ape-portal-logo':
+ 'linear-gradient(180deg, #FFFFFF 0%, #F2F2F2 100%)',
+ 'tab-button-selected':
+ 'linear-gradient(180deg, #F5F5F5 0%, #F2F2F2 100%)',
+ 'tab-button-unselected': 'linear-gradient(#F2F2F2, #F2F2F2)',
+ },
+ boxShadow: {
+ 'tab-header': '0px 4px 4px 0px rgba(0, 0, 0, 0.25)',
+ 'tab-button': '0px 1px 0px 0px #F2F2F2 inset',
+ 'tab-button-selected':
+ 'inset 0 1px 0 #E8E8E8, inset 0 -1px 0 #E8E8E8',
+ },
+ },
+ },
+ {
+ name: 'dark',
+ extend: {
+ colors: {
+ primary: '#262626',
+ accent: '#1F1F1F',
+ primaryDark: '#0F0F0F',
+ primaryLight: '#3A3A3A',
+ danger: '#D94A4A',
+ 'text-primary': '#fff',
+ 'text-secondary': '#fff',
+ 'text-disabled': '#9E9E9E',
+ },
+ backgroundImage: {
+ 'ape-portal-logo':
+ 'linear-gradient(180deg, #1F1F1F 0%, #0F0F0F 100%)',
+ 'tab-button-selected':
+ 'linear-gradient(180deg, #333333 0%, #1F1F1F 100%)',
+ 'tab-button-unselected': 'linear-gradient(#1C1C1C, #1C1C1C)',
+ },
+ boxShadow: {
+ 'tab-header': '0px 4px 4px 0px rgba(0, 0, 0, 0.25)',
+ 'tab-button': '0px 1px 0px 0px #1F1F1F inset',
+ 'tab-button-selected':
+ 'inset 0 1px 0 #4D4D4D, inset 0 -1px 0 #4D4D4D',
+ },
+ },
+ },
+ ],
+ }),
+ // eslint-disable-next-line unicorn/prefer-module
+ require('tailwindcss-animate'),
+ // eslint-disable-next-line unicorn/prefer-module
+ require('tailwind-scrollbar'),
+ ],
};
diff --git a/test/components/ui/Portal.test.tsx b/test/components/ui/Portal.test.tsx
index 0d53d9c..1d473ee 100644
--- a/test/components/ui/Portal.test.tsx
+++ b/test/components/ui/Portal.test.tsx
@@ -219,7 +219,7 @@ describe('ApePortal', () => {
'data-headlessui-state',
'selected',
);
- expectSourceAndDestinationTokens('MATIC', 'APE');
+ expectSourceAndDestinationTokens('POL', 'APE');
expect(getState().sourceToken.token.chainId).toBe(ChainId.POLYGON);
expect(getState().destinationToken.token.chainId).toBe(ChainId.APE);
});
@@ -648,7 +648,7 @@ describe('ApePortal', () => {
const swapTab = screen.getByTestId('tab-1');
const bridgeTabButton = screen.getByText(/bridge/i);
const swapTabButton = screen.getByText(/swap/i);
- expectSourceAndDestinationTokens('MATIC', 'APE');
+ expectSourceAndDestinationTokens('POL', 'APE');
expect(getState().sourceToken.token.chainId).toBe(ChainId.POLYGON);
expect(getState().destinationToken.token.chainId).toBe(ChainId.APE);
// 1. Switch to the swap tab
@@ -663,7 +663,7 @@ describe('ApePortal', () => {
await userEvent.click(bridgeTabButton);
expect(bridgeTab.getAttribute('class')).toMatch(SelectedTabClassRegex);
expect(swapTab.getAttribute('class')).toMatch(UnselectedTabClassRegex);
- expectSourceAndDestinationTokens('MATIC', 'APE');
+ expectSourceAndDestinationTokens('POL', 'APE');
});
it('shows Ethereum ETH as source on bridge when user wallet is on Ethereum', async () => {
diff --git a/test/components/ui/TransactionStatus.test.tsx b/test/components/ui/TransactionStatus.test.tsx
index cadb00c..b37917a 100644
--- a/test/components/ui/TransactionStatus.test.tsx
+++ b/test/components/ui/TransactionStatus.test.tsx
@@ -8,6 +8,7 @@ import { BridgeTransactionData } from '../../../lib/classes/BridgeTransactionDat
import { AllTheProviders, customRender, setupConfig } from '../../index';
import { defaultApeConfig } from '../../utils.ts';
import { useDecentScan } from '@decent.xyz/box-hooks';
+import { ApeProvider } from '../../../lib';
const TEST_TX_HASH = '0x1234567890123456789012345678901234567890';
@@ -36,7 +37,11 @@ describe('components/ui/TransactionStatus', () => {
test('should render status with bridge copy', async () => {
const isSwap = false;
- const transactionStatus = render( );
+ const transactionStatus = render(
+
+
+ ,
+ );
const viewTransactionButton = screen.getByText(/view transaction/i);
const viewTransactionLink = viewTransactionButton.closest('a');
const bridgingText = screen.getByText(/bridging/i);
@@ -129,7 +134,11 @@ describe('components/ui/TransactionStatus', () => {
test('should render status with swap copy', async () => {
const isSwap = true;
- const transactionStatus = render( );
+ const transactionStatus = render(
+
+
+ ,
+ );
const viewTransactionButton = screen.getByText(/view transaction/i);
const swapText = screen.getByText(/swapping/i);
const supportText = screen.getByText(/swap support/i);
@@ -174,7 +183,11 @@ describe('components/ui/TransactionStatus', () => {
isValidating: false,
});
- const transactionStatus = render( );
+ const transactionStatus = render(
+
+
+ ,
+ );
const modal = screen.getByRole('dialog');
const closeButton = screen.getByRole('button', { name: /close/i });
expect(modal).toBeVisible();
diff --git a/test/components/ui/__snapshots__/NumberInput.test.tsx.snap b/test/components/ui/__snapshots__/NumberInput.test.tsx.snap
index 1d5d701..c29d206 100644
--- a/test/components/ui/__snapshots__/NumberInput.test.tsx.snap
+++ b/test/components/ui/__snapshots__/NumberInput.test.tsx.snap
@@ -6,12 +6,12 @@ exports[`components/ui/NumberInput > should render number input with default val
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
Amount
renders the default tab correctly with onramp disabled 1`]
-
+ fill="none"
+ height="268"
+ viewBox="0 0 558 268"
+ width="558"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+
+
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp disabled 1`]
renders the default tab correctly with onramp disabled 1`]
-
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp disabled 1`]
class="aw-relative aw-flex aw-w-full aw-flex-col aw-items-center aw-gap-y-3"
>
renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
renders the default tab correctly with onramp disabled 1`]
type="button"
>
renders the default tab correctly with onramp disabled 1`]
>
APE
renders the default tab correctly with onramp disabled 1`]
id="arrow-down"
>
renders the default tab correctly with onramp disabled 1`]
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -218,10 +299,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
>
renders the default tab correctly with onramp disabled 1`]
id="Group 378"
>
renders the default tab correctly with onramp disabled 1`]
id="Group 379"
>
renders the default tab correctly with onramp disabled 1`]
renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
To:
renders the default tab correctly with onramp disabled 1`]
type="button"
>
APE
renders the default tab correctly with onramp disabled 1`]
id="arrow-down"
>
renders the default tab correctly with onramp disabled 1`]
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -378,12 +460,12 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-w-full aw-flex-row aw-items-center aw-justify-between"
>
Fees:
@@ -400,13 +482,12 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-flex-row aw-items-center"
>
$0
renders the default tab correctly with onramp disabled 1`]
id="arrow-down"
>
renders the default tab correctly with onramp disabled 1`]
Max slippage:
@@ -447,10 +529,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
type="button"
>
1
%
@@ -458,10 +540,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
Auto
renders the default tab correctly with onramp disabled 1`]
xmlns="http://www.w3.org/2000/svg"
>
@@ -489,10 +571,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
/>
renders the default tab correctly with onramp disabled 1`]
class="aw-mt-1 aw-flex aw-h-6 aw-w-full aw-flex-row aw-justify-center"
>
renders the default tab correctly with onramp disabled 1`]
-
+ fill="none"
+ height="268"
+ viewBox="0 0 558 268"
+ width="558"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+
+
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp disabled 1`]
renders the default tab correctly with onramp disabled 1`]
-
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp disabled 1`]
class="aw-relative aw-flex aw-w-full aw-flex-col aw-items-center aw-gap-y-3"
>
renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
renders the default tab correctly with onramp disabled 1`]
type="button"
>
renders the default tab correctly with onramp disabled 1`]
>
APE
renders the default tab correctly with onramp disabled 1`]
id="arrow-down"
>
renders the default tab correctly with onramp disabled 1`]
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -753,10 +916,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
>
renders the default tab correctly with onramp disabled 1`]
id="Group 378"
>
renders the default tab correctly with onramp disabled 1`]
id="Group 379"
>
renders the default tab correctly with onramp disabled 1`]
renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
To:
renders the default tab correctly with onramp disabled 1`]
type="button"
>
APE
renders the default tab correctly with onramp disabled 1`]
id="arrow-down"
>
renders the default tab correctly with onramp disabled 1`]
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -913,12 +1077,12 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-w-full aw-flex-row aw-items-center aw-justify-between"
>
Fees:
@@ -935,13 +1099,12 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
class="aw-flex aw-flex-row aw-items-center"
>
$0
renders the default tab correctly with onramp disabled 1`]
id="arrow-down"
>
renders the default tab correctly with onramp disabled 1`]
Max slippage:
@@ -982,10 +1146,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
type="button"
>
1
%
@@ -993,10 +1157,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
Auto
renders the default tab correctly with onramp disabled 1`]
xmlns="http://www.w3.org/2000/svg"
>
@@ -1024,10 +1188,10 @@ exports[`ApePortal > renders the default tab correctly with onramp disabled 1`]
/>
renders the default tab correctly with onramp disabled 1`]
class="aw-mt-1 aw-flex aw-h-6 aw-w-full aw-flex-row aw-justify-center"
>
renders the default tab correctly with onramp enabled 1`] =
-
+ fill="none"
+ height="268"
+ viewBox="0 0 558 268"
+ width="558"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+
+
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
-
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp enabled 1`] =
class="aw-relative aw-flex aw-w-full aw-flex-col aw-items-center aw-gap-y-3"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
renders the default tab correctly with onramp enabled 1`] =
type="button"
>
renders the default tab correctly with onramp enabled 1`] =
>
APE
renders the default tab correctly with onramp enabled 1`] =
id="arrow-down"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -1357,10 +1602,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
>
renders the default tab correctly with onramp enabled 1`] =
id="Group 378"
>
renders the default tab correctly with onramp enabled 1`] =
id="Group 379"
>
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
To:
renders the default tab correctly with onramp enabled 1`] =
type="button"
>
APE
renders the default tab correctly with onramp enabled 1`] =
id="arrow-down"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -1517,12 +1763,12 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-w-full aw-flex-row aw-items-center aw-justify-between"
>
Fees:
@@ -1539,13 +1785,12 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-flex-row aw-items-center"
>
$0
renders the default tab correctly with onramp enabled 1`] =
id="arrow-down"
>
renders the default tab correctly with onramp enabled 1`] =
Max slippage:
@@ -1586,10 +1832,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
type="button"
>
1
%
@@ -1597,10 +1843,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
Auto
renders the default tab correctly with onramp enabled 1`] =
xmlns="http://www.w3.org/2000/svg"
>
@@ -1628,10 +1874,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
/>
renders the default tab correctly with onramp enabled 1`] =
class="aw-mt-1 aw-flex aw-h-6 aw-w-full aw-flex-row aw-justify-center"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-relative aw-z-50 aw-flex aw-size-full aw-min-h-[470px] aw-flex-col aw-justify-center aw-text-clip"
>
renders the default tab correctly with onramp enabled 1`] =
id="aw-onramp-halliday"
/>
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
-
+ fill="none"
+ height="268"
+ viewBox="0 0 558 268"
+ width="558"
+ xmlns="http://www.w3.org/2000/svg"
+ >
+
+
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
-
+
+
+
+
+
+
+
+
+
renders the default tab correctly with onramp enabled 1`] =
class="aw-relative aw-flex aw-w-full aw-flex-col aw-items-center aw-gap-y-3"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
renders the default tab correctly with onramp enabled 1`] =
type="button"
>
renders the default tab correctly with onramp enabled 1`] =
>
APE
renders the default tab correctly with onramp enabled 1`] =
id="arrow-down"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -1964,10 +2291,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
>
renders the default tab correctly with onramp enabled 1`] =
id="Group 378"
>
renders the default tab correctly with onramp enabled 1`] =
id="Group 379"
>
renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
To:
renders the default tab correctly with onramp enabled 1`] =
type="button"
>
APE
renders the default tab correctly with onramp enabled 1`] =
id="arrow-down"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -2124,12 +2452,12 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-w-full aw-flex-row aw-items-center aw-justify-between"
>
Fees:
@@ -2146,13 +2474,12 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
class="aw-flex aw-flex-row aw-items-center"
>
$0
renders the default tab correctly with onramp enabled 1`] =
id="arrow-down"
>
renders the default tab correctly with onramp enabled 1`] =
Max slippage:
@@ -2193,10 +2521,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
type="button"
>
1
%
@@ -2204,10 +2532,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
Auto
renders the default tab correctly with onramp enabled 1`] =
xmlns="http://www.w3.org/2000/svg"
>
@@ -2235,10 +2563,10 @@ exports[`ApePortal > renders the default tab correctly with onramp enabled 1`] =
/>
renders the default tab correctly with onramp enabled 1`] =
class="aw-mt-1 aw-flex aw-h-6 aw-w-full aw-flex-row aw-justify-center"
>
renders the default tab correctly with onramp enabled 1`] =
class="aw-relative aw-z-50 aw-flex aw-size-full aw-min-h-[470px] aw-flex-col aw-justify-center aw-text-clip"
>
renders the default tab correctly with onramp enabled 1`] =
id="aw-onramp-halliday"
/>
renders the default tab correctly with onramp enabled 1`] =
should not render animation if animationVi
>
should not render animation if animationVi
>
should render TokenDisplay 1`] = `
>
should render TokenDisplay 1`] = `
>
should NOT show destination wallet add
"baseElement":
should NOT show destination wallet add
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should NOT show destination wallet add
type="button"
>
should NOT show destination wallet add
>
APE
should NOT show destination wallet add
id="arrow-down"
>
should NOT show destination wallet add
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -123,7 +124,7 @@ exports[`components/ui/TokenInputModule > should NOT show destination wallet add
"connect": [Function],
"container":
should NOT show destination wallet add
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should NOT show destination wallet add
type="button"
>
should NOT show destination wallet add
>
APE
should NOT show destination wallet add
id="arrow-down"
>
should NOT show destination wallet add
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -296,7 +298,7 @@ exports[`components/ui/TokenInputModule > should only render MaxButton when srcT
"baseElement":
should only render MaxButton when srcT
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should only render MaxButton when srcT
type="button"
>
should only render MaxButton when srcT
>
APE
should only render MaxButton when srcT
id="arrow-down"
>
should only render MaxButton when srcT
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -413,7 +416,7 @@ exports[`components/ui/TokenInputModule > should only render MaxButton when srcT
"connect": [Function],
"container":
should only render MaxButton when srcT
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should only render MaxButton when srcT
type="button"
>
should only render MaxButton when srcT
>
APE
should only render MaxButton when srcT
id="arrow-down"
>
should only render MaxButton when srcT
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -586,7 +590,7 @@ exports[`components/ui/TokenInputModule > should render MaxButton disabled if wa
"baseElement":
should render MaxButton disabled if wa
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should render MaxButton disabled if wa
type="button"
>
should render MaxButton disabled if wa
>
APE
should render MaxButton disabled if wa
id="arrow-down"
>
should render MaxButton disabled if wa
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -703,7 +708,7 @@ exports[`components/ui/TokenInputModule > should render MaxButton disabled if wa
"connect": [Function],
"container":
should render MaxButton disabled if wa
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should render MaxButton disabled if wa
type="button"
>
should render MaxButton disabled if wa
>
APE
should render MaxButton disabled if wa
id="arrow-down"
>
should render MaxButton disabled if wa
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -876,7 +882,7 @@ exports[`components/ui/TokenInputModule > should render MaxButton enabled if wal
"baseElement":
should render MaxButton enabled if wal
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should render MaxButton enabled if wal
type="button"
>
should render MaxButton enabled if wal
>
APE
should render MaxButton enabled if wal
id="arrow-down"
>
should render MaxButton enabled if wal
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
Loading...
@@ -992,7 +999,7 @@ exports[`components/ui/TokenInputModule > should render MaxButton enabled if wal
"connect": [Function],
"container":
should render MaxButton enabled if wal
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
From:
should render MaxButton enabled if wal
type="button"
>
should render MaxButton enabled if wal
>
APE
should render MaxButton enabled if wal
id="arrow-down"
>
should render MaxButton enabled if wal
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
Loading...
@@ -1164,7 +1172,7 @@ exports[`components/ui/TokenInputModule > should render TokenInputModule 1`] = `
"baseElement":
should render TokenInputModule 1`] = `
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
To:
should render TokenInputModule 1`] = `
type="button"
>
APE
should render TokenInputModule 1`] = `
id="arrow-down"
>
should render TokenInputModule 1`] = `
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -1271,7 +1280,7 @@ exports[`components/ui/TokenInputModule > should render TokenInputModule 1`] = `
"connect": [Function],
"container":
should render TokenInputModule 1`] = `
class="aw-flex aw-flex-1 aw-flex-col aw-justify-between"
>
To:
should render TokenInputModule 1`] = `
type="button"
>
APE
should render TokenInputModule 1`] = `
id="arrow-down"
>
should render TokenInputModule 1`] = `
class="aw-z-50 aw-flex aw-size-full aw-flex-row aw-items-center aw-justify-between aw-gap-x-2 aw-text-nowrap"
>
$0
Balance
:
0
@@ -1434,7 +1444,7 @@ exports[`components/ui/TokenInputModule > should show destination wallet address
"baseElement":