@affinda/react 0.0.26 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (41) hide show
  1. package/README.md +412 -416
  2. package/dist/components/AfAccordionTrigger.d.ts +22 -0
  3. package/dist/components/AfAccordionTrigger.js +18 -0
  4. package/dist/components/AfAlert.d.ts +22 -0
  5. package/dist/components/AfAlert.js +67 -0
  6. package/dist/components/AfAvatar.d.ts +21 -0
  7. package/dist/components/AfAvatar.js +62 -0
  8. package/dist/components/AfBreadcrumb.d.ts +21 -0
  9. package/dist/components/AfBreadcrumb.js +32 -0
  10. package/dist/components/AfLink.d.ts +21 -0
  11. package/dist/components/AfLink.js +30 -0
  12. package/dist/components/AfMarketingNavbar.d.ts +53 -0
  13. package/dist/components/AfMarketingNavbar.js +23 -0
  14. package/dist/components/AfModal.d.ts +25 -0
  15. package/dist/components/AfModal.js +71 -0
  16. package/dist/components/AfNumberBadge.d.ts +20 -0
  17. package/dist/components/{NumberBadge.js → AfNumberBadge.js} +3 -3
  18. package/dist/components/AfPaperclipDecoration.d.ts +23 -0
  19. package/dist/components/{PaperclipDecoration.js → AfPaperclipDecoration.js} +9 -8
  20. package/dist/components/AfSelect.d.ts +34 -0
  21. package/dist/components/AfSelect.js +104 -0
  22. package/dist/components/AfSkeleton.d.ts +19 -0
  23. package/dist/components/AfSkeleton.js +50 -0
  24. package/dist/components/AfSpinner.d.ts +47 -0
  25. package/dist/components/AfSpinner.js +54 -0
  26. package/dist/components/{Tab.d.ts → AfTab.d.ts} +5 -5
  27. package/dist/components/{Tab.js → AfTab.js} +3 -3
  28. package/dist/components/AfTabBar.d.ts +20 -0
  29. package/dist/components/{TabBar.js → AfTabBar.js} +3 -3
  30. package/dist/components/AfToast.d.ts +22 -0
  31. package/dist/components/AfToast.js +77 -0
  32. package/dist/components/AfTooltip.d.ts +19 -0
  33. package/dist/components/AfTooltip.js +80 -0
  34. package/dist/generated/components.d.ts +58 -3
  35. package/dist/generated/components.js +117 -9
  36. package/dist/index.d.ts +31 -8
  37. package/dist/index.js +20 -9
  38. package/package.json +3 -3
  39. package/dist/components/NumberBadge.d.ts +0 -20
  40. package/dist/components/PaperclipDecoration.d.ts +0 -22
  41. package/dist/components/TabBar.d.ts +0 -20
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ export interface AfAccordionTriggerProps {
3
+ /** Trigger content */
4
+ children: React.ReactNode;
5
+ /** Additional class name */
6
+ className?: string;
7
+ /** Inline styles */
8
+ style?: React.CSSProperties;
9
+ }
10
+ /**
11
+ * AfAccordionTrigger provides the clickable header content for an AfAccordionItem.
12
+ * It automatically applies the `slot="trigger"` attribute required by the accordion.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * <AfAccordionItem itemId="item-1">
17
+ * <AfAccordionTrigger>What is document processing?</AfAccordionTrigger>
18
+ * <AfText>Answer text here...</AfText>
19
+ * </AfAccordionItem>
20
+ * ```
21
+ */
22
+ export declare const AfAccordionTrigger: React.ForwardRefExoticComponent<AfAccordionTriggerProps & React.RefAttributes<HTMLSpanElement>>;
@@ -0,0 +1,18 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import React from 'react';
3
+ /**
4
+ * AfAccordionTrigger provides the clickable header content for an AfAccordionItem.
5
+ * It automatically applies the `slot="trigger"` attribute required by the accordion.
6
+ *
7
+ * @example
8
+ * ```tsx
9
+ * <AfAccordionItem itemId="item-1">
10
+ * <AfAccordionTrigger>What is document processing?</AfAccordionTrigger>
11
+ * <AfText>Answer text here...</AfText>
12
+ * </AfAccordionItem>
13
+ * ```
14
+ */
15
+ export const AfAccordionTrigger = React.forwardRef(({ children, className, style, ...props }, ref) => {
16
+ return (_jsx("span", { ref: ref, slot: "trigger", className: className, style: style, ...props, children: children }));
17
+ });
18
+ AfAccordionTrigger.displayName = 'AfAccordionTrigger';
@@ -0,0 +1,22 @@
1
+ import React from 'react';
2
+ export type AfAlertVariant = 'info' | 'success' | 'warning' | 'error';
3
+ export interface AfAlertProps {
4
+ /** Alert message content */
5
+ children: React.ReactNode;
6
+ /** Alert variant */
7
+ variant?: AfAlertVariant;
8
+ /** Alert title */
9
+ title?: string;
10
+ /** Whether the alert can be dismissed */
11
+ dismissible?: boolean;
12
+ /** Callback when alert is dismissed */
13
+ onDismiss?: () => void;
14
+ /** Additional CSS styles */
15
+ style?: React.CSSProperties;
16
+ }
17
+ /**
18
+ * AfAlert - Draft inline alert/banner component.
19
+ *
20
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
21
+ */
22
+ export declare const AfAlert: React.FC<AfAlertProps>;
@@ -0,0 +1,67 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AfAlert - Draft inline alert/banner component.
4
+ *
5
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
6
+ */
7
+ export const AfAlert = ({ children, variant = 'info', title, dismissible = false, onDismiss, style, }) => {
8
+ const variantStyles = {
9
+ info: {
10
+ bg: 'var(--colour-tints-mist-green-100, #e8f0ee)',
11
+ border: 'var(--colour-brand-mist-green, #c6d5d1)',
12
+ iconColor: 'var(--colour-brand-inkwell, #14343b)',
13
+ },
14
+ success: {
15
+ bg: 'var(--colour-tints-mist-green-100, #e8f0ee)',
16
+ border: 'var(--colour-brand-azure, #7fe2d4)',
17
+ iconColor: '#059669',
18
+ },
19
+ warning: {
20
+ bg: 'var(--colour-tints-softclay-100, #f5efe6)',
21
+ border: 'var(--colour-brand-soft-clay, #b09670)',
22
+ iconColor: '#d97706',
23
+ },
24
+ error: {
25
+ bg: '#fef2f2',
26
+ border: '#fca5a5',
27
+ iconColor: '#dc2626',
28
+ },
29
+ };
30
+ const icons = {
31
+ info: (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: [_jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M12 16V12M12 8H12.01", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })] })),
32
+ success: (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: [_jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M8 12L11 15L16 9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] })),
33
+ warning: (_jsx("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M12 9V13M12 17H12.01M12 3L2 21H22L12 3Z", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) })),
34
+ error: (_jsxs("svg", { width: "20", height: "20", viewBox: "0 0 24 24", fill: "none", children: [_jsx("circle", { cx: "12", cy: "12", r: "10", stroke: "currentColor", strokeWidth: "2" }), _jsx("path", { d: "M15 9L9 15M9 9L15 15", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round" })] })),
35
+ };
36
+ const currentVariant = variantStyles[variant];
37
+ const alertStyles = {
38
+ display: 'flex',
39
+ alignItems: 'flex-start',
40
+ gap: '12px',
41
+ padding: '16px',
42
+ background: currentVariant.bg,
43
+ border: `1px solid ${currentVariant.border}`,
44
+ borderRadius: '8px',
45
+ fontFamily: 'var(--typography-bodyfont, system-ui, sans-serif)',
46
+ fontSize: '14px',
47
+ color: 'var(--colour-brand-inkwell, #14343b)',
48
+ ...style,
49
+ };
50
+ const iconStyles = {
51
+ flexShrink: 0,
52
+ color: currentVariant.iconColor,
53
+ };
54
+ const closeButtonStyles = {
55
+ marginLeft: 'auto',
56
+ background: 'none',
57
+ border: 'none',
58
+ cursor: 'pointer',
59
+ padding: '4px',
60
+ display: 'flex',
61
+ alignItems: 'center',
62
+ justifyContent: 'center',
63
+ color: 'var(--colour-tints-inkwell-400, #7a8a8d)',
64
+ flexShrink: 0,
65
+ };
66
+ return (_jsxs("div", { style: alertStyles, role: "alert", children: [_jsx("span", { style: iconStyles, children: icons[variant] }), _jsxs("div", { style: { flex: 1 }, children: [title && _jsx("div", { style: { fontWeight: 600, marginBottom: '4px' }, children: title }), _jsx("div", { children: children })] }), dismissible && (_jsx("button", { type: "button", onClick: onDismiss, style: closeButtonStyles, "aria-label": "Dismiss", children: _jsx("svg", { width: "16", height: "16", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M18 6L6 18M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] }));
67
+ };
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export interface AfAvatarProps {
3
+ /** Image source URL */
4
+ src?: string;
5
+ /** Alt text for the image */
6
+ alt?: string;
7
+ /** Fallback initials when no image is provided */
8
+ initials?: string;
9
+ /** Size of the avatar */
10
+ size?: 'small' | 'medium' | 'large';
11
+ /** Whether to show a status indicator */
12
+ status?: 'online' | 'offline' | 'busy' | 'away';
13
+ /** Additional CSS styles */
14
+ style?: React.CSSProperties;
15
+ }
16
+ /**
17
+ * AfAvatar - Draft avatar component for user images.
18
+ *
19
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
20
+ */
21
+ export declare const AfAvatar: React.FC<AfAvatarProps>;
@@ -0,0 +1,62 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AfAvatar - Draft avatar component for user images.
4
+ *
5
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
6
+ */
7
+ export const AfAvatar = ({ src, alt = 'Avatar', initials, size = 'medium', status, style, }) => {
8
+ const sizeMap = {
9
+ small: 32,
10
+ medium: 40,
11
+ large: 56,
12
+ };
13
+ const dimension = sizeMap[size];
14
+ const fontSize = size === 'small' ? 12 : size === 'large' ? 20 : 14;
15
+ const statusColors = {
16
+ online: '#22c55e',
17
+ offline: '#9ca3af',
18
+ busy: '#ef4444',
19
+ away: '#f59e0b',
20
+ };
21
+ const avatarStyles = {
22
+ position: 'relative',
23
+ display: 'inline-flex',
24
+ alignItems: 'center',
25
+ justifyContent: 'center',
26
+ width: dimension,
27
+ height: dimension,
28
+ borderRadius: '50%',
29
+ flexShrink: 0,
30
+ ...style,
31
+ };
32
+ const contentStyles = {
33
+ display: 'flex',
34
+ alignItems: 'center',
35
+ justifyContent: 'center',
36
+ width: '100%',
37
+ height: '100%',
38
+ borderRadius: '50%',
39
+ background: 'var(--colour-brand-mist-green, #c6d5d1)',
40
+ color: 'var(--colour-brand-inkwell, #14343b)',
41
+ fontFamily: 'var(--typography-bodyfont, system-ui, sans-serif)',
42
+ fontSize,
43
+ fontWeight: 600,
44
+ overflow: 'hidden',
45
+ };
46
+ const imageStyles = {
47
+ width: '100%',
48
+ height: '100%',
49
+ objectFit: 'cover',
50
+ };
51
+ const statusStyles = {
52
+ position: 'absolute',
53
+ bottom: 0,
54
+ right: 0,
55
+ width: size === 'small' ? 8 : size === 'large' ? 14 : 10,
56
+ height: size === 'small' ? 8 : size === 'large' ? 14 : 10,
57
+ borderRadius: '50%',
58
+ background: status ? statusColors[status] : 'transparent',
59
+ border: '2px solid var(--colour-background-white, #fff)',
60
+ };
61
+ return (_jsxs("div", { style: avatarStyles, children: [_jsx("div", { style: contentStyles, children: src ? (_jsx("img", { src: src, alt: alt, style: imageStyles })) : (_jsx("span", { children: initials || alt.charAt(0).toUpperCase() })) }), status && _jsx("div", { style: statusStyles, "aria-label": `Status: ${status}` })] }));
62
+ };
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export interface AfBreadcrumbItem {
3
+ /** Label to display */
4
+ label: string;
5
+ /** URL to link to (optional for last item) */
6
+ href?: string;
7
+ }
8
+ export interface AfBreadcrumbProps {
9
+ /** Array of breadcrumb items */
10
+ items: AfBreadcrumbItem[];
11
+ /** Separator between items */
12
+ separator?: React.ReactNode;
13
+ /** Additional CSS styles */
14
+ style?: React.CSSProperties;
15
+ }
16
+ /**
17
+ * AfBreadcrumb - Draft breadcrumb navigation component.
18
+ *
19
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
20
+ */
21
+ export declare const AfBreadcrumb: React.FC<AfBreadcrumbProps>;
@@ -0,0 +1,32 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AfBreadcrumb - Draft breadcrumb navigation component.
4
+ *
5
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
6
+ */
7
+ export const AfBreadcrumb = ({ items, separator = '/', style, }) => {
8
+ const containerStyles = {
9
+ display: 'flex',
10
+ alignItems: 'center',
11
+ gap: '8px',
12
+ fontFamily: 'var(--typography-bodyfont, system-ui, sans-serif)',
13
+ fontSize: '14px',
14
+ ...style,
15
+ };
16
+ const linkStyles = {
17
+ color: 'var(--af-typography-body-subtle, #a1aeb1)',
18
+ textDecoration: 'none',
19
+ transition: 'color 0.15s ease',
20
+ };
21
+ const activeStyles = {
22
+ color: 'var(--af-typography-body-dark, #14343b)',
23
+ fontWeight: 500,
24
+ };
25
+ const separatorStyles = {
26
+ color: 'var(--af-typography-body-subtle, #a1aeb1)',
27
+ };
28
+ return (_jsx("nav", { "aria-label": "Breadcrumb", style: containerStyles, children: _jsx("ol", { style: { display: 'flex', alignItems: 'center', gap: '8px', margin: 0, padding: 0, listStyle: 'none' }, children: items.map((item, index) => {
29
+ const isLast = index === items.length - 1;
30
+ return (_jsxs("li", { style: { display: 'flex', alignItems: 'center', gap: '8px' }, children: [item.href && !isLast ? (_jsx("a", { href: item.href, style: linkStyles, onMouseEnter: (e) => e.currentTarget.style.color = 'var(--af-typography-body-dark, #14343b)', onMouseLeave: (e) => e.currentTarget.style.color = 'var(--af-typography-body-subtle, #a1aeb1)', children: item.label })) : (_jsx("span", { style: isLast ? activeStyles : linkStyles, "aria-current": isLast ? 'page' : undefined, children: item.label })), !isLast && _jsx("span", { style: separatorStyles, "aria-hidden": "true", children: separator })] }, index));
31
+ }) }) }));
32
+ };
@@ -0,0 +1,21 @@
1
+ import React from 'react';
2
+ export interface AfLinkProps {
3
+ /** Link destination */
4
+ href: string;
5
+ /** Link content */
6
+ children: React.ReactNode;
7
+ /** Whether to open in a new tab */
8
+ external?: boolean;
9
+ /** Link variant */
10
+ variant?: 'default' | 'subtle';
11
+ /** Whether to show an external link icon */
12
+ showExternalIcon?: boolean;
13
+ /** Additional CSS styles */
14
+ style?: React.CSSProperties;
15
+ }
16
+ /**
17
+ * AfLink - Draft styled link component.
18
+ *
19
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
20
+ */
21
+ export declare const AfLink: React.FC<AfLinkProps>;
@@ -0,0 +1,30 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ /**
3
+ * AfLink - Draft styled link component.
4
+ *
5
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
6
+ */
7
+ export const AfLink = ({ href, children, external = false, variant = 'default', showExternalIcon = true, style, }) => {
8
+ // Use the same theme-aware color variables as NavItem
9
+ const defaultColor = 'var(--af-nav-item-primary, var(--af-typography-body-dark, #14343b))';
10
+ const subtleColor = 'var(--af-nav-item-secondary, var(--af-typography-body-default, #2b484f))';
11
+ const linkStyles = {
12
+ display: 'inline-flex',
13
+ alignItems: 'center',
14
+ gap: '4px',
15
+ fontFamily: 'var(--typography-bodyfont, system-ui, sans-serif)',
16
+ color: variant === 'default' ? defaultColor : subtleColor,
17
+ textDecoration: variant === 'default' ? 'underline' : 'none',
18
+ textDecorationColor: 'currentColor',
19
+ textUnderlineOffset: '2px',
20
+ transition: 'opacity 0.15s ease',
21
+ cursor: 'pointer',
22
+ ...style,
23
+ };
24
+ const externalIcon = (_jsxs("svg", { width: "14", height: "14", viewBox: "0 0 24 24", fill: "none", style: { flexShrink: 0 }, children: [_jsx("path", { d: "M18 13V19C18 19.5304 17.7893 20.0391 17.4142 20.4142C17.0391 20.7893 16.5304 21 16 21H5C4.46957 21 3.96086 20.7893 3.58579 20.4142C3.21071 20.0391 3 19.5304 3 19V8C3 7.46957 3.21071 6.96086 3.58579 6.58579C3.96086 6.21071 4.46957 6 5 6H11", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M15 3H21V9", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }), _jsx("path", { d: "M10 14L21 3", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" })] }));
25
+ return (_jsxs("a", { href: href, target: external ? '_blank' : undefined, rel: external ? 'noopener noreferrer' : undefined, style: linkStyles, onMouseEnter: (e) => {
26
+ e.currentTarget.style.opacity = '0.7';
27
+ }, onMouseLeave: (e) => {
28
+ e.currentTarget.style.opacity = '1';
29
+ }, children: [children, external && showExternalIcon && externalIcon] }));
30
+ };
@@ -0,0 +1,53 @@
1
+ import React from 'react';
2
+ declare global {
3
+ namespace JSX {
4
+ interface IntrinsicElements {
5
+ 'af-nav-accordion': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & {
6
+ mode?: 'independent' | 'exclusive';
7
+ breakpoint?: 'desktop' | 'mobile';
8
+ slot?: string;
9
+ }, HTMLElement>;
10
+ 'af-nav-accordion-item': React.DetailedHTMLProps<React.HTMLAttributes<HTMLElement> & {
11
+ 'item-id'?: string;
12
+ label?: string;
13
+ open?: boolean;
14
+ disabled?: boolean;
15
+ breakpoint?: 'desktop' | 'mobile';
16
+ slot?: string;
17
+ }, HTMLElement>;
18
+ }
19
+ }
20
+ }
21
+ export interface AfMarketingNavbarProps {
22
+ /** Theme for the spacer background */
23
+ theme?: 'white' | 'inkwell' | 'mist-green' | 'soft-clay';
24
+ /** Custom class name */
25
+ className?: string;
26
+ /** Custom styles */
27
+ style?: React.CSSProperties;
28
+ /** Callback when "Try for free" is clicked */
29
+ onCtaClick?: () => void;
30
+ /** URL for the CTA button (if using as link instead of button) */
31
+ ctaHref?: string;
32
+ /** Custom CTA button text */
33
+ ctaText?: string;
34
+ /** Force mobile layout regardless of viewport (useful for testing) */
35
+ forceMobile?: boolean;
36
+ }
37
+ /**
38
+ * Pre-configured navigation bar matching the Affinda marketing website (affinda.com).
39
+ *
40
+ * Includes:
41
+ * - Platform, Solutions, Pricing, Resources, Enterprise navigation links
42
+ * - Solutions mega-menu dropdown with Industries, Use Cases, Documents, Resume Parser
43
+ * - Resources mega-menu dropdown with Resource Hub, Documentation, About
44
+ * - "Talk to us" and "Log in" utility links
45
+ * - "Try for free" CTA button
46
+ * - Mobile menu with direct links and accordions matching affinda.com behavior
47
+ *
48
+ * @example
49
+ * ```tsx
50
+ * <AfMarketingNavbar theme="inkwell" onCtaClick={() => navigate('/signup')} />
51
+ * ```
52
+ */
53
+ export declare const AfMarketingNavbar: React.FC<AfMarketingNavbarProps>;
@@ -0,0 +1,23 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { AfNavbar, AfNavItem, AfNavMenu, AfNavMenuNest, AfButton, } from '../generated/components.js';
3
+ import { ChevronDown } from '../icons/index.js';
4
+ /**
5
+ * Pre-configured navigation bar matching the Affinda marketing website (affinda.com).
6
+ *
7
+ * Includes:
8
+ * - Platform, Solutions, Pricing, Resources, Enterprise navigation links
9
+ * - Solutions mega-menu dropdown with Industries, Use Cases, Documents, Resume Parser
10
+ * - Resources mega-menu dropdown with Resource Hub, Documentation, About
11
+ * - "Talk to us" and "Log in" utility links
12
+ * - "Try for free" CTA button
13
+ * - Mobile menu with direct links and accordions matching affinda.com behavior
14
+ *
15
+ * @example
16
+ * ```tsx
17
+ * <AfMarketingNavbar theme="inkwell" onCtaClick={() => navigate('/signup')} />
18
+ * ```
19
+ */
20
+ export const AfMarketingNavbar = ({ theme = 'inkwell', className, style, onCtaClick, ctaHref, ctaText = 'Try for free', forceMobile = false, }) => {
21
+ return (_jsxs(AfNavbar, { theme: theme, className: className, style: style, forceMobile: forceMobile, children: [_jsxs("div", { slot: "start", children: [_jsx(AfNavItem, { hierarchy: "primary", variant: "01", href: "/platform", children: "Platform" }), _jsxs(AfNavItem, { hierarchy: "primary", variant: "01", children: ["Solutions", _jsx("span", { slot: "icon-right", children: _jsx(ChevronDown, { size: 20 }) })] }), _jsxs(AfNavItem, { hierarchy: "primary", variant: "01", children: ["Pricing", _jsx("span", { slot: "icon-right", children: _jsx(ChevronDown, { size: 20 }) })] }), _jsxs(AfNavItem, { hierarchy: "primary", variant: "01", children: ["Resources", _jsx("span", { slot: "icon-right", children: _jsx(ChevronDown, { size: 20 }) })] }), _jsx(AfNavItem, { hierarchy: "primary", variant: "01", href: "/enterprise", children: "Enterprise" })] }), _jsxs("div", { slot: "end", children: [_jsx(AfNavItem, { hierarchy: "primary", variant: "02", href: "/contact", children: "Talk to us" }), _jsx(AfNavItem, { hierarchy: "primary", variant: "02", href: "/login", children: "Log in" })] }), ctaHref ? (_jsx(AfButton, { slot: "button", variant: "primary", size: "default", href: ctaHref, children: ctaText })) : (_jsx(AfButton, { slot: "button", variant: "primary", size: "default", onClick: onCtaClick, children: ctaText })), _jsx("div", { slot: "dropdown-solutions", children: _jsxs(AfNavMenuNest, { type: "solutions", breakpoint: "desktop", showSidebarBorder: true, children: [_jsxs(AfNavMenu, { heading: "Industries", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/industries", children: "All industries" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/banking", children: "Banking and financial services" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/insurance", children: "Insurance" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/logistics", children: "Logistics & transportation" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/bpo", children: "Business process outsourcing" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/healthcare", children: "Healthcare & life sciences" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/manufacturing", children: "Manufacturing & heavy enterprise" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/government", children: "Government & public sector" })] }), _jsxs(AfNavMenu, { heading: "Use cases", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/use-cases", children: "All use cases" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/asset-finance", children: "Asset finance" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/lending", children: "Lending" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/loan-origination", children: "Loan origination and credit underwriting" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/claims", children: "Claims handling" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/kyc", children: "Customer onboarding (KYC)" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/accounts-payable", children: "Accounts payable" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/forms", children: "Forms Processing" })] }), _jsxs(AfNavMenu, { heading: "Documents", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/documents", children: "All documents" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/payslips", children: "Payslips" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/invoices", children: "Invoices" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/certificates", children: "Certificates of analysis" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/safety-data-sheets", children: "Safety data sheets" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/purchase-orders", children: "Purchase orders" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/bank-statements", children: "Bank statements" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/medical", children: "Medical documents" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/shipping", children: "Shipping documents" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/utility-bills", children: "Utility bills" })] }), _jsxs(AfNavMenu, { slot: "sidebar", heading: "Resume Parser", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/resume-parser", children: "All recruitment tech" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resume-parser/ats", children: "ATS" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resume-parser/hr-tech", children: "HR Tech" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resume-parser/job-boards", children: "Job boards" })] })] }) }), _jsx("div", { slot: "dropdown-resources", children: _jsxs(AfNavMenuNest, { type: "resources", breakpoint: "desktop", showSidebarBorder: true, children: [_jsxs(AfNavMenu, { heading: "Resources", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/resources", children: "Resource hub" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resources/customer-stories", children: "Customer stories" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resources/demos", children: "Demo videos" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resources/whitepapers", children: "Whitepapers" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/blog", children: "Blog" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/partners", children: "Partners" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/tools", children: "Tools" })] }), _jsxs(AfNavMenu, { heading: "Documentation", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/docs", children: "Documentation hub" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/docs/api", children: "API reference" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/docs/guides", children: "Product guides" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/docs/updates", children: "Product updates" })] }), _jsxs(AfNavMenu, { heading: "About Affinda", breakpoint: "desktop", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/about", children: "Company" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/careers", children: "Careers" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/group", children: "Affinda Group" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/security", children: "Privacy & security" })] })] }) }), _jsxs("div", { slot: "mobile-menu", children: [_jsx(AfNavItem, { hierarchy: "primary", variant: "01", href: "/platform", breakpoint: "mobile", children: "Platform" }), _jsxs("af-nav-accordion", { mode: "exclusive", breakpoint: "mobile", children: [_jsx("af-nav-accordion-item", { "item-id": "solutions", label: "Solutions", children: _jsxs(AfNavMenuNest, { type: "solutions", breakpoint: "mobile", children: [_jsxs(AfNavMenu, { heading: "Industries", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/industries", children: "All industries" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/banking", children: "Banking and financial services" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/insurance", children: "Insurance" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/logistics", children: "Logistics & transportation" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/bpo", children: "Business process outsourcing" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/healthcare", children: "Healthcare & life sciences" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/manufacturing", children: "Manufacturing & heavy enterprise" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/industries/government", children: "Government & public sector" })] }), _jsxs(AfNavMenu, { heading: "Use cases", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/use-cases", children: "All use cases" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/asset-finance", children: "Asset finance" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/lending", children: "Lending" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/loan-origination", children: "Loan origination and credit underwriting" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/claims", children: "Claims handling" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/kyc", children: "Customer onboarding (KYC)" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/accounts-payable", children: "Accounts payable" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/use-cases/forms", children: "Forms Processing" })] }), _jsxs(AfNavMenu, { heading: "Documents", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/documents", children: "All documents" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/payslips", children: "Payslips" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/invoices", children: "Invoices" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/certificates", children: "Certificates of analysis" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/safety-data-sheets", children: "Safety data sheets" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/purchase-orders", children: "Purchase orders" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/bank-statements", children: "Bank statements" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/medical", children: "Medical documents" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/shipping", children: "Shipping documents" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/documents/utility-bills", children: "Utility bills" })] }), _jsxs(AfNavMenu, { heading: "Resume Parser", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/resume-parser", children: "All recruitment tech" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resume-parser/ats", children: "ATS" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resume-parser/hr-tech", children: "HR Tech" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resume-parser/job-boards", children: "Job boards" })] })] }) }), _jsx("af-nav-accordion-item", { "item-id": "pricing", label: "Pricing", children: _jsxs(AfNavMenuNest, { type: "pricing", breakpoint: "mobile", children: [_jsx(AfNavMenu, { heading: "Document processing", breakpoint: "mobile", children: _jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/pricing", children: "Platform Pricing" }) }), _jsx(AfNavMenu, { heading: "Recruitment tech", breakpoint: "mobile", children: _jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/resume-parser/pricing", children: "Resume Parser Pricing" }) })] }) }), _jsx("af-nav-accordion-item", { "item-id": "resources", label: "Resources", children: _jsxs(AfNavMenuNest, { type: "resources", breakpoint: "mobile", children: [_jsxs(AfNavMenu, { heading: "Resources", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/resources", children: "Resource hub" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resources/customer-stories", children: "Customer stories" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resources/demos", children: "Demo videos" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/resources/whitepapers", children: "Whitepapers" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/blog", children: "Blog" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/partners", children: "Partners" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/tools", children: "Tools" })] }), _jsxs(AfNavMenu, { heading: "Documentation", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "01", href: "/docs", children: "Documentation hub" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/docs/api", children: "API reference" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/docs/guides", children: "Product guides" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/docs/updates", children: "Product updates" })] }), _jsxs(AfNavMenu, { heading: "About Affinda", breakpoint: "mobile", children: [_jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/about", children: "Company" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/careers", children: "Careers" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/group", children: "Affinda Group" }), _jsx(AfNavItem, { hierarchy: "secondary", variant: "02", href: "/security", children: "Privacy & security" })] })] }) })] }), _jsx(AfNavItem, { hierarchy: "primary", variant: "01", href: "/enterprise", breakpoint: "mobile", children: "Enterprise" }), _jsx(AfNavItem, { hierarchy: "primary", variant: "02", href: "/contact", breakpoint: "mobile", children: "Talk to us" }), _jsx(AfNavItem, { hierarchy: "primary", variant: "02", href: "/login", breakpoint: "mobile", children: "Log in" })] })] }));
22
+ };
23
+ AfMarketingNavbar.displayName = 'AfMarketingNavbar';
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ export interface AfModalProps {
3
+ /** Whether the modal is open */
4
+ isOpen: boolean;
5
+ /** Callback when the modal should close */
6
+ onClose: () => void;
7
+ /** Modal title */
8
+ title?: string;
9
+ /** Modal content */
10
+ children: React.ReactNode;
11
+ /** Size of the modal */
12
+ size?: 'small' | 'medium' | 'large';
13
+ /** Whether to show the close button */
14
+ showCloseButton?: boolean;
15
+ /** Whether clicking the overlay closes the modal */
16
+ closeOnOverlayClick?: boolean;
17
+ /** Additional CSS styles */
18
+ style?: React.CSSProperties;
19
+ }
20
+ /**
21
+ * AfModal - Draft modal/dialog component.
22
+ *
23
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
24
+ */
25
+ export declare const AfModal: React.FC<AfModalProps>;
@@ -0,0 +1,71 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useEffect, useCallback } from 'react';
3
+ /**
4
+ * AfModal - Draft modal/dialog component.
5
+ *
6
+ * ⚠️ DRAFT: This component is not yet designed in Figma. Styles may change.
7
+ */
8
+ export const AfModal = ({ isOpen, onClose, title, children, size = 'medium', showCloseButton = true, closeOnOverlayClick = true, style, }) => {
9
+ const handleKeyDown = useCallback((event) => {
10
+ if (event.key === 'Escape') {
11
+ onClose();
12
+ }
13
+ }, [onClose]);
14
+ useEffect(() => {
15
+ if (isOpen) {
16
+ document.addEventListener('keydown', handleKeyDown);
17
+ document.body.style.overflow = 'hidden';
18
+ }
19
+ return () => {
20
+ document.removeEventListener('keydown', handleKeyDown);
21
+ document.body.style.overflow = '';
22
+ };
23
+ }, [isOpen, handleKeyDown]);
24
+ if (!isOpen)
25
+ return null;
26
+ const sizeWidths = {
27
+ small: '400px',
28
+ medium: '560px',
29
+ large: '720px',
30
+ };
31
+ const overlayStyles = {
32
+ position: 'fixed',
33
+ inset: 0,
34
+ background: 'rgba(20, 52, 59, 0.6)',
35
+ display: 'flex',
36
+ alignItems: 'center',
37
+ justifyContent: 'center',
38
+ zIndex: 1000,
39
+ padding: '24px',
40
+ };
41
+ const modalStyles = {
42
+ background: 'var(--colour-background-white, #fff)',
43
+ borderRadius: '16px',
44
+ width: '100%',
45
+ maxWidth: sizeWidths[size],
46
+ maxHeight: '90vh',
47
+ overflow: 'auto',
48
+ boxShadow: '0 8px 32px rgba(0, 0, 0, 0.2)',
49
+ fontFamily: 'var(--typography-bodyfont, system-ui, sans-serif)',
50
+ ...style,
51
+ };
52
+ const headerStyles = {
53
+ display: 'flex',
54
+ alignItems: 'center',
55
+ justifyContent: 'space-between',
56
+ padding: '20px 24px',
57
+ borderBottom: '1px solid var(--colour-tints-inkwell-100, #e0e5e6)',
58
+ };
59
+ const closeButtonStyles = {
60
+ background: 'none',
61
+ border: 'none',
62
+ cursor: 'pointer',
63
+ padding: '4px',
64
+ display: 'flex',
65
+ alignItems: 'center',
66
+ justifyContent: 'center',
67
+ borderRadius: '4px',
68
+ color: 'var(--colour-tints-inkwell-400, #7a8a8d)',
69
+ };
70
+ return (_jsx("div", { style: overlayStyles, onClick: closeOnOverlayClick ? onClose : undefined, role: "dialog", "aria-modal": "true", "aria-labelledby": title ? 'modal-title' : undefined, children: _jsxs("div", { style: modalStyles, onClick: (e) => e.stopPropagation(), children: [(title || showCloseButton) && (_jsxs("div", { style: headerStyles, children: [title && (_jsx("h2", { id: "modal-title", style: { margin: 0, fontSize: '20px', fontWeight: 600, color: 'var(--colour-brand-inkwell, #14343b)' }, children: title })), showCloseButton && (_jsx("button", { type: "button", onClick: onClose, style: closeButtonStyles, "aria-label": "Close modal", children: _jsx("svg", { width: "24", height: "24", viewBox: "0 0 24 24", fill: "none", children: _jsx("path", { d: "M18 6L6 18M6 6L18 18", stroke: "currentColor", strokeWidth: "2", strokeLinecap: "round", strokeLinejoin: "round" }) }) }))] })), _jsx("div", { style: { padding: '24px' }, children: children })] }) }));
71
+ };
@@ -0,0 +1,20 @@
1
+ import React from 'react';
2
+ export type AfNumberBadgeNumber = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10;
3
+ export type AfNumberBadgeVariant = 'inCircle' | 'outlined';
4
+ export interface AfNumberBadgeProps {
5
+ /** The number to display (1-10) */
6
+ number: AfNumberBadgeNumber;
7
+ /** Visual variant - inCircle shows filled badge, outlined shows just the number */
8
+ variant?: AfNumberBadgeVariant;
9
+ /** Size of the badge in pixels */
10
+ size?: number;
11
+ /** Additional class name */
12
+ className?: string;
13
+ /** Inline styles */
14
+ style?: React.CSSProperties;
15
+ }
16
+ /**
17
+ * AfNumberBadge displays numbers 1-10 in either a filled circle or text-only style.
18
+ * Perfect for numbered lists, step indicators, or ordered content.
19
+ */
20
+ export declare const AfNumberBadge: React.ForwardRefExoticComponent<AfNumberBadgeProps & React.RefAttributes<HTMLElement>>;
@@ -1,9 +1,9 @@
1
1
  import React from 'react';
