pixelize-native-library 1.2.1 → 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 +22 -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 +9 -6
- package/lib/module/core/gradient/ShimmerGradientFill.js +79 -0
- package/lib/module/core/gradient/index.js +1 -0
- package/lib/module/core/haptics/MODULE.md +7 -3
- package/lib/module/core/heading/MODULE.md +1 -1
- package/lib/module/core/icon/MODULE.md +14 -22
- 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/list/VirtualList.js +16 -3
- package/lib/module/core/motion/MODULE.md +18 -9
- package/lib/module/core/motion/animatedComponents.js +8 -0
- package/lib/module/core/motion/index.js +2 -0
- 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 +0 -5
- 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 +1 -1
- package/lib/module/index.js +23 -4
- package/lib/module/modules/accordion/Accordion.js +50 -108
- package/lib/module/modules/accordion/Accordion.variants.js +2 -4
- package/lib/module/modules/accordion/AccordionProps.js +4 -0
- package/lib/module/modules/accordion/MODULE.md +15 -24
- package/lib/module/modules/alert-dialog/AlertDialog.js +19 -2
- 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 +21 -18
- package/lib/module/modules/app-bar/AppBar.variants.js +5 -0
- 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.variants.js +2 -0
- package/lib/module/modules/avatar/AvatarProps.js +4 -0
- package/lib/module/modules/avatar/MODULE.md +3 -3
- package/lib/module/modules/avatar-group/AvatarGroupProps.js +4 -0
- package/lib/module/modules/avatar-group/MODULE.md +2 -1
- 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/BadgeProps.js +4 -0
- package/lib/module/modules/badge/MODULE.md +6 -4
- package/lib/module/modules/banner/Banner.js +2 -2
- package/lib/module/modules/banner/Banner.variants.js +3 -1
- package/lib/module/modules/banner/BannerProps.js +4 -0
- package/lib/module/modules/banner/MODULE.md +20 -31
- package/lib/module/modules/bottom-nav/BottomNav.variants.js +2 -2
- package/lib/module/modules/bottom-nav/BottomNavIconWithBadge.js +18 -19
- package/lib/module/modules/bottom-nav/BottomNavOverflowSheet.js +8 -7
- package/lib/module/modules/bottom-nav/BottomNavProps.js +4 -0
- package/lib/module/modules/bottom-nav/BottomNavTab.js +15 -16
- package/lib/module/modules/bottom-nav/MODULE.md +13 -13
- package/lib/module/modules/bottom-sheet/BottomSheet.js +30 -7
- package/lib/module/modules/bottom-sheet/BottomSheetProps.js +4 -0
- package/lib/module/modules/bottom-sheet/MODULE.md +11 -1
- 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 +6 -4
- package/lib/module/modules/button/Button.variants.js +12 -16
- package/lib/module/modules/button/ButtonProps.js +4 -0
- package/lib/module/modules/button/MODULE.md +6 -11
- package/lib/module/modules/button-group/ButtonGroup.js +4 -3
- package/lib/module/modules/button-group/ButtonGroup.variants.js +2 -4
- package/lib/module/modules/button-group/ButtonGroupProps.js +4 -0
- package/lib/module/modules/button-group/MODULE.md +2 -2
- package/lib/module/modules/card/Card.js +30 -7
- package/lib/module/modules/card/CardProps.js +4 -0
- package/lib/module/modules/card/MODULE.md +4 -2
- package/lib/module/modules/charts/BarChart.js +6 -4
- package/lib/module/modules/charts/BarChartProps.js +4 -0
- package/lib/module/modules/charts/BarList.js +2 -1
- 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 +3 -1
- package/lib/module/modules/charts/DonutChart.js +3 -2
- package/lib/module/modules/charts/DonutChartProps.js +4 -0
- package/lib/module/modules/charts/LineChart.js +3 -2
- package/lib/module/modules/charts/LineChartProps.js +4 -0
- package/lib/module/modules/charts/MODULE.md +14 -14
- package/lib/module/modules/charts/PieChart.js +6 -4
- package/lib/module/modules/charts/PieChartProps.js +4 -0
- package/lib/module/modules/charts/SparklineProps.js +4 -0
- package/lib/module/modules/checkbox/Checkbox.js +21 -27
- 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 +12 -6
- package/lib/module/modules/chip/Chip.js +49 -32
- package/lib/module/modules/chip/Chip.variants.js +3 -2
- 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 +5 -7
- package/lib/module/modules/combobox/Combobox.js +22 -25
- package/lib/module/modules/combobox/Combobox.variants.js +2 -3
- package/lib/module/modules/combobox/ComboboxProps.js +4 -0
- package/lib/module/modules/combobox/MODULE.md +6 -12
- package/lib/module/modules/composer/Composer.js +11 -9
- package/lib/module/modules/composer/ComposerProps.js +4 -0
- package/lib/module/modules/composer/MODULE.md +6 -6
- package/lib/module/modules/copy-button/CopyButton.js +14 -6
- package/lib/module/modules/copy-button/CopyButton.variants.js +3 -2
- package/lib/module/modules/copy-button/CopyButtonProps.js +4 -0
- package/lib/module/modules/copy-button/MODULE.md +10 -12
- package/lib/module/modules/data-table/DataTable.js +11 -7
- package/lib/module/modules/data-table/DataTable.variants.js +2 -2
- package/lib/module/modules/data-table/DataTableProps.js +4 -0
- package/lib/module/modules/data-table/MODULE.md +5 -10
- package/lib/module/modules/date-picker/Calendar.js +11 -8
- package/lib/module/modules/date-picker/CalendarProps.js +4 -0
- package/lib/module/modules/date-picker/DatePicker.variants.js +2 -1
- 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 +6 -9
- package/lib/module/modules/date-picker/PickerFieldProps.js +4 -0
- package/lib/module/modules/date-picker/PickerShell.js +21 -12
- package/lib/module/modules/date-picker/PickerShellProps.js +4 -0
- package/lib/module/modules/date-picker/TimePicker.js +3 -2
- 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/DividerProps.js +4 -0
- package/lib/module/modules/divider/MODULE.md +1 -8
- 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 +45 -40
- package/lib/module/modules/drawer/DrawerProps.js +4 -0
- package/lib/module/modules/drawer/MODULE.md +14 -24
- package/lib/module/modules/empty-state/EmptyState.js +2 -1
- package/lib/module/modules/empty-state/EmptyStateProps.js +4 -0
- package/lib/module/modules/empty-state/MODULE.md +4 -9
- package/lib/module/modules/fab/Fab.js +9 -11
- package/lib/module/modules/fab/Fab.variants.js +10 -4
- package/lib/module/modules/fab/FabGroup.js +40 -43
- 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 +10 -17
- 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 +3 -2
- package/lib/module/modules/file-grid/FileGridProps.js +4 -0
- package/lib/module/modules/file-grid/MODULE.md +27 -4
- package/lib/module/modules/file-upload/FileUpload.js +56 -15
- package/lib/module/modules/file-upload/FileUploadProps.js +4 -0
- package/lib/module/modules/file-upload/MODULE.md +10 -14
- 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 +3 -2
- 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 +26 -16
- package/lib/module/modules/filter-sheet/FilterSheetProps.js +2 -0
- package/lib/module/modules/filter-sheet/MODULE.md +5 -14
- package/lib/module/modules/folder-row/FolderRow.js +6 -4
- package/lib/module/modules/folder-row/FolderRowProps.js +4 -0
- package/lib/module/modules/folder-row/MODULE.md +6 -5
- 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 +23 -6
- package/lib/module/modules/gantt/Gantt.variants.js +12 -4
- package/lib/module/modules/gantt/GanttProps.js +4 -0
- package/lib/module/modules/gantt/MODULE.md +3 -3
- package/lib/module/modules/image-viewer/ImageViewer.js +3 -2
- package/lib/module/modules/image-viewer/ImageViewerProps.js +4 -0
- package/lib/module/modules/image-viewer/MODULE.md +1 -1
- package/lib/module/modules/input/Input.js +55 -20
- package/lib/module/modules/input/Input.variants.js +2 -3
- package/lib/module/modules/input/InputProps.js +4 -0
- package/lib/module/modules/input/MODULE.md +9 -16
- 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 +17 -6
- package/lib/module/modules/list-item/ListItemProps.js +4 -0
- package/lib/module/modules/list-item/MODULE.md +14 -9
- 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 +0 -6
- package/lib/module/modules/markdown/MarkdownProps.js +4 -0
- package/lib/module/modules/menu/MODULE.md +10 -17
- package/lib/module/modules/menu/Menu.js +66 -52
- package/lib/module/modules/menu/Menu.variants.js +2 -2
- package/lib/module/modules/menu/MenuProps.js +4 -0
- package/lib/module/modules/message-bubble/MODULE.md +5 -4
- package/lib/module/modules/message-bubble/MessageBubbleProps.js +4 -0
- package/lib/module/modules/modal/MODULE.md +56 -93
- package/lib/module/modules/modal/Modal.js +99 -30
- 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 +0 -2
- package/lib/module/modules/more-items/MoreItems.js +10 -7
- package/lib/module/modules/more-items/MoreItems.variants.js +2 -1
- package/lib/module/modules/more-items/MoreItemsProps.js +4 -0
- package/lib/module/modules/multi-select/MODULE.md +5 -11
- package/lib/module/modules/multi-select/MultiSelect.js +38 -23
- package/lib/module/modules/multi-select/MultiSelect.variants.js +4 -2
- 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 +8 -13
- package/lib/module/modules/number-input/NumberInput.js +8 -6
- package/lib/module/modules/number-input/NumberInput.variants.js +2 -4
- package/lib/module/modules/number-input/NumberInputProps.js +4 -0
- package/lib/module/modules/org-switcher/MODULE.md +5 -12
- package/lib/module/modules/org-switcher/OrgSwitcher.js +21 -19
- package/lib/module/modules/org-switcher/OrgSwitcher.variants.js +4 -2
- package/lib/module/modules/org-switcher/OrgSwitcherProps.js +4 -0
- package/lib/module/modules/pagination/MODULE.md +2 -5
- package/lib/module/modules/pagination/Pagination.js +25 -15
- package/lib/module/modules/pagination/Pagination.variants.js +2 -2
- package/lib/module/modules/pagination/PaginationControls.js +7 -5
- 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 +9 -20
- package/lib/module/modules/pin-input/PinInput.js +2 -2
- package/lib/module/modules/pin-input/PinInput.variants.js +2 -3
- 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 +6 -12
- package/lib/module/modules/radio-group/RadioGroup.js +7 -6
- package/lib/module/modules/radio-group/RadioGroup.variants.js +2 -3
- package/lib/module/modules/radio-group/RadioGroupProps.js +4 -0
- package/lib/module/modules/reorder/MODULE.md +7 -11
- package/lib/module/modules/reorder/Reorder.js +8 -3
- package/lib/module/modules/reorder/Reorder.variants.js +3 -4
- package/lib/module/modules/reorder/ReorderProps.js +4 -0
- package/lib/module/modules/rich-text/MODULE.md +4 -4
- package/lib/module/modules/rich-text/RichTextProps.js +4 -0
- package/lib/module/modules/rich-text-editor/MODULE.md +6 -16
- package/lib/module/modules/rich-text-editor/RichTextEditor.js +5 -4
- 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 +7 -5
- package/lib/module/modules/screen/Screen.js +65 -22
- package/lib/module/modules/screen/ScreenProps.js +4 -0
- package/lib/module/modules/search-bar/MODULE.md +8 -8
- package/lib/module/modules/search-bar/SearchBar.js +8 -6
- package/lib/module/modules/search-bar/SearchBar.variants.js +2 -4
- package/lib/module/modules/search-bar/SearchBarProps.js +4 -0
- package/lib/module/modules/section/MODULE.md +1 -1
- package/lib/module/modules/section/Section.js +6 -1
- 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 -28
- package/lib/module/modules/segmented-control/SegmentedControl.js +20 -30
- package/lib/module/modules/segmented-control/SegmentedControl.variants.js +9 -42
- package/lib/module/modules/segmented-control/SegmentedControlProps.js +4 -0
- package/lib/module/modules/select/MODULE.md +8 -5
- package/lib/module/modules/select/Select.js +38 -25
- package/lib/module/modules/select/Select.variants.js +4 -5
- 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 +2 -1
- package/lib/module/modules/skeleton/Skeleton.js +14 -8
- package/lib/module/modules/skeleton/Skeleton.variants.js +4 -9
- package/lib/module/modules/skeleton/SkeletonProps.js +4 -0
- package/lib/module/modules/slider/MODULE.md +2 -1
- package/lib/module/modules/slider/Slider.js +6 -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 +20 -6
- package/lib/module/modules/stage-progress/StageProgress.js +45 -15
- package/lib/module/modules/stage-progress/StageProgress.variants.js +40 -8
- 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 +12 -1
- package/lib/module/modules/stat-tile/StatTile.js +40 -15
- package/lib/module/modules/stat-tile/StatTile.variants.js +5 -0
- package/lib/module/modules/stat-tile/StatTileProps.js +4 -0
- package/lib/module/modules/state-block/MODULE.md +9 -3
- package/lib/module/modules/state-block/StateBlock.js +46 -38
- 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 +6 -8
- package/lib/module/modules/surface/Surface.js +6 -1
- package/lib/module/modules/surface/SurfaceProps.js +4 -0
- package/lib/module/modules/swipeable-row/MODULE.md +3 -2
- package/lib/module/modules/swipeable-row/SwipeableRow.js +31 -8
- package/lib/module/modules/swipeable-row/SwipeableRowProps.js +4 -0
- package/lib/module/modules/switch/MODULE.md +6 -3
- package/lib/module/modules/switch/Switch.js +42 -8
- 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 +10 -14
- package/lib/module/modules/tabs/Tabs.js +84 -39
- package/lib/module/modules/tabs/Tabs.variants.js +2 -4
- package/lib/module/modules/tabs/TabsProps.js +4 -0
- package/lib/module/modules/text/MODULE.md +25 -17
- package/lib/module/modules/text/Text.variants.js +9 -1
- package/lib/module/modules/text/TextProps.js +4 -0
- package/lib/module/modules/textarea/MODULE.md +12 -18
- package/lib/module/modules/textarea/Textarea.js +12 -10
- package/lib/module/modules/textarea/Textarea.variants.js +4 -1
- 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 +13 -20
- package/lib/module/modules/toast/Toast.js +53 -51
- package/lib/module/modules/toast/Toast.variants.js +2 -5
- package/lib/module/modules/tooltip/MODULE.md +9 -13
- package/lib/module/modules/tooltip/Tooltip.js +36 -7
- 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 +2 -0
- package/lib/module/theme/platform/MODULE.md +2 -6
- package/lib/module/theme/platform/elevation.native.js +1 -7
- package/lib/module/theme/provider/PixelizeProvider.js +6 -0
- package/lib/module/theme/tokens/MODULE.md +4 -0
- package/lib/module/theme/tokens/THEME-CONTRACT.md +53 -3
- package/lib/module/theme/tokens/brands/emerald/palette.light.js +5 -3
- package/lib/module/theme/tokens/brands/lavender/palette.light.js +4 -4
- package/lib/module/theme/tokens/brands/meadow/palette.light.js +2 -2
- package/lib/module/theme/tokens/brands/radiant/palette.light.js +3 -3
- package/lib/module/theme/tokens/brands/rosewood/palette.light.js +3 -3
- package/lib/module/theme/tokens/brands/skyline/palette.light.js +2 -2
- package/lib/module/theme/tokens/brands/slate/palette.light.js +3 -3
- 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/gradientInk.js +23 -0
- package/lib/module/theme/tokens/builders/paletteFromAccent.js +30 -0
- package/lib/module/theme/tokens/builders/skeletonShimmer.js +22 -0
- package/lib/module/theme/tokens/index.js +3 -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 +2 -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/ShimmerGradientFill.d.ts +8 -0
- package/lib/typescript/core/gradient/index.d.ts +1 -0
- package/lib/typescript/core/list/VirtualList.d.ts +6 -1
- package/lib/typescript/core/motion/animatedComponents.d.ts +4 -0
- package/lib/typescript/core/motion/index.d.ts +2 -0
- 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 +0 -1
- 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 +1 -1
- package/lib/typescript/index.d.ts +49 -11
- package/lib/typescript/modules/accordion/Accordion.d.ts +2 -37
- package/lib/typescript/modules/accordion/Accordion.variants.d.ts +2 -3
- 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/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 +2 -0
- 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 +1 -18
- 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 -22
- 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 +2 -1
- 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/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 -35
- 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 -17
- package/lib/typescript/modules/button-group/ButtonGroup.variants.d.ts +2 -3
- 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 +2 -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 +2 -0
- 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 -30
- package/lib/typescript/modules/chip/Chip.variants.d.ts +2 -1
- 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 +2 -2
- package/lib/typescript/modules/combobox/Combobox.d.ts +2 -45
- package/lib/typescript/modules/combobox/Combobox.variants.d.ts +3 -1
- 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 +2 -1
- 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 +2 -1
- 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 +1 -9
- 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/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 -17
- 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 +3 -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 -11
- 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 +8 -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 +2 -2
- 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 +2 -12
- 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 +1 -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 +1 -9
- 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 +2 -3
- 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/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 +1 -13
- 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 +1 -24
- 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 +2 -3
- 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/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 +2 -13
- package/lib/typescript/modules/select/Select.variants.d.ts +2 -2
- package/lib/typescript/modules/select/SelectProps.d.ts +25 -0
- package/lib/typescript/modules/select/index.d.ts +2 -1
- 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 +2 -12
- package/lib/typescript/modules/skeleton/Skeleton.variants.d.ts +3 -5
- 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 +16 -4
- 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 -32
- 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 +1 -14
- package/lib/typescript/modules/surface/SurfaceProps.d.ts +17 -0
- package/lib/typescript/modules/surface/index.d.ts +1 -1
- 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 -24
- 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 +2 -3
- package/lib/typescript/modules/tooltip/Tooltip.d.ts +1 -25
- 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/platform/elevation.native.d.ts +1 -1
- 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/gradientInk.d.ts +9 -0
- package/lib/typescript/theme/tokens/builders/paletteFromAccent.d.ts +3 -0
- package/lib/typescript/theme/tokens/builders/skeletonShimmer.d.ts +9 -0
- package/lib/typescript/theme/tokens/index.d.ts +3 -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 +2 -0
- package/lib/typescript/theme/tokens/types.d.ts +2 -2
- package/package.json +106 -5
- package/registry.json +109 -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
|
@@ -0,0 +1,309 @@
|
|
|
1
|
+
# Component Gotchas
|
|
2
|
+
|
|
3
|
+
For anyone — human or AI — consuming `pixelize-native-library` in an app, with no access to this
|
|
4
|
+
source repo. Every entry below **typechecks cleanly, accepts what you pass, and produces the wrong
|
|
5
|
+
(or no) result at runtime with no warning.** TypeScript cannot catch any of these, and a snapshot
|
|
6
|
+
test that mocks the library won't either.
|
|
7
|
+
|
|
8
|
+
This file ships inside the published package
|
|
9
|
+
(`node_modules/pixelize-native-library/COMPONENT-GOTCHAS.md`) so it's available without checking
|
|
10
|
+
out the library's source.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Value ranges & units
|
|
15
|
+
|
|
16
|
+
### `progress` is 0–100, not a 0–1 fraction
|
|
17
|
+
|
|
18
|
+
`ProgressBar.value`, `Gantt`'s per-lane `progress`, and `FileUpload.progress` are all a **0–100**
|
|
19
|
+
number, clamped internally (`Math.min(100, Math.max(0, value))` in `ProgressBar.variants.ts`;
|
|
20
|
+
`Math.max(0, Math.min(100, lane.progress ?? 0))` in `Gantt.variants.ts`;
|
|
21
|
+
`resolveFileUploadProgressFraction` divides by 100 in `FileUpload.variants.ts`). Passing `0.45`
|
|
22
|
+
compiles fine and renders a sliver of a fill (~0.45%), not the 45% you meant — no error, no clamp
|
|
23
|
+
warning.
|
|
24
|
+
|
|
25
|
+
**Apply:** always pass a 0–100 number to these three props, never a 0–1 fraction.
|
|
26
|
+
|
|
27
|
+
### `BottomSheet.snapPoints` are fractions 0–1, not percentages, and are silently clamped
|
|
28
|
+
|
|
29
|
+
`resolveBottomSheetSnapOffset` (`BottomSheet.variants.ts:16-21`) clamps every entry to
|
|
30
|
+
`[0.1, 0.95]` before using it. `snapPoints={[50, 90]}` — a natural mistake if you're thinking in
|
|
31
|
+
percent — compiles fine and both values collapse to `0.95`, so the sheet ends up with one
|
|
32
|
+
functional stop instead of two, with no error or warning.
|
|
33
|
+
|
|
34
|
+
**Apply:** pass fractions (`snapPoints={[0.5, 0.9]}`), never whole-number percentages.
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## Import surface
|
|
39
|
+
|
|
40
|
+
### Heavy modules are subpath-only — never on the root barrel
|
|
41
|
+
|
|
42
|
+
`bottom-nav`, `charts`, `date-picker`, `data-table`, `filter-sheet`, `gantt`, `image-viewer`,
|
|
43
|
+
`reorder`, `rich-text-editor`, and `rich-text` (`HEAVY_MODULES` in `scripts/gen-index.mjs`) are
|
|
44
|
+
deliberately **absent from the root `pixelize-native-library` barrel** so a lazy
|
|
45
|
+
`import { Button } from "pixelize-native-library"` can never drag a chart engine, a calendar grid,
|
|
46
|
+
or a table virtualizer into your bundle. Each still has its own subpath in `package.json`
|
|
47
|
+
`exports`.
|
|
48
|
+
|
|
49
|
+
```ts
|
|
50
|
+
// Wrong — not exported from the root, fails to resolve
|
|
51
|
+
import { DataTable } from "pixelize-native-library";
|
|
52
|
+
|
|
53
|
+
// Right — subpath import
|
|
54
|
+
import { DataTable } from "pixelize-native-library/data-table";
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Apply:** if an import from the package root doesn't resolve, check this list before assuming the
|
|
58
|
+
component doesn't exist — it likely just needs its own subpath.
|
|
59
|
+
|
|
60
|
+
---
|
|
61
|
+
|
|
62
|
+
## Composing your own layout around library slots
|
|
63
|
+
|
|
64
|
+
### A library slot silently wraps a bare string; your own `View` won't
|
|
65
|
+
|
|
66
|
+
Slots that accept `ReactNode` (`Card`/`Section`/`Drawer`/`Accordion`/`Tabs` children, `ChipGroup`
|
|
67
|
+
children, a `MultiSelect` option's `leading`, `BarList`'s icon) route through `renderNodeSlot`
|
|
68
|
+
(`src/core/slot/nodeSlot.tsx`), which wraps a bare `string`/`number` in a `<Text>` for you and
|
|
69
|
+
recurses into arrays — anything else (an already-rendered element) passes through untouched. That
|
|
70
|
+
convenience is local to those library slots; RN itself cannot host a bare text node outside
|
|
71
|
+
`<Text>`. If you get used to dropping a raw string into a library slot and then try the same thing
|
|
72
|
+
inside your own plain `<View>` (or your own wrapper that isn't one of the components above), it
|
|
73
|
+
throws "Text strings must be rendered within a `<Text>` component" instead of silently working.
|
|
74
|
+
|
|
75
|
+
**Apply:** the "you can pass a raw string here" convenience only applies to the specific library
|
|
76
|
+
slots that call `renderNodeSlot` internally — wrap plain strings in your own `<Text>` everywhere
|
|
77
|
+
else.
|
|
78
|
+
|
|
79
|
+
---
|
|
80
|
+
|
|
81
|
+
## Known gotchas (silent failures)
|
|
82
|
+
|
|
83
|
+
### `Combobox.filterFn` is silently ignored whenever `onSearchChange` is also passed
|
|
84
|
+
|
|
85
|
+
`filteredOptions` (`Combobox.tsx:387-400`) checks `serverSide` (`= onSearchChange !== undefined`)
|
|
86
|
+
first and returns `options` unfiltered before `filterFn` is ever evaluated — both props are
|
|
87
|
+
independent optionals (`Combobox.tsx:117-127`), so passing both compiles fine and `filterFn` never
|
|
88
|
+
runs.
|
|
89
|
+
|
|
90
|
+
**Apply:** these are mutually exclusive — `onSearchChange` means you own filtering server-side;
|
|
91
|
+
`filterFn` is only for the client-side path.
|
|
92
|
+
|
|
93
|
+
### `Card`'s `disabled` / `onLongPress` / `accessibilityLabel` / `accessibilityState` are no-ops without `onPress`
|
|
94
|
+
|
|
95
|
+
Without `onPress`, `CardImpl` (`Card.tsx:164-195`) renders `StaticCard`, which is only ever given
|
|
96
|
+
`variant`, `style` and `testID` — the other four props are typed on `CardProps` and accepted, but
|
|
97
|
+
never reach the rendered tree.
|
|
98
|
+
|
|
99
|
+
**Apply:** pass `onPress` (even a no-op) to get the interactive `Card` that actually reads those
|
|
100
|
+
props.
|
|
101
|
+
|
|
102
|
+
### `showLegend` now defaults to `true` on every chart
|
|
103
|
+
|
|
104
|
+
`BarChart.tsx:118`, `LineChart.tsx:87`, `DonutChart.tsx:45`, `PieChart.tsx:85` all changed their
|
|
105
|
+
default from `false`/unset to `showLegend = true`. Upgrading consumers who never touched this prop
|
|
106
|
+
get a legend that wasn't there before, with no compile-time signal.
|
|
107
|
+
|
|
108
|
+
**Apply:** pass `showLegend={false}` explicitly to keep a chart's pre-upgrade look.
|
|
109
|
+
|
|
110
|
+
### `Breadcrumbs`' `onPress` on the last item is always ignored
|
|
111
|
+
|
|
112
|
+
`Breadcrumbs.tsx:27,30` only renders a `Pressable` when `item.onPress && !current` — the final
|
|
113
|
+
(current-page) crumb is deliberately never pressable, no matter what `onPress` you attach to it.
|
|
114
|
+
|
|
115
|
+
**Apply:** don't rely on the last breadcrumb being clickable; wire navigation only on the earlier
|
|
116
|
+
items.
|
|
117
|
+
|
|
118
|
+
### `FileUpload.values` is dropped unless `onValuesChange` is also passed
|
|
119
|
+
|
|
120
|
+
`multiMode` (`FileUpload.tsx:233`) is `values !== undefined && onValuesChange !== undefined` — pass
|
|
121
|
+
`values` alone, expecting a pre-populated multi-file list, and it's silently ignored; the component
|
|
122
|
+
behaves as if neither were passed.
|
|
123
|
+
|
|
124
|
+
**Apply:** always pass `values` and `onValuesChange` together for multi-file mode.
|
|
125
|
+
|
|
126
|
+
### `Input`'s `secureTextEntry` silently overrides `trailingIcon` / `onTrailingIconPress`
|
|
127
|
+
|
|
128
|
+
`Input.tsx:236-238` resolves the trailing icon/handler as `secureTextEntryProp === true ? "eye" /
|
|
129
|
+
togglePassword : trailingIcon / onTrailingIconPress` — the password-visibility toggle always wins;
|
|
130
|
+
your own trailing icon and its handler never render, with no warning.
|
|
131
|
+
|
|
132
|
+
**Apply:** don't combine `secureTextEntry` with a custom trailing icon — they're mutually exclusive.
|
|
133
|
+
|
|
134
|
+
### `Menu`'s `disabled` stops the menu opening, but the trigger's own `onPress` still fires
|
|
135
|
+
|
|
136
|
+
`handleTriggerPress` (`Menu.tsx:277-282`) always calls `trigger.props.onPress?.(event)` before
|
|
137
|
+
`openMenu()`, and only `openMenu` (`Menu.tsx:247-251`) checks `disabled`. Any side effect you put on
|
|
138
|
+
your own trigger's `onPress` runs every tap, whether or not the menu is disabled.
|
|
139
|
+
|
|
140
|
+
**Apply:** if your trigger's own `onPress` has a side effect, gate it on the same `disabled` value
|
|
141
|
+
you pass to `Menu`.
|
|
142
|
+
|
|
143
|
+
### `DocumentViewer` never renders a document
|
|
144
|
+
|
|
145
|
+
`DocumentViewer.tsx:9-26` always shows a short explanatory message plus an "Open in browser" button
|
|
146
|
+
that calls `Linking.openURL(uri)` — there is no in-app PDF/doc rendering path today.
|
|
147
|
+
|
|
148
|
+
**Apply:** treat it as a hand-off to the OS/browser, not an in-app preview.
|
|
149
|
+
|
|
150
|
+
### `DatePicker.confirmOnSelect`'s doc comment claims a default it doesn't have
|
|
151
|
+
|
|
152
|
+
The JSDoc on `DatePicker.tsx:40` says tap-to-commit is the default for `mode="date"`; the actual
|
|
153
|
+
default (`DatePicker.tsx:78`) is `confirmOnSelect = false`. The sheet stays open after picking a day
|
|
154
|
+
unless you pass the prop explicitly.
|
|
155
|
+
|
|
156
|
+
**Apply:** pass `confirmOnSelect={true}` yourself if you want tap-to-commit — don't rely on the
|
|
157
|
+
doc comment's stated default.
|
|
158
|
+
|
|
159
|
+
### `FilterBar.activeFilterCount` renders nothing unless `onOpenFilters` is also passed
|
|
160
|
+
|
|
161
|
+
The count badge is nested inside the `{onOpenFilters ? (...) : null}` branch (`FilterBar.tsx:42-49`)
|
|
162
|
+
— pass `activeFilterCount` alone, expecting a bare badge with no Filters button, and nothing
|
|
163
|
+
renders at all.
|
|
164
|
+
|
|
165
|
+
**Apply:** always pass `onOpenFilters` alongside `activeFilterCount`.
|
|
166
|
+
|
|
167
|
+
### `PersonChip.subtitle` is dropped when `onRemove` is set
|
|
168
|
+
|
|
169
|
+
The `onRemove` branch (`PersonChip.tsx:31-40`) renders only an `Avatar` and a `Chip` carrying
|
|
170
|
+
`name` — `subtitle` is never read on that path, even though it's a normal prop the rest of the
|
|
171
|
+
time.
|
|
172
|
+
|
|
173
|
+
**Apply:** don't rely on `subtitle` showing up once `onRemove` is present; build a custom row if you
|
|
174
|
+
need both.
|
|
175
|
+
|
|
176
|
+
### `MultiSelectOption` has no `disabled` field
|
|
177
|
+
|
|
178
|
+
`MultiSelect.tsx:63-67` — the option type is `{ label, value, leading? }` only. A non-literal options
|
|
179
|
+
array carrying an extra `disabled` key still typechecks (TypeScript's excess-property check only
|
|
180
|
+
fires on object literals), and every row stays fully selectable regardless.
|
|
181
|
+
|
|
182
|
+
**Apply:** filter disabled items out of `options` yourself before handing them to `MultiSelect`.
|
|
183
|
+
|
|
184
|
+
### `MoreItems.moreCount` only changes the badge text, not what's listed
|
|
185
|
+
|
|
186
|
+
`resolveMoreItemsCount` (`MoreItems.variants.ts:15-17`) feeds only the "+N" badge number — the
|
|
187
|
+
overflow sheet itself always lists every entry in `items`, regardless of `moreCount`.
|
|
188
|
+
|
|
189
|
+
**Apply:** slice `items` yourself first if you want the sheet's list to actually be shorter.
|
|
190
|
+
|
|
191
|
+
### `NumberInput.step` applies only to the +/- buttons, never to typed input
|
|
192
|
+
|
|
193
|
+
Typed text is parsed and clamped to `[min, max]` (`NumberInput.tsx:139-142`,
|
|
194
|
+
`clampNumberInputValue` in `NumberInput.variants.ts:188`) but never snapped to `step` — only the
|
|
195
|
+
stepper buttons move in `step` increments.
|
|
196
|
+
|
|
197
|
+
**Apply:** don't rely on `step` for typed-value validation; round/snap it yourself in your
|
|
198
|
+
`onValueChange` handler if alignment matters.
|
|
199
|
+
|
|
200
|
+
### `OrgSwitcher` renders `null` when there's one org or fewer
|
|
201
|
+
|
|
202
|
+
`OrgSwitcher.tsx:335` — `if (options.length <= 1) return null;`. Mount it with a single-org account
|
|
203
|
+
and it vanishes entirely (no trigger, nothing), which is easy to mistake for a data-fetch bug.
|
|
204
|
+
|
|
205
|
+
**Apply:** this is deliberate — don't wrap `OrgSwitcher` in a label/section that would look broken
|
|
206
|
+
with nothing inside it when there's only one org.
|
|
207
|
+
|
|
208
|
+
### `PlanBadge` and `PlanPill` take an identical prop shape and mean different copy
|
|
209
|
+
|
|
210
|
+
Both are `{ tier, style, testID }`. `PlanBadge`'s `pro` label is `"Pro"`; `PlanPill`'s is
|
|
211
|
+
`"Pro plan"`. Swapping the import for the other typechecks with zero errors and silently changes
|
|
212
|
+
the copy on screen.
|
|
213
|
+
|
|
214
|
+
**Apply:** double-check which one you meant — the identical prop shape gives you no signal that
|
|
215
|
+
you grabbed the wrong one.
|
|
216
|
+
|
|
217
|
+
### `Slider.onSlidingComplete` fires on every keyboard keypress, not once per gesture
|
|
218
|
+
|
|
219
|
+
`commitValue` (`Slider.tsx:184-188`) — the function that calls `onSlidingComplete` — is invoked from
|
|
220
|
+
both the accessibility increment/decrement handler (`Slider.tsx:198-200`) and the keyboard handler
|
|
221
|
+
(`Slider.tsx:212`), so keyboard/screen-reader users fire it on every single step, not once at
|
|
222
|
+
gesture end the way a touch drag does.
|
|
223
|
+
|
|
224
|
+
**Apply:** debounce or throttle `onSlidingComplete` if it does anything expensive (an API call,
|
|
225
|
+
persistence) — don't assume "once per interaction."
|
|
226
|
+
|
|
227
|
+
### `Toast` `tone="danger"` never auto-dismisses unless you pass an explicit numeric `duration`
|
|
228
|
+
|
|
229
|
+
`resolveAutoDismissDelay` (`Toast.variants.ts:77`) returns `null` (no auto-dismiss) for
|
|
230
|
+
`tone === "danger"` whenever `duration` is left `undefined` — every other tone falls back to the
|
|
231
|
+
default duration. An error toast shown with no `duration` prop stays on screen until manually
|
|
232
|
+
dismissed.
|
|
233
|
+
|
|
234
|
+
**Apply:** pass a numeric `duration` explicitly if you want a danger toast to auto-dismiss.
|
|
235
|
+
|
|
236
|
+
### `StatTile`'s `tone` only tints the icon's background chip, never the glyph itself
|
|
237
|
+
|
|
238
|
+
`resolveStatTileColors` (`StatTile.variants.ts:25-31`) produces `iconFill` for the chip background
|
|
239
|
+
only; the icon element itself is passed through `renderNodeSlot(icon, labelStyle)`
|
|
240
|
+
(`StatTile.tsx:167`), and `renderNodeSlot` only applies a style to a bare string/number — an
|
|
241
|
+
already-rendered icon element passes through with its own color unchanged.
|
|
242
|
+
|
|
243
|
+
**Apply:** color the icon yourself at the call site if it needs to match `tone`; don't expect `tone`
|
|
244
|
+
alone to recolor the glyph.
|
|
245
|
+
|
|
246
|
+
### `SwipeableRow` — a non-`danger` action `tone` collapses to `"default"` once folded into the overflow menu
|
|
247
|
+
|
|
248
|
+
`SwipeableRow.tsx:197` maps every action into the "more" `Menu` with
|
|
249
|
+
`tone: action.tone === "danger" ? "danger" : "default"` — a `warning` (or any other) tone survives
|
|
250
|
+
on the swipe-revealed action itself but reads as plain `default` once it's inside the overflow
|
|
251
|
+
menu.
|
|
252
|
+
|
|
253
|
+
**Apply:** don't rely on a non-`danger` tone being visually distinct once an action lands in the
|
|
254
|
+
overflow menu.
|
|
255
|
+
|
|
256
|
+
### `Tooltip` — a plain RN `Text` trigger typechecks but never opens on web
|
|
257
|
+
|
|
258
|
+
`TooltipProps.children` is typed `ReactElement<TooltipTriggerProps>` (all fields optional), so a
|
|
259
|
+
bare `<Text>` satisfies the type and compiles — but on web, `react-native-web`'s `Text` doesn't
|
|
260
|
+
forward the hover/focus handlers `Tooltip` injects (`Tooltip.tsx:85,199-261`), so it silently never
|
|
261
|
+
opens there. (Native platforms are unaffected — only the web target has no hover/focus channel into
|
|
262
|
+
a plain `Text`.)
|
|
263
|
+
|
|
264
|
+
**Apply:** always wrap the trigger in a `Pressable` (or another element that forwards
|
|
265
|
+
`onHoverIn`/`onFocus`/etc.), never a bare `Text`.
|
|
266
|
+
|
|
267
|
+
---
|
|
268
|
+
|
|
269
|
+
## Fixed in this release — if you're still on an older published version
|
|
270
|
+
|
|
271
|
+
### `Modal.isLoading` now actually blocks interaction
|
|
272
|
+
|
|
273
|
+
Before this release, the loading overlay had `pointerEvents: 'none'` (`Modal.tsx:270-277`) — the
|
|
274
|
+
dim scrim and spinner painted, but taps passed straight through to the content underneath.
|
|
275
|
+
`isLoading` is now blocking. If you're on an older version, don't rely on `isLoading` alone to
|
|
276
|
+
prevent a double-submit; also disable the triggering button.
|
|
277
|
+
|
|
278
|
+
### `Switch`'s `testID` no longer collides when `label` is set
|
|
279
|
+
|
|
280
|
+
Older versions rendered the same `testID` on both the row wrapper and the inner control when
|
|
281
|
+
`label` was set, so `getByTestId(testID)` matched two elements. The row wrapper now gets
|
|
282
|
+
`${testID}-row`; the inner control keeps the plain `testID` (`Switch.tsx:36,77,95`).
|
|
283
|
+
|
|
284
|
+
### `StageProgress` no longer renders focusable dead controls
|
|
285
|
+
|
|
286
|
+
Older versions rendered a focusable `Pressable` per stage even when `onStagePress` was omitted.
|
|
287
|
+
Stages with no `onStagePress` now render as a plain (non-focusable) accessible `View` regardless of
|
|
288
|
+
`readOnly` (`StageProgress.tsx:220,289`).
|
|
289
|
+
|
|
290
|
+
---
|
|
291
|
+
|
|
292
|
+
## Colour
|
|
293
|
+
|
|
294
|
+
### A role colour's lightness direction flips between light and dark mode
|
|
295
|
+
|
|
296
|
+
`bg.sunken` is **darker** than `bg.surface` in light mode and **lighter** than it in dark mode — see
|
|
297
|
+
[`src/theme/tokens/THEME-CONTRACT.md`](src/theme/tokens/THEME-CONTRACT.md) for the measured numbers
|
|
298
|
+
and the full rule. A component that reasons "sunken means recessed, so it must be darker" gets it
|
|
299
|
+
backwards in dark mode with no error.
|
|
300
|
+
|
|
301
|
+
**Apply:** never infer a surface's relative lightness from its token name — compare the actual
|
|
302
|
+
resolved colours (or just use `useTheme()`/`useThemeColors()`, which already resolve correctly for
|
|
303
|
+
the active mode).
|
|
304
|
+
|
|
305
|
+
### Never hardcode a hex
|
|
306
|
+
|
|
307
|
+
Read every colour from `useTheme()` / `useThemeColors()` (`pixelize-native-library/theme`). A
|
|
308
|
+
hardcoded hex compiles fine and looks right in whichever mode you tested — and is stuck there,
|
|
309
|
+
wrong in the other mode and on every non-default brand.
|
package/DESIGN-GUIDE.md
ADDED
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
# Pixelize Mobile Design Guide — how to design a screen with `pixelize-native-library`
|
|
2
|
+
|
|
3
|
+
For any developer or LLM building UI in a consumer React Native app. `COMPONENT-GOTCHAS.md` (next
|
|
4
|
+
to this file) says **which component does what and where it bites**; this file says **how to compose
|
|
5
|
+
them into a screen that looks designed**. Read both before building a screen. Everything here is
|
|
6
|
+
copyable as-is.
|
|
7
|
+
|
|
8
|
+
This is the native sibling of `pixelize-design-library` (web). The roles, the 4dp grid and the
|
|
9
|
+
brand palettes are the same; the components are not — nothing here is a Chakra component and there
|
|
10
|
+
is no `className`, no `sx`, no CSS.
|
|
11
|
+
|
|
12
|
+
```ts
|
|
13
|
+
import { PixelizeProvider, useTheme, useThemeColors } from "pixelize-native-library/theme";
|
|
14
|
+
|
|
15
|
+
const theme = useTheme(); // theme.colors (roles), space, radii, borderWidths, fontSizes
|
|
16
|
+
const colors = useThemeColors(); // the role map on its own
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
Wrap the app in `PixelizeProvider` once, at the root. The theme lives on its own subpath — it is
|
|
20
|
+
not on the root barrel.
|
|
21
|
+
|
|
22
|
+
## 1. The look
|
|
23
|
+
|
|
24
|
+
Calm, dense, professional. A tool people use all day, not a marketing screen.
|
|
25
|
+
|
|
26
|
+
- **Hierarchy comes from type and whitespace, not boxes.** One border per surface. Never nest a
|
|
27
|
+
bordered `Card` inside a bordered `Card`; inside a card, separate with spacing or a `Divider`.
|
|
28
|
+
- **One primary action per screen.** One `<Button variant="solid">`; everything else `outline`,
|
|
29
|
+
`ghost` or `link`. A `Fab` or a `SaveBar` counts as that one.
|
|
30
|
+
- **Left-aligned and scannable.** Titles and forms left-aligned; numbers right-aligned in tables.
|
|
31
|
+
- **Color means something.** Neutral by default; accent for the primary action and selection;
|
|
32
|
+
status color only for status. No decorative gradients, no colored section backgrounds.
|
|
33
|
+
- **Borders, not shadows, for resting surfaces.** Elevation belongs to floating things — `Modal`,
|
|
34
|
+
`BottomSheet`, `Menu`, `Tooltip`, `Fab`.
|
|
35
|
+
- **Touch targets are 44dp.** Anything pressable that is smaller needs `hitSlop`.
|
|
36
|
+
|
|
37
|
+
## 2. Spacing — `theme.space`, unitless dp, one step = 4dp
|
|
38
|
+
|
|
39
|
+
| Where | Value |
|
|
40
|
+
| --- | --- |
|
|
41
|
+
| Screen padding | `<Screen padded>` — don't hand-roll it |
|
|
42
|
+
| Between screen sections | `theme.space[5]` (20) |
|
|
43
|
+
| Between cards in a list | `theme.space[3]`–`theme.space[4]` |
|
|
44
|
+
| Inside a card | `Card`'s own padding — don't add more |
|
|
45
|
+
| Between form fields | `theme.space[4]` vertical, `theme.space[3]` side by side |
|
|
46
|
+
| Inline clusters (chips, meta, icon + text) | `theme.space[1]`–`theme.space[2]` |
|
|
47
|
+
|
|
48
|
+
Never a raw number in a style (`padding: 13`). The one exception is a hairline, which comes from
|
|
49
|
+
`theme.borderWidths`, never from `space` — a hairline must not scale with the user's font setting.
|
|
50
|
+
|
|
51
|
+
## 3. Radii — `theme.radii`
|
|
52
|
+
|
|
53
|
+
`none 0 · sm 4 · base 8 · md 12 · lg 16 · xl 24 · full 9999`
|
|
54
|
+
|
|
55
|
+
`base` (8) is the brand radius: chips, buttons, inputs, small controls. `md`/`lg` for cards, sheets
|
|
56
|
+
and modals. `full` for avatars and pills only — never on something that can stretch to fill a row's
|
|
57
|
+
height, or it renders as a giant oval.
|
|
58
|
+
|
|
59
|
+
**Nested corners are concentric:** inner radius = outer radius − the padding between them.
|
|
60
|
+
A `radii.md` (12) track with `space[1]` (4) padding holds a `radii.base` (8) pill. Getting this
|
|
61
|
+
wrong is the most visible sloppiness in a mobile UI.
|
|
62
|
+
|
|
63
|
+
## 4. Color — pick by role, never by ramp
|
|
64
|
+
|
|
65
|
+
`theme.colors` is a role map. Never read a raw ramp (`primary[500]`) and never write a hex — both
|
|
66
|
+
stay light in dark mode.
|
|
67
|
+
|
|
68
|
+
| Need | Token |
|
|
69
|
+
| --- | --- |
|
|
70
|
+
| Screen background | `colors.bg.canvas` |
|
|
71
|
+
| A card / list surface | `colors.bg.surface` |
|
|
72
|
+
| A floating surface (modal, sheet, menu) | `colors.bg.raised` |
|
|
73
|
+
| A well / inset area | `colors.bg.sunken` |
|
|
74
|
+
| Pressed or hovered row | `colors.bg.hover` |
|
|
75
|
+
| Selected row | `colors.bg.selected` |
|
|
76
|
+
| Body text | `colors.fg.default` |
|
|
77
|
+
| Secondary text, meta, helper | `colors.fg.muted` |
|
|
78
|
+
| Placeholder in an empty field | `colors.fg.placeholder` |
|
|
79
|
+
| Disabled anything | `colors.fg.disabled` / `colors.bg.disabled` |
|
|
80
|
+
| Hairline between rows | `colors.border.default` |
|
|
81
|
+
| A control's own outline | `colors.border.interactive` |
|
|
82
|
+
| Keyboard/AT focus ring | `colors.border.focus` |
|
|
83
|
+
| Primary button fill | `colors.accent.solid`, label `colors.accent.onSolid` |
|
|
84
|
+
| Accent as text or icon | `colors.accent.text` |
|
|
85
|
+
| Faint accent fill (selected chip) | `colors.accent.subtle` |
|
|
86
|
+
| Status | `colors.status.success \| warning \| danger \| info` — each has `solid`, `onSolid`, `text`, `subtle`, `border` |
|
|
87
|
+
|
|
88
|
+
**Never pair a solid fill with a hand-picked label color.** `accent.onSolid` is correct on
|
|
89
|
+
`accent.solid` and on nothing else; `status.danger.onSolid` on `status.danger.solid`. Pairing a fill
|
|
90
|
+
with white "because it looks right" is how a badge ships with 1.5:1 text.
|
|
91
|
+
|
|
92
|
+
Every pairing above is locked by `roleColors.test.ts` across 9 brands × 2 modes. If you need a
|
|
93
|
+
combination the roles don't offer, the role layer is missing something — say so rather than
|
|
94
|
+
inventing a color in a component.
|
|
95
|
+
|
|
96
|
+
## 5. Type — `Text` and `Heading`, never a raw `fontSize`
|
|
97
|
+
|
|
98
|
+
| Role | Component |
|
|
99
|
+
| --- | --- |
|
|
100
|
+
| Screen title | `<Heading variant="h1">` |
|
|
101
|
+
| Section / card title | `<Heading variant="h2">` or `<Heading variant="h3">` |
|
|
102
|
+
| Body | `<Text variant="body">` (the default) |
|
|
103
|
+
| Dense body, list rows | `<Text variant="body-sm">` |
|
|
104
|
+
| Label above a control | `FormField`'s `label` — don't hand-build it |
|
|
105
|
+
| Meta, helper, timestamps | `<Text variant="caption" color={colors.fg.muted}>` |
|
|
106
|
+
| Big number on a KPI tile | `StatTile` — pass the value, don't compose it |
|
|
107
|
+
| Eyebrow above a section | `<Text variant="overline">` (`Section` already does this) |
|
|
108
|
+
|
|
109
|
+
Variants: `display · title · heading · subheading · body · body-sm · caption · label · label-sm ·
|
|
110
|
+
overline`. Use the variant, not `fontSize`. Never render a bare string inside a `View` — RN throws;
|
|
111
|
+
text always lives in a `Text`.
|
|
112
|
+
|
|
113
|
+
## 6. Screen anatomy
|
|
114
|
+
|
|
115
|
+
```tsx
|
|
116
|
+
<Screen appBar={<AppBar title="Deals" />} padded state={state} onRefresh={refetch}>
|
|
117
|
+
<Section label="Pipeline">
|
|
118
|
+
<StatGrid items={stats} columns={2} />
|
|
119
|
+
</Section>
|
|
120
|
+
<Section label="Recent">
|
|
121
|
+
<ListItem … />
|
|
122
|
+
</Section>
|
|
123
|
+
</Screen>
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
| Need | Component |
|
|
127
|
+
| --- | --- |
|
|
128
|
+
| Every screen's shell — safe area, keyboard avoidance, pull-to-refresh, async states | `Screen` |
|
|
129
|
+
| A long list screen — virtualization + paging + refresh | `ListScreen` |
|
|
130
|
+
| Sectioned list | `SectionList` |
|
|
131
|
+
| Top bar | `AppBar` |
|
|
132
|
+
| Tab bar with an overflow sheet | `BottomNav` (subpath) |
|
|
133
|
+
| A labelled block inside a screen | `Section` (takes `label`, not `title`) |
|
|
134
|
+
| A container with a border and padding | `Card` — or `Surface` when you need to pick the role yourself |
|
|
135
|
+
| Search + filter row above a list | `FilterBar`, with `FilterSheet` (subpath) behind it |
|
|
136
|
+
| A dirty-state action bar | `SaveBar` |
|
|
137
|
+
| Confirm / destructive prompt | `AlertDialog` |
|
|
138
|
+
| Anything else floating | `Modal` (centered) or `BottomSheet` (gesture-driven) |
|
|
139
|
+
|
|
140
|
+
`Screen` handles the safe area and the keyboard. Do not wrap it in another `SafeAreaView`, and do
|
|
141
|
+
not add your own `KeyboardAvoidingView` — you'll get double insets.
|
|
142
|
+
|
|
143
|
+
## 7. Controls — `sm` for dense screens, `md` everywhere else
|
|
144
|
+
|
|
145
|
+
`Button` takes `variant="solid" | "outline" | "ghost" | "link"`, `size="sm" | "md" | "lg"` and
|
|
146
|
+
`tone="accent" | "neutral" | "danger"`. Destructive actions are `tone="danger"`, never a hand-set
|
|
147
|
+
red.
|
|
148
|
+
|
|
149
|
+
Every field goes inside a `FormField` — it owns the label, the required marker, the description and
|
|
150
|
+
the error text, so no screen re-invents that stack. Controls: `Input`, `Textarea`, `Select`,
|
|
151
|
+
`MultiSelect`, `Combobox`, `Checkbox`, `RadioGroup`, `Switch`, `Slider`, `NumberInput`, `PinInput`,
|
|
152
|
+
`SearchBar`, `SegmentedControl`, and `DatePicker` (subpath).
|
|
153
|
+
|
|
154
|
+
## 8. Every screen has four states
|
|
155
|
+
|
|
156
|
+
A screen that only handles "loaded" is unfinished. `Screen` and `ListScreen` take the slots:
|
|
157
|
+
|
|
158
|
+
```tsx
|
|
159
|
+
<Screen
|
|
160
|
+
state={isLoading ? "loading" : error ? "error" : rows.length ? "idle" : "empty"}
|
|
161
|
+
loading={<LoadingState />}
|
|
162
|
+
empty={<EmptyState title="No deals yet" action={{ label: "New deal", onPress: create }} />}
|
|
163
|
+
error={<ErrorState title="Couldn't load deals" action={{ label: "Retry", onPress: refetch }} />}
|
|
164
|
+
/>
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
- **Loading** — `Skeleton` in the shape of the content, not a centered spinner, whenever the layout
|
|
168
|
+
is predictable. `Spinner` only for a short, indeterminate wait.
|
|
169
|
+
- **Empty** — `EmptyState` with a real next action. "No results" after a filter is a different
|
|
170
|
+
message from "nothing here yet"; say which.
|
|
171
|
+
- **Error** — `ErrorState` with a retry. Never a bare error string. Both `EmptyState.action` and
|
|
172
|
+
`ErrorState.action` take `{ label, onPress }` — an object, not a `<Button>` element.
|
|
173
|
+
- **Idle** — the content. `state` is `"idle" | "loading" | "empty" | "error"`; `"idle"` is the
|
|
174
|
+
loaded screen, and it is the default when you pass no `state` at all.
|
|
175
|
+
|
|
176
|
+
## 9. Imports
|
|
177
|
+
|
|
178
|
+
Most components come from the root barrel:
|
|
179
|
+
|
|
180
|
+
```ts
|
|
181
|
+
import { Button, Card, Screen, Text } from "pixelize-native-library";
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
**Ten heavy modules are deliberately absent from it** so a `Button` import can never drag in a
|
|
185
|
+
chart engine, a calendar grid, a table virtualizer or a gesture stack. Import those by subpath:
|
|
186
|
+
|
|
187
|
+
```ts
|
|
188
|
+
import { BottomNav } from "pixelize-native-library/bottom-nav";
|
|
189
|
+
import { DataTable } from "pixelize-native-library/data-table";
|
|
190
|
+
import { LineChart } from "pixelize-native-library/charts";
|
|
191
|
+
```
|
|
192
|
+
|
|
193
|
+
The ten: `bottom-nav`, `charts`, `data-table`, `date-picker`, `filter-sheet`, `gantt`,
|
|
194
|
+
`image-viewer`, `reorder`, `rich-text`, `rich-text-editor`. A root import of one of these does not
|
|
195
|
+
warn — it simply fails to resolve. Every other module also has its own subpath if you prefer them
|
|
196
|
+
all explicit, and the theme is always `pixelize-native-library/theme`.
|
|
197
|
+
|
|
198
|
+
## 10. Never
|
|
199
|
+
|
|
200
|
+
- A hex, an `rgba()`, or a raw ramp value in a screen. Roles only.
|
|
201
|
+
- A raw number for spacing, radius or font size.
|
|
202
|
+
- A bare string inside a `View`.
|
|
203
|
+
- `radii.full` on anything that stretches to a row's height.
|
|
204
|
+
- A solid fill with a hand-picked label color — use the fill's own `onSolid`.
|
|
205
|
+
- Your own `SafeAreaView` or `KeyboardAvoidingView` around a `Screen`.
|
|
206
|
+
- A second bordered container inside a bordered container.
|
|
207
|
+
- A screen with no empty and no error state.
|
|
208
|
+
- Re-implementing a component this library ships. If the owned component can't express what you
|
|
209
|
+
need, that's a library gap worth reporting — not a reason to hand-roll one in the app.
|
|
210
|
+
|
|
211
|
+
## 11. Where to look next
|
|
212
|
+
|
|
213
|
+
- `COMPONENT-GOTCHAS.md` — the traps that compile fine and are wrong at runtime.
|
|
214
|
+
- Each component's props carry one-line JSDoc; your editor shows it on hover.
|
|
215
|
+
- `registry.json` (shipped) lists every module with a one-line description.
|
package/README.md
CHANGED
|
@@ -21,8 +21,16 @@ This is **not** tree-shaking. Metro's tree-shaking is experimental, production-o
|
|
|
21
21
|
by a flag the *consumer app* sets — a library can't turn it on. Package Exports have been stable
|
|
22
22
|
in Metro since 0.79 and work in dev and prod, on bare RN and Expo, with zero config in your app.
|
|
23
23
|
|
|
24
|
+
## Gotchas
|
|
25
|
+
|
|
26
|
+
- **Web + Reanimated text** — `Reanimated.Text` typechecks but is `undefined` at runtime on web.
|
|
27
|
+
Module code must use `AnimatedText` from `core/motion` (`createAnimatedComponent(Text)` at module
|
|
28
|
+
scope), never `Reanimated.Text`.
|
|
29
|
+
|
|
24
30
|
## Docs
|
|
25
31
|
|
|
32
|
+
- Designing a screen: `DESIGN-GUIDE.md` (shipped in the package)
|
|
33
|
+
- Traps that compile fine and are wrong at runtime: `COMPONENT-GOTCHAS.md` (shipped)
|
|
26
34
|
- Component list and props: `registry.json` (generated)
|
|
27
35
|
- Contributing / API contract: `CLAUDE.md`
|
|
28
36
|
- Playground: `example/` (Expo)
|
|
@@ -32,3 +40,39 @@ in Metro since 0.79 and work in dev and prod, on bare RN and Expo, with zero con
|
|
|
32
40
|
Themes and colours are shared with web by hand-copying one folder: `src/theme/tokens/`.
|
|
33
41
|
It is byte-identical across both repos and hash-gated in CI (`.tokens.sha256`).
|
|
34
42
|
Anything platform-specific lives in `src/theme/platform/`, which is never copied.
|
|
43
|
+
|
|
44
|
+
### Typography
|
|
45
|
+
|
|
46
|
+
Inter is opt-in. Register the faces once at startup, then pass `interLoaded` to
|
|
47
|
+
`PixelizeProvider` (otherwise the library uses the system font and logs a dev warning):
|
|
48
|
+
|
|
49
|
+
```tsx
|
|
50
|
+
import { useFonts } from "expo-font";
|
|
51
|
+
import {
|
|
52
|
+
Inter_400Regular,
|
|
53
|
+
Inter_500Medium,
|
|
54
|
+
Inter_600SemiBold,
|
|
55
|
+
Inter_700Bold,
|
|
56
|
+
} from "@expo-google-fonts/inter";
|
|
57
|
+
import { PixelizeProvider } from "pixelize-native-library/theme";
|
|
58
|
+
|
|
59
|
+
const [interLoaded] = useFonts({
|
|
60
|
+
"Inter-Regular": Inter_400Regular,
|
|
61
|
+
"Inter-Medium": Inter_500Medium,
|
|
62
|
+
"Inter-SemiBold": Inter_600SemiBold,
|
|
63
|
+
"Inter-Bold": Inter_700Bold,
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
<PixelizeProvider interLoaded={interLoaded}>{/* … */}</PixelizeProvider>;
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
Override the brand accent (lfour uses `#3a75cf`) with `paletteFromAccent` from
|
|
70
|
+
`pixelize-native-library/tokens`:
|
|
71
|
+
|
|
72
|
+
```tsx
|
|
73
|
+
import { paletteFromAccent } from "pixelize-native-library/tokens";
|
|
74
|
+
|
|
75
|
+
<PixelizeProvider
|
|
76
|
+
palette={paletteFromAccent("#3a75cf", brand, resolvedMode)}
|
|
77
|
+
>
|
|
78
|
+
```
|
|
@@ -1,17 +1,29 @@
|
|
|
1
|
-
# core
|
|
1
|
+
# core/ — cross-cutting mechanism every module imports
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
No feature logic, no components.
|
|
4
4
|
|
|
5
5
|
| Folder | Purpose | Docs |
|
|
6
6
|
|--------|---------|------|
|
|
7
|
-
| `style/` | `LayoutStyle` + the variant resolver (below) + `sx()` (spacing/flex shorthand, below) — published as `pixelize-native-library/style` | this file |
|
|
8
|
-
| `
|
|
9
|
-
| `
|
|
7
|
+
| `style/` | `LayoutStyle` + the variant resolver (below) + `sx()` (spacing/flex shorthand, below) + `concentric()` and the `focusRing*` helpers — published as `pixelize-native-library/style` | this file |
|
|
8
|
+
| `haptics/` | optional `expo-haptics` seam — published as `pixelize-native-library/haptics` and re-exported from the root barrel | `haptics/MODULE.md` |
|
|
9
|
+
| `media/` | optional `expo-document-picker` / `expo-image-picker` / `expo-image` injectors — published as `pixelize-native-library/media` and re-exported from the root barrel | this file |
|
|
10
|
+
| `icon/` | shared lucide icon registry (`IconName`, `Icon`; 74 glyphs) — hoisted out of `modules/button/` so every shipped module reuses one registry instead of re-declaring its own | `icon/MODULE.md` |
|
|
11
|
+
| `a11y/` | shared accessibility hooks — `useReducedMotion`, `useAnnounce` (`announce.ts`/`.web.ts`), `useDismissOnEscape` (`keyboard.ts`/`.web.ts`), label helpers and touch-target maths | `a11y/MODULE.md` |
|
|
10
12
|
| `device/` | the `low \| mid \| high` device tier every motion and list-window decision reads | `device/MODULE.md` |
|
|
11
13
|
| `motion/` | the single global animation gate (`useMotion`, `config.ts`, `usePressState`, presets) | `motion/MODULE.md` |
|
|
12
|
-
| `haptics/` | optional `expo-haptics` seam (`setHapticsModule`, `useHaptics`) | `haptics/MODULE.md` |
|
|
13
14
|
| `list/` | `VirtualList` / `VirtualSectionList` — the one windowed list every list-bearing module renders through (FlashList when the peer is installed, FlatList otherwise) | this file |
|
|
14
15
|
| `heading/` | `HeadingText`/`HeadingView` (typed `aria-level`) + `HEADING_LEVEL` — the fixed level every `accessibilityRole="header"` site needs so `react-native-web` doesn't render it as `<h1>` | `heading/MODULE.md` |
|
|
16
|
+
| `slot/` | `renderNodeSlot` — wraps string/number `ReactNode` in `Text` before a `View` host (internal; not root-barrel exported) | `slot/MODULE.md` |
|
|
17
|
+
| `blur/` | `setBlurModule`/`hasBlurModule`/`getBlurModule` — the optional blur-view seam, injected by the app | this file |
|
|
18
|
+
| `gradient/` | `AccentGradientFill`, `ShimmerGradientFill`, `accentGradientStops`, `shouldRenderGradient`, `darkenHex`, `withAlpha` | this file |
|
|
19
|
+
| `overlay/` | `ModalPortalContext` + `renderWebPortal` — how an overlay escapes its host on web | `overlay/MODULE.md` |
|
|
20
|
+
| `screen-scroll/` | `ScreenScrollContext` + `useScreenScrollY` — the scroll offset a `Screen`'s chrome reads | this file |
|
|
21
|
+
|
|
22
|
+
## Known gotchas
|
|
23
|
+
|
|
24
|
+
- **Bare text in `ReactNode` slots** — `ReactNode` allows `string`/`number`; hosting either in a
|
|
25
|
+
`View`/`Pressable`/etc. crashes at runtime on RN and logs *Unexpected text node* on web. tsc and
|
|
26
|
+
ESLint do not catch it. Use `renderNodeSlot` from `core/slot` at every View-like slot.
|
|
15
27
|
|
|
16
28
|
## Escape-hatch doctrine
|
|
17
29
|
|
|
@@ -106,7 +118,7 @@ Spreading (`{ ...sx({...}), extra: 1 }`) is unaffected — spread always produce
|
|
|
106
118
|
|
|
107
119
|
## `list/` — VirtualList
|
|
108
120
|
|
|
109
|
-
One windowed list for
|
|
121
|
+
One windowed list for every list-bearing module. Device-tier window sizing (`core/device`),
|
|
110
122
|
FlashList when the optional peer resolves, FlatList otherwise. `resolveFlashList()` returns `null`
|
|
111
123
|
under Jest by design, so **only the FlatList branch is test-coverable** — the FlashList branch is
|
|
112
124
|
asserted by nothing except its tier→`drawDistance` mapping
|
|
@@ -122,9 +134,9 @@ and `getItemLayout` is not passed at all — it has no meaning there. The FlatLi
|
|
|
122
134
|
five-prop tuning unchanged. FlashList also never passes `separators`, so `renderItem` goes through a
|
|
123
135
|
memoized adapter rather than a cast.
|
|
124
136
|
|
|
125
|
-
`resolveFlashList()` runs **once at module scope
|
|
126
|
-
|
|
127
|
-
whenever the optional peer
|
|
137
|
+
`resolveFlashList()` runs **once at module scope** — never a `require()` inside a try/catch per
|
|
138
|
+
render, which would construct and catch a module-resolution error per render per mounted list
|
|
139
|
+
whenever the optional peer is absent.
|
|
128
140
|
|
|
129
141
|
**The prop surface is a curated allowlist, never `{...rest}`.** `core/list` is internal, so it is a
|
|
130
142
|
wider surface than a public module's — but the width is deliberate, and each entry is a prop a
|
|
@@ -180,9 +192,3 @@ and is now covered by `__tests__/VirtualSectionList.sections.test.tsx`:
|
|
|
180
192
|
flattened rows. Given only `itemHeight`, **no** `getItemLayout` is passed — measuring is correct,
|
|
181
193
|
guessing is not. `modules/section-list` currently passes only `itemHeight` and so measures; it
|
|
182
194
|
can opt back into exact offsets by passing its header height.
|
|
183
|
-
|
|
184
|
-
## Modernization (v1.0.7)
|
|
185
|
-
|
|
186
|
-
- Theme imports decoupled to `theme/hooks`; optional peers (reanimated, gesture-handler, flash-list) load at runtime.
|
|
187
|
-
- List-heavy surfaces use `VirtualList` with device-tier window sizing where applicable.
|
|
188
|
-
- `React.memo` + stable callbacks retained; render-item/key-extractor hoisted per ESLint perf rules.
|