@affinda/react 0.0.20 → 0.0.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +136 -1
- package/dist/generated/components.d.ts +9 -0
- package/dist/generated/components.js +27 -0
- package/dist/index.d.ts +1 -1
- package/dist/index.js +1 -1
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -115,12 +115,19 @@ import { Button, Heading, TypographyLockup } from '@affinda/react';
|
|
|
115
115
|
- **TestimonialCarousel** / AfTestimonialCarousel - Carousel for sliding between multiple testimonials
|
|
116
116
|
- **TestimonialStat** / AfTestimonialStat - Individual statistics within testimonials
|
|
117
117
|
|
|
118
|
+
**Feature Showcase:**
|
|
119
|
+
- **FeatureAccordion** / AfFeatureAccordion - Expandable accordion with auto-cycling timer and image display
|
|
120
|
+
- **CtaSection** / AfCtaSection - Call-to-action section with illustration and buttons
|
|
121
|
+
|
|
118
122
|
**Brand:**
|
|
119
123
|
- **Logo** / AfLogo - Affinda logo component
|
|
120
124
|
|
|
121
125
|
**Decorative:**
|
|
122
126
|
- **PaperclipDecoration** - Decorative paperclip vector for hero sections
|
|
123
127
|
|
|
128
|
+
**Footer:**
|
|
129
|
+
- **Footer** / AfFooter - Full-featured footer with navigation, contact info, and social links
|
|
130
|
+
|
|
124
131
|
## Quick Start Components
|
|
125
132
|
|
|
126
133
|
### HeroSection
|
|
@@ -430,6 +437,72 @@ Site-wide navigation header with responsive design and mobile menu support.
|
|
|
430
437
|
- Variant: `"01"` (primary links), `"02"` (secondary/utility links)
|
|
431
438
|
- Variant: Controls visual style
|
|
432
439
|
|
|
440
|
+
#### Feature Showcase
|
|
441
|
+
|
|
442
|
+
**FeatureAccordion**
|
|
443
|
+
- Expandable accordion for showcasing product features
|
|
444
|
+
- Auto-cycles through items with a visual progress timer
|
|
445
|
+
- Displays accompanying images that change with each item
|
|
446
|
+
- Timer resets when user clicks an item
|
|
447
|
+
|
|
448
|
+
```tsx
|
|
449
|
+
import { FeatureAccordion } from '@affinda/react';
|
|
450
|
+
|
|
451
|
+
<FeatureAccordion
|
|
452
|
+
heading="Give AI agents your paperwork"
|
|
453
|
+
items={JSON.stringify([
|
|
454
|
+
{
|
|
455
|
+
title: "Automate document processing with 99%+ accuracy",
|
|
456
|
+
description: "Extract any information from any document with industry-leading precision.",
|
|
457
|
+
imageUrl: "https://example.com/feature1.jpg",
|
|
458
|
+
imageAlt: "Document automation"
|
|
459
|
+
},
|
|
460
|
+
{
|
|
461
|
+
title: "Build models in minutes, not months",
|
|
462
|
+
description: "Affinda learns instantly from every interaction.",
|
|
463
|
+
imageUrl: "https://example.com/feature2.jpg",
|
|
464
|
+
imageAlt: "Fast model building"
|
|
465
|
+
}
|
|
466
|
+
])}
|
|
467
|
+
cycleInterval={6000}
|
|
468
|
+
autoCycle={true}
|
|
469
|
+
/>
|
|
470
|
+
```
|
|
471
|
+
|
|
472
|
+
**Props:**
|
|
473
|
+
- `heading`: Section heading text
|
|
474
|
+
- `items`: JSON string array of accordion items (title, description, imageUrl, imageAlt)
|
|
475
|
+
- `cycleInterval`: Auto-cycle interval in milliseconds (default: 6000)
|
|
476
|
+
- `autoCycle`: Enable/disable auto-cycling (default: true)
|
|
477
|
+
|
|
478
|
+
**CtaSection**
|
|
479
|
+
- Call-to-action section with illustration and decorative background
|
|
480
|
+
- Styled to match the affinda.com design
|
|
481
|
+
|
|
482
|
+
```tsx
|
|
483
|
+
import { CtaSection } from '@affinda/react';
|
|
484
|
+
import { getIllustrationUrlByScene } from '@affinda/illustrations';
|
|
485
|
+
|
|
486
|
+
<CtaSection
|
|
487
|
+
heading="See what our AI agents can do for you"
|
|
488
|
+
description="Upload your documents and watch our AI agents get to work."
|
|
489
|
+
primaryButtonText="Try for free"
|
|
490
|
+
primaryButtonUrl="https://app.affinda.com/auth/register"
|
|
491
|
+
secondaryButtonText="Talk to us"
|
|
492
|
+
secondaryButtonUrl="/contact"
|
|
493
|
+
illustrationUrl={getIllustrationUrlByScene('automate', 'inkwell')}
|
|
494
|
+
/>
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
**Props:**
|
|
498
|
+
- `heading`: Section heading text
|
|
499
|
+
- `description`: Description text below heading
|
|
500
|
+
- `primaryButtonText`: Text for primary CTA button
|
|
501
|
+
- `primaryButtonUrl`: URL for primary button
|
|
502
|
+
- `secondaryButtonText`: Text for secondary button
|
|
503
|
+
- `secondaryButtonUrl`: URL for secondary button
|
|
504
|
+
- `illustrationUrl`: URL to illustration image (use @affinda/illustrations)
|
|
505
|
+
|
|
433
506
|
#### Social Proof & Testimonials
|
|
434
507
|
|
|
435
508
|
**Testimonial**
|
|
@@ -682,10 +755,72 @@ When generating Affinda UI code:
|
|
|
682
755
|
|
|
683
756
|
4. **Never use purple colors** - those were placeholder colors and have been removed
|
|
684
757
|
|
|
758
|
+
### Footer
|
|
759
|
+
|
|
760
|
+
A comprehensive footer component matching affinda.com's design.
|
|
761
|
+
|
|
762
|
+
```tsx
|
|
763
|
+
import { Footer, Logo } from '@affinda/react';
|
|
764
|
+
|
|
765
|
+
<Footer
|
|
766
|
+
salesEmail="contact@affinda.com"
|
|
767
|
+
supportEmail="support@affinda.com"
|
|
768
|
+
linkedinUrl="https://www.linkedin.com/company/affinda/"
|
|
769
|
+
youtubeUrl="https://www.youtube.com/@affinda"
|
|
770
|
+
githubUrl="https://github.com/affinda"
|
|
771
|
+
statusUrl="https://status.affinda.com"
|
|
772
|
+
systemsOperational={true}
|
|
773
|
+
>
|
|
774
|
+
<Logo slot="logo" />
|
|
775
|
+
</Footer>
|
|
776
|
+
```
|
|
777
|
+
|
|
778
|
+
**Props:**
|
|
779
|
+
- `salesEmail`: Sales contact email address
|
|
780
|
+
- `supportEmail`: Support contact email address
|
|
781
|
+
- `linkedinUrl`: LinkedIn profile URL
|
|
782
|
+
- `youtubeUrl`: YouTube channel URL
|
|
783
|
+
- `githubUrl`: GitHub organization URL
|
|
784
|
+
- `statusUrl`: Status page URL
|
|
785
|
+
- `systemsOperational`: Boolean indicating system status
|
|
786
|
+
- `copyrightYear`: Copyright year (defaults to current year)
|
|
787
|
+
|
|
788
|
+
**Slots:**
|
|
789
|
+
- `logo`: Custom logo component (defaults to Affinda logo)
|
|
790
|
+
- `nav-columns`: Custom navigation columns (defaults to Affinda navigation)
|
|
791
|
+
- `badges`: Custom certification badges (defaults to GDPR, SOC, ISO badges)
|
|
792
|
+
|
|
793
|
+
**Features:**
|
|
794
|
+
- Dark inkwell background with mist green text
|
|
795
|
+
- Social media links with hover effects
|
|
796
|
+
- Four-column navigation layout
|
|
797
|
+
- System status indicator
|
|
798
|
+
- Legal links and certification badges
|
|
799
|
+
- Fully responsive design
|
|
800
|
+
|
|
801
|
+
## Using Illustrations
|
|
802
|
+
|
|
803
|
+
The `@affinda/illustrations` package provides themed illustration assets:
|
|
804
|
+
|
|
805
|
+
```tsx
|
|
806
|
+
import { getIllustrationUrlByScene } from '@affinda/illustrations';
|
|
807
|
+
|
|
808
|
+
// Available scenes: 'document-raise', 'thinking', 'shapes', 'team-leader',
|
|
809
|
+
// 'grow-business', 'document-type', 'industries', 'accuracy', 'intelligence',
|
|
810
|
+
// 'page-turn', 'automate'
|
|
811
|
+
|
|
812
|
+
// Available themes: 'white-ivory', 'mist-green', 'soft-clay', 'inkwell'
|
|
813
|
+
|
|
814
|
+
<img
|
|
815
|
+
src={getIllustrationUrlByScene('automate', 'inkwell')}
|
|
816
|
+
alt="Automation illustration"
|
|
817
|
+
/>
|
|
818
|
+
```
|
|
819
|
+
|
|
685
820
|
## Related Packages
|
|
686
821
|
|
|
687
822
|
- **@affinda/wc** - Core web components (used internally)
|
|
688
823
|
- **@affinda/tokens** - Design tokens (colors, spacing, typography)
|
|
689
824
|
- **@affinda/icons** - Icon library
|
|
690
|
-
- **@affinda/illustrations** - Illustration assets
|
|
825
|
+
- **@affinda/illustrations** - Illustration assets (install separately: `npm install @affinda/illustrations`)
|
|
691
826
|
- **@affinda/css** - Base CSS styles
|
|
@@ -9,6 +9,9 @@ import { AfCard as AfCardElement } from "@affinda/wc/dist/components/af-card.js"
|
|
|
9
9
|
import { AfClientCarousel as AfClientCarouselElement } from "@affinda/wc/dist/components/af-client-carousel.js";
|
|
10
10
|
import { AfColorSwatch as AfColorSwatchElement } from "@affinda/wc/dist/components/af-color-swatch.js";
|
|
11
11
|
import { AfContainer as AfContainerElement } from "@affinda/wc/dist/components/af-container.js";
|
|
12
|
+
import { AfCtaSection as AfCtaSectionElement } from "@affinda/wc/dist/components/af-cta-section.js";
|
|
13
|
+
import { AfFeatureAccordion as AfFeatureAccordionElement } from "@affinda/wc/dist/components/af-feature-accordion.js";
|
|
14
|
+
import { AfFooter as AfFooterElement } from "@affinda/wc/dist/components/af-footer.js";
|
|
12
15
|
import { AfHeading as AfHeadingElement } from "@affinda/wc/dist/components/af-heading.js";
|
|
13
16
|
import { AfHeroSection as AfHeroSectionElement } from "@affinda/wc/dist/components/af-hero-section.js";
|
|
14
17
|
import { AfIconButton as AfIconButtonElement } from "@affinda/wc/dist/components/af-icon-button.js";
|
|
@@ -37,6 +40,12 @@ export type AfColorSwatchEvents = NonNullable<unknown>;
|
|
|
37
40
|
export declare const AfColorSwatch: StencilReactComponent<AfColorSwatchElement, AfColorSwatchEvents>;
|
|
38
41
|
export type AfContainerEvents = NonNullable<unknown>;
|
|
39
42
|
export declare const AfContainer: StencilReactComponent<AfContainerElement, AfContainerEvents>;
|
|
43
|
+
export type AfCtaSectionEvents = NonNullable<unknown>;
|
|
44
|
+
export declare const AfCtaSection: StencilReactComponent<AfCtaSectionElement, AfCtaSectionEvents>;
|
|
45
|
+
export type AfFeatureAccordionEvents = NonNullable<unknown>;
|
|
46
|
+
export declare const AfFeatureAccordion: StencilReactComponent<AfFeatureAccordionElement, AfFeatureAccordionEvents>;
|
|
47
|
+
export type AfFooterEvents = NonNullable<unknown>;
|
|
48
|
+
export declare const AfFooter: StencilReactComponent<AfFooterElement, AfFooterEvents>;
|
|
40
49
|
export type AfHeadingEvents = NonNullable<unknown>;
|
|
41
50
|
export declare const AfHeading: StencilReactComponent<AfHeadingElement, AfHeadingEvents>;
|
|
42
51
|
export type AfHeroSectionEvents = NonNullable<unknown>;
|
|
@@ -11,6 +11,9 @@ import { AfCard as AfCardElement, defineCustomElement as defineAfCard } from "@a
|
|
|
11
11
|
import { AfClientCarousel as AfClientCarouselElement, defineCustomElement as defineAfClientCarousel } from "@affinda/wc/dist/components/af-client-carousel.js";
|
|
12
12
|
import { AfColorSwatch as AfColorSwatchElement, defineCustomElement as defineAfColorSwatch } from "@affinda/wc/dist/components/af-color-swatch.js";
|
|
13
13
|
import { AfContainer as AfContainerElement, defineCustomElement as defineAfContainer } from "@affinda/wc/dist/components/af-container.js";
|
|
14
|
+
import { AfCtaSection as AfCtaSectionElement, defineCustomElement as defineAfCtaSection } from "@affinda/wc/dist/components/af-cta-section.js";
|
|
15
|
+
import { AfFeatureAccordion as AfFeatureAccordionElement, defineCustomElement as defineAfFeatureAccordion } from "@affinda/wc/dist/components/af-feature-accordion.js";
|
|
16
|
+
import { AfFooter as AfFooterElement, defineCustomElement as defineAfFooter } from "@affinda/wc/dist/components/af-footer.js";
|
|
14
17
|
import { AfHeading as AfHeadingElement, defineCustomElement as defineAfHeading } from "@affinda/wc/dist/components/af-heading.js";
|
|
15
18
|
import { AfHeroSection as AfHeroSectionElement, defineCustomElement as defineAfHeroSection } from "@affinda/wc/dist/components/af-hero-section.js";
|
|
16
19
|
import { AfIconButton as AfIconButtonElement, defineCustomElement as defineAfIconButton } from "@affinda/wc/dist/components/af-icon-button.js";
|
|
@@ -82,6 +85,30 @@ export const AfContainer = /*@__PURE__*/ createComponent({
|
|
|
82
85
|
events: {},
|
|
83
86
|
defineCustomElement: defineAfContainer
|
|
84
87
|
});
|
|
88
|
+
export const AfCtaSection = /*@__PURE__*/ createComponent({
|
|
89
|
+
tagName: 'af-cta-section',
|
|
90
|
+
elementClass: AfCtaSectionElement,
|
|
91
|
+
// @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
|
|
92
|
+
react: React,
|
|
93
|
+
events: {},
|
|
94
|
+
defineCustomElement: defineAfCtaSection
|
|
95
|
+
});
|
|
96
|
+
export const AfFeatureAccordion = /*@__PURE__*/ createComponent({
|
|
97
|
+
tagName: 'af-feature-accordion',
|
|
98
|
+
elementClass: AfFeatureAccordionElement,
|
|
99
|
+
// @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
|
|
100
|
+
react: React,
|
|
101
|
+
events: {},
|
|
102
|
+
defineCustomElement: defineAfFeatureAccordion
|
|
103
|
+
});
|
|
104
|
+
export const AfFooter = /*@__PURE__*/ createComponent({
|
|
105
|
+
tagName: 'af-footer',
|
|
106
|
+
elementClass: AfFooterElement,
|
|
107
|
+
// @ts-ignore - ignore potential React type mismatches between the Stencil Output Target and your project.
|
|
108
|
+
react: React,
|
|
109
|
+
events: {},
|
|
110
|
+
defineCustomElement: defineAfFooter
|
|
111
|
+
});
|
|
85
112
|
export const AfHeading = /*@__PURE__*/ createComponent({
|
|
86
113
|
tagName: 'af-heading',
|
|
87
114
|
elementClass: AfHeadingElement,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
export * from './generated/components.js';
|
|
2
|
-
export { AfAspectRatio as AspectRatio, AfButton as Button, AfButtonGroup as ButtonGroup, AfCard as Card, AfClientCarousel as ClientCarousel, AfColorSwatch as ColorSwatch, AfContainer as Container, AfHeading as Heading, AfHeroSection as HeroSection, AfIconButton as IconButton, AfLogo as Logo, AfLogoWell as LogoWell, AfNavItem as NavItem, AfNavbar as Navbar, AfSection as Section, AfText as Text, AfTestimonial as Testimonial, AfTestimonialCarousel as TestimonialCarousel, AfTestimonialStat as TestimonialStat, AfTypographyLockup as TypographyLockup } from './generated/components.js';
|
|
2
|
+
export { AfAspectRatio as AspectRatio, AfButton as Button, AfButtonGroup as ButtonGroup, AfCard as Card, AfClientCarousel as ClientCarousel, AfColorSwatch as ColorSwatch, AfContainer as Container, AfCtaSection as CtaSection, AfFeatureAccordion as FeatureAccordion, AfFooter as Footer, AfHeading as Heading, AfHeroSection as HeroSection, AfIconButton as IconButton, AfLogo as Logo, AfLogoWell as LogoWell, AfNavItem as NavItem, AfNavbar as Navbar, AfSection as Section, AfText as Text, AfTestimonial as Testimonial, AfTestimonialCarousel as TestimonialCarousel, AfTestimonialStat as TestimonialStat, AfTypographyLockup as TypographyLockup } from './generated/components.js';
|
|
3
3
|
export * from '@affinda/icons/react';
|
|
4
4
|
export { PaperclipDecoration } from './components/PaperclipDecoration';
|
package/dist/index.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
export * from './generated/components.js';
|
|
3
3
|
// Note: defineCustomElements should be imported directly from @affinda/wc/loader/index.js in your app
|
|
4
4
|
// Re-export components without the 'Af' prefix for cleaner React usage
|
|
5
|
-
export { AfAspectRatio as AspectRatio, AfButton as Button, AfButtonGroup as ButtonGroup, AfCard as Card, AfClientCarousel as ClientCarousel, AfColorSwatch as ColorSwatch, AfContainer as Container, AfHeading as Heading, AfHeroSection as HeroSection, AfIconButton as IconButton, AfLogo as Logo, AfLogoWell as LogoWell, AfNavItem as NavItem, AfNavbar as Navbar, AfSection as Section, AfText as Text, AfTestimonial as Testimonial, AfTestimonialCarousel as TestimonialCarousel, AfTestimonialStat as TestimonialStat, AfTypographyLockup as TypographyLockup } from './generated/components.js';
|
|
5
|
+
export { AfAspectRatio as AspectRatio, AfButton as Button, AfButtonGroup as ButtonGroup, AfCard as Card, AfClientCarousel as ClientCarousel, AfColorSwatch as ColorSwatch, AfContainer as Container, AfCtaSection as CtaSection, AfFeatureAccordion as FeatureAccordion, AfFooter as Footer, AfHeading as Heading, AfHeroSection as HeroSection, AfIconButton as IconButton, AfLogo as Logo, AfLogoWell as LogoWell, AfNavItem as NavItem, AfNavbar as Navbar, AfSection as Section, AfText as Text, AfTestimonial as Testimonial, AfTestimonialCarousel as TestimonialCarousel, AfTestimonialStat as TestimonialStat, AfTypographyLockup as TypographyLockup } from './generated/components.js';
|
|
6
6
|
// Re-export React icon components from icons package
|
|
7
7
|
export * from '@affinda/icons/react';
|
|
8
8
|
// Export custom React components
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@affinda/react",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.22",
|
|
4
4
|
"private": false,
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
},
|
|
17
17
|
"dependencies": {
|
|
18
18
|
"@affinda/icons": "^0.0.3",
|
|
19
|
-
"@affinda/wc": "^0.0.
|
|
19
|
+
"@affinda/wc": "^0.0.13",
|
|
20
20
|
"@stencil/react-output-target": "^1.2.0"
|
|
21
21
|
},
|
|
22
22
|
"scripts": {
|