@a13y/react 0.1.1 → 0.1.3
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/dist/components/index.d.ts +868 -2
- package/dist/components/index.js +2818 -2
- package/dist/components/index.js.map +1 -1
- package/dist/hooks/index.d.ts +144 -2
- package/dist/hooks/index.js +149 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +2840 -2
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
2
2
|
import { P as PressEvent } from '../use-accessible-button-B0syf-Az.js';
|
|
3
|
-
import { ReactNode } from 'react';
|
|
3
|
+
import React, { ReactNode, ReactElement } from 'react';
|
|
4
4
|
|
|
5
5
|
/**
|
|
6
6
|
* Button variants
|
|
@@ -371,4 +371,870 @@ interface AccessibleTabsProps {
|
|
|
371
371
|
*/
|
|
372
372
|
declare const AccessibleTabs: (props: AccessibleTabsProps) => react_jsx_runtime.JSX.Element;
|
|
373
373
|
|
|
374
|
-
|
|
374
|
+
/**
|
|
375
|
+
* AccessibleTooltip Component
|
|
376
|
+
* A fully accessible tooltip with proper ARIA attributes and keyboard support
|
|
377
|
+
*/
|
|
378
|
+
|
|
379
|
+
interface AccessibleTooltipProps {
|
|
380
|
+
/** Content to display in the tooltip */
|
|
381
|
+
content: string;
|
|
382
|
+
/** Placement of the tooltip relative to the trigger */
|
|
383
|
+
placement?: 'top' | 'bottom' | 'left' | 'right';
|
|
384
|
+
/** Delay before showing the tooltip (in milliseconds) */
|
|
385
|
+
delay?: number;
|
|
386
|
+
/** Trigger method for showing the tooltip */
|
|
387
|
+
trigger?: 'hover' | 'focus' | 'both';
|
|
388
|
+
/** The element that triggers the tooltip */
|
|
389
|
+
children: ReactElement;
|
|
390
|
+
/** Optional className for the tooltip container */
|
|
391
|
+
className?: string;
|
|
392
|
+
/** Optional styles for the tooltip container */
|
|
393
|
+
style?: React.CSSProperties;
|
|
394
|
+
}
|
|
395
|
+
/**
|
|
396
|
+
* Accessible tooltip component that properly announces content to screen readers
|
|
397
|
+
*
|
|
398
|
+
* @example
|
|
399
|
+
* ```tsx
|
|
400
|
+
* <AccessibleTooltip content="This is helpful information">
|
|
401
|
+
* <button>Hover me</button>
|
|
402
|
+
* </AccessibleTooltip>
|
|
403
|
+
* ```
|
|
404
|
+
*/
|
|
405
|
+
declare const AccessibleTooltip: React.FC<AccessibleTooltipProps>;
|
|
406
|
+
|
|
407
|
+
/**
|
|
408
|
+
* AccessibleToggle Component
|
|
409
|
+
* A fully accessible toggle/switch component with ARIA support
|
|
410
|
+
*/
|
|
411
|
+
|
|
412
|
+
interface AccessibleToggleProps {
|
|
413
|
+
/** Whether the toggle is checked */
|
|
414
|
+
checked: boolean;
|
|
415
|
+
/** Callback when the toggle state changes */
|
|
416
|
+
onChange: (checked: boolean) => void;
|
|
417
|
+
/** Label for the toggle */
|
|
418
|
+
label: string;
|
|
419
|
+
/** Optional description for additional context */
|
|
420
|
+
description?: string;
|
|
421
|
+
/** Whether the toggle is disabled */
|
|
422
|
+
disabled?: boolean;
|
|
423
|
+
/** Optional className for the container */
|
|
424
|
+
className?: string;
|
|
425
|
+
/** Optional className for the switch element */
|
|
426
|
+
switchClassName?: string;
|
|
427
|
+
/** Optional styles */
|
|
428
|
+
style?: React.CSSProperties;
|
|
429
|
+
}
|
|
430
|
+
/**
|
|
431
|
+
* Accessible toggle/switch component with proper ARIA attributes
|
|
432
|
+
*
|
|
433
|
+
* @example
|
|
434
|
+
* ```tsx
|
|
435
|
+
* const [enabled, setEnabled] = useState(false);
|
|
436
|
+
*
|
|
437
|
+
* <AccessibleToggle
|
|
438
|
+
* checked={enabled}
|
|
439
|
+
* onChange={setEnabled}
|
|
440
|
+
* label="Enable notifications"
|
|
441
|
+
* description="Receive email notifications for updates"
|
|
442
|
+
* />
|
|
443
|
+
* ```
|
|
444
|
+
*/
|
|
445
|
+
declare const AccessibleToggle: React.FC<AccessibleToggleProps>;
|
|
446
|
+
|
|
447
|
+
/**
|
|
448
|
+
* AccessibleToast Component
|
|
449
|
+
* Accessible toast notifications with proper ARIA live regions
|
|
450
|
+
*/
|
|
451
|
+
|
|
452
|
+
type ToastType = 'success' | 'error' | 'warning' | 'info';
|
|
453
|
+
type ToastPosition = 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left' | 'top-center' | 'bottom-center';
|
|
454
|
+
interface ToastAction {
|
|
455
|
+
/** Label for the action button */
|
|
456
|
+
label: string;
|
|
457
|
+
/** Callback when action is clicked */
|
|
458
|
+
onClick: () => void;
|
|
459
|
+
}
|
|
460
|
+
interface AccessibleToastProps {
|
|
461
|
+
/** The message to display */
|
|
462
|
+
message: string;
|
|
463
|
+
/** Type of toast (affects styling and ARIA role) */
|
|
464
|
+
type?: ToastType;
|
|
465
|
+
/** Duration in milliseconds (0 = no auto-dismiss) */
|
|
466
|
+
duration?: number;
|
|
467
|
+
/** Position of the toast */
|
|
468
|
+
position?: ToastPosition;
|
|
469
|
+
/** Optional action button */
|
|
470
|
+
action?: ToastAction;
|
|
471
|
+
/** Whether the toast is visible */
|
|
472
|
+
isOpen: boolean;
|
|
473
|
+
/** Callback when toast is dismissed */
|
|
474
|
+
onClose: () => void;
|
|
475
|
+
/** Optional className */
|
|
476
|
+
className?: string;
|
|
477
|
+
/** Optional styles */
|
|
478
|
+
style?: React.CSSProperties;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Accessible toast notification component with ARIA live regions
|
|
482
|
+
*
|
|
483
|
+
* @example
|
|
484
|
+
* ```tsx
|
|
485
|
+
* const [showToast, setShowToast] = useState(false);
|
|
486
|
+
*
|
|
487
|
+
* <AccessibleToast
|
|
488
|
+
* message="Item added to cart"
|
|
489
|
+
* type="success"
|
|
490
|
+
* duration={5000}
|
|
491
|
+
* isOpen={showToast}
|
|
492
|
+
* onClose={() => setShowToast(false)}
|
|
493
|
+
* action={{
|
|
494
|
+
* label: 'Undo',
|
|
495
|
+
* onClick: () => removeItem()
|
|
496
|
+
* }}
|
|
497
|
+
* />
|
|
498
|
+
* ```
|
|
499
|
+
*/
|
|
500
|
+
declare const AccessibleToast: React.FC<AccessibleToastProps>;
|
|
501
|
+
/**
|
|
502
|
+
* ToastContainer component to manage multiple toasts
|
|
503
|
+
*/
|
|
504
|
+
interface Toast {
|
|
505
|
+
id: string;
|
|
506
|
+
message: string;
|
|
507
|
+
type?: ToastType;
|
|
508
|
+
duration?: number;
|
|
509
|
+
action?: ToastAction;
|
|
510
|
+
}
|
|
511
|
+
interface ToastContainerProps {
|
|
512
|
+
/** Array of toasts to display */
|
|
513
|
+
toasts: Toast[];
|
|
514
|
+
/** Callback to remove a toast */
|
|
515
|
+
onRemove: (id: string) => void;
|
|
516
|
+
/** Position for all toasts */
|
|
517
|
+
position?: ToastPosition;
|
|
518
|
+
}
|
|
519
|
+
/**
|
|
520
|
+
* Container component to manage multiple toast notifications
|
|
521
|
+
*
|
|
522
|
+
* @example
|
|
523
|
+
* ```tsx
|
|
524
|
+
* const [toasts, setToasts] = useState<Toast[]>([]);
|
|
525
|
+
*
|
|
526
|
+
* const addToast = (message: string, type: ToastType) => {
|
|
527
|
+
* const id = Date.now().toString();
|
|
528
|
+
* setToasts(prev => [...prev, { id, message, type }]);
|
|
529
|
+
* };
|
|
530
|
+
*
|
|
531
|
+
* const removeToast = (id: string) => {
|
|
532
|
+
* setToasts(prev => prev.filter(t => t.id !== id));
|
|
533
|
+
* };
|
|
534
|
+
*
|
|
535
|
+
* <ToastContainer toasts={toasts} onRemove={removeToast} />
|
|
536
|
+
* ```
|
|
537
|
+
*/
|
|
538
|
+
declare const ToastContainer: React.FC<ToastContainerProps>;
|
|
539
|
+
|
|
540
|
+
/**
|
|
541
|
+
* AccessibleAccordion Component
|
|
542
|
+
* Fully accessible accordion with ARIA attributes and keyboard navigation
|
|
543
|
+
*/
|
|
544
|
+
|
|
545
|
+
interface AccordionItem {
|
|
546
|
+
/** Unique identifier for the item */
|
|
547
|
+
id: string;
|
|
548
|
+
/** Title/header for the accordion item */
|
|
549
|
+
title: string;
|
|
550
|
+
/** Content to display when expanded */
|
|
551
|
+
content: ReactNode;
|
|
552
|
+
/** Whether this item is disabled */
|
|
553
|
+
disabled?: boolean;
|
|
554
|
+
}
|
|
555
|
+
interface AccessibleAccordionProps {
|
|
556
|
+
/** Array of accordion items */
|
|
557
|
+
items: AccordionItem[];
|
|
558
|
+
/** Allow multiple items to be open at once */
|
|
559
|
+
allowMultiple?: boolean;
|
|
560
|
+
/** IDs of items that should be open by default */
|
|
561
|
+
defaultOpenItems?: string[];
|
|
562
|
+
/** Callback when item is toggled */
|
|
563
|
+
onToggle?: (itemId: string, isOpen: boolean) => void;
|
|
564
|
+
/** Optional className for the container */
|
|
565
|
+
className?: string;
|
|
566
|
+
/** Optional className for each item */
|
|
567
|
+
itemClassName?: string;
|
|
568
|
+
/** Optional className for headers */
|
|
569
|
+
headerClassName?: string;
|
|
570
|
+
/** Optional className for content */
|
|
571
|
+
contentClassName?: string;
|
|
572
|
+
/** Optional styles */
|
|
573
|
+
style?: React.CSSProperties;
|
|
574
|
+
}
|
|
575
|
+
/**
|
|
576
|
+
* Accessible accordion component with keyboard navigation
|
|
577
|
+
*
|
|
578
|
+
* @example
|
|
579
|
+
* ```tsx
|
|
580
|
+
* const items = [
|
|
581
|
+
* {
|
|
582
|
+
* id: '1',
|
|
583
|
+
* title: 'What is accessibility?',
|
|
584
|
+
* content: 'Accessibility ensures that people with disabilities can use your website.'
|
|
585
|
+
* },
|
|
586
|
+
* {
|
|
587
|
+
* id: '2',
|
|
588
|
+
* title: 'Why is it important?',
|
|
589
|
+
* content: 'It makes your content available to everyone, regardless of ability.'
|
|
590
|
+
* }
|
|
591
|
+
* ];
|
|
592
|
+
*
|
|
593
|
+
* <AccessibleAccordion
|
|
594
|
+
* items={items}
|
|
595
|
+
* allowMultiple={false}
|
|
596
|
+
* defaultOpenItems={['1']}
|
|
597
|
+
* />
|
|
598
|
+
* ```
|
|
599
|
+
*/
|
|
600
|
+
declare const AccessibleAccordion: React.FC<AccessibleAccordionProps>;
|
|
601
|
+
|
|
602
|
+
/**
|
|
603
|
+
* AccessibleBreadcrumb Component
|
|
604
|
+
* Accessible breadcrumb navigation with proper ARIA attributes
|
|
605
|
+
*/
|
|
606
|
+
|
|
607
|
+
interface BreadcrumbItem {
|
|
608
|
+
/** Label to display */
|
|
609
|
+
label: string;
|
|
610
|
+
/** Optional href for link */
|
|
611
|
+
href?: string;
|
|
612
|
+
/** Optional click handler (alternative to href) */
|
|
613
|
+
onClick?: () => void;
|
|
614
|
+
}
|
|
615
|
+
interface AccessibleBreadcrumbProps {
|
|
616
|
+
/** Array of breadcrumb items */
|
|
617
|
+
items: BreadcrumbItem[];
|
|
618
|
+
/** Optional separator between items */
|
|
619
|
+
separator?: ReactNode;
|
|
620
|
+
/** Optional aria-label for the navigation */
|
|
621
|
+
ariaLabel?: string;
|
|
622
|
+
/** Optional className for the nav element */
|
|
623
|
+
className?: string;
|
|
624
|
+
/** Optional className for items */
|
|
625
|
+
itemClassName?: string;
|
|
626
|
+
/** Optional styles */
|
|
627
|
+
style?: React.CSSProperties;
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Accessible breadcrumb navigation component
|
|
631
|
+
*
|
|
632
|
+
* @example
|
|
633
|
+
* ```tsx
|
|
634
|
+
* const items = [
|
|
635
|
+
* { label: 'Home', href: '/' },
|
|
636
|
+
* { label: 'Products', href: '/products' },
|
|
637
|
+
* { label: 'Electronics', href: '/products/electronics' },
|
|
638
|
+
* { label: 'Laptops' }
|
|
639
|
+
* ];
|
|
640
|
+
*
|
|
641
|
+
* <AccessibleBreadcrumb items={items} />
|
|
642
|
+
* ```
|
|
643
|
+
*/
|
|
644
|
+
declare const AccessibleBreadcrumb: React.FC<AccessibleBreadcrumbProps>;
|
|
645
|
+
|
|
646
|
+
/**
|
|
647
|
+
* AccessibleCheckboxGroup Component
|
|
648
|
+
* Accessible checkbox group with proper fieldset/legend and ARIA attributes
|
|
649
|
+
*/
|
|
650
|
+
|
|
651
|
+
interface CheckboxOption {
|
|
652
|
+
/** Unique value for the option */
|
|
653
|
+
value: string;
|
|
654
|
+
/** Label to display */
|
|
655
|
+
label: string;
|
|
656
|
+
/** Optional description */
|
|
657
|
+
description?: string;
|
|
658
|
+
/** Whether this option is disabled */
|
|
659
|
+
disabled?: boolean;
|
|
660
|
+
}
|
|
661
|
+
interface AccessibleCheckboxGroupProps {
|
|
662
|
+
/** Array of checkbox options */
|
|
663
|
+
options: CheckboxOption[];
|
|
664
|
+
/** Currently selected values */
|
|
665
|
+
value: string[];
|
|
666
|
+
/** Callback when selection changes */
|
|
667
|
+
onChange: (value: string[]) => void;
|
|
668
|
+
/** Label for the group */
|
|
669
|
+
label: string;
|
|
670
|
+
/** Optional description for the group */
|
|
671
|
+
description?: string;
|
|
672
|
+
/** Whether the group is required */
|
|
673
|
+
required?: boolean;
|
|
674
|
+
/** Whether the group is disabled */
|
|
675
|
+
disabled?: boolean;
|
|
676
|
+
/** Error message to display */
|
|
677
|
+
error?: string;
|
|
678
|
+
/** Optional className for the fieldset */
|
|
679
|
+
className?: string;
|
|
680
|
+
/** Optional styles */
|
|
681
|
+
style?: React.CSSProperties;
|
|
682
|
+
}
|
|
683
|
+
/**
|
|
684
|
+
* Accessible checkbox group component with proper ARIA attributes
|
|
685
|
+
*
|
|
686
|
+
* @example
|
|
687
|
+
* ```tsx
|
|
688
|
+
* const [selected, setSelected] = useState<string[]>(['email']);
|
|
689
|
+
*
|
|
690
|
+
* const options = [
|
|
691
|
+
* { value: 'email', label: 'Email notifications' },
|
|
692
|
+
* { value: 'sms', label: 'SMS notifications' },
|
|
693
|
+
* { value: 'push', label: 'Push notifications', description: 'Requires app installation' }
|
|
694
|
+
* ];
|
|
695
|
+
*
|
|
696
|
+
* <AccessibleCheckboxGroup
|
|
697
|
+
* options={options}
|
|
698
|
+
* value={selected}
|
|
699
|
+
* onChange={setSelected}
|
|
700
|
+
* label="Notification preferences"
|
|
701
|
+
* required
|
|
702
|
+
* />
|
|
703
|
+
* ```
|
|
704
|
+
*/
|
|
705
|
+
declare const AccessibleCheckboxGroup: React.FC<AccessibleCheckboxGroupProps>;
|
|
706
|
+
|
|
707
|
+
/**
|
|
708
|
+
* AccessibleRadioGroup Component
|
|
709
|
+
* Accessible radio button group with proper fieldset/legend and ARIA attributes
|
|
710
|
+
*/
|
|
711
|
+
|
|
712
|
+
interface RadioOption {
|
|
713
|
+
/** Unique value for the option */
|
|
714
|
+
value: string;
|
|
715
|
+
/** Label to display */
|
|
716
|
+
label: string;
|
|
717
|
+
/** Optional description */
|
|
718
|
+
description?: string;
|
|
719
|
+
/** Whether this option is disabled */
|
|
720
|
+
disabled?: boolean;
|
|
721
|
+
}
|
|
722
|
+
interface AccessibleRadioGroupProps {
|
|
723
|
+
/** Array of radio options */
|
|
724
|
+
options: RadioOption[];
|
|
725
|
+
/** Currently selected value */
|
|
726
|
+
value: string | null;
|
|
727
|
+
/** Callback when selection changes */
|
|
728
|
+
onChange: (value: string) => void;
|
|
729
|
+
/** Name attribute for the radio group */
|
|
730
|
+
name: string;
|
|
731
|
+
/** Label for the group */
|
|
732
|
+
label: string;
|
|
733
|
+
/** Optional description for the group */
|
|
734
|
+
description?: string;
|
|
735
|
+
/** Whether the group is required */
|
|
736
|
+
required?: boolean;
|
|
737
|
+
/** Whether the group is disabled */
|
|
738
|
+
disabled?: boolean;
|
|
739
|
+
/** Error message to display */
|
|
740
|
+
error?: string;
|
|
741
|
+
/** Optional className for the fieldset */
|
|
742
|
+
className?: string;
|
|
743
|
+
/** Optional styles */
|
|
744
|
+
style?: React.CSSProperties;
|
|
745
|
+
}
|
|
746
|
+
/**
|
|
747
|
+
* Accessible radio button group component with proper ARIA attributes
|
|
748
|
+
*
|
|
749
|
+
* @example
|
|
750
|
+
* ```tsx
|
|
751
|
+
* const [selected, setSelected] = useState<string | null>(null);
|
|
752
|
+
*
|
|
753
|
+
* const options = [
|
|
754
|
+
* { value: 'small', label: 'Small', description: 'Up to 10 users' },
|
|
755
|
+
* { value: 'medium', label: 'Medium', description: 'Up to 50 users' },
|
|
756
|
+
* { value: 'large', label: 'Large', description: 'Unlimited users' }
|
|
757
|
+
* ];
|
|
758
|
+
*
|
|
759
|
+
* <AccessibleRadioGroup
|
|
760
|
+
* name="plan"
|
|
761
|
+
* options={options}
|
|
762
|
+
* value={selected}
|
|
763
|
+
* onChange={setSelected}
|
|
764
|
+
* label="Choose your plan"
|
|
765
|
+
* required
|
|
766
|
+
* />
|
|
767
|
+
* ```
|
|
768
|
+
*/
|
|
769
|
+
declare const AccessibleRadioGroup: React.FC<AccessibleRadioGroupProps>;
|
|
770
|
+
|
|
771
|
+
/**
|
|
772
|
+
* AccessibleProgress Component
|
|
773
|
+
* Accessible progress bar and spinner with proper ARIA attributes
|
|
774
|
+
*/
|
|
775
|
+
|
|
776
|
+
type ProgressVariant = 'linear' | 'circular';
|
|
777
|
+
interface AccessibleProgressProps {
|
|
778
|
+
/** Current progress value (undefined for indeterminate) */
|
|
779
|
+
value?: number;
|
|
780
|
+
/** Maximum value */
|
|
781
|
+
max?: number;
|
|
782
|
+
/** Minimum value */
|
|
783
|
+
min?: number;
|
|
784
|
+
/** Label for the progress indicator */
|
|
785
|
+
label: string;
|
|
786
|
+
/** Visual variant */
|
|
787
|
+
variant?: ProgressVariant;
|
|
788
|
+
/** Whether to show percentage text */
|
|
789
|
+
showValue?: boolean;
|
|
790
|
+
/** Whether to announce progress changes */
|
|
791
|
+
announceChanges?: boolean;
|
|
792
|
+
/** Optional className */
|
|
793
|
+
className?: string;
|
|
794
|
+
/** Optional styles */
|
|
795
|
+
style?: React.CSSProperties;
|
|
796
|
+
}
|
|
797
|
+
/**
|
|
798
|
+
* Accessible progress indicator with ARIA live regions
|
|
799
|
+
*
|
|
800
|
+
* @example
|
|
801
|
+
* ```tsx
|
|
802
|
+
* // Determinate progress
|
|
803
|
+
* <AccessibleProgress
|
|
804
|
+
* value={75}
|
|
805
|
+
* label="Upload progress"
|
|
806
|
+
* showValue
|
|
807
|
+
* />
|
|
808
|
+
*
|
|
809
|
+
* // Indeterminate progress
|
|
810
|
+
* <AccessibleProgress
|
|
811
|
+
* label="Loading..."
|
|
812
|
+
* variant="circular"
|
|
813
|
+
* />
|
|
814
|
+
* ```
|
|
815
|
+
*/
|
|
816
|
+
declare const AccessibleProgress: React.FC<AccessibleProgressProps>;
|
|
817
|
+
|
|
818
|
+
/**
|
|
819
|
+
* SkipLinks Component
|
|
820
|
+
* Accessible skip navigation links for keyboard users
|
|
821
|
+
*/
|
|
822
|
+
|
|
823
|
+
interface SkipLink {
|
|
824
|
+
/** Target element ID (without #) */
|
|
825
|
+
href: string;
|
|
826
|
+
/** Label for the skip link */
|
|
827
|
+
label: string;
|
|
828
|
+
}
|
|
829
|
+
interface SkipLinksProps {
|
|
830
|
+
/** Array of skip links */
|
|
831
|
+
links: SkipLink[];
|
|
832
|
+
/** Optional className for the container */
|
|
833
|
+
className?: string;
|
|
834
|
+
/** Optional styles for the container */
|
|
835
|
+
style?: React.CSSProperties;
|
|
836
|
+
/** Optional styles for individual links */
|
|
837
|
+
linkStyle?: React.CSSProperties;
|
|
838
|
+
}
|
|
839
|
+
/**
|
|
840
|
+
* Skip navigation links component, visible only on keyboard focus
|
|
841
|
+
* Should be the first focusable element on the page
|
|
842
|
+
*
|
|
843
|
+
* @example
|
|
844
|
+
* ```tsx
|
|
845
|
+
* const links = [
|
|
846
|
+
* { href: 'main-content', label: 'Skip to main content' },
|
|
847
|
+
* { href: 'navigation', label: 'Skip to navigation' },
|
|
848
|
+
* { href: 'footer', label: 'Skip to footer' }
|
|
849
|
+
* ];
|
|
850
|
+
*
|
|
851
|
+
* <SkipLinks links={links} />
|
|
852
|
+
*
|
|
853
|
+
* // In your page layout:
|
|
854
|
+
* <main id="main-content">...</main>
|
|
855
|
+
* <nav id="navigation">...</nav>
|
|
856
|
+
* <footer id="footer">...</footer>
|
|
857
|
+
* ```
|
|
858
|
+
*/
|
|
859
|
+
declare const SkipLinks: React.FC<SkipLinksProps>;
|
|
860
|
+
|
|
861
|
+
/**
|
|
862
|
+
* AccessiblePagination Component
|
|
863
|
+
* Accessible pagination with proper ARIA attributes and keyboard navigation
|
|
864
|
+
*/
|
|
865
|
+
|
|
866
|
+
interface AccessiblePaginationProps {
|
|
867
|
+
/** Current active page (1-indexed) */
|
|
868
|
+
currentPage: number;
|
|
869
|
+
/** Total number of pages */
|
|
870
|
+
totalPages: number;
|
|
871
|
+
/** Callback when page changes */
|
|
872
|
+
onPageChange: (page: number) => void;
|
|
873
|
+
/** Number of sibling pages to show on each side */
|
|
874
|
+
siblingCount?: number;
|
|
875
|
+
/** Whether to show first/last buttons */
|
|
876
|
+
showFirstLast?: boolean;
|
|
877
|
+
/** Optional aria-label for the navigation */
|
|
878
|
+
ariaLabel?: string;
|
|
879
|
+
/** Optional className */
|
|
880
|
+
className?: string;
|
|
881
|
+
/** Optional styles */
|
|
882
|
+
style?: React.CSSProperties;
|
|
883
|
+
}
|
|
884
|
+
/**
|
|
885
|
+
* Accessible pagination component with keyboard navigation
|
|
886
|
+
*
|
|
887
|
+
* @example
|
|
888
|
+
* ```tsx
|
|
889
|
+
* const [page, setPage] = useState(1);
|
|
890
|
+
*
|
|
891
|
+
* <AccessiblePagination
|
|
892
|
+
* currentPage={page}
|
|
893
|
+
* totalPages={10}
|
|
894
|
+
* onPageChange={setPage}
|
|
895
|
+
* siblingCount={1}
|
|
896
|
+
* showFirstLast
|
|
897
|
+
* />
|
|
898
|
+
* ```
|
|
899
|
+
*/
|
|
900
|
+
declare const AccessiblePagination: React.FC<AccessiblePaginationProps>;
|
|
901
|
+
|
|
902
|
+
/**
|
|
903
|
+
* AccessibleCombobox Component
|
|
904
|
+
* Fully accessible combobox/select with autocomplete, keyboard navigation, and ARIA support
|
|
905
|
+
*/
|
|
906
|
+
|
|
907
|
+
interface ComboboxOption<T = string> {
|
|
908
|
+
/** Unique value */
|
|
909
|
+
value: T;
|
|
910
|
+
/** Display label */
|
|
911
|
+
label: string;
|
|
912
|
+
/** Whether this option is disabled */
|
|
913
|
+
disabled?: boolean;
|
|
914
|
+
}
|
|
915
|
+
interface AccessibleComboboxProps<T = string> {
|
|
916
|
+
/** Array of options */
|
|
917
|
+
options: ComboboxOption<T>[];
|
|
918
|
+
/** Currently selected value */
|
|
919
|
+
value: T | null;
|
|
920
|
+
/** Callback when selection changes */
|
|
921
|
+
onChange: (value: T | null) => void;
|
|
922
|
+
/** Label for the combobox */
|
|
923
|
+
label: string;
|
|
924
|
+
/** Placeholder text */
|
|
925
|
+
placeholder?: string;
|
|
926
|
+
/** Whether search is enabled */
|
|
927
|
+
searchable?: boolean;
|
|
928
|
+
/** Whether the combobox is required */
|
|
929
|
+
required?: boolean;
|
|
930
|
+
/** Whether the combobox is disabled */
|
|
931
|
+
disabled?: boolean;
|
|
932
|
+
/** Error message */
|
|
933
|
+
error?: string;
|
|
934
|
+
/** Optional className */
|
|
935
|
+
className?: string;
|
|
936
|
+
/** Optional styles */
|
|
937
|
+
style?: React.CSSProperties;
|
|
938
|
+
}
|
|
939
|
+
/**
|
|
940
|
+
* Accessible combobox/select component with autocomplete
|
|
941
|
+
*
|
|
942
|
+
* @example
|
|
943
|
+
* ```tsx
|
|
944
|
+
* const countries = [
|
|
945
|
+
* { value: 'us', label: 'United States' },
|
|
946
|
+
* { value: 'uk', label: 'United Kingdom' },
|
|
947
|
+
* { value: 'ca', label: 'Canada' }
|
|
948
|
+
* ];
|
|
949
|
+
*
|
|
950
|
+
* const [country, setCountry] = useState<string | null>(null);
|
|
951
|
+
*
|
|
952
|
+
* <AccessibleCombobox
|
|
953
|
+
* options={countries}
|
|
954
|
+
* value={country}
|
|
955
|
+
* onChange={setCountry}
|
|
956
|
+
* label="Select country"
|
|
957
|
+
* searchable
|
|
958
|
+
* />
|
|
959
|
+
* ```
|
|
960
|
+
*/
|
|
961
|
+
declare function AccessibleCombobox<T = string>({ options, value, onChange, label, placeholder, searchable, required, disabled, error, className, style, }: AccessibleComboboxProps<T>): React.ReactElement;
|
|
962
|
+
|
|
963
|
+
/**
|
|
964
|
+
* AccessibleDatePicker Component
|
|
965
|
+
* Fully accessible date picker with calendar grid and keyboard navigation
|
|
966
|
+
*/
|
|
967
|
+
|
|
968
|
+
interface AccessibleDatePickerProps {
|
|
969
|
+
/** Currently selected date */
|
|
970
|
+
value: Date | null;
|
|
971
|
+
/** Callback when date changes */
|
|
972
|
+
onChange: (date: Date | null) => void;
|
|
973
|
+
/** Label for the date picker */
|
|
974
|
+
label: string;
|
|
975
|
+
/** Minimum selectable date */
|
|
976
|
+
minDate?: Date;
|
|
977
|
+
/** Maximum selectable date */
|
|
978
|
+
maxDate?: Date;
|
|
979
|
+
/** Array of disabled dates */
|
|
980
|
+
disabledDates?: Date[];
|
|
981
|
+
/** Whether the field is required */
|
|
982
|
+
required?: boolean;
|
|
983
|
+
/** Whether the field is disabled */
|
|
984
|
+
disabled?: boolean;
|
|
985
|
+
/** Error message */
|
|
986
|
+
error?: string;
|
|
987
|
+
/** Date format for display (default: MM/DD/YYYY) */
|
|
988
|
+
dateFormat?: 'MM/DD/YYYY' | 'DD/MM/YYYY' | 'YYYY-MM-DD';
|
|
989
|
+
/** Optional className */
|
|
990
|
+
className?: string;
|
|
991
|
+
/** Optional styles */
|
|
992
|
+
style?: React.CSSProperties;
|
|
993
|
+
}
|
|
994
|
+
/**
|
|
995
|
+
* Accessible date picker with calendar grid
|
|
996
|
+
*
|
|
997
|
+
* @example
|
|
998
|
+
* ```tsx
|
|
999
|
+
* const [date, setDate] = useState<Date | null>(null);
|
|
1000
|
+
*
|
|
1001
|
+
* <AccessibleDatePicker
|
|
1002
|
+
* value={date}
|
|
1003
|
+
* onChange={setDate}
|
|
1004
|
+
* label="Select date"
|
|
1005
|
+
* minDate={new Date()}
|
|
1006
|
+
* required
|
|
1007
|
+
* />
|
|
1008
|
+
* ```
|
|
1009
|
+
*/
|
|
1010
|
+
declare const AccessibleDatePicker: React.FC<AccessibleDatePickerProps>;
|
|
1011
|
+
|
|
1012
|
+
/**
|
|
1013
|
+
* AccessibleTreeView Component
|
|
1014
|
+
* Accessible tree navigation with keyboard support and ARIA
|
|
1015
|
+
*/
|
|
1016
|
+
|
|
1017
|
+
interface TreeNode<T = unknown> {
|
|
1018
|
+
/** Unique identifier */
|
|
1019
|
+
id: string;
|
|
1020
|
+
/** Display label */
|
|
1021
|
+
label: string;
|
|
1022
|
+
/** Optional data payload */
|
|
1023
|
+
data?: T;
|
|
1024
|
+
/** Child nodes */
|
|
1025
|
+
children?: TreeNode<T>[];
|
|
1026
|
+
/** Whether node is disabled */
|
|
1027
|
+
disabled?: boolean;
|
|
1028
|
+
}
|
|
1029
|
+
interface AccessibleTreeViewProps<T = unknown> {
|
|
1030
|
+
/** Tree data */
|
|
1031
|
+
data: TreeNode<T>[];
|
|
1032
|
+
/** Callback when node is selected */
|
|
1033
|
+
onSelect?: (node: TreeNode<T>) => void;
|
|
1034
|
+
/** IDs of expanded nodes */
|
|
1035
|
+
expandedNodes?: string[];
|
|
1036
|
+
/** Callback when node is expanded/collapsed */
|
|
1037
|
+
onToggle?: (nodeId: string, isExpanded: boolean) => void;
|
|
1038
|
+
/** Allow multiple selection */
|
|
1039
|
+
multiSelect?: boolean;
|
|
1040
|
+
/** Selected node IDs */
|
|
1041
|
+
selectedNodes?: string[];
|
|
1042
|
+
/** Optional aria-label */
|
|
1043
|
+
ariaLabel?: string;
|
|
1044
|
+
/** Optional className */
|
|
1045
|
+
className?: string;
|
|
1046
|
+
/** Optional styles */
|
|
1047
|
+
style?: React.CSSProperties;
|
|
1048
|
+
}
|
|
1049
|
+
/**
|
|
1050
|
+
* Accessible tree view component with keyboard navigation
|
|
1051
|
+
*
|
|
1052
|
+
* @example
|
|
1053
|
+
* ```tsx
|
|
1054
|
+
* const treeData = [
|
|
1055
|
+
* {
|
|
1056
|
+
* id: '1',
|
|
1057
|
+
* label: 'Documents',
|
|
1058
|
+
* children: [
|
|
1059
|
+
* { id: '1-1', label: 'Reports' },
|
|
1060
|
+
* { id: '1-2', label: 'Invoices' }
|
|
1061
|
+
* ]
|
|
1062
|
+
* },
|
|
1063
|
+
* { id: '2', label: 'Images' }
|
|
1064
|
+
* ];
|
|
1065
|
+
*
|
|
1066
|
+
* <AccessibleTreeView
|
|
1067
|
+
* data={treeData}
|
|
1068
|
+
* onSelect={(node) => console.log(node)}
|
|
1069
|
+
* />
|
|
1070
|
+
* ```
|
|
1071
|
+
*/
|
|
1072
|
+
declare function AccessibleTreeView<T = unknown>({ data, onSelect, expandedNodes: controlledExpanded, onToggle, multiSelect, selectedNodes: controlledSelected, ariaLabel, className, style, }: AccessibleTreeViewProps<T>): React.ReactElement;
|
|
1073
|
+
|
|
1074
|
+
/**
|
|
1075
|
+
* AccessibleTable Component
|
|
1076
|
+
* Fully accessible data table with sorting, selection, and keyboard navigation
|
|
1077
|
+
*/
|
|
1078
|
+
|
|
1079
|
+
interface TableColumn<T> {
|
|
1080
|
+
/** Unique key for the column */
|
|
1081
|
+
key: string;
|
|
1082
|
+
/** Header label */
|
|
1083
|
+
label: string;
|
|
1084
|
+
/** Render function for cell content */
|
|
1085
|
+
render?: (item: T, index: number) => React.ReactNode;
|
|
1086
|
+
/** Whether column is sortable */
|
|
1087
|
+
sortable?: boolean;
|
|
1088
|
+
/** Width of the column */
|
|
1089
|
+
width?: string;
|
|
1090
|
+
}
|
|
1091
|
+
type SortDirection = 'asc' | 'desc' | null;
|
|
1092
|
+
interface AccessibleTableProps<T> {
|
|
1093
|
+
/** Table data */
|
|
1094
|
+
data: T[];
|
|
1095
|
+
/** Column definitions */
|
|
1096
|
+
columns: TableColumn<T>[];
|
|
1097
|
+
/** Table caption (required for accessibility) */
|
|
1098
|
+
caption: string;
|
|
1099
|
+
/** Whether rows are selectable */
|
|
1100
|
+
selectable?: boolean;
|
|
1101
|
+
/** Selected row indices */
|
|
1102
|
+
selectedRows?: number[];
|
|
1103
|
+
/** Callback when selection changes */
|
|
1104
|
+
onSelectionChange?: (selectedIndices: number[]) => void;
|
|
1105
|
+
/** Row key extractor */
|
|
1106
|
+
getRowKey?: (item: T, index: number) => string;
|
|
1107
|
+
/** Whether table is sortable */
|
|
1108
|
+
sortable?: boolean;
|
|
1109
|
+
/** Current sort column */
|
|
1110
|
+
sortColumn?: string;
|
|
1111
|
+
/** Current sort direction */
|
|
1112
|
+
sortDirection?: SortDirection;
|
|
1113
|
+
/** Callback when sort changes */
|
|
1114
|
+
onSort?: (column: string, direction: SortDirection) => void;
|
|
1115
|
+
/** Optional className */
|
|
1116
|
+
className?: string;
|
|
1117
|
+
/** Optional styles */
|
|
1118
|
+
style?: React.CSSProperties;
|
|
1119
|
+
}
|
|
1120
|
+
/**
|
|
1121
|
+
* Accessible data table with sorting and selection
|
|
1122
|
+
*
|
|
1123
|
+
* @example
|
|
1124
|
+
* ```tsx
|
|
1125
|
+
* interface User {
|
|
1126
|
+
* id: number;
|
|
1127
|
+
* name: string;
|
|
1128
|
+
* email: string;
|
|
1129
|
+
* }
|
|
1130
|
+
*
|
|
1131
|
+
* const columns: TableColumn<User>[] = [
|
|
1132
|
+
* { key: 'name', label: 'Name', sortable: true },
|
|
1133
|
+
* { key: 'email', label: 'Email', sortable: true }
|
|
1134
|
+
* ];
|
|
1135
|
+
*
|
|
1136
|
+
* <AccessibleTable
|
|
1137
|
+
* data={users}
|
|
1138
|
+
* columns={columns}
|
|
1139
|
+
* caption="User list"
|
|
1140
|
+
* selectable
|
|
1141
|
+
* sortable
|
|
1142
|
+
* />
|
|
1143
|
+
* ```
|
|
1144
|
+
*/
|
|
1145
|
+
declare function AccessibleTable<T extends Record<string, unknown>>({ data, columns, caption, selectable, selectedRows: controlledSelected, onSelectionChange, getRowKey, sortable, sortColumn: controlledSortColumn, sortDirection: controlledSortDirection, onSort, className, style, }: AccessibleTableProps<T>): React.ReactElement;
|
|
1146
|
+
|
|
1147
|
+
/**
|
|
1148
|
+
* AccessibleCarousel Component
|
|
1149
|
+
* Fully accessible carousel with keyboard navigation and proper ARIA attributes
|
|
1150
|
+
*/
|
|
1151
|
+
|
|
1152
|
+
interface AccessibleCarouselProps {
|
|
1153
|
+
/** Array of carousel items */
|
|
1154
|
+
items: ReactNode[];
|
|
1155
|
+
/** Whether to auto-play the carousel */
|
|
1156
|
+
autoPlay?: boolean;
|
|
1157
|
+
/** Interval between slides in milliseconds */
|
|
1158
|
+
interval?: number;
|
|
1159
|
+
/** Whether to show navigation controls */
|
|
1160
|
+
controls?: boolean;
|
|
1161
|
+
/** Whether to show slide indicators */
|
|
1162
|
+
indicators?: boolean;
|
|
1163
|
+
/** Whether to loop back to start/end */
|
|
1164
|
+
loop?: boolean;
|
|
1165
|
+
/** Optional aria-label */
|
|
1166
|
+
ariaLabel?: string;
|
|
1167
|
+
/** Optional className */
|
|
1168
|
+
className?: string;
|
|
1169
|
+
/** Optional styles */
|
|
1170
|
+
style?: React.CSSProperties;
|
|
1171
|
+
}
|
|
1172
|
+
/**
|
|
1173
|
+
* Accessible carousel component with auto-play and keyboard navigation
|
|
1174
|
+
*
|
|
1175
|
+
* @example
|
|
1176
|
+
* ```tsx
|
|
1177
|
+
* const slides = [
|
|
1178
|
+
* <div>Slide 1</div>,
|
|
1179
|
+
* <div>Slide 2</div>,
|
|
1180
|
+
* <div>Slide 3</div>
|
|
1181
|
+
* ];
|
|
1182
|
+
*
|
|
1183
|
+
* <AccessibleCarousel
|
|
1184
|
+
* items={slides}
|
|
1185
|
+
* autoPlay
|
|
1186
|
+
* interval={5000}
|
|
1187
|
+
* controls
|
|
1188
|
+
* indicators
|
|
1189
|
+
* />
|
|
1190
|
+
* ```
|
|
1191
|
+
*/
|
|
1192
|
+
declare const AccessibleCarousel: React.FC<AccessibleCarouselProps>;
|
|
1193
|
+
|
|
1194
|
+
/**
|
|
1195
|
+
* AccessibleDrawer Component
|
|
1196
|
+
* Accessible drawer/sidebar with focus trap and proper ARIA attributes
|
|
1197
|
+
*/
|
|
1198
|
+
|
|
1199
|
+
type DrawerSide = 'left' | 'right' | 'top' | 'bottom';
|
|
1200
|
+
interface AccessibleDrawerProps {
|
|
1201
|
+
/** Whether the drawer is open */
|
|
1202
|
+
isOpen: boolean;
|
|
1203
|
+
/** Callback when drawer should close */
|
|
1204
|
+
onClose: () => void;
|
|
1205
|
+
/** Side from which the drawer appears */
|
|
1206
|
+
side?: DrawerSide;
|
|
1207
|
+
/** Whether drawer is modal (blocks interaction with background) */
|
|
1208
|
+
modal?: boolean;
|
|
1209
|
+
/** Drawer title */
|
|
1210
|
+
title?: string;
|
|
1211
|
+
/** Drawer content */
|
|
1212
|
+
children: ReactNode;
|
|
1213
|
+
/** Optional className for the drawer */
|
|
1214
|
+
className?: string;
|
|
1215
|
+
/** Optional className for the backdrop */
|
|
1216
|
+
backdropClassName?: string;
|
|
1217
|
+
/** Optional styles */
|
|
1218
|
+
style?: React.CSSProperties;
|
|
1219
|
+
}
|
|
1220
|
+
/**
|
|
1221
|
+
* Accessible drawer/sidebar component with focus trap
|
|
1222
|
+
*
|
|
1223
|
+
* @example
|
|
1224
|
+
* ```tsx
|
|
1225
|
+
* const [isOpen, setIsOpen] = useState(false);
|
|
1226
|
+
*
|
|
1227
|
+
* <AccessibleDrawer
|
|
1228
|
+
* isOpen={isOpen}
|
|
1229
|
+
* onClose={() => setIsOpen(false)}
|
|
1230
|
+
* side="right"
|
|
1231
|
+
* modal
|
|
1232
|
+
* title="Settings"
|
|
1233
|
+
* >
|
|
1234
|
+
* <div>Drawer content here</div>
|
|
1235
|
+
* </AccessibleDrawer>
|
|
1236
|
+
* ```
|
|
1237
|
+
*/
|
|
1238
|
+
declare const AccessibleDrawer: React.FC<AccessibleDrawerProps>;
|
|
1239
|
+
|
|
1240
|
+
export { AccessibleAccordion, type AccessibleAccordionProps, AccessibleBreadcrumb, type AccessibleBreadcrumbProps, AccessibleButton, AccessibleCarousel, type AccessibleCarouselProps, AccessibleCheckboxGroup, type AccessibleCheckboxGroupProps, AccessibleCombobox, type AccessibleComboboxProps, AccessibleDatePicker, type AccessibleDatePickerProps, AccessibleDialog, AccessibleDrawer, type AccessibleDrawerProps, AccessibleMenu, AccessibleModal, AccessiblePagination, type AccessiblePaginationProps, AccessibleProgress, type AccessibleProgressProps, AccessibleRadioGroup, type AccessibleRadioGroupProps, AccessibleTable, type AccessibleTableProps, AccessibleTabs, AccessibleToast, type AccessibleToastProps, AccessibleToggle, type AccessibleToggleProps, AccessibleTooltip, type AccessibleTooltipProps, AccessibleTreeView, type AccessibleTreeViewProps, type AccordionItem, type BreadcrumbItem, type AccessibleButtonProps as ButtonComponentProps, type ButtonVariant, type CheckboxOption, type ComboboxOption, type AccessibleDialogProps as DialogComponentProps, type DrawerSide, type AccessibleMenuProps as MenuComponentProps, type MenuItem, type AccessibleModalProps as ModalComponentProps, type ProgressVariant, type RadioOption, type SkipLink, SkipLinks, type SkipLinksProps, type SortDirection, type Tab, type TableColumn, type AccessibleTabsProps as TabsComponentProps, type Toast, type ToastAction, ToastContainer, type ToastContainerProps, type ToastPosition, type ToastType, type TreeNode };
|