@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 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.20",
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.11",
19
+ "@affinda/wc": "^0.0.13",
20
20
  "@stencil/react-output-target": "^1.2.0"
21
21
  },
22
22
  "scripts": {