2
2
  /**
3
- * NumberBadge displays numbers 1-10 in either a filled circle or text-only style.
3
+ * AfNumberBadge displays numbers 1-10 in either a filled circle or text-only style.
4
4
  * Perfect for numbered lists, step indicators, or ordered content.
5
5
  */
6
- export const NumberBadge = React.forwardRef(({ number, variant = 'inCircle', size = 48, className, style, ...props }, ref) => {
6
+ export const AfNumberBadge = React.forwardRef(({ number, variant = 'inCircle', size = 48, className, style, ...props }, ref) => {
7
7
  return React.createElement('af-number-badge', {
8
8
  ref,
9
9
  number,
@@ -14,4 +14,4 @@ export const NumberBadge = React.forwardRef(({ number, variant = 'inCircle', siz
14
14
  ...props,
15
15
  });
16
16
  });
17
- NumberBadge.displayName = 'NumberBadge';
17
+ AfNumberBadge.displayName = 'AfNumberBadge';
@@ -0,0 +1,23 @@
1
+ import * as React from 'react';
2
+ export interface AfPaperclipDecorationProps {
3
+ className?: string;
4
+ style?: React.CSSProperties;
5
+ /** Slot name for use inside web components */
6
+ slot?: string;
7
+ }
8
+ /**
9
+ * Decorative paperclip vector graphic for hero sections.
10
+ *
11
+ * Use with AfSection and position absolutely within the section:
12
+ *
13
+ * @example
14
+ * <AfSection theme="inkwell" padding="loose" style={{ position: 'relative', overflow: 'hidden' }}>
15
+ * <AfPaperclipDecoration
16
+ * style={{ position: 'absolute', bottom: -80, right: -800, zIndex: 0 }}
17
+ * />
18
+ * <AfContainer style={{ position: 'relative', zIndex: 1 }}>
19
+ * {/* Hero content *\/}
20
+ * </AfContainer>
21
+ * </AfSection>
22
+ */
23
+ export declare function AfPaperclipDecoration({ className, style, slot }: AfPaperclipDecorationProps): any;
@@ -2,17 +2,18 @@ import { jsx as _jsx } from "react/jsx-runtime";
2
2
  /**
3
3
  * Decorative paperclip vector graphic for hero sections.
4
4
  *
5
- * When used inside HeroSection, pass slot="decoration" and position with style:
5
+ * Use with AfSection and position absolutely within the section:
6
6
  *
7
7
  * @example
8
- * <HeroSection variant="dark" withDecoration={true}>
9
- * <PaperclipDecoration
10
- * slot="decoration"
11
- * style={{ position: 'absolute', bottom: -80, right: -800 }}
8
+ * <AfSection theme="inkwell" padding="loose" style={{ position: 'relative', overflow: 'hidden' }}>
9
+ * <AfPaperclipDecoration
10
+ * style={{ position: 'absolute', bottom: -80, right: -800, zIndex: 0 }}
12
11
  * />
13
- * <Heading>...</Heading>
14
- * </HeroSection>
12
+ * <AfContainer style={{ position: 'relative', zIndex: 1 }}>
13
+ * {/* Hero content *\/}
14
+ * </AfContainer>
15
+ * </AfSection>
15
16
  */
16
- export function PaperclipDecoration({ className, style, slot }) {
17
+ export function AfPaperclipDecoration({ className, style, slot }) {
17
18
  return (_jsx("svg", { preserveAspectRatio: "none", width: "100%", height: "100%", style: style, viewBox: "0 0 1212 753", fill: "none", xmlns: "http://www.w3.org/2000/svg", className: className, "aria-hidden": true, slot: slot, children: _jsx("path", { d: "M1102.14 107.875C1031.8 37.1138 939.128 -1.47247 840.61 0.0430067H358.674L262.104 156.72H841.87C842.558 156.72 843.36 156.72 844.047 156.72C900.638 156.72 953.791 178.869 994 219.32C1035.24 260.821 1058.04 316.311 1058.04 375.647C1058.04 497.468 960.665 596.44 841.068 596.44H251.335C197.609 596.44 153.848 551.908 153.848 497.235C153.848 442.561 197.723 397.33 251.221 395.698H779.208L878.872 239.021H248.586C111.577 242.519 0 358.277 0 497.235C0 636.192 112.723 753 251.335 753H841.068C1045.55 753 1212 583.617 1212 375.531C1212 273.994 1173.05 178.985 1102.26 107.758L1102.14 107.875Z", fill: "white", fillOpacity: 0.06 }) }));
18
19
  }