pixelize-native-library 1.2.0 → 1.3.0
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/COMPONENT-GOTCHAS.md +309 -0
- package/DESIGN-GUIDE.md +215 -0
- package/README.md +44 -0
- package/lib/module/core/MODULE.md +23 -16
- package/lib/module/core/a11y/MODULE.md +7 -7
- package/lib/module/core/a11y/touchTarget.js +6 -0
- package/lib/module/core/blur/blur.js +17 -0
- package/lib/module/core/blur/index.js +4 -0
- package/lib/module/core/device/MODULE.md +5 -8
- package/lib/module/core/gradient/AccentGradientFill.js +83 -0
- package/lib/module/core/gradient/ShimmerGradientFill.js +79 -0
- package/lib/module/core/gradient/darkenHex.js +13 -0
- package/lib/module/core/gradient/gradientStops.js +27 -0
- package/lib/module/core/gradient/index.js +8 -0
- package/lib/module/core/gradient/withAlpha.js +19 -0
- package/lib/module/core/haptics/MODULE.md +8 -0
- package/lib/module/core/haptics/context.js +7 -0
- package/lib/module/core/haptics/haptics.js +17 -0
- package/lib/module/core/haptics/index.js +6 -0
- package/lib/module/core/haptics/useHaptics.js +73 -0
- package/lib/module/core/heading/MODULE.md +1 -1
- package/lib/module/core/icon/MODULE.md +22 -23
- package/lib/module/core/icon/icons/building-2.js +1 -1
- package/lib/module/core/icon/icons/trash.js +1 -1
- package/lib/module/core/icon/icons/trending-up.js +10 -0
- package/lib/module/core/icon/resolve.js +2 -0
- package/lib/module/core/list/VirtualList.js +16 -3
- package/lib/module/core/media/expoImage.js +6 -0
- package/lib/module/core/motion/MODULE.md +25 -16
- package/lib/module/core/motion/animatedComponents.js +8 -0
- package/lib/module/core/motion/config.js +4 -1
- package/lib/module/core/motion/index.js +4 -1
- package/lib/module/core/motion/motionAnimation.js +87 -0
- package/lib/module/core/motion/presets.js +81 -81
- package/lib/module/core/motion/reanimatedEasing.js +19 -0
- package/lib/module/core/motion/useAnimatedValue.js +2 -14
- package/lib/module/core/motion/useMotion.js +19 -20
- package/lib/module/core/motion/usePressState.js +140 -0
- package/lib/module/core/overlay/MODULE.md +17 -0
- package/lib/module/core/overlay/ModalPortalContext.js +8 -0
- package/lib/module/core/overlay/index.js +5 -0
- package/lib/module/core/overlay/renderWebPortal.js +6 -0
- package/lib/module/core/overlay/renderWebPortal.web.js +8 -0
- package/lib/module/core/screen-scroll/ScreenScrollContext.js +9 -0
- package/lib/module/core/screen-scroll/index.js +4 -0
- package/lib/module/core/slot/MODULE.md +9 -0
- package/lib/module/core/slot/index.js +4 -0
- package/lib/module/core/slot/nodeSlot.js +21 -0
- package/lib/module/core/style/focusRing.js +37 -0
- package/lib/module/core/style/index.js +2 -1
- package/lib/module/core/style/radius.js +4 -0
- package/lib/module/index.js +24 -4
- package/lib/module/modules/accordion/Accordion.js +115 -153
- package/lib/module/modules/accordion/Accordion.variants.js +6 -7
- package/lib/module/modules/accordion/AccordionProps.js +4 -0
- package/lib/module/modules/accordion/MODULE.md +15 -23
- package/lib/module/modules/alert-dialog/AlertDialog.js +25 -7
- package/lib/module/modules/alert-dialog/AlertDialog.variants.js +4 -0
- package/lib/module/modules/alert-dialog/AlertDialogProps.js +4 -0
- package/lib/module/modules/alert-dialog/MODULE.md +2 -1
- package/lib/module/modules/app-bar/AppBar.js +27 -22
- package/lib/module/modules/app-bar/AppBar.variants.js +6 -2
- package/lib/module/modules/app-bar/AppBarProps.js +4 -0
- package/lib/module/modules/app-bar/MODULE.md +1 -1
- package/lib/module/modules/app-switcher/AppSwitcher.js +30 -0
- package/lib/module/modules/app-switcher/AppSwitcherProps.js +4 -0
- package/lib/module/modules/app-switcher/MODULE.md +14 -0
- package/lib/module/modules/app-switcher/index.js +4 -0
- package/lib/module/modules/appearance-settings/AppearanceSettings.js +58 -0
- package/lib/module/modules/appearance-settings/AppearanceSettingsProps.js +4 -0
- package/lib/module/modules/appearance-settings/MODULE.md +9 -0
- package/lib/module/modules/appearance-settings/index.js +4 -0
- package/lib/module/modules/avatar/Avatar.js +7 -1
- package/lib/module/modules/avatar/Avatar.variants.js +3 -1
- package/lib/module/modules/avatar/AvatarProps.js +4 -0
- package/lib/module/modules/avatar/MODULE.md +3 -3
- package/lib/module/modules/avatar-group/AvatarGroup.js +10 -6
- package/lib/module/modules/avatar-group/AvatarGroup.variants.js +23 -0
- package/lib/module/modules/avatar-group/AvatarGroupProps.js +4 -0
- package/lib/module/modules/avatar-group/MODULE.md +17 -0
- package/lib/module/modules/backdrop/Backdrop.js +38 -0
- package/lib/module/modules/backdrop/BackdropProps.js +4 -0
- package/lib/module/modules/backdrop/MODULE.md +11 -0
- package/lib/module/modules/backdrop/index.js +4 -0
- package/lib/module/modules/badge/Badge.js +11 -5
- package/lib/module/modules/badge/Badge.variants.js +2 -1
- package/lib/module/modules/badge/BadgeProps.js +4 -0
- package/lib/module/modules/badge/MODULE.md +11 -9
- package/lib/module/modules/banner/Banner.js +106 -60
- package/lib/module/modules/banner/Banner.variants.js +5 -3
- package/lib/module/modules/banner/BannerProps.js +4 -0
- package/lib/module/modules/banner/MODULE.md +27 -33
- package/lib/module/modules/bottom-nav/BottomNav.js +6 -3
- package/lib/module/modules/bottom-nav/BottomNav.variants.js +11 -12
- package/lib/module/modules/bottom-nav/BottomNavIconWithBadge.js +18 -19
- package/lib/module/modules/bottom-nav/BottomNavOverflowSheet.js +35 -10
- package/lib/module/modules/bottom-nav/BottomNavProps.js +4 -0
- package/lib/module/modules/bottom-nav/BottomNavTab.js +38 -15
- package/lib/module/modules/bottom-nav/MODULE.md +14 -5
- package/lib/module/modules/bottom-sheet/BottomSheet.js +49 -13
- package/lib/module/modules/bottom-sheet/BottomSheet.variants.js +15 -5
- package/lib/module/modules/bottom-sheet/BottomSheetProps.js +4 -0
- package/lib/module/modules/bottom-sheet/MODULE.md +24 -3
- package/lib/module/modules/breadcrumbs/Breadcrumbs.js +54 -0
- package/lib/module/modules/breadcrumbs/Breadcrumbs.variants.js +28 -0
- package/lib/module/modules/breadcrumbs/BreadcrumbsProps.js +4 -0
- package/lib/module/modules/breadcrumbs/MODULE.md +13 -0
- package/lib/module/modules/breadcrumbs/index.js +4 -0
- package/lib/module/modules/button/Button.js +89 -101
- package/lib/module/modules/button/Button.variants.js +14 -17
- package/lib/module/modules/button/ButtonProps.js +4 -0
- package/lib/module/modules/button/MODULE.md +11 -10
- package/lib/module/modules/button-group/ButtonGroup.js +38 -38
- package/lib/module/modules/button-group/ButtonGroup.variants.js +23 -50
- package/lib/module/modules/button-group/ButtonGroupProps.js +4 -0
- package/lib/module/modules/button-group/MODULE.md +27 -32
- package/lib/module/modules/card/Card.js +140 -19
- package/lib/module/modules/card/Card.variants.js +1 -0
- package/lib/module/modules/card/CardProps.js +4 -0
- package/lib/module/modules/card/MODULE.md +17 -12
- package/lib/module/modules/charts/BarChart.js +35 -18
- package/lib/module/modules/charts/BarChartProps.js +4 -0
- package/lib/module/modules/charts/BarList.js +33 -19
- package/lib/module/modules/charts/BarListProps.js +4 -0
- package/lib/module/modules/charts/ChartLegendProps.js +4 -0
- package/lib/module/modules/charts/Charts.variants.js +69 -3
- package/lib/module/modules/charts/DonutChart.js +12 -6
- package/lib/module/modules/charts/DonutChartProps.js +4 -0
- package/lib/module/modules/charts/LineChart.js +8 -5
- package/lib/module/modules/charts/LineChartProps.js +4 -0
- package/lib/module/modules/charts/MODULE.md +33 -20
- package/lib/module/modules/charts/PieChart.js +19 -8
- package/lib/module/modules/charts/PieChartProps.js +4 -0
- package/lib/module/modules/charts/Sparkline.js +4 -2
- package/lib/module/modules/charts/SparklineProps.js +4 -0
- package/lib/module/modules/checkbox/Checkbox.js +30 -28
- package/lib/module/modules/checkbox/Checkbox.variants.js +4 -2
- package/lib/module/modules/checkbox/CheckboxProps.js +4 -0
- package/lib/module/modules/checkbox/MODULE.md +17 -6
- package/lib/module/modules/chip/Chip.js +116 -54
- package/lib/module/modules/chip/Chip.variants.js +18 -5
- package/lib/module/modules/chip/ChipGroup.js +16 -5
- package/lib/module/modules/chip/ChipGroupProps.js +4 -0
- package/lib/module/modules/chip/ChipProps.js +4 -0
- package/lib/module/modules/chip/MODULE.md +8 -8
- package/lib/module/modules/combobox/Combobox.js +111 -78
- package/lib/module/modules/combobox/Combobox.variants.js +24 -10
- package/lib/module/modules/combobox/ComboboxProps.js +4 -0
- package/lib/module/modules/combobox/MODULE.md +14 -10
- package/lib/module/modules/composer/Composer.js +20 -11
- package/lib/module/modules/composer/Composer.variants.js +2 -0
- package/lib/module/modules/composer/ComposerProps.js +4 -0
- package/lib/module/modules/composer/MODULE.md +7 -2
- package/lib/module/modules/copy-button/CopyButton.js +35 -9
- package/lib/module/modules/copy-button/CopyButton.variants.js +7 -4
- package/lib/module/modules/copy-button/CopyButtonProps.js +4 -0
- package/lib/module/modules/copy-button/MODULE.md +11 -8
- package/lib/module/modules/data-table/DataTable.js +37 -14
- package/lib/module/modules/data-table/DataTable.variants.js +5 -4
- package/lib/module/modules/data-table/DataTableProps.js +4 -0
- package/lib/module/modules/data-table/MODULE.md +6 -10
- package/lib/module/modules/date-picker/Calendar.js +78 -29
- package/lib/module/modules/date-picker/CalendarProps.js +4 -0
- package/lib/module/modules/date-picker/DatePicker.variants.js +26 -10
- package/lib/module/modules/date-picker/DatePickerProps.js +4 -0
- package/lib/module/modules/date-picker/DateRangePickerProps.js +4 -0
- package/lib/module/modules/date-picker/MODULE.md +29 -11
- package/lib/module/modules/date-picker/PickerField.js +13 -4
- package/lib/module/modules/date-picker/PickerFieldProps.js +4 -0
- package/lib/module/modules/date-picker/PickerShell.js +23 -12
- package/lib/module/modules/date-picker/PickerShellProps.js +4 -0
- package/lib/module/modules/date-picker/TimePicker.js +15 -19
- package/lib/module/modules/date-picker/TimePickerProps.js +4 -0
- package/lib/module/modules/description-list/DescriptionList.js +90 -0
- package/lib/module/modules/description-list/DescriptionList.variants.js +63 -0
- package/lib/module/modules/description-list/DescriptionListProps.js +4 -0
- package/lib/module/modules/description-list/MODULE.md +15 -0
- package/lib/module/modules/description-list/index.js +4 -0
- package/lib/module/modules/divider/Divider.variants.js +6 -5
- package/lib/module/modules/divider/DividerProps.js +4 -0
- package/lib/module/modules/divider/MODULE.md +1 -6
- package/lib/module/modules/document-viewer/DocumentViewer.js +35 -0
- package/lib/module/modules/document-viewer/DocumentViewerProps.js +4 -0
- package/lib/module/modules/document-viewer/MODULE.md +12 -0
- package/lib/module/modules/document-viewer/index.js +4 -0
- package/lib/module/modules/drawer/Drawer.js +62 -45
- package/lib/module/modules/drawer/Drawer.variants.js +4 -4
- package/lib/module/modules/drawer/DrawerProps.js +4 -0
- package/lib/module/modules/drawer/MODULE.md +14 -21
- package/lib/module/modules/empty-state/EmptyState.js +19 -29
- package/lib/module/modules/empty-state/EmptyState.variants.js +7 -0
- package/lib/module/modules/empty-state/EmptyStateProps.js +4 -0
- package/lib/module/modules/empty-state/MODULE.md +5 -9
- package/lib/module/modules/fab/Fab.js +47 -69
- package/lib/module/modules/fab/Fab.variants.js +25 -5
- package/lib/module/modules/fab/FabGroup.js +113 -89
- package/lib/module/modules/fab/FabGroupProps.js +4 -0
- package/lib/module/modules/fab/FabProps.js +4 -0
- package/lib/module/modules/fab/MODULE.md +17 -11
- package/lib/module/modules/field-select-modal/FieldSelectModal.js +52 -0
- package/lib/module/modules/field-select-modal/FieldSelectModalProps.js +4 -0
- package/lib/module/modules/field-select-modal/MODULE.md +13 -0
- package/lib/module/modules/field-select-modal/index.js +4 -0
- package/lib/module/modules/file-grid/FileGrid.js +31 -16
- package/lib/module/modules/file-grid/FileGrid.variants.js +2 -2
- package/lib/module/modules/file-grid/FileGridProps.js +4 -0
- package/lib/module/modules/file-grid/MODULE.md +29 -4
- package/lib/module/modules/file-upload/FileUpload.js +56 -15
- package/lib/module/modules/file-upload/FileUpload.variants.js +3 -1
- package/lib/module/modules/file-upload/FileUploadProps.js +4 -0
- package/lib/module/modules/file-upload/MODULE.md +10 -12
- package/lib/module/modules/filter-bar/FilterBar.js +68 -0
- package/lib/module/modules/filter-bar/FilterBarProps.js +4 -0
- package/lib/module/modules/filter-bar/MODULE.md +16 -0
- package/lib/module/modules/filter-bar/index.js +4 -0
- package/lib/module/modules/filter-sheet/FilterChip.js +13 -4
- package/lib/module/modules/filter-sheet/FilterChipProps.js +4 -0
- package/lib/module/modules/filter-sheet/FilterSheet.js +19 -14
- package/lib/module/modules/filter-sheet/FilterSheet.variants.js +2 -3
- package/lib/module/modules/filter-sheet/FilterSheetBody.js +39 -17
- package/lib/module/modules/filter-sheet/FilterSheetProps.js +2 -0
- package/lib/module/modules/filter-sheet/MODULE.md +4 -4
- package/lib/module/modules/folder-row/FolderRow.js +33 -19
- package/lib/module/modules/folder-row/FolderRow.variants.js +4 -2
- package/lib/module/modules/folder-row/FolderRowProps.js +4 -0
- package/lib/module/modules/folder-row/MODULE.md +6 -4
- package/lib/module/modules/form-field/FormField.js +9 -4
- package/lib/module/modules/form-field/FormFieldProps.js +4 -0
- package/lib/module/modules/form-field/MODULE.md +2 -7
- package/lib/module/modules/gantt/Gantt.js +52 -14
- package/lib/module/modules/gantt/Gantt.variants.js +47 -3
- package/lib/module/modules/gantt/GanttProps.js +4 -0
- package/lib/module/modules/gantt/MODULE.md +14 -4
- package/lib/module/modules/image-viewer/ImageViewer.js +37 -6
- package/lib/module/modules/image-viewer/ImageViewerProps.js +4 -0
- package/lib/module/modules/image-viewer/MODULE.md +7 -1
- package/lib/module/modules/input/Input.js +75 -27
- package/lib/module/modules/input/Input.variants.js +10 -10
- package/lib/module/modules/input/InputProps.js +4 -0
- package/lib/module/modules/input/MODULE.md +9 -14
- package/lib/module/modules/key-value/KeyValue.js +36 -0
- package/lib/module/modules/key-value/KeyValueProps.js +4 -0
- package/lib/module/modules/key-value/MODULE.md +16 -0
- package/lib/module/modules/key-value/index.js +4 -0
- package/lib/module/modules/limit-reached-modal/LimitReachedModalProps.js +4 -0
- package/lib/module/modules/limit-reached-modal/MODULE.md +1 -6
- package/lib/module/modules/list-item/ListItem.js +60 -27
- package/lib/module/modules/list-item/ListItem.variants.js +11 -2
- package/lib/module/modules/list-item/ListItemProps.js +4 -0
- package/lib/module/modules/list-item/MODULE.md +14 -10
- package/lib/module/modules/list-screen/ListScreen.js +63 -0
- package/lib/module/modules/list-screen/ListScreenProps.js +4 -0
- package/lib/module/modules/list-screen/MODULE.md +12 -0
- package/lib/module/modules/list-screen/index.js +4 -0
- package/lib/module/modules/markdown/MODULE.md +6 -5
- package/lib/module/modules/markdown/Markdown.js +57 -22
- package/lib/module/modules/markdown/Markdown.variants.js +2 -1
- package/lib/module/modules/markdown/MarkdownProps.js +4 -0
- package/lib/module/modules/menu/MODULE.md +11 -7
- package/lib/module/modules/menu/Menu.js +149 -76
- package/lib/module/modules/menu/Menu.variants.js +5 -5
- package/lib/module/modules/menu/MenuProps.js +4 -0
- package/lib/module/modules/message-bubble/MODULE.md +7 -3
- package/lib/module/modules/message-bubble/MessageBubble.js +4 -5
- package/lib/module/modules/message-bubble/MessageBubble.variants.js +5 -5
- package/lib/module/modules/message-bubble/MessageBubbleProps.js +4 -0
- package/lib/module/modules/modal/MODULE.md +63 -89
- package/lib/module/modules/modal/Modal.js +168 -47
- package/lib/module/modules/modal/Modal.variants.js +2 -2
- package/lib/module/modules/modal/ModalPortalContext.js +1 -22
- package/lib/module/modules/modal/ModalPortalProvider.js +1 -1
- package/lib/module/modules/modal/ModalPortalProviderProps.js +4 -0
- package/lib/module/modules/modal/ModalProps.js +4 -0
- package/lib/module/modules/modal/renderWebPortal.js +1 -15
- package/lib/module/modules/modal/renderWebPortal.web.js +1 -21
- package/lib/module/modules/more-items/MODULE.md +3 -0
- package/lib/module/modules/more-items/MoreItems.js +16 -7
- package/lib/module/modules/more-items/MoreItems.variants.js +6 -2
- package/lib/module/modules/more-items/MoreItemsProps.js +4 -0
- package/lib/module/modules/multi-select/MODULE.md +5 -6
- package/lib/module/modules/multi-select/MultiSelect.js +61 -24
- package/lib/module/modules/multi-select/MultiSelect.variants.js +8 -4
- package/lib/module/modules/multi-select/MultiSelectProps.js +4 -0
- package/lib/module/modules/notification-bell/MODULE.md +8 -0
- package/lib/module/modules/notification-bell/NotificationBell.js +43 -0
- package/lib/module/modules/notification-bell/NotificationBellProps.js +4 -0
- package/lib/module/modules/notification-bell/index.js +4 -0
- package/lib/module/modules/number-input/MODULE.md +10 -14
- package/lib/module/modules/number-input/NumberInput.js +100 -85
- package/lib/module/modules/number-input/NumberInput.variants.js +11 -10
- package/lib/module/modules/number-input/NumberInputProps.js +4 -0
- package/lib/module/modules/org-switcher/MODULE.md +13 -8
- package/lib/module/modules/org-switcher/OrgSwitcher.js +34 -21
- package/lib/module/modules/org-switcher/OrgSwitcher.variants.js +8 -4
- package/lib/module/modules/org-switcher/OrgSwitcherProps.js +4 -0
- package/lib/module/modules/pagination/MODULE.md +4 -7
- package/lib/module/modules/pagination/Pagination.js +97 -48
- package/lib/module/modules/pagination/Pagination.variants.js +6 -4
- package/lib/module/modules/pagination/PaginationControls.js +58 -36
- package/lib/module/modules/pagination/PaginationProps.js +4 -0
- package/lib/module/modules/person-chip/MODULE.md +11 -0
- package/lib/module/modules/person-chip/PersonChip.js +65 -0
- package/lib/module/modules/person-chip/PersonChipProps.js +4 -0
- package/lib/module/modules/person-chip/index.js +4 -0
- package/lib/module/modules/pin-input/MODULE.md +12 -19
- package/lib/module/modules/pin-input/PinInput.js +10 -3
- package/lib/module/modules/pin-input/PinInput.variants.js +4 -4
- package/lib/module/modules/pin-input/PinInputProps.js +4 -0
- package/lib/module/modules/plan-badge/MODULE.md +4 -0
- package/lib/module/modules/plan-badge/PlanBadge.js +25 -0
- package/lib/module/modules/plan-badge/PlanBadgeProps.js +4 -0
- package/lib/module/modules/plan-badge/index.js +4 -0
- package/lib/module/modules/plan-pill/MODULE.md +4 -0
- package/lib/module/modules/plan-pill/PlanPill.js +24 -0
- package/lib/module/modules/plan-pill/PlanPillProps.js +4 -0
- package/lib/module/modules/plan-pill/index.js +4 -0
- package/lib/module/modules/progress-bar/MODULE.md +12 -14
- package/lib/module/modules/progress-bar/ProgressBar.js +28 -36
- package/lib/module/modules/progress-bar/ProgressBarProps.js +4 -0
- package/lib/module/modules/radio-group/MODULE.md +7 -13
- package/lib/module/modules/radio-group/RadioGroup.js +125 -65
- package/lib/module/modules/radio-group/RadioGroup.variants.js +4 -4
- package/lib/module/modules/radio-group/RadioGroupProps.js +4 -0
- package/lib/module/modules/reorder/MODULE.md +7 -9
- package/lib/module/modules/reorder/Reorder.js +12 -6
- package/lib/module/modules/reorder/Reorder.variants.js +7 -6
- package/lib/module/modules/reorder/ReorderProps.js +4 -0
- package/lib/module/modules/rich-text/MODULE.md +5 -3
- package/lib/module/modules/rich-text/RichText.js +42 -22
- package/lib/module/modules/rich-text/RichTextProps.js +4 -0
- package/lib/module/modules/rich-text-editor/MODULE.md +8 -15
- package/lib/module/modules/rich-text-editor/RichTextEditor.js +13 -5
- package/lib/module/modules/rich-text-editor/RichTextEditor.variants.js +9 -6
- package/lib/module/modules/rich-text-editor/RichTextEditorProps.js +4 -0
- package/lib/module/modules/save-bar/MODULE.md +3 -0
- package/lib/module/modules/save-bar/SaveBar.js +49 -0
- package/lib/module/modules/save-bar/SaveBarProps.js +4 -0
- package/lib/module/modules/save-bar/index.js +4 -0
- package/lib/module/modules/screen/MODULE.md +14 -5
- package/lib/module/modules/screen/Screen.js +109 -33
- package/lib/module/modules/screen/Screen.variants.js +18 -0
- package/lib/module/modules/screen/ScreenProps.js +4 -0
- package/lib/module/modules/search-bar/MODULE.md +9 -8
- package/lib/module/modules/search-bar/SearchBar.js +49 -27
- package/lib/module/modules/search-bar/SearchBar.variants.js +13 -12
- package/lib/module/modules/search-bar/SearchBarProps.js +4 -0
- package/lib/module/modules/section/MODULE.md +3 -1
- package/lib/module/modules/section/Section.js +14 -16
- package/lib/module/modules/section/Section.variants.js +1 -6
- package/lib/module/modules/section/SectionProps.js +4 -0
- package/lib/module/modules/section-list/MODULE.md +21 -1
- package/lib/module/modules/section-list/SectionListProps.js +4 -0
- package/lib/module/modules/segmented-control/MODULE.md +30 -26
- package/lib/module/modules/segmented-control/SegmentedControl.js +124 -70
- package/lib/module/modules/segmented-control/SegmentedControl.variants.js +11 -43
- package/lib/module/modules/segmented-control/SegmentedControlProps.js +4 -0
- package/lib/module/modules/select/MODULE.md +34 -10
- package/lib/module/modules/select/Select.js +74 -34
- package/lib/module/modules/select/Select.variants.js +39 -16
- package/lib/module/modules/select/SelectProps.js +4 -0
- package/lib/module/modules/setting-row/MODULE.md +8 -0
- package/lib/module/modules/setting-row/SettingRow.js +50 -0
- package/lib/module/modules/setting-row/SettingRowProps.js +4 -0
- package/lib/module/modules/setting-row/index.js +4 -0
- package/lib/module/modules/settings-section/MODULE.md +7 -0
- package/lib/module/modules/settings-section/SettingsSection.js +37 -0
- package/lib/module/modules/settings-section/SettingsSectionProps.js +4 -0
- package/lib/module/modules/settings-section/index.js +4 -0
- package/lib/module/modules/skeleton/MODULE.md +25 -28
- package/lib/module/modules/skeleton/Skeleton.js +54 -53
- package/lib/module/modules/skeleton/Skeleton.variants.js +11 -74
- package/lib/module/modules/skeleton/SkeletonProps.js +4 -0
- package/lib/module/modules/slider/MODULE.md +4 -1
- package/lib/module/modules/slider/Slider.js +7 -6
- package/lib/module/modules/slider/Slider.variants.js +4 -2
- package/lib/module/modules/slider/SliderProps.js +4 -0
- package/lib/module/modules/spinner/MODULE.md +3 -2
- package/lib/module/modules/spinner/SpinnerProps.js +4 -0
- package/lib/module/modules/stage-progress/MODULE.md +32 -14
- package/lib/module/modules/stage-progress/StageProgress.js +136 -59
- package/lib/module/modules/stage-progress/StageProgress.variants.js +57 -20
- package/lib/module/modules/stage-progress/StageProgressProps.js +4 -0
- package/lib/module/modules/stat-grid/MODULE.md +11 -0
- package/lib/module/modules/stat-grid/StatGrid.js +34 -0
- package/lib/module/modules/stat-grid/StatGridProps.js +4 -0
- package/lib/module/modules/stat-grid/index.js +4 -0
- package/lib/module/modules/stat-tile/MODULE.md +14 -1
- package/lib/module/modules/stat-tile/StatTile.js +51 -21
- package/lib/module/modules/stat-tile/StatTile.variants.js +7 -0
- package/lib/module/modules/stat-tile/StatTileProps.js +4 -0
- package/lib/module/modules/state-block/MODULE.md +12 -3
- package/lib/module/modules/state-block/StateBlock.js +54 -41
- package/lib/module/modules/state-block/StateBlock.variants.js +7 -0
- package/lib/module/modules/state-block/StateBlockProps.js +4 -0
- package/lib/module/modules/stepper/MODULE.md +2 -0
- package/lib/module/modules/stepper/Stepper.js +22 -21
- package/lib/module/modules/stepper/Stepper.variants.js +2 -0
- package/lib/module/modules/stepper/StepperProps.js +4 -0
- package/lib/module/modules/surface/MODULE.md +57 -0
- package/lib/module/modules/surface/Surface.js +47 -0
- package/lib/module/modules/surface/Surface.variants.js +33 -0
- package/lib/module/modules/surface/SurfaceProps.js +4 -0
- package/lib/module/modules/surface/index.js +4 -0
- package/lib/module/modules/swipeable-row/MODULE.md +12 -2
- package/lib/module/modules/swipeable-row/SwipeableRow.js +57 -13
- package/lib/module/modules/swipeable-row/SwipeableRowProps.js +4 -0
- package/lib/module/modules/switch/MODULE.md +7 -2
- package/lib/module/modules/switch/Switch.js +49 -9
- package/lib/module/modules/switch/Switch.variants.js +2 -3
- package/lib/module/modules/switch/SwitchProps.js +4 -0
- package/lib/module/modules/tabs/MODULE.md +11 -14
- package/lib/module/modules/tabs/Tabs.js +115 -51
- package/lib/module/modules/tabs/Tabs.variants.js +6 -6
- package/lib/module/modules/tabs/TabsProps.js +4 -0
- package/lib/module/modules/text/MODULE.md +25 -14
- package/lib/module/modules/text/Text.js +18 -6
- package/lib/module/modules/text/Text.variants.js +116 -44
- package/lib/module/modules/text/TextProps.js +4 -0
- package/lib/module/modules/textarea/MODULE.md +12 -16
- package/lib/module/modules/textarea/Textarea.js +15 -12
- package/lib/module/modules/textarea/Textarea.variants.js +6 -2
- package/lib/module/modules/textarea/TextareaProps.js +4 -0
- package/lib/module/modules/timeline/MODULE.md +8 -17
- package/lib/module/modules/timeline/Timeline.js +79 -22
- package/lib/module/modules/timeline/Timeline.variants.js +2 -0
- package/lib/module/modules/timeline/TimelineProps.js +4 -0
- package/lib/module/modules/toast/MODULE.md +15 -18
- package/lib/module/modules/toast/Toast.js +75 -55
- package/lib/module/modules/toast/Toast.variants.js +7 -5
- package/lib/module/modules/tooltip/MODULE.md +22 -22
- package/lib/module/modules/tooltip/Tooltip.js +77 -16
- package/lib/module/modules/tooltip/Tooltip.variants.js +8 -1
- package/lib/module/modules/tooltip/TooltipProps.js +4 -0
- package/lib/module/modules/typing-indicator/MODULE.md +1 -1
- package/lib/module/modules/typing-indicator/TypingIndicator.js +78 -51
- package/lib/module/modules/typing-indicator/TypingIndicatorProps.js +4 -0
- package/lib/module/modules/upgrade-button/MODULE.md +3 -0
- package/lib/module/modules/upgrade-button/UpgradeButton.js +23 -0
- package/lib/module/modules/upgrade-button/UpgradeButtonProps.js +4 -0
- package/lib/module/modules/upgrade-button/index.js +4 -0
- package/lib/module/theme/MODULE.md +5 -1
- package/lib/module/theme/platform/MODULE.md +16 -8
- package/lib/module/theme/platform/elevation.native.js +1 -51
- package/lib/module/theme/platform/floatingSurface.native.js +75 -0
- package/lib/module/theme/platform/highlight.native.js +59 -0
- package/lib/module/theme/platform/index.js +5 -0
- package/lib/module/theme/platform/motion.native.js +31 -11
- package/lib/module/theme/platform/stateLayer.native.js +14 -0
- package/lib/module/theme/platform/surfaces.native.js +11 -0
- package/lib/module/theme/provider/PixelizeProvider.js +18 -5
- package/lib/module/theme/tokens/MODULE.md +36 -28
- package/lib/module/theme/tokens/THEME-CONTRACT.md +187 -0
- package/lib/module/theme/tokens/assertPalette.js +29 -0
- package/lib/module/theme/tokens/brands/emerald/palette.light.js +12 -9
- package/lib/module/theme/tokens/brands/lavender/palette.light.js +7 -6
- package/lib/module/theme/tokens/brands/meadow/palette.light.js +9 -8
- package/lib/module/theme/tokens/brands/radiant/palette.light.js +10 -9
- package/lib/module/theme/tokens/brands/rosewood/palette.light.js +10 -9
- package/lib/module/theme/tokens/brands/skyline/palette.light.js +9 -8
- package/lib/module/theme/tokens/brands/slate/palette.light.js +11 -13
- package/lib/module/theme/tokens/brands/storefront/palette.light.js +7 -6
- package/lib/module/theme/tokens/brands/zinc/palette.dark.js +3 -2
- package/lib/module/theme/tokens/brands/zinc/palette.light.js +3 -2
- package/lib/module/theme/tokens/builders/accentText.js +10 -1
- package/lib/module/theme/tokens/builders/buildBrandScale.js +42 -0
- package/lib/module/theme/tokens/builders/buildDarkPalette.js +3 -2
- package/lib/module/theme/tokens/builders/finalizePalette.js +34 -0
- package/lib/module/theme/tokens/builders/gradientInk.js +23 -0
- package/lib/module/theme/tokens/builders/liftToContrast.js +44 -0
- package/lib/module/theme/tokens/builders/paletteFromAccent.js +30 -0
- package/lib/module/theme/tokens/builders/placeholderInk.js +22 -0
- package/lib/module/theme/tokens/builders/semanticText.js +14 -0
- package/lib/module/theme/tokens/builders/skeletonShimmer.js +22 -0
- package/lib/module/theme/tokens/builders/surfaceRungs.js +44 -0
- package/lib/module/theme/tokens/index.js +8 -0
- package/lib/module/theme/tokens/primitives/controlSizes.js +16 -0
- package/lib/module/theme/tokens/primitives/index.js +1 -0
- package/lib/module/theme/tokens/roles/index.js +7 -0
- package/lib/typescript/core/a11y/touchTarget.d.ts +4 -0
- package/lib/typescript/core/blur/blur.d.ts +14 -0
- package/lib/typescript/core/blur/index.d.ts +3 -0
- package/lib/typescript/core/gradient/AccentGradientFill.d.ts +7 -0
- package/lib/typescript/core/gradient/ShimmerGradientFill.d.ts +8 -0
- package/lib/typescript/core/gradient/darkenHex.d.ts +2 -0
- package/lib/typescript/core/gradient/gradientStops.d.ts +10 -0
- package/lib/typescript/core/gradient/index.d.ts +6 -0
- package/lib/typescript/core/gradient/withAlpha.d.ts +2 -0
- package/lib/typescript/core/haptics/context.d.ts +3 -0
- package/lib/typescript/core/haptics/haptics.d.ts +33 -0
- package/lib/typescript/core/haptics/index.d.ts +6 -0
- package/lib/typescript/core/haptics/useHaptics.d.ts +12 -0
- package/lib/typescript/core/icon/icons/trending-up.d.ts +3 -0
- package/lib/typescript/core/icon/names.d.ts +1 -1
- package/lib/typescript/core/list/VirtualList.d.ts +6 -1
- package/lib/typescript/core/media/expoImage.d.ts +15 -6
- package/lib/typescript/core/media/pickers.d.ts +5 -5
- package/lib/typescript/core/motion/animatedComponents.d.ts +4 -0
- package/lib/typescript/core/motion/config.d.ts +2 -1
- package/lib/typescript/core/motion/index.d.ts +5 -1
- package/lib/typescript/core/motion/motionAnimation.d.ts +12 -0
- package/lib/typescript/core/motion/presets.d.ts +5 -36
- package/lib/typescript/core/motion/reanimatedEasing.d.ts +4 -0
- package/lib/typescript/core/motion/useAnimatedValue.d.ts +2 -10
- package/lib/typescript/core/motion/useMotion.d.ts +4 -13
- package/lib/typescript/core/motion/usePressState.d.ts +20 -0
- package/lib/typescript/core/overlay/ModalPortalContext.d.ts +2 -0
- package/lib/typescript/core/overlay/index.d.ts +3 -0
- package/lib/typescript/core/overlay/renderWebPortal.d.ts +3 -0
- package/lib/typescript/core/overlay/renderWebPortal.web.d.ts +3 -0
- package/lib/typescript/core/screen-scroll/ScreenScrollContext.d.ts +8 -0
- package/lib/typescript/core/screen-scroll/index.d.ts +3 -0
- package/lib/typescript/core/slot/index.d.ts +2 -0
- package/lib/typescript/core/slot/nodeSlot.d.ts +5 -0
- package/lib/typescript/core/style/focusRing.d.ts +10 -0
- package/lib/typescript/core/style/index.d.ts +2 -1
- package/lib/typescript/core/style/radius.d.ts +2 -0
- package/lib/typescript/index.d.ts +52 -12
- package/lib/typescript/modules/accordion/Accordion.d.ts +2 -37
- package/lib/typescript/modules/accordion/Accordion.variants.d.ts +4 -5
- package/lib/typescript/modules/accordion/AccordionProps.d.ts +49 -0
- package/lib/typescript/modules/accordion/index.d.ts +1 -1
- package/lib/typescript/modules/alert-dialog/AlertDialog.d.ts +2 -15
- package/lib/typescript/modules/alert-dialog/AlertDialog.variants.d.ts +1 -0
- package/lib/typescript/modules/alert-dialog/AlertDialogProps.d.ts +20 -0
- package/lib/typescript/modules/alert-dialog/index.d.ts +1 -1
- package/lib/typescript/modules/app-bar/AppBar.d.ts +1 -20
- package/lib/typescript/modules/app-bar/AppBar.variants.d.ts +4 -0
- package/lib/typescript/modules/app-bar/AppBarProps.d.ts +25 -0
- package/lib/typescript/modules/app-bar/index.d.ts +1 -1
- package/lib/typescript/modules/app-switcher/AppSwitcher.d.ts +3 -0
- package/lib/typescript/modules/app-switcher/AppSwitcherProps.d.ts +17 -0
- package/lib/typescript/modules/app-switcher/index.d.ts +3 -0
- package/lib/typescript/modules/appearance-settings/AppearanceSettings.d.ts +3 -0
- package/lib/typescript/modules/appearance-settings/AppearanceSettingsProps.d.ts +15 -0
- package/lib/typescript/modules/appearance-settings/index.d.ts +3 -0
- package/lib/typescript/modules/avatar/Avatar.d.ts +2 -33
- package/lib/typescript/modules/avatar/Avatar.variants.d.ts +3 -1
- package/lib/typescript/modules/avatar/AvatarProps.d.ts +23 -0
- package/lib/typescript/modules/avatar/index.d.ts +1 -1
- package/lib/typescript/modules/avatar-group/AvatarGroup.d.ts +5 -20
- package/lib/typescript/modules/avatar-group/AvatarGroup.variants.d.ts +19 -0
- package/lib/typescript/modules/avatar-group/AvatarGroupProps.d.ts +27 -0
- package/lib/typescript/modules/avatar-group/index.d.ts +1 -1
- package/lib/typescript/modules/backdrop/Backdrop.d.ts +3 -0
- package/lib/typescript/modules/backdrop/BackdropProps.d.ts +11 -0
- package/lib/typescript/modules/backdrop/index.d.ts +3 -0
- package/lib/typescript/modules/badge/Badge.d.ts +2 -14
- package/lib/typescript/modules/badge/BadgeProps.d.ts +17 -0
- package/lib/typescript/modules/badge/index.d.ts +1 -1
- package/lib/typescript/modules/banner/Banner.d.ts +1 -20
- package/lib/typescript/modules/banner/Banner.variants.d.ts +2 -0
- package/lib/typescript/modules/banner/BannerProps.d.ts +29 -0
- package/lib/typescript/modules/banner/index.d.ts +2 -1
- package/lib/typescript/modules/bottom-nav/BottomNav.d.ts +1 -34
- package/lib/typescript/modules/bottom-nav/BottomNav.variants.d.ts +3 -4
- package/lib/typescript/modules/bottom-nav/BottomNavProps.d.ts +29 -0
- package/lib/typescript/modules/bottom-nav/index.d.ts +2 -1
- package/lib/typescript/modules/bottom-sheet/BottomSheet.d.ts +1 -13
- package/lib/typescript/modules/bottom-sheet/BottomSheet.variants.d.ts +3 -1
- package/lib/typescript/modules/bottom-sheet/BottomSheetProps.d.ts +17 -0
- package/lib/typescript/modules/bottom-sheet/index.d.ts +1 -1
- package/lib/typescript/modules/breadcrumbs/Breadcrumbs.d.ts +3 -0
- package/lib/typescript/modules/breadcrumbs/Breadcrumbs.variants.d.ts +6 -0
- package/lib/typescript/modules/breadcrumbs/BreadcrumbsProps.d.ts +18 -0
- package/lib/typescript/modules/breadcrumbs/index.d.ts +3 -0
- package/lib/typescript/modules/button/Button.d.ts +1 -60
- package/lib/typescript/modules/button/Button.variants.d.ts +11 -15
- package/lib/typescript/modules/button/ButtonProps.d.ts +47 -0
- package/lib/typescript/modules/button/index.d.ts +1 -1
- package/lib/typescript/modules/button-group/ButtonGroup.d.ts +2 -36
- package/lib/typescript/modules/button-group/ButtonGroup.variants.d.ts +24 -59
- package/lib/typescript/modules/button-group/ButtonGroupProps.d.ts +21 -0
- package/lib/typescript/modules/button-group/index.d.ts +1 -1
- package/lib/typescript/modules/card/Card.d.ts +4 -15
- package/lib/typescript/modules/card/CardProps.d.ts +27 -0
- package/lib/typescript/modules/card/index.d.ts +1 -1
- package/lib/typescript/modules/charts/BarChart.d.ts +1 -24
- package/lib/typescript/modules/charts/BarChartProps.d.ts +36 -0
- package/lib/typescript/modules/charts/BarList.d.ts +1 -16
- package/lib/typescript/modules/charts/BarListProps.d.ts +22 -0
- package/lib/typescript/modules/charts/ChartLegend.d.ts +2 -14
- package/lib/typescript/modules/charts/ChartLegendProps.d.ts +19 -0
- package/lib/typescript/modules/charts/Charts.variants.d.ts +31 -1
- package/lib/typescript/modules/charts/DonutChart.d.ts +1 -19
- package/lib/typescript/modules/charts/DonutChartProps.d.ts +27 -0
- package/lib/typescript/modules/charts/LineChart.d.ts +1 -28
- package/lib/typescript/modules/charts/LineChartProps.d.ts +40 -0
- package/lib/typescript/modules/charts/PieChart.d.ts +1 -16
- package/lib/typescript/modules/charts/PieChartProps.d.ts +24 -0
- package/lib/typescript/modules/charts/Sparkline.d.ts +1 -11
- package/lib/typescript/modules/charts/SparklineProps.d.ts +17 -0
- package/lib/typescript/modules/charts/index.d.ts +6 -6
- package/lib/typescript/modules/checkbox/Checkbox.d.ts +1 -33
- package/lib/typescript/modules/checkbox/Checkbox.variants.d.ts +2 -1
- package/lib/typescript/modules/checkbox/CheckboxProps.d.ts +27 -0
- package/lib/typescript/modules/checkbox/index.d.ts +1 -1
- package/lib/typescript/modules/chip/Chip.d.ts +1 -28
- package/lib/typescript/modules/chip/Chip.variants.d.ts +8 -3
- package/lib/typescript/modules/chip/ChipGroup.d.ts +1 -14
- package/lib/typescript/modules/chip/ChipGroupProps.d.ts +16 -0
- package/lib/typescript/modules/chip/ChipProps.d.ts +27 -0
- package/lib/typescript/modules/chip/index.d.ts +3 -3
- package/lib/typescript/modules/combobox/Combobox.d.ts +2 -45
- package/lib/typescript/modules/combobox/Combobox.variants.d.ts +20 -5
- package/lib/typescript/modules/combobox/ComboboxProps.d.ts +40 -0
- package/lib/typescript/modules/combobox/index.d.ts +1 -1
- package/lib/typescript/modules/composer/Composer.d.ts +1 -18
- package/lib/typescript/modules/composer/ComposerProps.d.ts +20 -0
- package/lib/typescript/modules/composer/index.d.ts +1 -1
- package/lib/typescript/modules/copy-button/CopyButton.d.ts +1 -15
- package/lib/typescript/modules/copy-button/CopyButton.variants.d.ts +2 -1
- package/lib/typescript/modules/copy-button/CopyButtonProps.d.ts +18 -0
- package/lib/typescript/modules/copy-button/index.d.ts +1 -1
- package/lib/typescript/modules/data-table/DataTable.d.ts +2 -31
- package/lib/typescript/modules/data-table/DataTable.variants.d.ts +3 -2
- package/lib/typescript/modules/data-table/DataTableProps.d.ts +43 -0
- package/lib/typescript/modules/data-table/index.d.ts +1 -1
- package/lib/typescript/modules/date-picker/Calendar.d.ts +1 -23
- package/lib/typescript/modules/date-picker/CalendarProps.d.ts +31 -0
- package/lib/typescript/modules/date-picker/DatePicker.d.ts +1 -27
- package/lib/typescript/modules/date-picker/DatePicker.variants.d.ts +17 -4
- package/lib/typescript/modules/date-picker/DatePickerProps.d.ts +33 -0
- package/lib/typescript/modules/date-picker/DateRangePicker.d.ts +1 -23
- package/lib/typescript/modules/date-picker/DateRangePickerProps.d.ts +27 -0
- package/lib/typescript/modules/date-picker/PickerField.d.ts +1 -17
- package/lib/typescript/modules/date-picker/PickerFieldProps.d.ts +19 -0
- package/lib/typescript/modules/date-picker/PickerShell.d.ts +1 -12
- package/lib/typescript/modules/date-picker/PickerShellProps.d.ts +16 -0
- package/lib/typescript/modules/date-picker/TimePicker.d.ts +2 -16
- package/lib/typescript/modules/date-picker/TimePickerProps.d.ts +14 -0
- package/lib/typescript/modules/date-picker/index.d.ts +4 -4
- package/lib/typescript/modules/description-list/DescriptionList.d.ts +8 -0
- package/lib/typescript/modules/description-list/DescriptionList.variants.d.ts +29 -0
- package/lib/typescript/modules/description-list/DescriptionListProps.d.ts +23 -0
- package/lib/typescript/modules/description-list/index.d.ts +4 -0
- package/lib/typescript/modules/divider/Divider.d.ts +1 -8
- package/lib/typescript/modules/divider/Divider.variants.d.ts +4 -4
- package/lib/typescript/modules/divider/DividerProps.d.ts +11 -0
- package/lib/typescript/modules/divider/index.d.ts +1 -1
- package/lib/typescript/modules/document-viewer/DocumentViewer.d.ts +3 -0
- package/lib/typescript/modules/document-viewer/DocumentViewerProps.d.ts +13 -0
- package/lib/typescript/modules/document-viewer/index.d.ts +3 -0
- package/lib/typescript/modules/drawer/Drawer.d.ts +2 -7
- package/lib/typescript/modules/drawer/DrawerProps.d.ts +9 -0
- package/lib/typescript/modules/drawer/index.d.ts +1 -1
- package/lib/typescript/modules/empty-state/EmptyState.d.ts +1 -15
- package/lib/typescript/modules/empty-state/EmptyState.variants.d.ts +1 -0
- package/lib/typescript/modules/empty-state/EmptyStateProps.d.ts +24 -0
- package/lib/typescript/modules/empty-state/index.d.ts +1 -1
- package/lib/typescript/modules/fab/Fab.d.ts +1 -51
- package/lib/typescript/modules/fab/Fab.variants.d.ts +5 -2
- package/lib/typescript/modules/fab/FabGroup.d.ts +1 -34
- package/lib/typescript/modules/fab/FabGroupProps.d.ts +34 -0
- package/lib/typescript/modules/fab/FabProps.d.ts +50 -0
- package/lib/typescript/modules/fab/index.d.ts +2 -2
- package/lib/typescript/modules/field-select-modal/FieldSelectModal.d.ts +3 -0
- package/lib/typescript/modules/field-select-modal/FieldSelectModalProps.d.ts +20 -0
- package/lib/typescript/modules/field-select-modal/index.d.ts +3 -0
- package/lib/typescript/modules/file-grid/FileGrid.d.ts +1 -18
- package/lib/typescript/modules/file-grid/FileGridProps.d.ts +23 -0
- package/lib/typescript/modules/file-grid/index.d.ts +1 -1
- package/lib/typescript/modules/file-upload/FileUpload.d.ts +1 -27
- package/lib/typescript/modules/file-upload/FileUploadProps.d.ts +27 -0
- package/lib/typescript/modules/file-upload/index.d.ts +1 -1
- package/lib/typescript/modules/filter-bar/FilterBar.d.ts +3 -0
- package/lib/typescript/modules/filter-bar/FilterBarProps.d.ts +17 -0
- package/lib/typescript/modules/filter-bar/index.d.ts +3 -0
- package/lib/typescript/modules/filter-sheet/FilterChip.d.ts +1 -9
- package/lib/typescript/modules/filter-sheet/FilterChipProps.d.ts +11 -0
- package/lib/typescript/modules/filter-sheet/FilterSheet.d.ts +1 -32
- package/lib/typescript/modules/filter-sheet/FilterSheet.variants.d.ts +2 -1
- package/lib/typescript/modules/filter-sheet/FilterSheetBody.d.ts +1 -1
- package/lib/typescript/modules/filter-sheet/FilterSheetProps.d.ts +36 -0
- package/lib/typescript/modules/filter-sheet/filterSheet.helpers.d.ts +1 -1
- package/lib/typescript/modules/filter-sheet/index.d.ts +2 -2
- package/lib/typescript/modules/folder-row/FolderRow.d.ts +1 -19
- package/lib/typescript/modules/folder-row/FolderRowProps.d.ts +17 -0
- package/lib/typescript/modules/folder-row/index.d.ts +1 -1
- package/lib/typescript/modules/form-field/FormField.d.ts +2 -17
- package/lib/typescript/modules/form-field/FormFieldProps.d.ts +23 -0
- package/lib/typescript/modules/form-field/index.d.ts +1 -1
- package/lib/typescript/modules/gantt/Gantt.d.ts +2 -9
- package/lib/typescript/modules/gantt/Gantt.variants.d.ts +29 -2
- package/lib/typescript/modules/gantt/GanttProps.d.ts +13 -0
- package/lib/typescript/modules/gantt/index.d.ts +1 -1
- package/lib/typescript/modules/image-viewer/ImageViewer.d.ts +2 -15
- package/lib/typescript/modules/image-viewer/ImageViewerProps.d.ts +16 -0
- package/lib/typescript/modules/image-viewer/index.d.ts +2 -1
- package/lib/typescript/modules/input/Input.d.ts +2 -30
- package/lib/typescript/modules/input/Input.variants.d.ts +8 -8
- package/lib/typescript/modules/input/InputProps.d.ts +43 -0
- package/lib/typescript/modules/input/index.d.ts +1 -1
- package/lib/typescript/modules/key-value/KeyValue.d.ts +3 -0
- package/lib/typescript/modules/key-value/KeyValueProps.d.ts +11 -0
- package/lib/typescript/modules/key-value/index.d.ts +3 -0
- package/lib/typescript/modules/limit-reached-modal/LimitReachedModal.d.ts +1 -17
- package/lib/typescript/modules/limit-reached-modal/LimitReachedModalProps.d.ts +24 -0
- package/lib/typescript/modules/limit-reached-modal/index.d.ts +1 -1
- package/lib/typescript/modules/list-item/ListItem.d.ts +3 -17
- package/lib/typescript/modules/list-item/ListItem.variants.d.ts +137 -1
- package/lib/typescript/modules/list-item/ListItemProps.d.ts +22 -0
- package/lib/typescript/modules/list-item/index.d.ts +1 -1
- package/lib/typescript/modules/list-screen/ListScreen.d.ts +5 -0
- package/lib/typescript/modules/list-screen/ListScreenProps.d.ts +17 -0
- package/lib/typescript/modules/list-screen/index.d.ts +3 -0
- package/lib/typescript/modules/markdown/Markdown.d.ts +8 -8
- package/lib/typescript/modules/markdown/MarkdownProps.d.ts +12 -0
- package/lib/typescript/modules/markdown/index.d.ts +1 -1
- package/lib/typescript/modules/menu/Menu.d.ts +2 -19
- package/lib/typescript/modules/menu/Menu.variants.d.ts +2 -1
- package/lib/typescript/modules/menu/MenuProps.d.ts +26 -0
- package/lib/typescript/modules/menu/index.d.ts +1 -1
- package/lib/typescript/modules/message-bubble/MessageBubble.d.ts +3 -11
- package/lib/typescript/modules/message-bubble/MessageBubble.variants.d.ts +1 -2
- package/lib/typescript/modules/message-bubble/MessageBubbleProps.d.ts +12 -0
- package/lib/typescript/modules/message-bubble/index.d.ts +1 -1
- package/lib/typescript/modules/modal/Modal.d.ts +2 -10
- package/lib/typescript/modules/modal/ModalPortalContext.d.ts +1 -1
- package/lib/typescript/modules/modal/ModalPortalProvider.d.ts +2 -12
- package/lib/typescript/modules/modal/ModalPortalProviderProps.d.ts +8 -0
- package/lib/typescript/modules/modal/ModalProps.d.ts +22 -0
- package/lib/typescript/modules/modal/index.d.ts +2 -2
- package/lib/typescript/modules/modal/renderWebPortal.d.ts +1 -14
- package/lib/typescript/modules/modal/renderWebPortal.web.d.ts +1 -18
- package/lib/typescript/modules/more-items/MoreItems.d.ts +2 -10
- package/lib/typescript/modules/more-items/MoreItems.variants.d.ts +3 -1
- package/lib/typescript/modules/more-items/MoreItemsProps.d.ts +14 -0
- package/lib/typescript/modules/more-items/index.d.ts +1 -1
- package/lib/typescript/modules/multi-select/MultiSelect.d.ts +1 -19
- package/lib/typescript/modules/multi-select/MultiSelect.variants.d.ts +2 -1
- package/lib/typescript/modules/multi-select/MultiSelectProps.d.ts +29 -0
- package/lib/typescript/modules/multi-select/index.d.ts +1 -1
- package/lib/typescript/modules/notification-bell/NotificationBell.d.ts +3 -0
- package/lib/typescript/modules/notification-bell/NotificationBellProps.d.ts +10 -0
- package/lib/typescript/modules/notification-bell/index.d.ts +3 -0
- package/lib/typescript/modules/number-input/NumberInput.d.ts +1 -26
- package/lib/typescript/modules/number-input/NumberInput.variants.d.ts +9 -8
- package/lib/typescript/modules/number-input/NumberInputProps.d.ts +23 -0
- package/lib/typescript/modules/number-input/index.d.ts +1 -1
- package/lib/typescript/modules/org-switcher/OrgSwitcher.d.ts +1 -24
- package/lib/typescript/modules/org-switcher/OrgSwitcher.variants.d.ts +2 -1
- package/lib/typescript/modules/org-switcher/OrgSwitcherProps.d.ts +29 -0
- package/lib/typescript/modules/org-switcher/index.d.ts +1 -1
- package/lib/typescript/modules/pagination/Pagination.d.ts +1 -26
- package/lib/typescript/modules/pagination/Pagination.variants.d.ts +2 -1
- package/lib/typescript/modules/pagination/PaginationControls.d.ts +1 -4
- package/lib/typescript/modules/pagination/PaginationProps.d.ts +28 -0
- package/lib/typescript/modules/pagination/index.d.ts +1 -1
- package/lib/typescript/modules/person-chip/PersonChip.d.ts +3 -0
- package/lib/typescript/modules/person-chip/PersonChipProps.d.ts +17 -0
- package/lib/typescript/modules/person-chip/index.d.ts +3 -0
- package/lib/typescript/modules/pin-input/PinInput.d.ts +1 -32
- package/lib/typescript/modules/pin-input/PinInput.variants.d.ts +2 -2
- package/lib/typescript/modules/pin-input/PinInputProps.d.ts +26 -0
- package/lib/typescript/modules/pin-input/index.d.ts +1 -1
- package/lib/typescript/modules/plan-badge/PlanBadge.d.ts +3 -0
- package/lib/typescript/modules/plan-badge/PlanBadgeProps.d.ts +10 -0
- package/lib/typescript/modules/plan-badge/index.d.ts +3 -0
- package/lib/typescript/modules/plan-pill/PlanPill.d.ts +3 -0
- package/lib/typescript/modules/plan-pill/PlanPillProps.d.ts +10 -0
- package/lib/typescript/modules/plan-pill/index.d.ts +3 -0
- package/lib/typescript/modules/progress-bar/ProgressBar.d.ts +1 -13
- package/lib/typescript/modules/progress-bar/ProgressBarProps.d.ts +16 -0
- package/lib/typescript/modules/progress-bar/index.d.ts +1 -1
- package/lib/typescript/modules/radio-group/RadioGroup.d.ts +2 -22
- package/lib/typescript/modules/radio-group/RadioGroup.variants.d.ts +2 -2
- package/lib/typescript/modules/radio-group/RadioGroupProps.d.ts +21 -0
- package/lib/typescript/modules/radio-group/index.d.ts +1 -1
- package/lib/typescript/modules/reorder/Reorder.d.ts +2 -14
- package/lib/typescript/modules/reorder/Reorder.variants.d.ts +2 -2
- package/lib/typescript/modules/reorder/ReorderProps.d.ts +19 -0
- package/lib/typescript/modules/reorder/index.d.ts +1 -1
- package/lib/typescript/modules/rich-text/RichText.d.ts +2 -10
- package/lib/typescript/modules/rich-text/RichTextProps.d.ts +15 -0
- package/lib/typescript/modules/rich-text/index.d.ts +1 -1
- package/lib/typescript/modules/rich-text-editor/RichTextEditor.d.ts +1 -45
- package/lib/typescript/modules/rich-text-editor/RichTextEditorProps.d.ts +40 -0
- package/lib/typescript/modules/rich-text-editor/index.d.ts +1 -1
- package/lib/typescript/modules/save-bar/SaveBar.d.ts +3 -0
- package/lib/typescript/modules/save-bar/SaveBarProps.d.ts +18 -0
- package/lib/typescript/modules/save-bar/index.d.ts +3 -0
- package/lib/typescript/modules/screen/Screen.d.ts +2 -31
- package/lib/typescript/modules/screen/Screen.variants.d.ts +4 -0
- package/lib/typescript/modules/screen/ScreenProps.d.ts +35 -0
- package/lib/typescript/modules/screen/index.d.ts +1 -1
- package/lib/typescript/modules/search-bar/SearchBar.d.ts +2 -28
- package/lib/typescript/modules/search-bar/SearchBar.variants.d.ts +8 -9
- package/lib/typescript/modules/search-bar/SearchBarProps.d.ts +30 -0
- package/lib/typescript/modules/search-bar/index.d.ts +1 -1
- package/lib/typescript/modules/section/Section.d.ts +1 -8
- package/lib/typescript/modules/section/Section.variants.d.ts +0 -3
- package/lib/typescript/modules/section/SectionProps.d.ts +11 -0
- package/lib/typescript/modules/section/index.d.ts +1 -1
- package/lib/typescript/modules/section-list/SectionList.d.ts +1 -19
- package/lib/typescript/modules/section-list/SectionListProps.d.ts +24 -0
- package/lib/typescript/modules/section-list/index.d.ts +1 -1
- package/lib/typescript/modules/segmented-control/SegmentedControl.d.ts +2 -41
- package/lib/typescript/modules/segmented-control/SegmentedControl.variants.d.ts +5 -44
- package/lib/typescript/modules/segmented-control/SegmentedControlProps.d.ts +29 -0
- package/lib/typescript/modules/segmented-control/index.d.ts +1 -1
- package/lib/typescript/modules/select/Select.d.ts +5 -13
- package/lib/typescript/modules/select/Select.variants.d.ts +24 -10
- package/lib/typescript/modules/select/SelectProps.d.ts +25 -0
- package/lib/typescript/modules/select/index.d.ts +3 -2
- package/lib/typescript/modules/setting-row/SettingRow.d.ts +3 -0
- package/lib/typescript/modules/setting-row/SettingRowProps.d.ts +14 -0
- package/lib/typescript/modules/setting-row/index.d.ts +3 -0
- package/lib/typescript/modules/settings-section/SettingsSection.d.ts +3 -0
- package/lib/typescript/modules/settings-section/SettingsSectionProps.d.ts +11 -0
- package/lib/typescript/modules/settings-section/index.d.ts +3 -0
- package/lib/typescript/modules/skeleton/Skeleton.d.ts +3 -28
- package/lib/typescript/modules/skeleton/Skeleton.variants.d.ts +8 -66
- package/lib/typescript/modules/skeleton/SkeletonProps.d.ts +18 -0
- package/lib/typescript/modules/skeleton/index.d.ts +1 -1
- package/lib/typescript/modules/slider/Slider.d.ts +1 -24
- package/lib/typescript/modules/slider/Slider.variants.d.ts +2 -1
- package/lib/typescript/modules/slider/SliderProps.d.ts +27 -0
- package/lib/typescript/modules/slider/index.d.ts +1 -1
- package/lib/typescript/modules/spinner/Spinner.d.ts +1 -11
- package/lib/typescript/modules/spinner/SpinnerProps.d.ts +15 -0
- package/lib/typescript/modules/spinner/index.d.ts +1 -1
- package/lib/typescript/modules/stage-progress/StageProgress.d.ts +1 -12
- package/lib/typescript/modules/stage-progress/StageProgress.variants.d.ts +31 -10
- package/lib/typescript/modules/stage-progress/StageProgressProps.d.ts +22 -0
- package/lib/typescript/modules/stage-progress/index.d.ts +1 -1
- package/lib/typescript/modules/stat-grid/StatGrid.d.ts +3 -0
- package/lib/typescript/modules/stat-grid/StatGridProps.d.ts +15 -0
- package/lib/typescript/modules/stat-grid/index.d.ts +3 -0
- package/lib/typescript/modules/stat-tile/StatTile.d.ts +1 -14
- package/lib/typescript/modules/stat-tile/StatTile.variants.d.ts +3 -0
- package/lib/typescript/modules/stat-tile/StatTileProps.d.ts +25 -0
- package/lib/typescript/modules/stat-tile/index.d.ts +1 -1
- package/lib/typescript/modules/state-block/StateBlock.d.ts +1 -28
- package/lib/typescript/modules/state-block/StateBlock.variants.d.ts +1 -0
- package/lib/typescript/modules/state-block/StateBlockProps.d.ts +36 -0
- package/lib/typescript/modules/state-block/index.d.ts +1 -1
- package/lib/typescript/modules/stepper/Stepper.d.ts +3 -11
- package/lib/typescript/modules/stepper/Stepper.variants.d.ts +2 -0
- package/lib/typescript/modules/stepper/StepperProps.d.ts +12 -0
- package/lib/typescript/modules/stepper/index.d.ts +2 -1
- package/lib/typescript/modules/surface/Surface.d.ts +6 -0
- package/lib/typescript/modules/surface/Surface.variants.d.ts +15 -0
- package/lib/typescript/modules/surface/SurfaceProps.d.ts +17 -0
- package/lib/typescript/modules/surface/index.d.ts +4 -0
- package/lib/typescript/modules/swipeable-row/SwipeableRow.d.ts +1 -19
- package/lib/typescript/modules/swipeable-row/SwipeableRowProps.d.ts +22 -0
- package/lib/typescript/modules/swipeable-row/index.d.ts +1 -1
- package/lib/typescript/modules/switch/Switch.d.ts +1 -14
- package/lib/typescript/modules/switch/Switch.variants.d.ts +2 -2
- package/lib/typescript/modules/switch/SwitchProps.d.ts +20 -0
- package/lib/typescript/modules/switch/index.d.ts +1 -1
- package/lib/typescript/modules/tabs/Tabs.d.ts +1 -17
- package/lib/typescript/modules/tabs/Tabs.variants.d.ts +2 -3
- package/lib/typescript/modules/tabs/TabsProps.d.ts +29 -0
- package/lib/typescript/modules/tabs/index.d.ts +1 -1
- package/lib/typescript/modules/text/Text.d.ts +1 -20
- package/lib/typescript/modules/text/Text.variants.d.ts +14 -11
- package/lib/typescript/modules/text/TextProps.d.ts +35 -0
- package/lib/typescript/modules/text/index.d.ts +1 -1
- package/lib/typescript/modules/textarea/Textarea.d.ts +1 -19
- package/lib/typescript/modules/textarea/Textarea.variants.d.ts +2 -1
- package/lib/typescript/modules/textarea/TextareaProps.d.ts +23 -0
- package/lib/typescript/modules/textarea/index.d.ts +1 -1
- package/lib/typescript/modules/timeline/Timeline.d.ts +1 -16
- package/lib/typescript/modules/timeline/Timeline.variants.d.ts +2 -0
- package/lib/typescript/modules/timeline/TimelineProps.d.ts +37 -0
- package/lib/typescript/modules/timeline/index.d.ts +1 -1
- package/lib/typescript/modules/toast/Toast.variants.d.ts +4 -3
- package/lib/typescript/modules/tooltip/Tooltip.d.ts +1 -25
- package/lib/typescript/modules/tooltip/Tooltip.variants.d.ts +7 -0
- package/lib/typescript/modules/tooltip/TooltipProps.d.ts +27 -0
- package/lib/typescript/modules/tooltip/index.d.ts +1 -1
- package/lib/typescript/modules/typing-indicator/TypingIndicator.d.ts +5 -14
- package/lib/typescript/modules/typing-indicator/TypingIndicatorProps.d.ts +11 -0
- package/lib/typescript/modules/typing-indicator/index.d.ts +1 -1
- package/lib/typescript/modules/upgrade-button/UpgradeButton.d.ts +3 -0
- package/lib/typescript/modules/upgrade-button/UpgradeButtonProps.d.ts +11 -0
- package/lib/typescript/modules/upgrade-button/index.d.ts +3 -0
- package/lib/typescript/test/motionJest.d.ts +12 -0
- package/lib/typescript/theme/index.d.ts +1 -1
- package/lib/typescript/theme/platform/elevation.native.d.ts +1 -31
- package/lib/typescript/theme/platform/floatingSurface.native.d.ts +10 -0
- package/lib/typescript/theme/platform/highlight.native.d.ts +17 -0
- package/lib/typescript/theme/platform/index.d.ts +9 -0
- package/lib/typescript/theme/platform/motion.native.d.ts +33 -13
- package/lib/typescript/theme/platform/stateLayer.native.d.ts +11 -0
- package/lib/typescript/theme/platform/surfaces.native.d.ts +8 -0
- package/lib/typescript/theme/provider/PixelizeProvider.d.ts +1 -1
- package/lib/typescript/theme/provider/types.d.ts +8 -0
- package/lib/typescript/theme/tokens/assertPalette.d.ts +10 -0
- package/lib/typescript/theme/tokens/brands/emerald/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/lavender/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/meadow/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/radiant/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/rosewood/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/skyline/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/slate/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/storefront/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/brands/zinc/palette.light.d.ts +4 -3
- package/lib/typescript/theme/tokens/builders/accentText.d.ts +3 -0
- package/lib/typescript/theme/tokens/builders/buildBrandScale.d.ts +4 -0
- package/lib/typescript/theme/tokens/builders/finalizePalette.d.ts +4 -0
- package/lib/typescript/theme/tokens/builders/gradientInk.d.ts +9 -0
- package/lib/typescript/theme/tokens/builders/liftToContrast.d.ts +9 -0
- package/lib/typescript/theme/tokens/builders/paletteFromAccent.d.ts +3 -0
- package/lib/typescript/theme/tokens/builders/placeholderInk.d.ts +13 -0
- package/lib/typescript/theme/tokens/builders/semanticText.d.ts +4 -0
- package/lib/typescript/theme/tokens/builders/skeletonShimmer.d.ts +9 -0
- package/lib/typescript/theme/tokens/builders/surfaceRungs.d.ts +12 -0
- package/lib/typescript/theme/tokens/index.d.ts +8 -0
- package/lib/typescript/theme/tokens/primitives/controlSizes.d.ts +6 -0
- package/lib/typescript/theme/tokens/primitives/index.d.ts +2 -0
- package/lib/typescript/theme/tokens/roles/index.d.ts +3 -0
- package/lib/typescript/theme/tokens/types.d.ts +10 -9
- package/package.json +114 -5
- package/registry.json +114 -14
- package/lib/module/core/style/useThemedStyles.js +0 -8
- package/lib/module/test/mocks/flashList.js +0 -5
- package/lib/module/test/perfHelpers.js +0 -18
- package/lib/typescript/core/style/useThemedStyles.d.ts +0 -5
- package/lib/typescript/test/mocks/flashList.d.ts +0 -3
|
@@ -2,8 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
`SegmentedControl` switches between 2–5 mutually exclusive options (filters, view modes, date
|
|
4
4
|
ranges) inside one rounded track. The active segment is marked by a pill that slides to its
|
|
5
|
-
measured position — the same `onLayout` +
|
|
6
|
-
uses — but unlike `Tabs`/`ButtonGroup`, the pill is a **neutral raised surface**, not an
|
|
5
|
+
measured position — the same `onLayout` + shared-value mechanism `Tabs`' sliding indicator uses — but unlike `Tabs`/`ButtonGroup`, the pill is a **neutral raised surface**, not an
|
|
7
6
|
accent-coloured fill: elevation, not colour, is the selection cue here.
|
|
8
7
|
|
|
9
8
|
## Files
|
|
@@ -14,7 +13,7 @@ accent-coloured fill: elevation, not colour, is the selection cue here.
|
|
|
14
13
|
| `SegmentedControl.variants.ts` | Pure resolvers (`resolveSegmentedControlColors`, `resolveSegmentedControlSegmentAccessibility`, `resolveSegmentedControlSegmentHitSlop`) + the themed structural resolvers (`segmentedControlTrackStructure`, `segmentedControlPillStructure`, `segmentedControlSegmentStructure`). No React, no lucide. |
|
|
15
14
|
| `index.ts` | Public surface: `SegmentedControl`, `SegmentedControlProps`, `SegmentedControlOption`, `SegmentedControlSize`, `IconName` (re-exported from `core/icon`). |
|
|
16
15
|
| `__tests__/SegmentedControl.test.ts` | Pure: WCAG contrast (all brands × modes) + touch target + a11y contract. |
|
|
17
|
-
| `__tests__/SegmentedControl.render.test.tsx` | Render:
|
|
16
|
+
| `__tests__/SegmentedControl.render.test.tsx` | Render: track/segment roles, selection state, per-option and whole-group `disabled`, pill animation respects reduced motion. |
|
|
18
17
|
| `__tests__/SegmentedControl.motion.test.tsx` | Motion: reduce-motion snap, the real slide, and the device tier's `durationScale` reaching the pill. |
|
|
19
18
|
|
|
20
19
|
## Props
|
|
@@ -30,9 +29,10 @@ accent-coloured fill: elevation, not colour, is the selection cue here.
|
|
|
30
29
|
| `style` | `LayoutStyle` | — | Layout-only, outermost (the track `View`), applied exactly once, last. |
|
|
31
30
|
| `testID` | `string` | — | Seeds `${testID}-pill`, `${testID}-${option.value}` and, while focused, `${testID}-${option.value}-focus-ring`. |
|
|
32
31
|
|
|
33
|
-
No `tone`/`variant` union — the selected fill is always the neutral raised pill
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
No `tone`/`variant` union — the selected fill is always the neutral raised pill; there is nothing
|
|
33
|
+
for a closed union to resolve, the same reasoning `Tabs`/`RadioGroup` document for their own
|
|
34
|
+
single-purpose shape. Track and pill backgrounds are resolved live from `floatingBackground`, not
|
|
35
|
+
from `resolveSegmentedControlColors` (which only maps the two label colours) — see 1.4.11 below.
|
|
36
36
|
|
|
37
37
|
## Accessibility contract (WCAG)
|
|
38
38
|
|
|
@@ -49,32 +49,33 @@ always `bg.sunken`; there is nothing for a closed union to resolve, the same rea
|
|
|
49
49
|
tap. Rather than tune a per-edge exception, every segment's own rendered `minWidth: 44` carries
|
|
50
50
|
the width floor instead (the only axis this spec requires — `fullWidth` segments are already well
|
|
51
51
|
over 44dp in practice).
|
|
52
|
-
- **1.4.3** — the active label (`fg.default`, read on the pill
|
|
53
|
-
label (`fg.muted`, read on the track
|
|
54
|
-
both modes, including the inactive label against its own
|
|
55
|
-
|
|
56
|
-
- **1.4.11** — deliberately **not** satisfied by colour:
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
independently via `aria-selected`, never by colour
|
|
52
|
+
- **1.4.3** — the active label (`fg.default`, read on the pill — `floatingBackground(theme, 'md')`)
|
|
53
|
+
and the inactive label (`fg.muted`, read on the track — `floatingBackground(theme, 'sm')`) are
|
|
54
|
+
each measured ≥ 4.5:1 for all 9 brands × both modes, including the inactive label against its own
|
|
55
|
+
pressed overlay (`stateLayerScrim` at `STATE_LAYER_OPACITY.pressed`, composited onto the track).
|
|
56
|
+
- **1.4.11** — deliberately **not** satisfied by colour: the pill/track pairing measures ~1.1:1,
|
|
57
|
+
nowhere near 3:1, in dark mode. The pill is one `floatingBackground` level above the track
|
|
58
|
+
(`'md'` vs `'sm'`, the same step `Card`'s `elevated` variant uses), which guarantees it is
|
|
59
|
+
**lighter**, never darker — a real regression once shipped raw `bg.surface` under `theme.elevation.md`,
|
|
60
|
+
which measured pill *darker* than track (1.04–1.12:1 inverted) since that shadow token is
|
|
61
|
+
mode-unaware. Selection reaches assistive tech independently via `aria-selected`, never by colour.
|
|
62
62
|
- **2.4.7** — the focused segment draws a `border.focus` ring
|
|
63
63
|
(`${testID}-${option.value}-focus-ring`), the same treatment `BottomNavTab` uses. The pill is
|
|
64
64
|
**not** it: it marks selection and moves only on change. Drawn *inside* the segment's bounds —
|
|
65
65
|
segments render flush, so a gap-outside ring would spill over its neighbour.
|
|
66
|
-
- **2.3.3** — the pill's
|
|
67
|
-
own `onLayout` measurement
|
|
68
|
-
|
|
69
|
-
|
|
66
|
+
- **2.3.3** — only the pill's `translateX` animates: one Reanimated shared value driven off each
|
|
67
|
+
segment's own `onLayout` measurement (the pill's `width` is set straight from that measurement, not
|
|
68
|
+
tweened). Under reduced motion the value is assigned directly — an instant snap instead of a tween,
|
|
69
|
+
verified in the render and motion tests by asserting `withTiming` is not called.
|
|
70
70
|
|
|
71
71
|
## Motion
|
|
72
72
|
|
|
73
|
-
The slide goes through **`useMotion()`**,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
73
|
+
The slide goes through **`useMotion()`**, never a direct `MOTION_DURATION` import — only
|
|
74
|
+
`motion.timing` applies `MOTION_TIER[tier].durationScale`, so a raw constant would ignore the device
|
|
75
|
+
tier. Reduce-motion is `motion.enabled` — no second `useReducedMotion()` call (`core/motion/MODULE.md`
|
|
76
|
+
rule 6). Segment presses use `usePressState` (scale + state-layer overlay), a bounded
|
|
77
|
+
`android_ripple` (gated off while the segment is disabled), and fire `haptics.selection()` on change.
|
|
78
|
+
The in-flight slide is stopped on effect cleanup and on unmount.
|
|
78
79
|
|
|
79
80
|
## Patterns copied from Tabs / ButtonGroup / Card
|
|
80
81
|
|
|
@@ -90,10 +91,13 @@ rule 6). The in-flight slide is stopped on effect cleanup and on unmount.
|
|
|
90
91
|
|
|
91
92
|
## Design decisions specific to this module
|
|
92
93
|
|
|
93
|
-
- **The pill is neutral
|
|
94
|
+
- **The pill is a neutral raised surface, not accent-coloured.** This is what the spec this module
|
|
94
95
|
was built against calls for, and it is also the only choice that keeps every segment's label the
|
|
95
96
|
same colour whether or not it happens to be selected in a given render — no per-brand accent
|
|
96
97
|
contrast to chase the way `ButtonGroup`'s `accent.solid` fill required a whole edge-colour fix.
|
|
98
|
+
- **Nested radii stay concentric.** Pill, focus ring and segment all use `radii.base` (8) —
|
|
99
|
+
`radii.md` (12) minus the track's `space[1]` inset (4) — never `radii.sm`, which under-rounds
|
|
100
|
+
them by 4dp against the track's own corner.
|
|
97
101
|
- **Horizontal `hitSlop` is zero, full stop** — no per-edge "outer edge gets slop" exception like
|
|
98
102
|
`ButtonGroup`'s. Only the vertical target is spec-mandated here; adding the outer-edge case would
|
|
99
103
|
be unrequested surface area for a control whose segments (especially `fullWidth`) are already
|
|
@@ -1,30 +1,104 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* SegmentedControl — an inline, iOS-style single-choice control for switching between 2–5 mutually
|
|
5
|
-
* exclusive options (filters, view modes, date ranges). A rounded track (`bg.sunken`) holds every
|
|
6
|
-
* segment; the active one is marked by a raised pill (`bg.surface` + `Card`'s own elevation
|
|
7
|
-
* treatment) that slides to the selected segment's measured position — the identical
|
|
8
|
-
* measure-via-`onLayout` + `Animated.Value` mechanism `Tabs`' sliding indicator uses, keyed by
|
|
9
|
-
* `value` so reordering `options` can never apply a stale measurement to the wrong segment.
|
|
10
|
-
*
|
|
11
|
-
* Unlike `ButtonGroup`/`Tabs`, the active state is NOT accent-coloured: the pill is a neutral raised
|
|
12
|
-
* surface, and elevation — not colour — is what marks it, because `bg.surface` vs `bg.sunken` alone
|
|
13
|
-
* measures nowhere near WCAG 1.4.11's 3:1 (see `SegmentedControl.variants.ts`). Selection reaches
|
|
14
|
-
* assistive tech independently via `accessibilityState.selected`.
|
|
15
|
-
*
|
|
16
|
-
* The pill is a SELECTION marker, never a focus one — keyboard/AT focus draws its own inset ring on
|
|
17
|
-
* the focused segment (WCAG 2.4.7), the same treatment `BottomNavTab` uses.
|
|
18
|
-
*/
|
|
3
|
+
/** Inline single-choice control; see `MODULE.md` for the elevation/a11y contract. */
|
|
19
4
|
|
|
20
|
-
import { memo, useCallback, useEffect, useRef, useState } from "react";
|
|
21
|
-
import {
|
|
5
|
+
import { memo, useCallback, useEffect, useMemo, useRef, useState } from "react";
|
|
6
|
+
import { Platform, Pressable, StyleSheet, Text, View } from "react-native";
|
|
7
|
+
import Reanimated, { useAnimatedStyle } from "react-native-reanimated";
|
|
22
8
|
import { useAnimatedValue, useMotion } from "../../core/motion/index.js";
|
|
9
|
+
import { useHaptics } from "../../core/haptics/index.js";
|
|
10
|
+
import { usePressState } from "../../core/motion/usePressState.js";
|
|
23
11
|
import { Icon } from "../../core/icon/index.js";
|
|
12
|
+
import { rippleColor, stateLayerScrim } from "../../theme/platform/stateLayer.native.js";
|
|
24
13
|
import { useTheme } from "../../theme/hooks.js";
|
|
14
|
+
import { floatingBackground, floatingSurfaceStyle } from "../../theme/platform/index.js";
|
|
25
15
|
import { resolveSegmentedControlColors, resolveSegmentedControlSegmentAccessibility, resolveSegmentedControlSegmentHitSlop, SEGMENTED_CONTROL_SIZES, segmentedControlFocusRingStructure, segmentedControlPillStructure, segmentedControlSegmentStructure, segmentedControlTrackStructure } from "./SegmentedControl.variants.js";
|
|
26
16
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
27
17
|
const ICON_STROKE = 2;
|
|
18
|
+
const AnimatedPressable = Reanimated.createAnimatedComponent(Pressable);
|
|
19
|
+
const SegmentButton = /*#__PURE__*/memo(function SegmentButton({
|
|
20
|
+
option,
|
|
21
|
+
selected,
|
|
22
|
+
segmentDisabled,
|
|
23
|
+
size,
|
|
24
|
+
fullWidth,
|
|
25
|
+
labelColor,
|
|
26
|
+
hitSlop,
|
|
27
|
+
focused,
|
|
28
|
+
onChange,
|
|
29
|
+
onLayout,
|
|
30
|
+
onFocus,
|
|
31
|
+
onBlur,
|
|
32
|
+
testID
|
|
33
|
+
}) {
|
|
34
|
+
const theme = useTheme();
|
|
35
|
+
const press = usePressState(segmentDisabled);
|
|
36
|
+
const a11y = resolveSegmentedControlSegmentAccessibility({
|
|
37
|
+
selected,
|
|
38
|
+
disabled: segmentDisabled
|
|
39
|
+
});
|
|
40
|
+
const spec = SEGMENTED_CONTROL_SIZES[size];
|
|
41
|
+
const overlayStaticStyle = useMemo(() => ({
|
|
42
|
+
backgroundColor: stateLayerScrim(theme.mode),
|
|
43
|
+
borderRadius: theme.radii.md,
|
|
44
|
+
borderCurve: "continuous"
|
|
45
|
+
}), [theme.mode, theme.radii.md]);
|
|
46
|
+
const androidRipple = useMemo(() => {
|
|
47
|
+
if (Platform.OS !== "android" || segmentDisabled) return undefined;
|
|
48
|
+
return {
|
|
49
|
+
color: rippleColor(theme.mode),
|
|
50
|
+
borderless: false
|
|
51
|
+
};
|
|
52
|
+
}, [segmentDisabled, theme.mode]);
|
|
53
|
+
return /*#__PURE__*/_jsxs(AnimatedPressable, {
|
|
54
|
+
testID: testID,
|
|
55
|
+
accessibilityRole: a11y.accessibilityRole,
|
|
56
|
+
"aria-selected": a11y["aria-selected"],
|
|
57
|
+
"aria-disabled": a11y["aria-disabled"],
|
|
58
|
+
accessibilityLabel: option.label,
|
|
59
|
+
disabled: a11y.disabled,
|
|
60
|
+
onPress: segmentDisabled ? undefined : () => onChange(option.value),
|
|
61
|
+
onLayout: event => {
|
|
62
|
+
press.onLayout(event);
|
|
63
|
+
onLayout(option.value, event);
|
|
64
|
+
},
|
|
65
|
+
onFocus: () => onFocus(option.value),
|
|
66
|
+
onBlur: () => onBlur(option.value),
|
|
67
|
+
onPressIn: press.handlers.onPressIn,
|
|
68
|
+
onPressOut: press.handlers.onPressOut,
|
|
69
|
+
hitSlop: hitSlop,
|
|
70
|
+
android_ripple: androidRipple,
|
|
71
|
+
style: [segmentedControlSegmentStructure(theme, {
|
|
72
|
+
size,
|
|
73
|
+
fullWidth: fullWidth ? "on" : "off"
|
|
74
|
+
}), {
|
|
75
|
+
overflow: "hidden"
|
|
76
|
+
}, press.animatedStyle, option.disabled === true && !segmentDisabled && styles.dimmed],
|
|
77
|
+
children: [/*#__PURE__*/_jsx(Reanimated.View, {
|
|
78
|
+
style: [StyleSheet.absoluteFill, overlayStaticStyle, press.overlayStyle, {
|
|
79
|
+
pointerEvents: "none"
|
|
80
|
+
}]
|
|
81
|
+
}), focused && /*#__PURE__*/_jsx(View, {
|
|
82
|
+
testID: testID ? `${testID}-focus-ring` : undefined,
|
|
83
|
+
style: [segmentedControlFocusRingStructure(theme), {
|
|
84
|
+
borderColor: theme.colors.border.focus,
|
|
85
|
+
pointerEvents: "none"
|
|
86
|
+
}]
|
|
87
|
+
}), option.icon !== undefined && /*#__PURE__*/_jsx(Icon, {
|
|
88
|
+
name: option.icon,
|
|
89
|
+
size: spec.iconSize,
|
|
90
|
+
color: labelColor,
|
|
91
|
+
strokeWidth: ICON_STROKE
|
|
92
|
+
}), /*#__PURE__*/_jsx(Text, {
|
|
93
|
+
numberOfLines: 1,
|
|
94
|
+
style: [theme.fontStyleForWeight(theme.fontWeights.medium), {
|
|
95
|
+
fontSize: spec.fontSize,
|
|
96
|
+
color: labelColor
|
|
97
|
+
}],
|
|
98
|
+
children: option.label
|
|
99
|
+
})]
|
|
100
|
+
});
|
|
101
|
+
});
|
|
28
102
|
function SegmentedControlImpl({
|
|
29
103
|
options,
|
|
30
104
|
value,
|
|
@@ -37,8 +111,8 @@ function SegmentedControlImpl({
|
|
|
37
111
|
}) {
|
|
38
112
|
const theme = useTheme();
|
|
39
113
|
const motion = useMotion();
|
|
114
|
+
const haptics = useHaptics();
|
|
40
115
|
const colors = resolveSegmentedControlColors(theme.colors);
|
|
41
|
-
const spec = SEGMENTED_CONTROL_SIZES[size];
|
|
42
116
|
const hitSlop = resolveSegmentedControlSegmentHitSlop(size);
|
|
43
117
|
const [layouts, setLayouts] = useState({});
|
|
44
118
|
// Which segment holds keyboard/AT focus. One value rather than per-segment state: only one segment
|
|
@@ -46,6 +120,11 @@ function SegmentedControlImpl({
|
|
|
46
120
|
const [focusedValue, setFocusedValue] = useState(null);
|
|
47
121
|
const pillX = useAnimatedValue(0);
|
|
48
122
|
const running = useRef(null);
|
|
123
|
+
const pillMotionStyle = useAnimatedStyle(() => ({
|
|
124
|
+
transform: [{
|
|
125
|
+
translateX: pillX.value
|
|
126
|
+
}]
|
|
127
|
+
}));
|
|
49
128
|
const activeLayout = layouts[value];
|
|
50
129
|
const handleSegmentLayout = useCallback((optionValue, event) => {
|
|
51
130
|
const {
|
|
@@ -68,7 +147,7 @@ function SegmentedControlImpl({
|
|
|
68
147
|
if (activeLayout === undefined) return undefined;
|
|
69
148
|
running.current?.stop();
|
|
70
149
|
if (!motion.enabled) {
|
|
71
|
-
pillX.
|
|
150
|
+
pillX.value = activeLayout.x;
|
|
72
151
|
return undefined;
|
|
73
152
|
}
|
|
74
153
|
running.current = motion.timing(pillX, activeLayout.x, {
|
|
@@ -78,69 +157,44 @@ function SegmentedControlImpl({
|
|
|
78
157
|
return () => running.current?.stop();
|
|
79
158
|
}, [activeLayout, motion, pillX]);
|
|
80
159
|
useEffect(() => () => running.current?.stop(), []);
|
|
160
|
+
const handleChange = useCallback(optionValue => {
|
|
161
|
+
haptics.selection();
|
|
162
|
+
onChange(optionValue);
|
|
163
|
+
}, [haptics, onChange]);
|
|
81
164
|
return /*#__PURE__*/_jsxs(View, {
|
|
82
165
|
testID: testID,
|
|
83
166
|
accessibilityRole: "tablist",
|
|
84
167
|
style: [segmentedControlTrackStructure(theme), {
|
|
85
|
-
backgroundColor:
|
|
168
|
+
backgroundColor: floatingBackground(theme, "sm"),
|
|
169
|
+
...floatingSurfaceStyle(theme, "sm")
|
|
86
170
|
}, disabled && styles.dimmed, style],
|
|
87
|
-
children: [/*#__PURE__*/_jsx(
|
|
88
|
-
pointerEvents: "none",
|
|
171
|
+
children: [/*#__PURE__*/_jsx(Reanimated.View, {
|
|
89
172
|
testID: testID ? `${testID}-pill` : undefined,
|
|
90
|
-
style: [segmentedControlPillStructure(theme),
|
|
91
|
-
backgroundColor:
|
|
173
|
+
style: [segmentedControlPillStructure(theme), {
|
|
174
|
+
backgroundColor: floatingBackground(theme, "md"),
|
|
92
175
|
width: activeLayout?.width ?? 0,
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
176
|
+
...floatingSurfaceStyle(theme, "md")
|
|
177
|
+
}, pillMotionStyle, {
|
|
178
|
+
pointerEvents: "none"
|
|
96
179
|
}]
|
|
97
180
|
}), options.map(option => {
|
|
98
181
|
const selected = option.value === value;
|
|
99
182
|
const segmentDisabled = disabled || option.disabled === true;
|
|
100
|
-
const a11y = resolveSegmentedControlSegmentAccessibility({
|
|
101
|
-
selected,
|
|
102
|
-
disabled: segmentDisabled
|
|
103
|
-
});
|
|
104
183
|
const labelColor = selected ? colors.activeLabel : colors.inactiveLabel;
|
|
105
|
-
return /*#__PURE__*/
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
onPress: segmentDisabled ? undefined : () => onChange(option.value),
|
|
113
|
-
onLayout: event => handleSegmentLayout(option.value, event),
|
|
114
|
-
onFocus: () => setFocusedValue(option.value),
|
|
115
|
-
onBlur: () => setFocusedValue(current => current === option.value ? null : current),
|
|
184
|
+
return /*#__PURE__*/_jsx(SegmentButton, {
|
|
185
|
+
option: option,
|
|
186
|
+
selected: selected,
|
|
187
|
+
segmentDisabled: segmentDisabled,
|
|
188
|
+
size: size,
|
|
189
|
+
fullWidth: fullWidth,
|
|
190
|
+
labelColor: labelColor,
|
|
116
191
|
hitSlop: hitSlop,
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
backgroundColor: colors.pressedSegment
|
|
124
|
-
}, option.disabled === true && !disabled && styles.dimmed],
|
|
125
|
-
children: [focusedValue === option.value && /*#__PURE__*/_jsx(View, {
|
|
126
|
-
pointerEvents: "none",
|
|
127
|
-
testID: testID ? `${testID}-${option.value}-focus-ring` : undefined,
|
|
128
|
-
style: [segmentedControlFocusRingStructure(theme), {
|
|
129
|
-
borderColor: theme.colors.border.focus
|
|
130
|
-
}]
|
|
131
|
-
}), option.icon !== undefined && /*#__PURE__*/_jsx(Icon, {
|
|
132
|
-
name: option.icon,
|
|
133
|
-
size: spec.iconSize,
|
|
134
|
-
color: labelColor,
|
|
135
|
-
strokeWidth: ICON_STROKE
|
|
136
|
-
}), /*#__PURE__*/_jsx(Text, {
|
|
137
|
-
numberOfLines: 1,
|
|
138
|
-
style: [theme.fontStyleForWeight(theme.fontWeights.medium), {
|
|
139
|
-
fontSize: spec.fontSize,
|
|
140
|
-
color: labelColor
|
|
141
|
-
}],
|
|
142
|
-
children: option.label
|
|
143
|
-
})]
|
|
192
|
+
focused: focusedValue === option.value,
|
|
193
|
+
onChange: handleChange,
|
|
194
|
+
onLayout: handleSegmentLayout,
|
|
195
|
+
onFocus: setFocusedValue,
|
|
196
|
+
onBlur: v => setFocusedValue(current => current === v ? null : current),
|
|
197
|
+
testID: testID ? `${testID}-${option.value}` : undefined
|
|
144
198
|
}, option.value);
|
|
145
199
|
})]
|
|
146
200
|
});
|
|
@@ -1,23 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
|
-
/**
|
|
4
|
-
* SegmentedControl's style + behaviour resolution — pure, React/lucide-free, same split as Tabs:
|
|
5
|
-
* - STRUCTURE (track padding/radius, segment height/padding, pill radius) lives in the
|
|
6
|
-
* `createThemedVariants` resolvers below, registered once per (theme, size) — never rebuilt per
|
|
7
|
-
* render.
|
|
8
|
-
* - COLOUR is resolved from the theme's ROLE colours (`resolveSegmentedControlColors`), never a raw
|
|
9
|
-
* hex: the track is always `bg.sunken`, the pill is always `bg.surface` (a neutral raised
|
|
10
|
-
* surface, NOT the accent role — unlike `ButtonGroup`/`Tabs`, selection here is conveyed by
|
|
11
|
-
* elevation + position, not by brand colour).
|
|
12
|
-
* - `resolveSegmentedControlSegmentAccessibility` derives the per-segment a11y surface purely, so
|
|
13
|
-
* the "selected"/"disabled" contract is unit-testable without rendering React Native.
|
|
14
|
-
*/
|
|
3
|
+
/** Pure style + a11y resolvers for SegmentedControl — no React, no lucide. */
|
|
15
4
|
|
|
5
|
+
import { MIN_TOUCH_TARGET, slopFor } from "../../core/a11y/touchTarget.js";
|
|
16
6
|
import { createThemedVariants } from "../../core/style/index.js";
|
|
17
|
-
|
|
18
|
-
* modules stay isolated. */
|
|
19
|
-
export const MIN_TOUCH_TARGET = 44;
|
|
20
|
-
const slopFor = height => Math.max(0, Math.ceil((MIN_TOUCH_TARGET - height) / 2));
|
|
7
|
+
export { MIN_TOUCH_TARGET };
|
|
21
8
|
export const SEGMENTED_CONTROL_SIZES = {
|
|
22
9
|
sm: {
|
|
23
10
|
height: 32,
|
|
@@ -32,24 +19,11 @@ export const SEGMENTED_CONTROL_SIZES = {
|
|
|
32
19
|
hitSlop: slopFor(40)
|
|
33
20
|
}
|
|
34
21
|
};
|
|
35
|
-
/**
|
|
36
|
-
* Maps the control's fixed visual roles onto ROLE colours — never a hardcoded hex. There is no
|
|
37
|
-
* per-segment `tone`: like `RadioGroup`/`Tabs`, this is pure indirection, not a union to resolve.
|
|
38
|
-
*
|
|
39
|
-
* The pill deliberately reads `bg.surface`, NOT an accent fill: `bg.surface` vs `bg.sunken` alone
|
|
40
|
-
* measures as low as 1.08:1 (nowhere near WCAG 1.4.11's 3:1 — see `SegmentedControl.test.ts`), so
|
|
41
|
-
* the boundary between the pill and the track is carried by elevation (`theme.elevation.md`, the
|
|
42
|
-
* same treatment `Card`'s `elevated` variant uses to differentiate itself with no border either),
|
|
43
|
-
* not by a colour contrast this pairing could never clear on its own. Selection is additionally
|
|
44
|
-
* conveyed to assistive tech via `accessibilityState.selected`, never by colour alone.
|
|
45
|
-
*/
|
|
22
|
+
/** Label colours only — track/pill/pressed backgrounds are resolved live in `SegmentedControl.tsx`. */
|
|
46
23
|
export function resolveSegmentedControlColors(colors) {
|
|
47
24
|
return {
|
|
48
|
-
track: colors.bg.sunken,
|
|
49
|
-
pill: colors.bg.surface,
|
|
50
25
|
activeLabel: colors.fg.default,
|
|
51
|
-
inactiveLabel: colors.fg.muted
|
|
52
|
-
pressedSegment: colors.bg.raised
|
|
26
|
+
inactiveLabel: colors.fg.muted
|
|
53
27
|
};
|
|
54
28
|
}
|
|
55
29
|
export function resolveSegmentedControlSegmentAccessibility(input) {
|
|
@@ -86,25 +60,19 @@ export const segmentedControlTrackStructure = createThemedVariants(theme => ({
|
|
|
86
60
|
base: {
|
|
87
61
|
flexDirection: "row",
|
|
88
62
|
position: "relative",
|
|
89
|
-
borderRadius: theme.radii.
|
|
63
|
+
borderRadius: theme.radii.md,
|
|
64
|
+
borderCurve: "continuous",
|
|
90
65
|
padding: theme.space[1]
|
|
91
66
|
}
|
|
92
67
|
}));
|
|
93
68
|
|
|
94
|
-
/**
|
|
95
|
-
* The pill. `theme.radii.sm` — one step down from the track's `theme.radii.base` — nests cleanly
|
|
96
|
-
* inside the track's own `space[1]` inset, the same "inner radius ≈ outer radius − inset" geometry
|
|
97
|
-
* a nested rounded rect needs to read as concentric rather than mismatched. `top`/`bottom` pin it to
|
|
98
|
-
* the row's own height (set by the segments, its flow siblings); `left`/`width` are driven by
|
|
99
|
-
* `Animated.Value`s in `SegmentedControl.tsx`, keyed off each segment's own `onLayout` measurement —
|
|
100
|
-
* same mechanism as `Tabs`' sliding indicator.
|
|
101
|
-
*/
|
|
69
|
+
/** `radii.base` (12 − the track's `space[1]` inset of 4) nests concentric inside `radii.md`. */
|
|
102
70
|
export const segmentedControlPillStructure = createThemedVariants(theme => ({
|
|
103
71
|
base: {
|
|
104
72
|
position: "absolute",
|
|
105
73
|
top: 0,
|
|
106
74
|
bottom: 0,
|
|
107
|
-
borderRadius: theme.radii.
|
|
75
|
+
borderRadius: theme.radii.base
|
|
108
76
|
}
|
|
109
77
|
}));
|
|
110
78
|
|
|
@@ -122,7 +90,7 @@ export const segmentedControlFocusRingStructure = createThemedVariants(theme =>
|
|
|
122
90
|
right: 0,
|
|
123
91
|
bottom: 0,
|
|
124
92
|
borderWidth: theme.borderWidths.thick,
|
|
125
|
-
borderRadius: theme.radii.
|
|
93
|
+
borderRadius: theme.radii.base
|
|
126
94
|
}
|
|
127
95
|
}));
|
|
128
96
|
|
|
@@ -138,7 +106,7 @@ export const segmentedControlSegmentStructure = createThemedVariants(theme => ({
|
|
|
138
106
|
alignItems: "center",
|
|
139
107
|
justifyContent: "center",
|
|
140
108
|
minWidth: MIN_TOUCH_TARGET,
|
|
141
|
-
borderRadius: theme.radii.
|
|
109
|
+
borderRadius: theme.radii.base,
|
|
142
110
|
columnGap: theme.space[1]
|
|
143
111
|
},
|
|
144
112
|
variants: {
|
|
@@ -17,21 +17,24 @@ context + a stateless helper with no React-tree footprint of its own, not a depe
|
|
|
17
17
|
|------|------|
|
|
18
18
|
| `Select.tsx` | The component. Trigger + `Modal` composition, open/close state, focus handling. Option list is `core/list`'s `VirtualList` (device-tier windowing over FlashList-or-FlatList), built only while `open`. |
|
|
19
19
|
| `Select.variants.ts` | Pure resolvers (`SELECT_SIZES`, `resolveSelectTriggerColors`, `resolveSelectRowColors`, `resolveSelectAccessibility`) + the themed structural resolvers (`selectTriggerStructure`, `selectOverlayStructure`, `selectSheetStructure`, `selectRowStructure`). No React, no lucide. |
|
|
20
|
-
| `index.ts` | Public surface: `Select`, `SelectProps`, `SelectOption`, `SelectSize`. |
|
|
20
|
+
| `index.ts` | Public surface: `Select`, `SelectProps`, `SelectOption`, `SelectOptionTone`, `SelectOptionCustomColors`, `SelectSize`. |
|
|
21
21
|
| `__tests__/Select.test.ts` | Pure: WCAG contrast (all brands × modes) + touch target + a11y contract. |
|
|
22
22
|
| `__tests__/Select.render.test.tsx` | Render: display, open/close, disabled gating, selection, backdrop dismiss, the row's resolved 44dp `minHeight`, and the web-portal opt-in branch (mocking `renderWebPortal`). |
|
|
23
23
|
| `__tests__/Select.keyboard.test.tsx` | Web keyboard: tab stop opens on the selected option, arrows/Home/End/typeahead, Space selection, Escape. |
|
|
24
|
-
| `__tests__/Select.motion.test.tsx` | Reduce-motion (WCAG 2.3.3): check-glyph and press feedback snap to their final values, and
|
|
24
|
+
| `__tests__/Select.motion.test.tsx` | Reduce-motion (WCAG 2.3.3): check-glyph and press feedback snap to their final values, and no Reanimated timing runs. |
|
|
25
|
+
| `__tests__/Select.dom.test.tsx` | Real DOM (`jest.web.config.js`): the trigger and sheet under `react-dom`. |
|
|
25
26
|
|
|
26
27
|
## Props
|
|
27
28
|
|
|
28
29
|
| Prop | Type | Default | Notes |
|
|
29
30
|
|------|------|---------|-------|
|
|
30
|
-
| `options` | `
|
|
31
|
+
| `options` | `SelectOption[]` | — | Required. Each option may set `tone` / `customColors` (same `custom` escape hatch as `Badge`). |
|
|
31
32
|
| `value` | `string` | — | The currently selected option's `value`. |
|
|
32
33
|
| `onValueChange` | `(value: string) => void` | — | Required. Fired on row press; the menu closes right after. |
|
|
33
34
|
| `placeholder` | `string` | — | Shown when `value` matches no option. |
|
|
34
35
|
| `label` | `string` | — | Field label above the trigger; also folded into its accessible name. |
|
|
36
|
+
| `status` | `InputStatus` | `"default"` | `"error"` paints the danger border and sets `aria-invalid`, same union as `Input`. |
|
|
37
|
+
| `errorText` | `string` | — | Rendered below the trigger, but only while `status="error"`. |
|
|
35
38
|
| `disabled` | `boolean` | `false` | Blocks opening the menu; dimmed like Button's disabled state. |
|
|
36
39
|
| `size` | `sm \| md \| lg` | `md` | 32 / 40 / 48 dp; short sizes reach 44 via `hitSlop`. |
|
|
37
40
|
| `containerStyle` | `LayoutStyle` | — | Layout-only, outermost, applied exactly once, last. |
|
|
@@ -40,6 +43,16 @@ context + a stateless helper with no React-tree footprint of its own, not a depe
|
|
|
40
43
|
No `icon` prop — the chevron/check glyphs are fixed to the component's own semantics, not
|
|
41
44
|
caller-configurable.
|
|
42
45
|
|
|
46
|
+
### `SelectOption`
|
|
47
|
+
|
|
48
|
+
| Field | Type | Notes |
|
|
49
|
+
|-------|------|-------|
|
|
50
|
+
| `label` | `string` | Row label (required). |
|
|
51
|
+
| `value` | `string` | Stable id (required). |
|
|
52
|
+
| `leading` | `ReactNode` | Optional fixed-size adornment on the row and trigger. |
|
|
53
|
+
| `tone` | `SelectOptionTone` | Optional label colour from role tokens, or `"custom"`. |
|
|
54
|
+
| `customColors` | `{ bg, fg }` | Required when `tone="custom"`. Label reads `fg`. |
|
|
55
|
+
|
|
43
56
|
## Accessibility contract (WCAG)
|
|
44
57
|
|
|
45
58
|
- **2.5.x target size** — every trigger size reaches ≥ 44dp via `hitSlop`; option rows have a
|
|
@@ -56,14 +69,25 @@ caller-configurable.
|
|
|
56
69
|
`bg.selected` isn't proven ≥ 4.5:1 against `fg.default` on every brand (measured: fails on
|
|
57
70
|
radiant/rosewood light), so `resolveSelectRowColors` keeps the row fill at `bg.surface` for every
|
|
58
71
|
row, selected or not.
|
|
59
|
-
- Each option row is `accessibilityRole="
|
|
60
|
-
the sighted echo of the same state, never the only signal.
|
|
72
|
+
- Each option row is `accessibilityRole="option"` with flat `aria-selected`; the "check" icon is
|
|
73
|
+
the sighted echo of the same state, never the only signal. **2026-08 sweep:** rows were
|
|
74
|
+
`accessibilityRole="menuitem"`, which made `aria-selected` invalid ARIA (only valid on
|
|
75
|
+
`option`/`row`/`tab`/`gridcell`/`treeitem`). Unlike `OrgSwitcher`'s identical bug — fixed to
|
|
76
|
+
`role="radio"` + `aria-checked` because that sheet's row list carries no `listbox` role — Select's
|
|
77
|
+
rows sit inside a `SELECT_LISTBOX_ROLE` (`"listbox"`) container, so `option` + `aria-selected` is
|
|
78
|
+
the textbook-correct ARIA listbox pattern; only the row's `accessibilityRole` changed, `aria-selected`
|
|
79
|
+
was already the right prop.
|
|
61
80
|
- **2.3.3** — RN's `Modal animationType` is always `"none"`; the reveal is `core/motion`'s
|
|
62
81
|
`useReveal`, which snaps to the final state (no tween) under reduce-motion. Row press feedback
|
|
63
82
|
and the check fade go through the same `motion.enabled` gate. Covered by
|
|
64
83
|
`__tests__/Select.motion.test.tsx`.
|
|
65
84
|
- Disabled is exempt from the contrast minimum (WCAG 1.4.3) — like Button, it's signalled by a
|
|
66
85
|
uniform `opacity: 0.5` dim rather than a separate, still-must-pass colour pair.
|
|
86
|
+
- **Android touch feedback** — the trigger and every option row carry `android_ripple`
|
|
87
|
+
(`rippleColor(theme.mode)`, `borderless: false`), gated on `Platform.OS === "android"`. The trigger
|
|
88
|
+
and the sheet container both gained `overflow: "hidden"` so the ripple clips to their rounded
|
|
89
|
+
bounds — rows have no radius of their own, the sheet does. The backdrop carries no ripple; it is
|
|
90
|
+
`accessible={false}` and not a real press target.
|
|
67
91
|
|
|
68
92
|
## Patterns copied from Button (the reference module)
|
|
69
93
|
|
|
@@ -86,9 +110,9 @@ the tab stop, and `useFocusTrap` needs the focused node to still be tabbable or
|
|
|
86
110
|
sheet. `useFocusTrap` also restores focus to the trigger on close; `useDismissOnEscape` closes on
|
|
87
111
|
Escape.
|
|
88
112
|
|
|
89
|
-
**`useRovingKeys` gets no `onActivate`.** RNW already presses
|
|
113
|
+
**`useRovingKeys` gets no `onActivate`.** RNW already presses on Enter regardless of role, and Space is
|
|
90
114
|
supplied per row by `useSpaceActivation` (RNW's `isValidKeyPress` needs a `button` tag/role, which
|
|
91
|
-
`
|
|
115
|
+
`option` deliberately is not) — passing `onActivate` too would select twice.
|
|
92
116
|
|
|
93
117
|
The list container is `SELECT_LISTBOX_ROLE`: RN 0.86's role unions have no `listbox`, so the
|
|
94
118
|
widening is one audited cast in `Select.variants.ts` rather than a cast at the call site.
|
|
@@ -99,9 +123,7 @@ widening is one audited cast in `Select.variants.ts` rather than a cast at the c
|
|
|
99
123
|
was built against. A future `Combobox`/`MultiSelect` would be a separate module, not a prop
|
|
100
124
|
added here (closed-prop-contract).
|
|
101
125
|
- The trigger's focus ring is a border-colour swap (`border.focus`), not Button's offset ring —
|
|
102
|
-
intentional: Select
|
|
103
|
-
`Input` module to confirm against yet (parallel build). Revisit if `Input` lands a different
|
|
104
|
-
convention and the two should be reconciled.
|
|
126
|
+
intentional: Select follows `input/`'s focus convention rather than Button's.
|
|
105
127
|
- No measured anchor position — the overlay always centers within its container, regardless of
|
|
106
128
|
where the trigger sits on screen, same as Menu's identical `justifyContent: "center"` overlay
|
|
107
129
|
(see `menu/MODULE.md`'s Known gaps). A real anchor would need `Button` to forward refs (it
|
|
@@ -156,3 +178,5 @@ Via `core/motion` only — `opacity`/`transform`, native driver, all reduce-moti
|
|
|
156
178
|
|
|
157
179
|
- Theme imports decoupled to `theme/hooks`; optional peers (reanimated, gesture-handler, flash-list) load at runtime.
|
|
158
180
|
- List-heavy surfaces use `VirtualList` with device-tier window sizing where applicable.
|
|
181
|
+
|
|
182
|
+
Backdrop scrim uses MOTION_TRANSFORM.scrimOpacity (aligned with Modal).
|