pixelize-native-library 1.0.7 → 1.2.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/lib/module/core/MODULE.md +129 -36
- package/lib/module/core/a11y/MODULE.md +127 -4
- package/lib/module/core/a11y/announce.js +30 -0
- package/lib/module/core/a11y/announce.web.js +134 -0
- package/lib/module/core/a11y/index.js +81 -15
- package/lib/module/core/a11y/keyboard.js +42 -0
- package/lib/module/core/a11y/keyboard.web.js +229 -0
- package/lib/module/core/a11y/labels.js +24 -0
- package/lib/module/core/device/MODULE.md +47 -0
- package/lib/module/core/device/index.js +91 -0
- package/lib/module/core/heading/MODULE.md +38 -0
- package/lib/module/core/heading/index.js +45 -0
- package/lib/module/core/icon/Icon.js +37 -0
- package/lib/module/core/icon/MODULE.md +42 -8
- package/lib/module/core/icon/icons/arrow-down.js +10 -0
- package/lib/module/core/icon/icons/arrow-left.js +10 -0
- package/lib/module/core/icon/icons/arrow-right.js +10 -0
- package/lib/module/core/icon/icons/arrow-up.js +10 -0
- package/lib/module/core/icon/icons/at-sign.js +10 -0
- package/lib/module/core/icon/icons/bell.js +10 -0
- package/lib/module/core/icon/icons/bold.js +10 -0
- package/lib/module/core/icon/icons/building-2.js +10 -0
- package/lib/module/core/icon/icons/calendar.js +10 -0
- package/lib/module/core/icon/icons/chart-column.js +10 -0
- package/lib/module/core/icon/icons/check.js +10 -0
- package/lib/module/core/icon/icons/chevron-down.js +10 -0
- package/lib/module/core/icon/icons/chevron-left.js +10 -0
- package/lib/module/core/icon/icons/chevron-right.js +10 -0
- package/lib/module/core/icon/icons/chevron-up.js +10 -0
- package/lib/module/core/icon/icons/chevrons-left.js +10 -0
- package/lib/module/core/icon/icons/chevrons-right.js +10 -0
- package/lib/module/core/icon/icons/chevrons-up-down.js +10 -0
- package/lib/module/core/icon/icons/circle-alert.js +10 -0
- package/lib/module/core/icon/icons/circle-check.js +10 -0
- package/lib/module/core/icon/icons/clock.js +10 -0
- package/lib/module/core/icon/icons/code.js +10 -0
- package/lib/module/core/icon/icons/download.js +10 -0
- package/lib/module/core/icon/icons/external-link.js +10 -0
- package/lib/module/core/icon/icons/eye.js +10 -0
- package/lib/module/core/icon/icons/file-text.js +10 -0
- package/lib/module/core/icon/icons/filter.js +10 -0
- package/lib/module/core/icon/icons/flag.js +10 -0
- package/lib/module/core/icon/icons/folder.js +10 -0
- package/lib/module/core/icon/icons/heading-1.js +10 -0
- package/lib/module/core/icon/icons/heading-2.js +10 -0
- package/lib/module/core/icon/icons/heading-3.js +10 -0
- package/lib/module/core/icon/icons/image.js +10 -0
- package/lib/module/core/icon/icons/inbox.js +10 -0
- package/lib/module/core/icon/icons/info.js +10 -0
- package/lib/module/core/icon/icons/italic.js +10 -0
- package/lib/module/core/icon/icons/kanban.js +10 -0
- package/lib/module/core/icon/icons/layers.js +10 -0
- package/lib/module/core/icon/icons/layout-dashboard.js +10 -0
- package/lib/module/core/icon/icons/layout-template.js +10 -0
- package/lib/module/core/icon/icons/life-buoy.js +10 -0
- package/lib/module/core/icon/icons/link.js +10 -0
- package/lib/module/core/icon/icons/list-checks.js +10 -0
- package/lib/module/core/icon/icons/list-ordered.js +10 -0
- package/lib/module/core/icon/icons/list-todo.js +10 -0
- package/lib/module/core/icon/icons/list.js +10 -0
- package/lib/module/core/icon/icons/log-out.js +10 -0
- package/lib/module/core/icon/icons/map.js +10 -0
- package/lib/module/core/icon/icons/message-square.js +10 -0
- package/lib/module/core/icon/icons/milestone.js +10 -0
- package/lib/module/core/icon/icons/minus.js +10 -0
- package/lib/module/core/icon/icons/more-horizontal.js +10 -0
- package/lib/module/core/icon/icons/paperclip.js +10 -0
- package/lib/module/core/icon/icons/pencil.js +10 -0
- package/lib/module/core/icon/icons/plus.js +10 -0
- package/lib/module/core/icon/icons/quote.js +10 -0
- package/lib/module/core/icon/icons/refresh-cw.js +10 -0
- package/lib/module/core/icon/icons/save.js +10 -0
- package/lib/module/core/icon/icons/search.js +10 -0
- package/lib/module/core/icon/icons/send.js +10 -0
- package/lib/module/core/icon/icons/settings.js +10 -0
- package/lib/module/core/icon/icons/share.js +10 -0
- package/lib/module/core/icon/icons/square-code.js +10 -0
- package/lib/module/core/icon/icons/star.js +10 -0
- package/lib/module/core/icon/icons/strikethrough.js +10 -0
- package/lib/module/core/icon/icons/tag.js +10 -0
- package/lib/module/core/icon/icons/trash.js +10 -0
- package/lib/module/core/icon/icons/triangle-alert.js +10 -0
- package/lib/module/core/icon/icons/underline.js +10 -0
- package/lib/module/core/icon/icons/upload.js +10 -0
- package/lib/module/core/icon/icons/user.js +10 -0
- package/lib/module/core/icon/icons/users.js +10 -0
- package/lib/module/core/icon/icons/x.js +10 -0
- package/lib/module/core/icon/index.js +4 -153
- package/lib/module/core/icon/names.js +2 -0
- package/lib/module/core/icon/resolve.js +158 -0
- package/lib/module/core/icon/types.js +4 -0
- package/lib/module/core/list/VirtualList.js +226 -0
- package/lib/module/core/list/index.js +4 -0
- package/lib/module/core/media/MediaImage.js +51 -0
- package/lib/module/core/media/expoImage.js +20 -0
- package/lib/module/core/media/index.js +6 -0
- package/lib/module/core/media/pickers.js +23 -0
- package/lib/module/core/motion/MODULE.md +101 -0
- package/lib/module/core/motion/config.js +112 -0
- package/lib/module/core/motion/index.js +7 -0
- package/lib/module/core/motion/presets.js +192 -0
- package/lib/module/core/motion/useAnimatedValue.js +19 -0
- package/lib/module/core/motion/useMotion.js +46 -0
- package/lib/module/core/style/index.js +2 -0
- package/lib/module/core/style/sx.js +76 -0
- package/lib/module/core/style/useThemedStyles.js +8 -0
- package/lib/module/index.js +70 -2
- package/lib/module/modules/accordion/Accordion.js +256 -87
- package/lib/module/modules/accordion/Accordion.variants.js +2 -4
- package/lib/module/modules/accordion/MODULE.md +35 -11
- package/lib/module/modules/alert-dialog/AlertDialog.js +1 -1
- package/lib/module/modules/alert-dialog/MODULE.md +11 -2
- package/lib/module/modules/app-bar/AppBar.js +179 -0
- package/lib/module/modules/app-bar/AppBar.variants.js +72 -0
- package/lib/module/modules/app-bar/MODULE.md +68 -0
- package/lib/module/modules/app-bar/index.js +10 -0
- package/lib/module/modules/avatar/Avatar.js +38 -18
- package/lib/module/modules/avatar/Avatar.variants.js +44 -3
- package/lib/module/modules/avatar/MODULE.md +37 -15
- package/lib/module/modules/avatar-group/AvatarGroup.js +77 -0
- package/lib/module/modules/avatar-group/AvatarGroup.variants.js +109 -0
- package/lib/module/modules/avatar-group/MODULE.md +28 -0
- package/lib/module/modules/avatar-group/index.js +10 -0
- package/lib/module/modules/badge/Badge.js +3 -2
- package/lib/module/modules/badge/Badge.variants.js +12 -2
- package/lib/module/modules/badge/MODULE.md +6 -0
- package/lib/module/modules/banner/Banner.js +135 -0
- package/lib/module/modules/banner/Banner.variants.js +118 -0
- package/lib/module/modules/banner/MODULE.md +113 -0
- package/lib/module/modules/banner/index.js +4 -0
- package/lib/module/modules/bottom-nav/BottomNav.js +37 -126
- package/lib/module/modules/bottom-nav/BottomNav.variants.js +28 -9
- package/lib/module/modules/bottom-nav/BottomNavIconWithBadge.js +56 -8
- package/lib/module/modules/bottom-nav/BottomNavOverflowSheet.js +133 -114
- package/lib/module/modules/bottom-nav/BottomNavTab.js +138 -0
- package/lib/module/modules/bottom-nav/MODULE.md +21 -6
- package/lib/module/modules/bottom-sheet/BottomSheet.js +189 -0
- package/lib/module/modules/bottom-sheet/BottomSheet.variants.js +49 -0
- package/lib/module/modules/bottom-sheet/MODULE.md +53 -0
- package/lib/module/modules/bottom-sheet/index.js +4 -0
- package/lib/module/modules/button/Button.js +98 -47
- package/lib/module/modules/button/Button.variants.js +12 -7
- package/lib/module/modules/button/MODULE.md +25 -3
- package/lib/module/modules/button-group/ButtonGroup.js +163 -55
- package/lib/module/modules/button-group/ButtonGroup.variants.js +30 -4
- package/lib/module/modules/button-group/MODULE.md +33 -7
- package/lib/module/modules/card/Card.js +10 -7
- package/lib/module/modules/card/MODULE.md +6 -0
- package/lib/module/modules/charts/BarChart.js +242 -0
- package/lib/module/modules/charts/BarList.js +98 -48
- package/lib/module/modules/charts/ChartLegend.js +154 -0
- package/lib/module/modules/charts/Charts.variants.js +524 -1
- package/lib/module/modules/charts/DonutChart.js +100 -65
- package/lib/module/modules/charts/LineChart.js +179 -0
- package/lib/module/modules/charts/MODULE.md +148 -22
- package/lib/module/modules/charts/PieChart.js +140 -0
- package/lib/module/modules/charts/Sparkline.js +5 -4
- package/lib/module/modules/charts/index.js +3 -0
- package/lib/module/modules/checkbox/Checkbox.js +114 -44
- package/lib/module/modules/checkbox/Checkbox.variants.js +13 -8
- package/lib/module/modules/checkbox/MODULE.md +35 -8
- package/lib/module/modules/chip/Chip.js +155 -0
- package/lib/module/modules/chip/Chip.variants.js +278 -0
- package/lib/module/modules/chip/ChipGroup.js +48 -0
- package/lib/module/modules/chip/MODULE.md +156 -0
- package/lib/module/modules/chip/index.js +13 -0
- package/lib/module/modules/combobox/Combobox.js +587 -0
- package/lib/module/modules/combobox/Combobox.variants.js +280 -0
- package/lib/module/modules/combobox/MODULE.md +183 -0
- package/lib/module/modules/combobox/comboboxKeys.js +19 -0
- package/lib/module/modules/combobox/comboboxKeys.web.js +76 -0
- package/lib/module/modules/combobox/index.js +13 -0
- package/lib/module/modules/composer/Composer.js +156 -0
- package/lib/module/modules/composer/Composer.variants.js +42 -0
- package/lib/module/modules/composer/MODULE.md +70 -0
- package/lib/module/modules/composer/index.js +4 -0
- package/lib/module/modules/copy-button/CopyButton.js +156 -0
- package/lib/module/modules/copy-button/CopyButton.variants.js +86 -0
- package/lib/module/modules/copy-button/MODULE.md +73 -0
- package/lib/module/modules/copy-button/index.js +4 -0
- package/lib/module/modules/data-table/DataTable.js +513 -0
- package/lib/module/modules/data-table/DataTable.variants.js +188 -0
- package/lib/module/modules/data-table/MODULE.md +145 -0
- package/lib/module/modules/data-table/index.js +10 -0
- package/lib/module/modules/date-picker/Calendar.js +368 -0
- package/lib/module/modules/date-picker/Calendar.keys.js +23 -0
- package/lib/module/modules/date-picker/Calendar.keys.web.js +83 -0
- package/lib/module/modules/date-picker/DatePicker.js +162 -0
- package/lib/module/modules/date-picker/DatePicker.variants.js +686 -0
- package/lib/module/modules/date-picker/DateRangePicker.js +87 -0
- package/lib/module/modules/date-picker/MODULE.md +169 -0
- package/lib/module/modules/date-picker/PickerField.js +142 -0
- package/lib/module/modules/date-picker/PickerShell.js +132 -0
- package/lib/module/modules/date-picker/TimePicker.js +184 -0
- package/lib/module/modules/date-picker/index.js +14 -0
- package/lib/module/modules/divider/Divider.js +8 -7
- package/lib/module/modules/divider/MODULE.md +6 -0
- package/lib/module/modules/drawer/Drawer.js +140 -58
- package/lib/module/modules/drawer/Drawer.variants.js +3 -16
- package/lib/module/modules/drawer/MODULE.md +90 -118
- package/lib/module/modules/empty-state/EmptyState.js +32 -18
- package/lib/module/modules/empty-state/EmptyState.variants.js +9 -0
- package/lib/module/modules/empty-state/MODULE.md +25 -7
- package/lib/module/modules/fab/Fab.js +212 -0
- package/lib/module/modules/fab/Fab.variants.js +346 -0
- package/lib/module/modules/fab/FabGroup.js +334 -0
- package/lib/module/modules/fab/MODULE.md +181 -0
- package/lib/module/modules/fab/index.js +13 -0
- package/lib/module/modules/file-grid/FileGrid.js +149 -0
- package/lib/module/modules/file-grid/FileGrid.variants.js +51 -0
- package/lib/module/modules/file-grid/MODULE.md +12 -0
- package/lib/module/modules/file-grid/index.js +4 -0
- package/lib/module/modules/file-upload/FileUpload.js +124 -34
- package/lib/module/modules/file-upload/FileUpload.variants.js +50 -7
- package/lib/module/modules/file-upload/MODULE.md +22 -4
- package/lib/module/modules/filter-sheet/FilterChip.js +25 -19
- package/lib/module/modules/filter-sheet/FilterSheet.js +17 -11
- package/lib/module/modules/filter-sheet/FilterSheet.variants.js +24 -5
- package/lib/module/modules/filter-sheet/FilterSheetBody.js +168 -82
- package/lib/module/modules/filter-sheet/MODULE.md +22 -1
- package/lib/module/modules/folder-row/FolderRow.js +132 -0
- package/lib/module/modules/folder-row/FolderRow.variants.js +49 -0
- package/lib/module/modules/folder-row/MODULE.md +71 -0
- package/lib/module/modules/folder-row/index.js +4 -0
- package/lib/module/modules/form-field/FormField.js +104 -0
- package/lib/module/modules/form-field/FormField.variants.js +88 -0
- package/lib/module/modules/form-field/MODULE.md +103 -0
- package/lib/module/modules/form-field/index.js +4 -0
- package/lib/module/modules/gantt/Gantt.js +218 -0
- package/lib/module/modules/gantt/Gantt.variants.js +141 -0
- package/lib/module/modules/gantt/MODULE.md +71 -0
- package/lib/module/modules/gantt/index.js +5 -0
- package/lib/module/modules/image-viewer/ImageViewer.js +235 -0
- package/lib/module/modules/image-viewer/ImageViewer.variants.js +6 -0
- package/lib/module/modules/image-viewer/MODULE.md +57 -0
- package/lib/module/modules/image-viewer/index.js +4 -0
- package/lib/module/modules/input/Input.js +106 -48
- package/lib/module/modules/input/Input.variants.js +18 -4
- package/lib/module/modules/input/MODULE.md +36 -6
- package/lib/module/modules/limit-reached-modal/LimitReachedModal.js +90 -0
- package/lib/module/modules/limit-reached-modal/LimitReachedModal.variants.js +108 -0
- package/lib/module/modules/limit-reached-modal/MODULE.md +94 -0
- package/lib/module/modules/limit-reached-modal/index.js +11 -0
- package/lib/module/modules/list-item/ListItem.js +45 -28
- package/lib/module/modules/list-item/MODULE.md +6 -0
- package/lib/module/modules/markdown/MODULE.md +32 -5
- package/lib/module/modules/markdown/Markdown.js +54 -20
- package/lib/module/modules/markdown/Markdown.variants.js +6 -1
- package/lib/module/modules/markdown/parseMarkdown.js +3 -3
- package/lib/module/modules/menu/MODULE.md +45 -14
- package/lib/module/modules/menu/Menu.js +174 -65
- package/lib/module/modules/menu/Menu.variants.js +10 -0
- package/lib/module/modules/message-bubble/MODULE.md +38 -0
- package/lib/module/modules/message-bubble/MessageBubble.js +55 -0
- package/lib/module/modules/message-bubble/MessageBubble.variants.js +57 -0
- package/lib/module/modules/message-bubble/index.js +4 -0
- package/lib/module/modules/modal/MODULE.md +29 -3
- package/lib/module/modules/modal/Modal.js +72 -22
- package/lib/module/modules/more-items/MODULE.md +72 -0
- package/lib/module/modules/more-items/MoreItems.js +162 -0
- package/lib/module/modules/more-items/MoreItems.variants.js +80 -0
- package/lib/module/modules/more-items/index.js +4 -0
- package/lib/module/modules/multi-select/MODULE.md +84 -18
- package/lib/module/modules/multi-select/MultiSelect.js +217 -105
- package/lib/module/modules/multi-select/MultiSelect.variants.js +28 -5
- package/lib/module/modules/number-input/MODULE.md +39 -5
- package/lib/module/modules/number-input/NumberInput.js +41 -11
- package/lib/module/modules/number-input/NumberInput.variants.js +39 -5
- package/lib/module/modules/org-switcher/MODULE.md +121 -0
- package/lib/module/modules/org-switcher/OrgSwitcher.js +284 -0
- package/lib/module/modules/org-switcher/OrgSwitcher.variants.js +186 -0
- package/lib/module/modules/org-switcher/index.js +9 -0
- package/lib/module/modules/pagination/MODULE.md +163 -0
- package/lib/module/modules/pagination/Pagination.js +197 -0
- package/lib/module/modules/pagination/Pagination.variants.js +307 -0
- package/lib/module/modules/pagination/PaginationControls.js +193 -0
- package/lib/module/modules/pagination/index.js +15 -0
- package/lib/module/modules/pin-input/MODULE.md +29 -14
- package/lib/module/modules/pin-input/PinInput.js +111 -80
- package/lib/module/modules/pin-input/PinInput.variants.js +13 -5
- package/lib/module/modules/progress-bar/MODULE.md +17 -7
- package/lib/module/modules/progress-bar/ProgressBar.js +97 -56
- package/lib/module/modules/progress-bar/ProgressBar.variants.js +16 -18
- package/lib/module/modules/radio-group/MODULE.md +40 -14
- package/lib/module/modules/radio-group/RadioGroup.js +71 -7
- package/lib/module/modules/radio-group/RadioGroup.variants.js +46 -10
- package/lib/module/modules/reorder/MODULE.md +104 -97
- package/lib/module/modules/reorder/Reorder.js +233 -197
- package/lib/module/modules/reorder/Reorder.variants.js +35 -13
- package/lib/module/modules/rich-text/MODULE.md +52 -0
- package/lib/module/modules/rich-text/RichText.js +362 -0
- package/lib/module/modules/rich-text/RichText.variants.js +17 -0
- package/lib/module/modules/rich-text/index.js +5 -0
- package/lib/module/modules/rich-text/parseRichText.js +133 -0
- package/lib/module/modules/rich-text-editor/MODULE.md +225 -0
- package/lib/module/modules/rich-text-editor/RichTextEditor.js +413 -0
- package/lib/module/modules/rich-text-editor/RichTextEditor.variants.js +316 -0
- package/lib/module/modules/rich-text-editor/index.js +10 -0
- package/lib/module/modules/screen/MODULE.md +57 -0
- package/lib/module/modules/screen/Screen.js +106 -0
- package/lib/module/modules/screen/Screen.variants.js +43 -0
- package/lib/module/modules/screen/index.js +10 -0
- package/lib/module/modules/search-bar/MODULE.md +114 -0
- package/lib/module/modules/search-bar/SearchBar.js +256 -0
- package/lib/module/modules/search-bar/SearchBar.variants.js +205 -0
- package/lib/module/modules/search-bar/index.js +12 -0
- package/lib/module/modules/section/MODULE.md +39 -0
- package/lib/module/modules/section/Section.js +42 -0
- package/lib/module/modules/section/Section.variants.js +29 -0
- package/lib/module/modules/section/index.js +10 -0
- package/lib/module/modules/section-list/MODULE.md +18 -0
- package/lib/module/modules/section-list/SectionList.js +64 -0
- package/lib/module/modules/section-list/SectionList.variants.js +11 -0
- package/lib/module/modules/section-list/index.js +4 -0
- package/lib/module/modules/segmented-control/MODULE.md +124 -0
- package/lib/module/modules/segmented-control/SegmentedControl.js +158 -0
- package/lib/module/modules/segmented-control/SegmentedControl.variants.js +167 -0
- package/lib/module/modules/segmented-control/index.js +13 -0
- package/lib/module/modules/select/MODULE.md +81 -14
- package/lib/module/modules/select/Select.js +196 -94
- package/lib/module/modules/select/Select.variants.js +28 -5
- package/lib/module/modules/skeleton/MODULE.md +27 -7
- package/lib/module/modules/skeleton/Skeleton.js +52 -38
- package/lib/module/modules/skeleton/Skeleton.variants.js +9 -8
- package/lib/module/modules/slider/MODULE.md +31 -5
- package/lib/module/modules/slider/Slider.js +67 -10
- package/lib/module/modules/slider/Slider.variants.js +60 -13
- package/lib/module/modules/spinner/MODULE.md +16 -6
- package/lib/module/modules/spinner/Spinner.js +20 -16
- package/lib/module/modules/spinner/Spinner.variants.js +5 -3
- package/lib/module/modules/stage-progress/MODULE.md +64 -0
- package/lib/module/modules/stage-progress/StageProgress.js +174 -0
- package/lib/module/modules/stage-progress/StageProgress.variants.js +164 -0
- package/lib/module/modules/stage-progress/index.js +4 -0
- package/lib/module/modules/stat-tile/MODULE.md +9 -2
- package/lib/module/modules/stat-tile/StatTile.js +70 -33
- package/lib/module/modules/stat-tile/StatTile.variants.js +6 -4
- package/lib/module/modules/state-block/MODULE.md +52 -0
- package/lib/module/modules/state-block/StateBlock.js +131 -0
- package/lib/module/modules/state-block/StateBlock.variants.js +55 -0
- package/lib/module/modules/state-block/index.js +10 -0
- package/lib/module/modules/stepper/MODULE.md +33 -6
- package/lib/module/modules/stepper/Stepper.js +108 -39
- package/lib/module/modules/stepper/Stepper.variants.js +6 -6
- package/lib/module/modules/swipeable-row/MODULE.md +120 -0
- package/lib/module/modules/swipeable-row/SwipeableRow.js +244 -0
- package/lib/module/modules/swipeable-row/SwipeableRow.variants.js +80 -0
- package/lib/module/modules/swipeable-row/index.js +4 -0
- package/lib/module/modules/switch/MODULE.md +14 -0
- package/lib/module/modules/switch/Switch.js +1 -1
- package/lib/module/modules/switch/Switch.variants.js +8 -0
- package/lib/module/modules/tabs/MODULE.md +47 -13
- package/lib/module/modules/tabs/Tabs.js +121 -72
- package/lib/module/modules/tabs/Tabs.variants.js +30 -8
- package/lib/module/modules/text/MODULE.md +51 -0
- package/lib/module/modules/text/Text.js +47 -0
- package/lib/module/modules/text/Text.variants.js +98 -0
- package/lib/module/modules/text/index.js +4 -0
- package/lib/module/modules/textarea/MODULE.md +29 -13
- package/lib/module/modules/textarea/Textarea.js +90 -45
- package/lib/module/modules/textarea/Textarea.variants.js +14 -9
- package/lib/module/modules/timeline/MODULE.md +39 -7
- package/lib/module/modules/timeline/Timeline.js +151 -77
- package/lib/module/modules/timeline/Timeline.variants.js +13 -0
- package/lib/module/modules/toast/MODULE.md +66 -7
- package/lib/module/modules/toast/Toast.js +93 -27
- package/lib/module/modules/toast/Toast.variants.js +37 -1
- package/lib/module/modules/toast/toastScreenReader.js +69 -0
- package/lib/module/modules/tooltip/MODULE.md +78 -28
- package/lib/module/modules/tooltip/Tooltip.js +93 -43
- package/lib/module/modules/tooltip/Tooltip.variants.js +3 -4
- package/lib/module/modules/typing-indicator/MODULE.md +48 -0
- package/lib/module/modules/typing-indicator/TypingIndicator.js +98 -0
- package/lib/module/modules/typing-indicator/TypingIndicator.variants.js +55 -0
- package/lib/module/modules/typing-indicator/index.js +4 -0
- package/lib/module/modules/unread-badge/MODULE.md +20 -0
- package/lib/module/modules/unread-badge/UnreadBadge.js +45 -0
- package/lib/module/modules/unread-badge/UnreadBadge.variants.js +66 -0
- package/lib/module/modules/unread-badge/index.js +4 -0
- package/lib/module/test/mocks/flashList.js +5 -0
- package/lib/module/test/perfHelpers.js +18 -0
- package/lib/module/theme/MODULE.md +6 -0
- package/lib/module/theme/hooks.js +11 -0
- package/lib/module/theme/index.js +3 -6
- package/lib/module/theme/platform/MODULE.md +6 -0
- package/lib/module/theme/platform/motion.native.js +15 -0
- package/lib/module/theme/provider/PixelizeProvider.js +9 -47
- package/lib/module/theme/provider/ThemeContext.js +6 -0
- package/lib/module/theme/provider/colorModeStorage.js +2 -2
- package/lib/module/theme/provider/index.js +1 -0
- package/lib/module/theme/provider/loadPalette.js +75 -0
- package/lib/module/theme/provider/types.js +4 -0
- package/lib/module/theme/provider/useTheme.js +1 -2
- package/lib/module/theme/provider/useThemeMode.js +1 -1
- package/lib/module/theme/tokens/roles/index.js +9 -3
- package/lib/typescript/core/a11y/announce.d.ts +20 -0
- package/lib/typescript/core/a11y/announce.web.d.ts +27 -0
- package/lib/typescript/core/a11y/index.d.ts +21 -2
- package/lib/typescript/core/a11y/keyboard.d.ts +45 -0
- package/lib/typescript/core/a11y/keyboard.web.d.ts +69 -0
- package/lib/typescript/core/a11y/labels.d.ts +19 -0
- package/lib/typescript/core/device/index.d.ts +16 -0
- package/lib/typescript/core/heading/index.d.ts +45 -0
- package/lib/typescript/core/icon/Icon.d.ts +18 -0
- package/lib/typescript/core/icon/icons/arrow-down.d.ts +3 -0
- package/lib/typescript/core/icon/icons/arrow-left.d.ts +3 -0
- package/lib/typescript/core/icon/icons/arrow-right.d.ts +3 -0
- package/lib/typescript/core/icon/icons/arrow-up.d.ts +3 -0
- package/lib/typescript/core/icon/icons/at-sign.d.ts +3 -0
- package/lib/typescript/core/icon/icons/bell.d.ts +3 -0
- package/lib/typescript/core/icon/icons/bold.d.ts +3 -0
- package/lib/typescript/core/icon/icons/building-2.d.ts +3 -0
- package/lib/typescript/core/icon/icons/calendar.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chart-column.d.ts +3 -0
- package/lib/typescript/core/icon/icons/check.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevron-down.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevron-left.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevron-right.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevron-up.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevrons-left.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevrons-right.d.ts +3 -0
- package/lib/typescript/core/icon/icons/chevrons-up-down.d.ts +3 -0
- package/lib/typescript/core/icon/icons/circle-alert.d.ts +3 -0
- package/lib/typescript/core/icon/icons/circle-check.d.ts +3 -0
- package/lib/typescript/core/icon/icons/clock.d.ts +3 -0
- package/lib/typescript/core/icon/icons/code.d.ts +3 -0
- package/lib/typescript/core/icon/icons/download.d.ts +3 -0
- package/lib/typescript/core/icon/icons/external-link.d.ts +3 -0
- package/lib/typescript/core/icon/icons/eye.d.ts +3 -0
- package/lib/typescript/core/icon/icons/file-text.d.ts +3 -0
- package/lib/typescript/core/icon/icons/filter.d.ts +3 -0
- package/lib/typescript/core/icon/icons/flag.d.ts +3 -0
- package/lib/typescript/core/icon/icons/folder.d.ts +3 -0
- package/lib/typescript/core/icon/icons/heading-1.d.ts +3 -0
- package/lib/typescript/core/icon/icons/heading-2.d.ts +3 -0
- package/lib/typescript/core/icon/icons/heading-3.d.ts +3 -0
- package/lib/typescript/core/icon/icons/image.d.ts +3 -0
- package/lib/typescript/core/icon/icons/inbox.d.ts +3 -0
- package/lib/typescript/core/icon/icons/info.d.ts +3 -0
- package/lib/typescript/core/icon/icons/italic.d.ts +3 -0
- package/lib/typescript/core/icon/icons/kanban.d.ts +3 -0
- package/lib/typescript/core/icon/icons/layers.d.ts +3 -0
- package/lib/typescript/core/icon/icons/layout-dashboard.d.ts +3 -0
- package/lib/typescript/core/icon/icons/layout-template.d.ts +3 -0
- package/lib/typescript/core/icon/icons/life-buoy.d.ts +3 -0
- package/lib/typescript/core/icon/icons/link.d.ts +3 -0
- package/lib/typescript/core/icon/icons/list-checks.d.ts +3 -0
- package/lib/typescript/core/icon/icons/list-ordered.d.ts +3 -0
- package/lib/typescript/core/icon/icons/list-todo.d.ts +3 -0
- package/lib/typescript/core/icon/icons/list.d.ts +3 -0
- package/lib/typescript/core/icon/icons/log-out.d.ts +3 -0
- package/lib/typescript/core/icon/icons/map.d.ts +3 -0
- package/lib/typescript/core/icon/icons/message-square.d.ts +3 -0
- package/lib/typescript/core/icon/icons/milestone.d.ts +3 -0
- package/lib/typescript/core/icon/icons/minus.d.ts +3 -0
- package/lib/typescript/core/icon/icons/more-horizontal.d.ts +3 -0
- package/lib/typescript/core/icon/icons/paperclip.d.ts +3 -0
- package/lib/typescript/core/icon/icons/pencil.d.ts +3 -0
- package/lib/typescript/core/icon/icons/plus.d.ts +3 -0
- package/lib/typescript/core/icon/icons/quote.d.ts +3 -0
- package/lib/typescript/core/icon/icons/refresh-cw.d.ts +3 -0
- package/lib/typescript/core/icon/icons/save.d.ts +3 -0
- package/lib/typescript/core/icon/icons/search.d.ts +3 -0
- package/lib/typescript/core/icon/icons/send.d.ts +3 -0
- package/lib/typescript/core/icon/icons/settings.d.ts +3 -0
- package/lib/typescript/core/icon/icons/share.d.ts +3 -0
- package/lib/typescript/core/icon/icons/square-code.d.ts +3 -0
- package/lib/typescript/core/icon/icons/star.d.ts +3 -0
- package/lib/typescript/core/icon/icons/strikethrough.d.ts +3 -0
- package/lib/typescript/core/icon/icons/tag.d.ts +3 -0
- package/lib/typescript/core/icon/icons/trash.d.ts +3 -0
- package/lib/typescript/core/icon/icons/triangle-alert.d.ts +3 -0
- package/lib/typescript/core/icon/icons/underline.d.ts +3 -0
- package/lib/typescript/core/icon/icons/upload.d.ts +3 -0
- package/lib/typescript/core/icon/icons/user.d.ts +3 -0
- package/lib/typescript/core/icon/icons/users.d.ts +3 -0
- package/lib/typescript/core/icon/icons/x.d.ts +3 -0
- package/lib/typescript/core/icon/index.d.ts +6 -94
- package/lib/typescript/core/icon/names.d.ts +2 -0
- package/lib/typescript/core/icon/resolve.d.ts +4 -0
- package/lib/typescript/core/icon/types.d.ts +13 -0
- package/lib/typescript/core/list/VirtualList.d.ts +55 -0
- package/lib/typescript/core/list/index.d.ts +3 -0
- package/lib/typescript/core/media/MediaImage.d.ts +28 -0
- package/lib/typescript/core/media/expoImage.d.ts +14 -0
- package/lib/typescript/core/media/index.d.ts +7 -0
- package/lib/typescript/core/media/pickers.d.ts +27 -0
- package/lib/typescript/core/motion/config.d.ts +56 -0
- package/lib/typescript/core/motion/index.d.ts +8 -0
- package/lib/typescript/core/motion/presets.d.ts +49 -0
- package/lib/typescript/core/motion/useAnimatedValue.d.ts +11 -0
- package/lib/typescript/core/motion/useMotion.d.ts +34 -0
- package/lib/typescript/core/style/index.d.ts +3 -0
- package/lib/typescript/core/style/sx.d.ts +86 -0
- package/lib/typescript/core/style/useThemedStyles.d.ts +5 -0
- package/lib/typescript/index.d.ts +134 -2
- package/lib/typescript/modules/accordion/Accordion.d.ts +12 -23
- package/lib/typescript/modules/accordion/Accordion.variants.d.ts +5 -5
- package/lib/typescript/modules/alert-dialog/AlertDialog.variants.d.ts +1 -1
- package/lib/typescript/modules/app-bar/AppBar.d.ts +37 -0
- package/lib/typescript/modules/app-bar/AppBar.variants.d.ts +35 -0
- package/lib/typescript/modules/app-bar/index.d.ts +9 -0
- package/lib/typescript/modules/avatar/Avatar.d.ts +23 -3
- package/lib/typescript/modules/avatar/Avatar.variants.d.ts +32 -1
- package/lib/typescript/modules/avatar/index.d.ts +1 -1
- package/lib/typescript/modules/avatar-group/AvatarGroup.d.ts +28 -0
- package/lib/typescript/modules/avatar-group/AvatarGroup.variants.d.ts +75 -0
- package/lib/typescript/modules/avatar-group/index.d.ts +9 -0
- package/lib/typescript/modules/badge/Badge.d.ts +3 -1
- package/lib/typescript/modules/badge/Badge.variants.d.ts +8 -4
- package/lib/typescript/modules/banner/Banner.d.ts +35 -0
- package/lib/typescript/modules/banner/Banner.variants.d.ts +49 -0
- package/lib/typescript/modules/banner/index.d.ts +5 -0
- package/lib/typescript/modules/bottom-nav/BottomNav.d.ts +9 -8
- package/lib/typescript/modules/bottom-nav/BottomNav.variants.d.ts +22 -9
- package/lib/typescript/modules/bottom-nav/BottomNavTab.d.ts +34 -0
- package/lib/typescript/modules/bottom-sheet/BottomSheet.d.ts +29 -0
- package/lib/typescript/modules/bottom-sheet/BottomSheet.variants.d.ts +13 -0
- package/lib/typescript/modules/bottom-sheet/index.d.ts +3 -0
- package/lib/typescript/modules/button/Button.d.ts +21 -0
- package/lib/typescript/modules/button/Button.variants.d.ts +22 -9
- package/lib/typescript/modules/button-group/ButtonGroup.d.ts +4 -2
- package/lib/typescript/modules/button-group/ButtonGroup.variants.d.ts +18 -5
- package/lib/typescript/modules/card/Card.variants.d.ts +2 -2
- package/lib/typescript/modules/charts/BarChart.d.ts +26 -0
- package/lib/typescript/modules/charts/ChartLegend.d.ts +16 -0
- package/lib/typescript/modules/charts/Charts.variants.d.ts +201 -2
- package/lib/typescript/modules/charts/DonutChart.d.ts +3 -0
- package/lib/typescript/modules/charts/LineChart.d.ts +30 -0
- package/lib/typescript/modules/charts/PieChart.d.ts +18 -0
- package/lib/typescript/modules/charts/index.d.ts +6 -0
- package/lib/typescript/modules/checkbox/Checkbox.d.ts +4 -1
- package/lib/typescript/modules/checkbox/Checkbox.variants.d.ts +14 -9
- package/lib/typescript/modules/chip/Chip.d.ts +38 -0
- package/lib/typescript/modules/chip/Chip.variants.d.ts +198 -0
- package/lib/typescript/modules/chip/ChipGroup.d.ts +22 -0
- package/lib/typescript/modules/chip/index.d.ts +12 -0
- package/lib/typescript/modules/combobox/Combobox.d.ts +81 -0
- package/lib/typescript/modules/combobox/Combobox.variants.d.ts +212 -0
- package/lib/typescript/modules/combobox/comboboxKeys.d.ts +25 -0
- package/lib/typescript/modules/combobox/comboboxKeys.web.d.ts +23 -0
- package/lib/typescript/modules/combobox/index.d.ts +11 -0
- package/lib/typescript/modules/composer/Composer.d.ts +28 -0
- package/lib/typescript/modules/composer/Composer.variants.d.ts +7 -0
- package/lib/typescript/modules/composer/index.d.ts +3 -0
- package/lib/typescript/modules/copy-button/CopyButton.d.ts +21 -0
- package/lib/typescript/modules/copy-button/CopyButton.variants.d.ts +42 -0
- package/lib/typescript/modules/copy-button/index.d.ts +4 -0
- package/lib/typescript/modules/data-table/DataTable.d.ts +44 -0
- package/lib/typescript/modules/data-table/DataTable.variants.d.ts +118 -0
- package/lib/typescript/modules/data-table/index.d.ts +9 -0
- package/lib/typescript/modules/date-picker/Calendar.d.ts +42 -0
- package/lib/typescript/modules/date-picker/Calendar.keys.d.ts +19 -0
- package/lib/typescript/modules/date-picker/Calendar.keys.web.d.ts +35 -0
- package/lib/typescript/modules/date-picker/DatePicker.d.ts +40 -0
- package/lib/typescript/modules/date-picker/DatePicker.variants.d.ts +322 -0
- package/lib/typescript/modules/date-picker/DateRangePicker.d.ts +32 -0
- package/lib/typescript/modules/date-picker/PickerField.d.ts +26 -0
- package/lib/typescript/modules/date-picker/PickerShell.d.ts +29 -0
- package/lib/typescript/modules/date-picker/TimePicker.d.ts +20 -0
- package/lib/typescript/modules/date-picker/index.d.ts +16 -0
- package/lib/typescript/modules/divider/Divider.variants.d.ts +2 -2
- package/lib/typescript/modules/drawer/Drawer.d.ts +2 -1
- package/lib/typescript/modules/drawer/Drawer.variants.d.ts +4 -13
- package/lib/typescript/modules/empty-state/EmptyState.d.ts +7 -4
- package/lib/typescript/modules/empty-state/EmptyState.variants.d.ts +7 -1
- package/lib/typescript/modules/fab/Fab.d.ts +74 -0
- package/lib/typescript/modules/fab/Fab.variants.d.ts +229 -0
- package/lib/typescript/modules/fab/FabGroup.d.ts +66 -0
- package/lib/typescript/modules/fab/index.d.ts +12 -0
- package/lib/typescript/modules/file-grid/FileGrid.d.ts +26 -0
- package/lib/typescript/modules/file-grid/FileGrid.variants.d.ts +26 -0
- package/lib/typescript/modules/file-grid/index.d.ts +4 -0
- package/lib/typescript/modules/file-upload/FileUpload.d.ts +3 -0
- package/lib/typescript/modules/file-upload/FileUpload.variants.d.ts +22 -5
- package/lib/typescript/modules/filter-sheet/FilterSheet.variants.d.ts +30 -5
- package/lib/typescript/modules/filter-sheet/FilterSheetBody.d.ts +13 -8
- package/lib/typescript/modules/folder-row/FolderRow.d.ts +24 -0
- package/lib/typescript/modules/folder-row/FolderRow.variants.d.ts +29 -0
- package/lib/typescript/modules/folder-row/index.d.ts +3 -0
- package/lib/typescript/modules/form-field/FormField.d.ts +29 -0
- package/lib/typescript/modules/form-field/FormField.variants.d.ts +93 -0
- package/lib/typescript/modules/form-field/index.d.ts +4 -0
- package/lib/typescript/modules/gantt/Gantt.d.ts +19 -0
- package/lib/typescript/modules/gantt/Gantt.variants.d.ts +82 -0
- package/lib/typescript/modules/gantt/index.d.ts +5 -0
- package/lib/typescript/modules/image-viewer/ImageViewer.d.ts +27 -0
- package/lib/typescript/modules/image-viewer/ImageViewer.variants.d.ts +3 -0
- package/lib/typescript/modules/image-viewer/index.d.ts +3 -0
- package/lib/typescript/modules/input/Input.d.ts +9 -1
- package/lib/typescript/modules/input/Input.variants.d.ts +26 -6
- package/lib/typescript/modules/limit-reached-modal/LimitReachedModal.d.ts +34 -0
- package/lib/typescript/modules/limit-reached-modal/LimitReachedModal.variants.d.ts +46 -0
- package/lib/typescript/modules/limit-reached-modal/index.d.ts +10 -0
- package/lib/typescript/modules/list-item/ListItem.d.ts +6 -0
- package/lib/typescript/modules/list-item/ListItem.variants.d.ts +1 -1
- package/lib/typescript/modules/markdown/Markdown.d.ts +6 -0
- package/lib/typescript/modules/markdown/Markdown.variants.d.ts +8 -2
- package/lib/typescript/modules/markdown/parseMarkdown.d.ts +3 -2
- package/lib/typescript/modules/menu/Menu.d.ts +8 -18
- package/lib/typescript/modules/menu/Menu.variants.d.ts +8 -1
- package/lib/typescript/modules/message-bubble/MessageBubble.d.ts +25 -0
- package/lib/typescript/modules/message-bubble/MessageBubble.variants.d.ts +31 -0
- package/lib/typescript/modules/message-bubble/index.d.ts +4 -0
- package/lib/typescript/modules/modal/Modal.d.ts +12 -0
- package/lib/typescript/modules/modal/Modal.variants.d.ts +1 -1
- package/lib/typescript/modules/more-items/MoreItems.d.ts +15 -0
- package/lib/typescript/modules/more-items/MoreItems.variants.d.ts +30 -0
- package/lib/typescript/modules/more-items/index.d.ts +4 -0
- package/lib/typescript/modules/multi-select/MultiSelect.d.ts +1 -16
- package/lib/typescript/modules/multi-select/MultiSelect.variants.d.ts +24 -5
- package/lib/typescript/modules/number-input/NumberInput.d.ts +6 -0
- package/lib/typescript/modules/number-input/NumberInput.variants.d.ts +57 -7
- package/lib/typescript/modules/org-switcher/OrgSwitcher.d.ts +44 -0
- package/lib/typescript/modules/org-switcher/OrgSwitcher.variants.d.ts +139 -0
- package/lib/typescript/modules/org-switcher/index.d.ts +8 -0
- package/lib/typescript/modules/pagination/Pagination.d.ts +45 -0
- package/lib/typescript/modules/pagination/Pagination.variants.d.ts +240 -0
- package/lib/typescript/modules/pagination/PaginationControls.d.ts +50 -0
- package/lib/typescript/modules/pagination/index.d.ts +14 -0
- package/lib/typescript/modules/pin-input/PinInput.d.ts +6 -0
- package/lib/typescript/modules/pin-input/PinInput.variants.d.ts +22 -5
- package/lib/typescript/modules/progress-bar/ProgressBar.d.ts +8 -4
- package/lib/typescript/modules/progress-bar/ProgressBar.variants.d.ts +13 -15
- package/lib/typescript/modules/radio-group/RadioGroup.d.ts +6 -0
- package/lib/typescript/modules/radio-group/RadioGroup.variants.d.ts +32 -11
- package/lib/typescript/modules/reorder/Reorder.d.ts +28 -23
- package/lib/typescript/modules/reorder/Reorder.variants.d.ts +25 -9
- package/lib/typescript/modules/rich-text/RichText.d.ts +15 -0
- package/lib/typescript/modules/rich-text/RichText.variants.d.ts +15 -0
- package/lib/typescript/modules/rich-text/index.d.ts +5 -0
- package/lib/typescript/modules/rich-text/parseRichText.d.ts +30 -0
- package/lib/typescript/modules/rich-text-editor/RichTextEditor.d.ts +62 -0
- package/lib/typescript/modules/rich-text-editor/RichTextEditor.variants.d.ts +139 -0
- package/lib/typescript/modules/rich-text-editor/index.d.ts +9 -0
- package/lib/typescript/modules/screen/Screen.d.ts +36 -0
- package/lib/typescript/modules/screen/Screen.variants.d.ts +21 -0
- package/lib/typescript/modules/screen/index.d.ts +9 -0
- package/lib/typescript/modules/search-bar/SearchBar.d.ts +47 -0
- package/lib/typescript/modules/search-bar/SearchBar.variants.d.ts +179 -0
- package/lib/typescript/modules/search-bar/index.d.ts +11 -0
- package/lib/typescript/modules/section/Section.d.ts +17 -0
- package/lib/typescript/modules/section/Section.variants.d.ts +12 -0
- package/lib/typescript/modules/section/index.d.ts +8 -0
- package/lib/typescript/modules/section-list/SectionList.d.ts +26 -0
- package/lib/typescript/modules/section-list/SectionList.variants.d.ts +3 -0
- package/lib/typescript/modules/section-list/index.d.ts +3 -0
- package/lib/typescript/modules/segmented-control/SegmentedControl.d.ts +45 -0
- package/lib/typescript/modules/segmented-control/SegmentedControl.variants.d.ts +143 -0
- package/lib/typescript/modules/segmented-control/index.d.ts +11 -0
- package/lib/typescript/modules/select/Select.d.ts +1 -14
- package/lib/typescript/modules/select/Select.variants.d.ts +24 -5
- package/lib/typescript/modules/skeleton/Skeleton.d.ts +5 -0
- package/lib/typescript/modules/skeleton/Skeleton.variants.d.ts +10 -9
- package/lib/typescript/modules/slider/Slider.variants.d.ts +35 -14
- package/lib/typescript/modules/spinner/Spinner.variants.d.ts +6 -4
- package/lib/typescript/modules/stage-progress/StageProgress.d.ts +18 -0
- package/lib/typescript/modules/stage-progress/StageProgress.variants.d.ts +98 -0
- package/lib/typescript/modules/stage-progress/index.d.ts +4 -0
- package/lib/typescript/modules/stat-tile/StatTile.d.ts +4 -0
- package/lib/typescript/modules/stat-tile/StatTile.variants.d.ts +7 -5
- package/lib/typescript/modules/state-block/StateBlock.d.ts +51 -0
- package/lib/typescript/modules/state-block/StateBlock.variants.d.ts +30 -0
- package/lib/typescript/modules/state-block/index.d.ts +10 -0
- package/lib/typescript/modules/stepper/Stepper.d.ts +4 -0
- package/lib/typescript/modules/stepper/Stepper.variants.d.ts +7 -7
- package/lib/typescript/modules/swipeable-row/SwipeableRow.d.ts +35 -0
- package/lib/typescript/modules/swipeable-row/SwipeableRow.variants.d.ts +27 -0
- package/lib/typescript/modules/swipeable-row/index.d.ts +4 -0
- package/lib/typescript/modules/switch/Switch.variants.d.ts +9 -1
- package/lib/typescript/modules/tabs/Tabs.d.ts +8 -6
- package/lib/typescript/modules/tabs/Tabs.variants.d.ts +20 -7
- package/lib/typescript/modules/text/Text.d.ts +23 -0
- package/lib/typescript/modules/text/Text.variants.d.ts +18 -0
- package/lib/typescript/modules/text/index.d.ts +4 -0
- package/lib/typescript/modules/textarea/Textarea.d.ts +5 -0
- package/lib/typescript/modules/textarea/Textarea.variants.d.ts +15 -8
- package/lib/typescript/modules/timeline/Timeline.d.ts +9 -13
- package/lib/typescript/modules/timeline/Timeline.variants.d.ts +17 -1
- package/lib/typescript/modules/toast/Toast.d.ts +13 -3
- package/lib/typescript/modules/toast/Toast.variants.d.ts +31 -3
- package/lib/typescript/modules/toast/index.d.ts +1 -1
- package/lib/typescript/modules/toast/toastScreenReader.d.ts +22 -0
- package/lib/typescript/modules/tooltip/Tooltip.d.ts +34 -11
- package/lib/typescript/modules/tooltip/Tooltip.variants.d.ts +4 -5
- package/lib/typescript/modules/typing-indicator/TypingIndicator.d.ts +28 -0
- package/lib/typescript/modules/typing-indicator/TypingIndicator.variants.d.ts +32 -0
- package/lib/typescript/modules/typing-indicator/index.d.ts +4 -0
- package/lib/typescript/modules/unread-badge/UnreadBadge.d.ts +15 -0
- package/lib/typescript/modules/unread-badge/UnreadBadge.variants.d.ts +56 -0
- package/lib/typescript/modules/unread-badge/index.d.ts +4 -0
- package/lib/typescript/test/mocks/flashList.d.ts +3 -0
- package/lib/typescript/test/perfHelpers.d.ts +9 -0
- package/lib/typescript/theme/hooks.d.ts +11 -0
- package/lib/typescript/theme/index.d.ts +3 -2
- package/lib/typescript/theme/platform/motion.native.d.ts +15 -0
- package/lib/typescript/theme/provider/PixelizeProvider.d.ts +3 -80
- package/lib/typescript/theme/provider/ThemeContext.d.ts +4 -0
- package/lib/typescript/theme/provider/index.d.ts +2 -1
- package/lib/typescript/theme/provider/loadPalette.d.ts +9 -0
- package/lib/typescript/theme/provider/types.d.ts +41 -0
- package/lib/typescript/theme/provider/useTheme.d.ts +1 -2
- package/lib/typescript/theme/provider/useThemeMode.d.ts +1 -1
- package/lib/typescript/theme/tokens/roles/index.d.ts +7 -0
- package/package.json +193 -19
- package/registry.json +172 -2
- package/lib/module/core/a11y/index.js.map +0 -1
- package/lib/module/core/icon/index.js.map +0 -1
- package/lib/module/core/style/index.js.map +0 -1
- package/lib/module/core/style/layoutStyle.js.map +0 -1
- package/lib/module/core/style/variants.js.map +0 -1
- package/lib/module/index.js.map +0 -1
- package/lib/module/modules/accordion/Accordion.js.map +0 -1
- package/lib/module/modules/accordion/Accordion.variants.js.map +0 -1
- package/lib/module/modules/accordion/index.js.map +0 -1
- package/lib/module/modules/alert-dialog/AlertDialog.js.map +0 -1
- package/lib/module/modules/alert-dialog/AlertDialog.variants.js.map +0 -1
- package/lib/module/modules/alert-dialog/index.js.map +0 -1
- package/lib/module/modules/avatar/Avatar.js.map +0 -1
- package/lib/module/modules/avatar/Avatar.variants.js.map +0 -1
- package/lib/module/modules/avatar/index.js.map +0 -1
- package/lib/module/modules/badge/Badge.js.map +0 -1
- package/lib/module/modules/badge/Badge.variants.js.map +0 -1
- package/lib/module/modules/badge/index.js.map +0 -1
- package/lib/module/modules/bottom-nav/BottomNav.js.map +0 -1
- package/lib/module/modules/bottom-nav/BottomNav.search.js.map +0 -1
- package/lib/module/modules/bottom-nav/BottomNav.variants.js.map +0 -1
- package/lib/module/modules/bottom-nav/BottomNavIconWithBadge.js.map +0 -1
- package/lib/module/modules/bottom-nav/BottomNavOverflowSheet.js.map +0 -1
- package/lib/module/modules/bottom-nav/index.js.map +0 -1
- package/lib/module/modules/button/Button.js.map +0 -1
- package/lib/module/modules/button/Button.variants.js.map +0 -1
- package/lib/module/modules/button/index.js.map +0 -1
- package/lib/module/modules/button-group/ButtonGroup.js.map +0 -1
- package/lib/module/modules/button-group/ButtonGroup.variants.js.map +0 -1
- package/lib/module/modules/button-group/index.js.map +0 -1
- package/lib/module/modules/card/Card.js.map +0 -1
- package/lib/module/modules/card/Card.variants.js.map +0 -1
- package/lib/module/modules/card/index.js.map +0 -1
- package/lib/module/modules/charts/BarList.js.map +0 -1
- package/lib/module/modules/charts/Charts.variants.js.map +0 -1
- package/lib/module/modules/charts/DonutChart.js.map +0 -1
- package/lib/module/modules/charts/Sparkline.js.map +0 -1
- package/lib/module/modules/charts/index.js.map +0 -1
- package/lib/module/modules/checkbox/Checkbox.js.map +0 -1
- package/lib/module/modules/checkbox/Checkbox.variants.js.map +0 -1
- package/lib/module/modules/checkbox/index.js.map +0 -1
- package/lib/module/modules/divider/Divider.js.map +0 -1
- package/lib/module/modules/divider/Divider.variants.js.map +0 -1
- package/lib/module/modules/divider/index.js.map +0 -1
- package/lib/module/modules/drawer/Drawer.js.map +0 -1
- package/lib/module/modules/drawer/Drawer.variants.js.map +0 -1
- package/lib/module/modules/drawer/index.js.map +0 -1
- package/lib/module/modules/empty-state/EmptyState.js.map +0 -1
- package/lib/module/modules/empty-state/EmptyState.variants.js.map +0 -1
- package/lib/module/modules/empty-state/index.js.map +0 -1
- package/lib/module/modules/file-upload/FileUpload.js.map +0 -1
- package/lib/module/modules/file-upload/FileUpload.variants.js.map +0 -1
- package/lib/module/modules/file-upload/index.js.map +0 -1
- package/lib/module/modules/filter-sheet/FilterChip.js.map +0 -1
- package/lib/module/modules/filter-sheet/FilterSheet.js.map +0 -1
- package/lib/module/modules/filter-sheet/FilterSheet.variants.js.map +0 -1
- package/lib/module/modules/filter-sheet/FilterSheetBody.js.map +0 -1
- package/lib/module/modules/filter-sheet/filterSheet.helpers.js.map +0 -1
- package/lib/module/modules/filter-sheet/index.js.map +0 -1
- package/lib/module/modules/input/Input.js.map +0 -1
- package/lib/module/modules/input/Input.variants.js.map +0 -1
- package/lib/module/modules/input/index.js.map +0 -1
- package/lib/module/modules/list-item/ListItem.js.map +0 -1
- package/lib/module/modules/list-item/ListItem.variants.js.map +0 -1
- package/lib/module/modules/list-item/index.js.map +0 -1
- package/lib/module/modules/markdown/Markdown.js.map +0 -1
- package/lib/module/modules/markdown/Markdown.variants.js.map +0 -1
- package/lib/module/modules/markdown/index.js.map +0 -1
- package/lib/module/modules/markdown/parseMarkdown.js.map +0 -1
- package/lib/module/modules/menu/Menu.js.map +0 -1
- package/lib/module/modules/menu/Menu.variants.js.map +0 -1
- package/lib/module/modules/menu/index.js.map +0 -1
- package/lib/module/modules/modal/Modal.js.map +0 -1
- package/lib/module/modules/modal/Modal.variants.js.map +0 -1
- package/lib/module/modules/modal/ModalPortalContext.js.map +0 -1
- package/lib/module/modules/modal/ModalPortalProvider.js.map +0 -1
- package/lib/module/modules/modal/index.js.map +0 -1
- package/lib/module/modules/modal/renderWebPortal.js.map +0 -1
- package/lib/module/modules/modal/renderWebPortal.web.js.map +0 -1
- package/lib/module/modules/multi-select/MultiSelect.js.map +0 -1
- package/lib/module/modules/multi-select/MultiSelect.variants.js.map +0 -1
- package/lib/module/modules/multi-select/index.js.map +0 -1
- package/lib/module/modules/number-input/NumberInput.js.map +0 -1
- package/lib/module/modules/number-input/NumberInput.variants.js.map +0 -1
- package/lib/module/modules/number-input/index.js.map +0 -1
- package/lib/module/modules/pin-input/PinInput.js.map +0 -1
- package/lib/module/modules/pin-input/PinInput.variants.js.map +0 -1
- package/lib/module/modules/pin-input/index.js.map +0 -1
- package/lib/module/modules/progress-bar/ProgressBar.js.map +0 -1
- package/lib/module/modules/progress-bar/ProgressBar.variants.js.map +0 -1
- package/lib/module/modules/progress-bar/index.js.map +0 -1
- package/lib/module/modules/radio-group/RadioGroup.js.map +0 -1
- package/lib/module/modules/radio-group/RadioGroup.variants.js.map +0 -1
- package/lib/module/modules/radio-group/index.js.map +0 -1
- package/lib/module/modules/reorder/Reorder.js.map +0 -1
- package/lib/module/modules/reorder/Reorder.variants.js.map +0 -1
- package/lib/module/modules/reorder/index.js.map +0 -1
- package/lib/module/modules/select/Select.js.map +0 -1
- package/lib/module/modules/select/Select.variants.js.map +0 -1
- package/lib/module/modules/select/index.js.map +0 -1
- package/lib/module/modules/skeleton/Skeleton.js.map +0 -1
- package/lib/module/modules/skeleton/Skeleton.variants.js.map +0 -1
- package/lib/module/modules/skeleton/index.js.map +0 -1
- package/lib/module/modules/slider/Slider.js.map +0 -1
- package/lib/module/modules/slider/Slider.variants.js.map +0 -1
- package/lib/module/modules/slider/index.js.map +0 -1
- package/lib/module/modules/spinner/Spinner.js.map +0 -1
- package/lib/module/modules/spinner/Spinner.variants.js.map +0 -1
- package/lib/module/modules/spinner/index.js.map +0 -1
- package/lib/module/modules/stat-tile/StatTile.js.map +0 -1
- package/lib/module/modules/stat-tile/StatTile.variants.js.map +0 -1
- package/lib/module/modules/stat-tile/index.js.map +0 -1
- package/lib/module/modules/stepper/Stepper.js.map +0 -1
- package/lib/module/modules/stepper/Stepper.variants.js.map +0 -1
- package/lib/module/modules/stepper/index.js.map +0 -1
- package/lib/module/modules/switch/Switch.js.map +0 -1
- package/lib/module/modules/switch/Switch.variants.js.map +0 -1
- package/lib/module/modules/switch/index.js.map +0 -1
- package/lib/module/modules/tabs/Tabs.js.map +0 -1
- package/lib/module/modules/tabs/Tabs.variants.js.map +0 -1
- package/lib/module/modules/tabs/index.js.map +0 -1
- package/lib/module/modules/textarea/Textarea.js.map +0 -1
- package/lib/module/modules/textarea/Textarea.variants.js.map +0 -1
- package/lib/module/modules/textarea/index.js.map +0 -1
- package/lib/module/modules/timeline/Timeline.js.map +0 -1
- package/lib/module/modules/timeline/Timeline.variants.js.map +0 -1
- package/lib/module/modules/timeline/index.js.map +0 -1
- package/lib/module/modules/toast/Toast.js.map +0 -1
- package/lib/module/modules/toast/Toast.variants.js.map +0 -1
- package/lib/module/modules/toast/index.js.map +0 -1
- package/lib/module/modules/tooltip/Tooltip.js.map +0 -1
- package/lib/module/modules/tooltip/Tooltip.variants.js.map +0 -1
- package/lib/module/modules/tooltip/index.js.map +0 -1
- package/lib/module/theme/index.js.map +0 -1
- package/lib/module/theme/platform/colorScheme.native.js.map +0 -1
- package/lib/module/theme/platform/elevation.native.js.map +0 -1
- package/lib/module/theme/platform/fonts.native.js.map +0 -1
- package/lib/module/theme/platform/index.js.map +0 -1
- package/lib/module/theme/platform/units.native.js.map +0 -1
- package/lib/module/theme/provider/PixelizeProvider.js.map +0 -1
- package/lib/module/theme/provider/colorModeStorage.js.map +0 -1
- package/lib/module/theme/provider/index.js.map +0 -1
- package/lib/module/theme/provider/useTheme.js.map +0 -1
- package/lib/module/theme/provider/useThemeColors.js.map +0 -1
- package/lib/module/theme/provider/useThemeMode.js.map +0 -1
- package/lib/module/theme/tokens/brands/emerald/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/emerald/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/index.js.map +0 -1
- package/lib/module/theme/tokens/brands/lavender/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/lavender/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/meadow/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/meadow/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/radiant/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/radiant/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/rosewood/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/rosewood/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/skyline/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/skyline/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/slate/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/slate/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/storefront/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/storefront/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/brands/zinc/palette.dark.js.map +0 -1
- package/lib/module/theme/tokens/brands/zinc/palette.light.js.map +0 -1
- package/lib/module/theme/tokens/builders/accentText.js.map +0 -1
- package/lib/module/theme/tokens/builders/buildBrandTokens.js.map +0 -1
- package/lib/module/theme/tokens/builders/buildDarkPalette.js.map +0 -1
- package/lib/module/theme/tokens/builders/color.js.map +0 -1
- package/lib/module/theme/tokens/index.js.map +0 -1
- package/lib/module/theme/tokens/primitives/borderWidths.js.map +0 -1
- package/lib/module/theme/tokens/primitives/breakpoints.js.map +0 -1
- package/lib/module/theme/tokens/primitives/elevation.js.map +0 -1
- package/lib/module/theme/tokens/primitives/fontSizes.js.map +0 -1
- package/lib/module/theme/tokens/primitives/fontWeights.js.map +0 -1
- package/lib/module/theme/tokens/primitives/index.js.map +0 -1
- package/lib/module/theme/tokens/primitives/letterSpacings.js.map +0 -1
- package/lib/module/theme/tokens/primitives/lineHeights.js.map +0 -1
- package/lib/module/theme/tokens/primitives/radii.js.map +0 -1
- package/lib/module/theme/tokens/primitives/sizes.js.map +0 -1
- package/lib/module/theme/tokens/primitives/space.js.map +0 -1
- package/lib/module/theme/tokens/primitives/zIndices.js.map +0 -1
- package/lib/module/theme/tokens/roles/index.js.map +0 -1
- package/lib/module/theme/tokens/types.js.map +0 -1
- package/lib/typescript/core/a11y/index.d.ts.map +0 -1
- package/lib/typescript/core/icon/index.d.ts.map +0 -1
- package/lib/typescript/core/style/index.d.ts.map +0 -1
- package/lib/typescript/core/style/layoutStyle.d.ts.map +0 -1
- package/lib/typescript/core/style/variants.d.ts.map +0 -1
- package/lib/typescript/index.d.ts.map +0 -1
- package/lib/typescript/modules/accordion/Accordion.d.ts.map +0 -1
- package/lib/typescript/modules/accordion/Accordion.variants.d.ts.map +0 -1
- package/lib/typescript/modules/accordion/index.d.ts.map +0 -1
- package/lib/typescript/modules/alert-dialog/AlertDialog.d.ts.map +0 -1
- package/lib/typescript/modules/alert-dialog/AlertDialog.variants.d.ts.map +0 -1
- package/lib/typescript/modules/alert-dialog/index.d.ts.map +0 -1
- package/lib/typescript/modules/avatar/Avatar.d.ts.map +0 -1
- package/lib/typescript/modules/avatar/Avatar.variants.d.ts.map +0 -1
- package/lib/typescript/modules/avatar/index.d.ts.map +0 -1
- package/lib/typescript/modules/badge/Badge.d.ts.map +0 -1
- package/lib/typescript/modules/badge/Badge.variants.d.ts.map +0 -1
- package/lib/typescript/modules/badge/index.d.ts.map +0 -1
- package/lib/typescript/modules/bottom-nav/BottomNav.d.ts.map +0 -1
- package/lib/typescript/modules/bottom-nav/BottomNav.search.d.ts.map +0 -1
- package/lib/typescript/modules/bottom-nav/BottomNav.variants.d.ts.map +0 -1
- package/lib/typescript/modules/bottom-nav/BottomNavIconWithBadge.d.ts.map +0 -1
- package/lib/typescript/modules/bottom-nav/BottomNavOverflowSheet.d.ts.map +0 -1
- package/lib/typescript/modules/bottom-nav/index.d.ts.map +0 -1
- package/lib/typescript/modules/button/Button.d.ts.map +0 -1
- package/lib/typescript/modules/button/Button.variants.d.ts.map +0 -1
- package/lib/typescript/modules/button/index.d.ts.map +0 -1
- package/lib/typescript/modules/button-group/ButtonGroup.d.ts.map +0 -1
- package/lib/typescript/modules/button-group/ButtonGroup.variants.d.ts.map +0 -1
- package/lib/typescript/modules/button-group/index.d.ts.map +0 -1
- package/lib/typescript/modules/card/Card.d.ts.map +0 -1
- package/lib/typescript/modules/card/Card.variants.d.ts.map +0 -1
- package/lib/typescript/modules/card/index.d.ts.map +0 -1
- package/lib/typescript/modules/charts/BarList.d.ts.map +0 -1
- package/lib/typescript/modules/charts/Charts.variants.d.ts.map +0 -1
- package/lib/typescript/modules/charts/DonutChart.d.ts.map +0 -1
- package/lib/typescript/modules/charts/Sparkline.d.ts.map +0 -1
- package/lib/typescript/modules/charts/index.d.ts.map +0 -1
- package/lib/typescript/modules/checkbox/Checkbox.d.ts.map +0 -1
- package/lib/typescript/modules/checkbox/Checkbox.variants.d.ts.map +0 -1
- package/lib/typescript/modules/checkbox/index.d.ts.map +0 -1
- package/lib/typescript/modules/divider/Divider.d.ts.map +0 -1
- package/lib/typescript/modules/divider/Divider.variants.d.ts.map +0 -1
- package/lib/typescript/modules/divider/index.d.ts.map +0 -1
- package/lib/typescript/modules/drawer/Drawer.d.ts.map +0 -1
- package/lib/typescript/modules/drawer/Drawer.variants.d.ts.map +0 -1
- package/lib/typescript/modules/drawer/index.d.ts.map +0 -1
- package/lib/typescript/modules/empty-state/EmptyState.d.ts.map +0 -1
- package/lib/typescript/modules/empty-state/EmptyState.variants.d.ts.map +0 -1
- package/lib/typescript/modules/empty-state/index.d.ts.map +0 -1
- package/lib/typescript/modules/file-upload/FileUpload.d.ts.map +0 -1
- package/lib/typescript/modules/file-upload/FileUpload.variants.d.ts.map +0 -1
- package/lib/typescript/modules/file-upload/index.d.ts.map +0 -1
- package/lib/typescript/modules/filter-sheet/FilterChip.d.ts.map +0 -1
- package/lib/typescript/modules/filter-sheet/FilterSheet.d.ts.map +0 -1
- package/lib/typescript/modules/filter-sheet/FilterSheet.variants.d.ts.map +0 -1
- package/lib/typescript/modules/filter-sheet/FilterSheetBody.d.ts.map +0 -1
- package/lib/typescript/modules/filter-sheet/filterSheet.helpers.d.ts.map +0 -1
- package/lib/typescript/modules/filter-sheet/index.d.ts.map +0 -1
- package/lib/typescript/modules/input/Input.d.ts.map +0 -1
- package/lib/typescript/modules/input/Input.variants.d.ts.map +0 -1
- package/lib/typescript/modules/input/index.d.ts.map +0 -1
- package/lib/typescript/modules/list-item/ListItem.d.ts.map +0 -1
- package/lib/typescript/modules/list-item/ListItem.variants.d.ts.map +0 -1
- package/lib/typescript/modules/list-item/index.d.ts.map +0 -1
- package/lib/typescript/modules/markdown/Markdown.d.ts.map +0 -1
- package/lib/typescript/modules/markdown/Markdown.variants.d.ts.map +0 -1
- package/lib/typescript/modules/markdown/index.d.ts.map +0 -1
- package/lib/typescript/modules/markdown/parseMarkdown.d.ts.map +0 -1
- package/lib/typescript/modules/menu/Menu.d.ts.map +0 -1
- package/lib/typescript/modules/menu/Menu.variants.d.ts.map +0 -1
- package/lib/typescript/modules/menu/index.d.ts.map +0 -1
- package/lib/typescript/modules/modal/Modal.d.ts.map +0 -1
- package/lib/typescript/modules/modal/Modal.variants.d.ts.map +0 -1
- package/lib/typescript/modules/modal/ModalPortalContext.d.ts.map +0 -1
- package/lib/typescript/modules/modal/ModalPortalProvider.d.ts.map +0 -1
- package/lib/typescript/modules/modal/index.d.ts.map +0 -1
- package/lib/typescript/modules/modal/renderWebPortal.d.ts.map +0 -1
- package/lib/typescript/modules/modal/renderWebPortal.web.d.ts.map +0 -1
- package/lib/typescript/modules/multi-select/MultiSelect.d.ts.map +0 -1
- package/lib/typescript/modules/multi-select/MultiSelect.variants.d.ts.map +0 -1
- package/lib/typescript/modules/multi-select/index.d.ts.map +0 -1
- package/lib/typescript/modules/number-input/NumberInput.d.ts.map +0 -1
- package/lib/typescript/modules/number-input/NumberInput.variants.d.ts.map +0 -1
- package/lib/typescript/modules/number-input/index.d.ts.map +0 -1
- package/lib/typescript/modules/pin-input/PinInput.d.ts.map +0 -1
- package/lib/typescript/modules/pin-input/PinInput.variants.d.ts.map +0 -1
- package/lib/typescript/modules/pin-input/index.d.ts.map +0 -1
- package/lib/typescript/modules/progress-bar/ProgressBar.d.ts.map +0 -1
- package/lib/typescript/modules/progress-bar/ProgressBar.variants.d.ts.map +0 -1
- package/lib/typescript/modules/progress-bar/index.d.ts.map +0 -1
- package/lib/typescript/modules/radio-group/RadioGroup.d.ts.map +0 -1
- package/lib/typescript/modules/radio-group/RadioGroup.variants.d.ts.map +0 -1
- package/lib/typescript/modules/radio-group/index.d.ts.map +0 -1
- package/lib/typescript/modules/reorder/Reorder.d.ts.map +0 -1
- package/lib/typescript/modules/reorder/Reorder.variants.d.ts.map +0 -1
- package/lib/typescript/modules/reorder/index.d.ts.map +0 -1
- package/lib/typescript/modules/select/Select.d.ts.map +0 -1
- package/lib/typescript/modules/select/Select.variants.d.ts.map +0 -1
- package/lib/typescript/modules/select/index.d.ts.map +0 -1
- package/lib/typescript/modules/skeleton/Skeleton.d.ts.map +0 -1
- package/lib/typescript/modules/skeleton/Skeleton.variants.d.ts.map +0 -1
- package/lib/typescript/modules/skeleton/index.d.ts.map +0 -1
- package/lib/typescript/modules/slider/Slider.d.ts.map +0 -1
- package/lib/typescript/modules/slider/Slider.variants.d.ts.map +0 -1
- package/lib/typescript/modules/slider/index.d.ts.map +0 -1
- package/lib/typescript/modules/spinner/Spinner.d.ts.map +0 -1
- package/lib/typescript/modules/spinner/Spinner.variants.d.ts.map +0 -1
- package/lib/typescript/modules/spinner/index.d.ts.map +0 -1
- package/lib/typescript/modules/stat-tile/StatTile.d.ts.map +0 -1
- package/lib/typescript/modules/stat-tile/StatTile.variants.d.ts.map +0 -1
- package/lib/typescript/modules/stat-tile/index.d.ts.map +0 -1
- package/lib/typescript/modules/stepper/Stepper.d.ts.map +0 -1
- package/lib/typescript/modules/stepper/Stepper.variants.d.ts.map +0 -1
- package/lib/typescript/modules/stepper/index.d.ts.map +0 -1
- package/lib/typescript/modules/switch/Switch.d.ts.map +0 -1
- package/lib/typescript/modules/switch/Switch.variants.d.ts.map +0 -1
- package/lib/typescript/modules/switch/index.d.ts.map +0 -1
- package/lib/typescript/modules/tabs/Tabs.d.ts.map +0 -1
- package/lib/typescript/modules/tabs/Tabs.variants.d.ts.map +0 -1
- package/lib/typescript/modules/tabs/index.d.ts.map +0 -1
- package/lib/typescript/modules/textarea/Textarea.d.ts.map +0 -1
- package/lib/typescript/modules/textarea/Textarea.variants.d.ts.map +0 -1
- package/lib/typescript/modules/textarea/index.d.ts.map +0 -1
- package/lib/typescript/modules/timeline/Timeline.d.ts.map +0 -1
- package/lib/typescript/modules/timeline/Timeline.variants.d.ts.map +0 -1
- package/lib/typescript/modules/timeline/index.d.ts.map +0 -1
- package/lib/typescript/modules/toast/Toast.d.ts.map +0 -1
- package/lib/typescript/modules/toast/Toast.variants.d.ts.map +0 -1
- package/lib/typescript/modules/toast/index.d.ts.map +0 -1
- package/lib/typescript/modules/tooltip/Tooltip.d.ts.map +0 -1
- package/lib/typescript/modules/tooltip/Tooltip.variants.d.ts.map +0 -1
- package/lib/typescript/modules/tooltip/index.d.ts.map +0 -1
- package/lib/typescript/theme/index.d.ts.map +0 -1
- package/lib/typescript/theme/platform/colorScheme.native.d.ts.map +0 -1
- package/lib/typescript/theme/platform/elevation.native.d.ts.map +0 -1
- package/lib/typescript/theme/platform/fonts.native.d.ts.map +0 -1
- package/lib/typescript/theme/platform/index.d.ts.map +0 -1
- package/lib/typescript/theme/platform/units.native.d.ts.map +0 -1
- package/lib/typescript/theme/provider/PixelizeProvider.d.ts.map +0 -1
- package/lib/typescript/theme/provider/colorModeStorage.d.ts.map +0 -1
- package/lib/typescript/theme/provider/index.d.ts.map +0 -1
- package/lib/typescript/theme/provider/useTheme.d.ts.map +0 -1
- package/lib/typescript/theme/provider/useThemeColors.d.ts.map +0 -1
- package/lib/typescript/theme/provider/useThemeMode.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/emerald/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/emerald/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/index.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/lavender/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/lavender/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/meadow/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/meadow/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/radiant/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/radiant/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/rosewood/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/rosewood/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/skyline/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/skyline/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/slate/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/slate/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/storefront/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/storefront/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/zinc/palette.dark.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/brands/zinc/palette.light.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/builders/accentText.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/builders/buildBrandTokens.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/builders/buildDarkPalette.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/builders/color.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/index.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/borderWidths.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/breakpoints.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/elevation.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/fontSizes.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/fontWeights.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/index.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/letterSpacings.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/lineHeights.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/radii.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/sizes.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/space.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/primitives/zIndices.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/roles/index.d.ts.map +0 -1
- package/lib/typescript/theme/tokens/types.d.ts.map +0 -1
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
# rich-text-editor/ — a themed native rich-text editor (bold/lists/quote/code/link/image/@mention)
|
|
2
|
+
|
|
3
|
+
`RichTextEditor` wraps Software Mansion's `react-native-enriched-html` (`EnrichedTextInput`, a native
|
|
4
|
+
Fabric editor) with this library's own toolbar, a link-insert dialog, and an `@`-mention dropdown —
|
|
5
|
+
one shared module instead of each consumer app hand-rolling its own editor.
|
|
6
|
+
|
|
7
|
+
## Why this exists
|
|
8
|
+
|
|
9
|
+
tickets-mobile shipped two separate, independently hand-rolled editors, both far below web's TipTap
|
|
10
|
+
editor: `RichDescriptionEditor` (a markdown-ish plain `TextInput`, no real rich text) and
|
|
11
|
+
`RichTextComposer` (an even thinner raw-HTML-ish `TextInput`, no headings/quote/code-block/
|
|
12
|
+
strikethrough/mentions). Both exist only because no native rich-text editor was available; this
|
|
13
|
+
module is what a future migration replaces them with — that migration is **not** part of this change.
|
|
14
|
+
|
|
15
|
+
## Uncontrolled, by the native library's own design
|
|
16
|
+
|
|
17
|
+
`EnrichedTextInput`'s content is only readable via an async `getHTML()` ref call — the library's own
|
|
18
|
+
docs warn that its `onChangeHtml` event is too expensive to drive on every keystroke. So this module
|
|
19
|
+
follows the same contract: `defaultValue` (initial HTML, never re-applied on prop change) + a `ref`
|
|
20
|
+
exposing `getHTML()` (`Promise<string>`), `focus()`, `blur()`, `setValue(html)`. Callers read the
|
|
21
|
+
final HTML by awaiting `ref.getHTML()` at their own save/submit point — never from continuous state.
|
|
22
|
+
`onChangeText` is a **cheap, plain-text** signal on every keystroke (dirty-tracking, enabling a Save
|
|
23
|
+
button) — it is not the HTML and must not be used for persistence.
|
|
24
|
+
|
|
25
|
+
## Files
|
|
26
|
+
|
|
27
|
+
| File | Role |
|
|
28
|
+
|------|------|
|
|
29
|
+
| `RichTextEditor.tsx` | The component: toolbar (`Button`), the native editor, the link dialog (`Modal` + `Input`), the mention dropdown. |
|
|
30
|
+
| `RichTextEditor.variants.ts` | Pure resolvers — toolbar item catalogue, `onChangeState` → active-action mapping, mention filtering, colour + `HtmlStyle` token mapping — plus the themed structural resolvers. No React, no native import (types-only from `react-native-enriched-html`). |
|
|
31
|
+
| `index.ts` | Public surface: `RichTextEditor`, `RichTextEditorHandle`, `RichTextEditorProps`, `MentionUser`, `RichTextEditorImage`, `RichTextEditorToolbarAction`, `RICH_TEXT_EDITOR_TOOLBAR_ITEMS`. |
|
|
32
|
+
| `__tests__/RichTextEditor.test.ts` | Pure: WCAG contrast for the field/mention pill/code/code-block/blockquote/link/list-marker colours (all brands × modes), the toolbar item catalogue, `onChangeState` mapping, mention filtering. |
|
|
33
|
+
| `__tests__/RichTextEditor.render.test.tsx` | Render, with `react-native-enriched-html` mocked at the module level (jest cannot render a native Fabric component): toolbar presence, ref forwarding, a toolbar press invoking the matching native command, toggle highlighting, the link dialog, the image flow (`focus` then `setImage`, cancel/zero-size/rejection paths), and the mention dropdown's open/filter/select/close plus its `keyboardShouldPersistTaps="always"`. |
|
|
34
|
+
|
|
35
|
+
## Props
|
|
36
|
+
|
|
37
|
+
| Prop | Type | Default | Notes |
|
|
38
|
+
|------|------|---------|-------|
|
|
39
|
+
| `defaultValue` | `string` | — | Initial HTML/text. Uncontrolled — never re-applied after mount. |
|
|
40
|
+
| `placeholder` | `string` | — | |
|
|
41
|
+
| `label` | `string` | — | Rendered above the toolbar. Also becomes the editor field's accessible name (see "Accessibility" below). |
|
|
42
|
+
| `accessibilityLabel` | `string` | — | Overrides the `label`→accessible-name fallback. |
|
|
43
|
+
| `minHeight` | `number` | `140` | Editor field minimum height, dp. |
|
|
44
|
+
| `mentionUsers` | `MentionUser[]` | `[]` | `{ id: string \| number; label: string; profileUrl? }`. Empty/omitted disables `@` mentions entirely — no indicator wired, no mention toolbar button rendered. |
|
|
45
|
+
| `onRequestImage` | `() => Promise<RichTextEditorImage \| null>` | — | Supplies `{ uri, width, height }` to insert at the caret. Omitted/undefined hides the image toolbar button entirely, same contract as `mentionUsers`. Resolve `null` for a cancel or a failure the consumer already reported. |
|
|
46
|
+
| `onChangeText` | `(text: string) => void` | — | Cheap plain-text signal, every keystroke. NOT the HTML. |
|
|
47
|
+
| `onFocus` / `onBlur` | `() => void` | — | |
|
|
48
|
+
| `editable` | `boolean` | `true` | |
|
|
49
|
+
| `scrollEnabled` | `boolean` | `false` | Native-editor internal scrolling. **Deliberately inverts the native default (`true`)** — see "Gestures" below. Turn on only alongside a bounded height. |
|
|
50
|
+
| `containerStyle` | `LayoutStyle` | — | Layout-only, outermost, applied exactly once, last. |
|
|
51
|
+
| `useHtmlNormalizer` | `boolean` | `false` | Passthrough to the native `useHtmlNormalizer` — normalizes foreign HTML (Word/Docs/legacy markup) into the canonical subset before applying it. Matches the native default (off); a consumer whose HTML source may be non-canonical (e.g. tickets-mobile's ticket descriptions) opts in. |
|
|
52
|
+
| `testID` | `string` | — | Toolbar buttons get `${testID}-<action>`. |
|
|
53
|
+
|
|
54
|
+
Ref (`RichTextEditorHandle`): `getHTML(): Promise<string>`, `focus()`, `blur()`, `setValue(html)`.
|
|
55
|
+
|
|
56
|
+
## The card owns the boundary (not the native view)
|
|
57
|
+
|
|
58
|
+
Toolbar + field sit inside one bordered card `View` — `border.interactive` (≥ 3:1) at rest, shifting
|
|
59
|
+
to `border.focus` when focused. That shift is near-imperceptible (~1.25:1 between the two); the focus
|
|
60
|
+
signal is carried by the same 2px/2px focus ring `Input`/`Textarea` draw
|
|
61
|
+
(`testID="rich-text-editor-focus-ring"`; the card itself is `${testID}-card`). The toolbar keeps only
|
|
62
|
+
a `borderBottomWidth` divider (`border.default`) and its `bg.raised` strip; the native
|
|
63
|
+
`EnrichedTextInput` is handed no border, radius or fill at all and stays transparent over the card.
|
|
64
|
+
|
|
65
|
+
This is not a stylistic choice: on **Android** `EnrichedTextInput` is driven by a `SimpleViewManager`,
|
|
66
|
+
and `BaseViewManager` declares **no `border*` `@ReactProp`** — a border in the native view's own
|
|
67
|
+
`style` is silently dropped (the package's own types annotate every `border*Color`/`border*Radius`
|
|
68
|
+
key `@platform ios web`). Before this, the field painted no boundary at all on Android. No
|
|
69
|
+
`overflow: "hidden"` on the card: it would clip both the 200dp mention dropdown and the focus ring.
|
|
70
|
+
|
|
71
|
+
## Gestures — `scrollEnabled` defaults to `false`
|
|
72
|
+
|
|
73
|
+
Android's `EnrichedTextInputView.canScrollVertically/Horizontally` return the `scrollEnabled` prop
|
|
74
|
+
**verbatim**, without asking whether there is anything to scroll. While it is `true`, the
|
|
75
|
+
`ACTION_MOVE` guard that would call `requestDisallowInterceptTouchEvent(false)` can never pass, so
|
|
76
|
+
the editor keeps the gesture it grabbed on `ACTION_DOWN`: a drag that starts inside the field —
|
|
77
|
+
most visibly on an inline image, a one-character `ImageSpan` with a full-size hit box — focuses the
|
|
78
|
+
editor, opens the keyboard and drags out a selection (the Cut/Copy/Paste action bar) instead of
|
|
79
|
+
scrolling the page. The field sets `minHeight` and no `maxHeight`, so it already grows to fit its
|
|
80
|
+
content and internal scrolling buys nothing; turning it off costs nothing and releases the drag.
|
|
81
|
+
|
|
82
|
+
## Toolbar (16 actions, `RICH_TEXT_EDITOR_TOOLBAR_ITEMS`)
|
|
83
|
+
|
|
84
|
+
Bold, italic, underline, strikethrough, inline code, H1–H3, quote, code block, bullet list, numbered
|
|
85
|
+
list, checklist, link, image, mention — each an icon-only `Button` (`variant="outline"`,
|
|
86
|
+
`tone="neutral"`). Toggle highlighting (`variant="solid"` when active) is driven by the native
|
|
87
|
+
`onChangeState` event, the one signal that tracks "is the cursor inside bold/a heading/…" — there is no
|
|
88
|
+
other way to know. Checklist always inserts unchecked (`toggleCheckboxList(false)`); the mention button
|
|
89
|
+
calls the ref's `startMention("@")` rather than toggling a style. The mention button is omitted when
|
|
90
|
+
`mentionUsers` is empty and the image button when `onRequestImage` is absent, per the "disables
|
|
91
|
+
gracefully" contract above.
|
|
92
|
+
|
|
93
|
+
## Image insert
|
|
94
|
+
|
|
95
|
+
The consumer owns picking, uploading and any failure message; this module owns the button, its busy
|
|
96
|
+
state, and the native call. `onRequestImage` resolves `{ uri, width, height }`, or `null` for a cancel
|
|
97
|
+
or an already-reported failure; a rejection is caught (dev `console.warn`, same gate `FileUpload` uses)
|
|
98
|
+
so the toolbar recovers with nothing inserted. While the promise is pending the button renders
|
|
99
|
+
`loading`, which `Button` already turns into a spinner + `accessibilityState.busy` + a blocked press,
|
|
100
|
+
so a double-tap mid-upload needs no extra state here.
|
|
101
|
+
|
|
102
|
+
`width`/`height` are **required and must be > 0**: the native editor reads an `<img>`'s dimensions once
|
|
103
|
+
at parse time and never re-measures, so a missing/zero dimension renders an invisible 0×0 image. The
|
|
104
|
+
editor is focused before `setImage` — native `addImage` silently no-ops on a null selection. Those
|
|
105
|
+
dimensions are persisted (`getHTML()` emits `<img src width height>`), so a mobile-inserted image
|
|
106
|
+
carries an explicit width web's CSS-sized `.ProseMirror img` rule will not override until the content is
|
|
107
|
+
re-saved from web. Nothing is themable here — the native `HtmlStyle` has no `img` key, so this action
|
|
108
|
+
adds no colour and needs no contrast proof.
|
|
109
|
+
|
|
110
|
+
## Link insert dialog
|
|
111
|
+
|
|
112
|
+
Copies `RichDescriptionEditor`'s `Modal` + `Input` pattern. The last `onChangeSelection` event (native,
|
|
113
|
+
fires on every selection change) is captured in a ref — not state, to avoid a re-render per caret move
|
|
114
|
+
— and read when the dialog confirms, calling `ref.setLink(start, end, selectedText || url, url)`.
|
|
115
|
+
|
|
116
|
+
## Mention dropdown
|
|
117
|
+
|
|
118
|
+
`mentionIndicators=["@"]`. `onStartMention` opens the dropdown (query `""`, so it starts populated —
|
|
119
|
+
matches web's `onStart` behaviour); `onChangeMention` re-filters by `.text` (case-insensitive
|
|
120
|
+
substring, capped at 8 — same cap web's `mentionSuggestion.ts` uses); `onEndMention` closes it. It is a
|
|
121
|
+
plain absolutely-positioned `View`, anchored to "below the toolbar" (the wrapper around the editor
|
|
122
|
+
field is the `relative` anchor) — not a measured popover; this is React Native, not the DOM, so there
|
|
123
|
+
is no anchor-element geometry to reproduce.
|
|
124
|
+
|
|
125
|
+
Inside it the candidates go through `VirtualList` (`core/list`), not a `ScrollView` + `.map()`, with
|
|
126
|
+
`itemHeight={MENTION_ROW_HEIGHT}` — the rows are a fixed 40dp (`richTextEditorMentionRowStructure`'s
|
|
127
|
+
`minHeight`), so `getItemLayout` is exact and the list never measures. Rows are a memo'd `MentionRow`
|
|
128
|
+
taking **primitives** (`id`, `label`), and `onSelect(id, label)` is one shared `useCallback` with `[]`
|
|
129
|
+
deps rather than a closure minted per row.
|
|
130
|
+
|
|
131
|
+
**`keyboardShouldPersistTaps="always"` — `"handled"` is not enough here.** The dropdown only exists
|
|
132
|
+
while the mention session is live, and the session dies with the keyboard. Under RN's default
|
|
133
|
+
(`"never"`) the first tap on a row is spent dismissing the keyboard instead of selecting (WCAG
|
|
134
|
+
2.1.1). `"handled"` fixes the row tap but still dismisses on a tap the rows don't claim — between
|
|
135
|
+
rows, or on the dropdown's own padding — which ends the mention session mid-selection and the
|
|
136
|
+
dropdown disappears under the user's finger. `combobox/` uses `"handled"` for the opposite reason:
|
|
137
|
+
its list fills a bottom sheet the user may legitimately want to dismiss by tapping past a row. The
|
|
138
|
+
toolbar `ScrollView` in this same component already uses `"always"` for the same reason the
|
|
139
|
+
dropdown now does.
|
|
140
|
+
|
|
141
|
+
## Accessibility
|
|
142
|
+
|
|
143
|
+
- **Editor field accessible name.** The native `EnrichedTextInput` gets `accessibilityLabel` from
|
|
144
|
+
`accessibilityLabel ?? label` (`resolveRichTextEditorAccessibility`) — before this fix it had no
|
|
145
|
+
path to a name at all. On native the now-redundant visible `label` `Text` is hidden from
|
|
146
|
+
assistive tech (`aria-hidden`) so the name isn't announced twice. **On web it stays exposed**:
|
|
147
|
+
`react-native-enriched-html`'s web build renders a TipTap `EditorContent` and forwards no
|
|
148
|
+
accessibility prop to the underlying `contenteditable` (only `enterkeyhint`), so the field itself
|
|
149
|
+
never carries the name there — hiding the label too would leave a web screen-reader user with
|
|
150
|
+
nothing. Follow-up: an upstream `aria-label` passthrough on `EnrichedTextInput`'s web build would
|
|
151
|
+
close this gap.
|
|
152
|
+
- **Toolbar toggle (pressed) state.** The 14 style-toggle buttons (all but the `image`/`mention`
|
|
153
|
+
triggers, see `RichTextEditorToolbarItem.toggle`) pass `Button`'s `selected` prop, driven by the
|
|
154
|
+
same `activeActions` state that already drove the `variant="solid"` highlight — before this fix
|
|
155
|
+
the toggle was colour-only (WCAG 1.4.1) and announced nothing (4.1.2). `Button` itself resolves
|
|
156
|
+
`selected` into `aria-pressed` (web) / `accessibilityState.selected` (native), per
|
|
157
|
+
`docs/PLATFORM-A11Y-PROPS.md`'s "genuinely diverge" case — RN has no `pressed` accessibility
|
|
158
|
+
state at all. `image`/`mention` never receive `selected`: they open a picker, not toggle a style.
|
|
159
|
+
- **Flat-only `aria-*`**, per `docs/PLATFORM-A11Y-PROPS.md` — no `accessibilityState={{…}}` /
|
|
160
|
+
`accessibilityValue={{…}}` object literal anywhere in this module; `react-native-web` discards
|
|
161
|
+
the object form silently.
|
|
162
|
+
|
|
163
|
+
## Colour (measured in `__tests__/RichTextEditor.test.ts`, every brand × mode)
|
|
164
|
+
|
|
165
|
+
Every colour handed to the native `htmlStyle`/native props is a role lookup, never a hex:
|
|
166
|
+
|
|
167
|
+
| Element | Fill | Ink |
|
|
168
|
+
|---|---|---|
|
|
169
|
+
| Inline code / mention pill | `accent.subtle` | `accent.text` (the pair already proven ≥ 4.5:1 for every brand × mode — see `org-switcher/MODULE.md`) |
|
|
170
|
+
| Code block | `bg.sunken` | `fg.default` (the same pair `Avatar`'s neutral fill uses) |
|
|
171
|
+
| Blockquote bar / text | `border.interactive` (≥ 3:1) | `fg.muted` (≥ 4.5:1) |
|
|
172
|
+
| Link | — | `accent.text` |
|
|
173
|
+
| Card (toolbar + field) | `bg.surface` | `fg.default`, placeholder `fg.muted` |
|
|
174
|
+
| Card border | `border.interactive` at rest, `border.focus` focused — both ≥ 3:1 on the fill **and** the canvas, but only ~1.25:1 apart, so the ring carries focus | — |
|
|
175
|
+
| Toolbar strip / divider | `bg.raised` / `border.default` (decorative — the card border is the 1.4.11 boundary) | — |
|
|
176
|
+
|
|
177
|
+
`style` passed to the native editor respects `EnrichedInputStyle` — a RESTRICTED subset of `TextStyle`
|
|
178
|
+
(no `flexDirection`/`alignItems`/etc.) — so `richTextEditorFieldStructure` only emits padding/
|
|
179
|
+
`fontSize` (plus `minHeight`/`color` from the component), never a flex-layout key.
|
|
180
|
+
|
|
181
|
+
## Known gaps
|
|
182
|
+
|
|
183
|
+
- **EAS Android dev-client build confirmed successful (build `22b8321f`, APK built) but NOT yet
|
|
184
|
+
verified on a physical device by the user.** Everything reported here is typecheck/build/unit-test
|
|
185
|
+
level — jest cannot render a native Fabric component, so nothing here claims the editor "works" on
|
|
186
|
+
device.
|
|
187
|
+
- `onChangeState.image.isBlocking` (the caret is somewhere an `<img>` can't go, e.g. inside a code
|
|
188
|
+
block) is not honoured — the pick/upload still runs and native `addImage` then silently no-ops.
|
|
189
|
+
Disabling the button on that flag is the follow-up.
|
|
190
|
+
- No paste/drop image handling: the native `onPasteImages` event is unwired, so a pasted image is
|
|
191
|
+
dropped. Web has full paste support — the natural second half of image parity.
|
|
192
|
+
- `scrollEnabled: false` fixes the *drag* case, not the *tap* case: a touch on an inline image that
|
|
193
|
+
never leaves touch slop still registers as a tap on the `ImageSpan`, and Android selects an image
|
|
194
|
+
span on tap → action bar. `setTextIsSelectable(true)` is hardcoded in the package's
|
|
195
|
+
`onAttachedToWindow` and `startActionMode` only appends to the platform menu, so there is no prop
|
|
196
|
+
to suppress it — an upstream `selectionEnabled`-style prop is the real fix.
|
|
197
|
+
- No anchor-measured mention dropdown position (see "Mention dropdown" above) — same deferral
|
|
198
|
+
`Menu`/`Tooltip` already document for their own unmeasured overlays.
|
|
199
|
+
- tickets-mobile's `RichDescriptionEditor.tsx` (ticket descriptions) and `CommentThread.tsx`'s
|
|
200
|
+
comment composer/inline-edit (replacing the deleted `RichTextComposer.tsx`) both now wrap this
|
|
201
|
+
module — see `tickets/mobile/src/modules/ticket-detail/MODULE.md` for the consumer-side detail.
|
|
202
|
+
|
|
203
|
+
## Performance
|
|
204
|
+
|
|
205
|
+
Wrapped in `React.memo`. This component re-renders on every keystroke (`onChangeState` refreshes
|
|
206
|
+
`activeActions`), so everything handed to a child is stabilized:
|
|
207
|
+
|
|
208
|
+
- `colors`, `htmlStyle` and the native `fieldStyle` object are `useMemo`'d. `fieldStyle` in
|
|
209
|
+
particular is passed straight to the native `EnrichedTextInput`; a fresh object per keystroke
|
|
210
|
+
crossed the bridge as a prop change.
|
|
211
|
+
- Every style array/object the JSX used to build inline (root, label, card, toolbar, mention
|
|
212
|
+
dropdown, focus ring, link-dialog body and actions) is `useMemo`'d.
|
|
213
|
+
- `renderItem`/`keyExtractor` for the mention list are `useCallback`'d — the module ESLint config
|
|
214
|
+
rejects inline arrows on those two props.
|
|
215
|
+
- `actionHandlers` maps each toolbar action to one stable `() => void`, so each toolbar `Button`
|
|
216
|
+
keeps its `onPress` identity; `closeLinkDialog`/`openLinkDialog` replaced the inline
|
|
217
|
+
`() => setLinkOpen(…)` arrows for the same reason.
|
|
218
|
+
|
|
219
|
+
No motion of its own — the editor's own visual state changes (toggle highlighting, focus ring) are
|
|
220
|
+
instant, and the mention dropdown is a list, where per-row animation is forbidden.
|
|
221
|
+
|
|
222
|
+
## Modernization (v1.0.7)
|
|
223
|
+
|
|
224
|
+
- Theme imports decoupled to `theme/hooks`; optional peers (reanimated, gesture-handler, flash-list) load at runtime.
|
|
225
|
+
- List-heavy surfaces use `VirtualList` with device-tier window sizing where applicable.
|
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* RichTextEditor — a themed wrapper around `react-native-enriched-html`'s native Fabric editor
|
|
5
|
+
* (`EnrichedTextInput`), with its own toolbar (`Button`), a link-insert dialog (`Modal` + `Input`,
|
|
6
|
+
* copied from the app's `RichDescriptionEditor` pattern), and an `@`-mention dropdown.
|
|
7
|
+
*
|
|
8
|
+
* UNCONTROLLED, by the native library's own design: the editor's HTML is only readable via the
|
|
9
|
+
* async `getHTML()` ref call (the library's own docs warn `onChangeHtml` is too expensive to drive
|
|
10
|
+
* live sync). So this component takes `defaultValue` (initial HTML, never re-applied on change) and
|
|
11
|
+
* exposes a `ref` with `getHTML()`/`focus()`/`blur()`/`setValue()` — the caller reads the final HTML
|
|
12
|
+
* at its own save/submit point, not from continuous state. `onChangeText` is a cheap plain-text
|
|
13
|
+
* signal (every keystroke) for dirty-tracking / enabling a Save button — it is NOT the HTML.
|
|
14
|
+
*
|
|
15
|
+
* Toolbar toggle highlighting is driven by the native `onChangeState` event (bold/italic/… active
|
|
16
|
+
* state as the cursor moves) — see `RichTextEditor.variants.ts` → `resolveRichTextEditorActiveActions`.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
import { forwardRef, memo, useCallback, useImperativeHandle, useMemo, useRef, useState } from "react";
|
|
20
|
+
import { Platform, Pressable, ScrollView, StyleSheet, Text, View } from "react-native";
|
|
21
|
+
import { EnrichedTextInput } from "react-native-enriched-html";
|
|
22
|
+
import { VirtualList } from "../../core/list/index.js";
|
|
23
|
+
import { useTheme } from "../../theme/hooks.js";
|
|
24
|
+
import { Button } from "../button/index.js";
|
|
25
|
+
import { Input } from "../input/index.js";
|
|
26
|
+
import { Modal } from "../modal/index.js";
|
|
27
|
+
import { filterMentionCandidates, resolveRichTextEditorAccessibility, resolveRichTextEditorActiveActions, resolveRichTextEditorColors, resolveRichTextEditorHtmlStyle, RICH_TEXT_EDITOR_TOOLBAR_ITEMS, richTextEditorCardStructure, richTextEditorFieldStructure, richTextEditorLayout, richTextEditorMentionDropdownStructure, richTextEditorMentionRowStructure, richTextEditorToolbarStructure } from "./RichTextEditor.variants.js";
|
|
28
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
29
|
+
const MENTION_ROW_HEIGHT = 40;
|
|
30
|
+
const IS_WEB = Platform.OS === "web";
|
|
31
|
+
const MENTION_INDICATOR = "@";
|
|
32
|
+
const MENTION_INDICATORS = [MENTION_INDICATOR];
|
|
33
|
+
const EMPTY_MENTION_INDICATORS = [];
|
|
34
|
+
const MentionRow = /*#__PURE__*/memo(function MentionRow({
|
|
35
|
+
id,
|
|
36
|
+
label,
|
|
37
|
+
theme,
|
|
38
|
+
colors,
|
|
39
|
+
onSelect
|
|
40
|
+
}) {
|
|
41
|
+
const handlePress = useCallback(() => onSelect(id, label), [onSelect, id, label]);
|
|
42
|
+
const restingStyle = useMemo(() => [richTextEditorMentionRowStructure(theme), {
|
|
43
|
+
backgroundColor: colors.mentionRowBackground
|
|
44
|
+
}], [theme, colors.mentionRowBackground]);
|
|
45
|
+
const pressedStyle = useMemo(() => [richTextEditorMentionRowStructure(theme), {
|
|
46
|
+
backgroundColor: colors.mentionRowPressed
|
|
47
|
+
}], [theme, colors.mentionRowPressed]);
|
|
48
|
+
const rowStyle = useCallback(({
|
|
49
|
+
pressed
|
|
50
|
+
}) => pressed ? pressedStyle : restingStyle, [pressedStyle, restingStyle]);
|
|
51
|
+
const labelStyle = useMemo(() => ({
|
|
52
|
+
fontSize: theme.fontSizes.sm,
|
|
53
|
+
color: colors.mentionRowText
|
|
54
|
+
}), [theme.fontSizes.sm, colors.mentionRowText]);
|
|
55
|
+
return /*#__PURE__*/_jsx(Pressable, {
|
|
56
|
+
accessibilityRole: "menuitem",
|
|
57
|
+
onPress: handlePress,
|
|
58
|
+
style: rowStyle,
|
|
59
|
+
children: /*#__PURE__*/_jsx(Text, {
|
|
60
|
+
style: labelStyle,
|
|
61
|
+
children: label
|
|
62
|
+
})
|
|
63
|
+
});
|
|
64
|
+
});
|
|
65
|
+
|
|
66
|
+
// Identical to `Input`/`Textarea`: the ring sits OUTSIDE the field, on the canvas, where
|
|
67
|
+
// `border.focus` is the token proven ≥ 3:1.
|
|
68
|
+
const FOCUS_RING_WIDTH = 2;
|
|
69
|
+
const FOCUS_RING_GAP = 2;
|
|
70
|
+
function RichTextEditorImpl({
|
|
71
|
+
defaultValue,
|
|
72
|
+
placeholder,
|
|
73
|
+
label,
|
|
74
|
+
accessibilityLabel,
|
|
75
|
+
minHeight = 140,
|
|
76
|
+
mentionUsers = [],
|
|
77
|
+
onRequestImage,
|
|
78
|
+
onChangeText,
|
|
79
|
+
onFocus,
|
|
80
|
+
onBlur,
|
|
81
|
+
editable = true,
|
|
82
|
+
scrollEnabled = false,
|
|
83
|
+
containerStyle,
|
|
84
|
+
useHtmlNormalizer = false,
|
|
85
|
+
testID
|
|
86
|
+
}, ref) {
|
|
87
|
+
const theme = useTheme();
|
|
88
|
+
const nativeRef = useRef(null);
|
|
89
|
+
const selectionRef = useRef({
|
|
90
|
+
start: 0,
|
|
91
|
+
end: 0,
|
|
92
|
+
text: ""
|
|
93
|
+
});
|
|
94
|
+
const [activeActions, setActiveActions] = useState({});
|
|
95
|
+
const [linkOpen, setLinkOpen] = useState(false);
|
|
96
|
+
const [linkUrl, setLinkUrl] = useState("");
|
|
97
|
+
const [imageBusy, setImageBusy] = useState(false);
|
|
98
|
+
const [focused, setFocused] = useState(false);
|
|
99
|
+
// `null` = closed; "" = just opened (no filter typed yet) — matches web's onStart/onUpdate split.
|
|
100
|
+
const [mentionQuery, setMentionQuery] = useState(null);
|
|
101
|
+
const a11y = useMemo(() => resolveRichTextEditorAccessibility({
|
|
102
|
+
label,
|
|
103
|
+
accessibilityLabel,
|
|
104
|
+
web: IS_WEB
|
|
105
|
+
}), [label, accessibilityLabel]);
|
|
106
|
+
const colors = useMemo(() => resolveRichTextEditorColors(theme.colors), [theme.colors]);
|
|
107
|
+
const htmlStyle = useMemo(() => resolveRichTextEditorHtmlStyle(theme), [theme]);
|
|
108
|
+
const mentionEnabled = mentionUsers.length > 0;
|
|
109
|
+
|
|
110
|
+
// `EnrichedInputStyle` (unlike a normal View's `style`) takes ONE plain object, not an array — so
|
|
111
|
+
// the structural + colour pieces are flattened into a single object here rather than passed as the
|
|
112
|
+
// `[structure, { ... }]` array every other module in this library uses for its root style.
|
|
113
|
+
const fieldStyle = useMemo(() => ({
|
|
114
|
+
...StyleSheet.flatten(richTextEditorFieldStructure(theme)),
|
|
115
|
+
minHeight,
|
|
116
|
+
color: colors.text
|
|
117
|
+
}), [theme, minHeight, colors.text]);
|
|
118
|
+
useImperativeHandle(ref, () => ({
|
|
119
|
+
getHTML: () => nativeRef.current?.getHTML() ?? Promise.resolve(""),
|
|
120
|
+
focus: () => nativeRef.current?.focus(),
|
|
121
|
+
blur: () => nativeRef.current?.blur(),
|
|
122
|
+
setValue: html => nativeRef.current?.setValue(html)
|
|
123
|
+
}), []);
|
|
124
|
+
const handleChangeText = useCallback(e => onChangeText?.(e.nativeEvent.value), [onChangeText]);
|
|
125
|
+
const handleChangeSelection = useCallback(e => {
|
|
126
|
+
selectionRef.current = e.nativeEvent;
|
|
127
|
+
}, []);
|
|
128
|
+
const handleChangeState = useCallback(e => {
|
|
129
|
+
setActiveActions(resolveRichTextEditorActiveActions(e.nativeEvent));
|
|
130
|
+
}, []);
|
|
131
|
+
const handleFocus = useCallback(() => {
|
|
132
|
+
setFocused(true);
|
|
133
|
+
onFocus?.();
|
|
134
|
+
}, [onFocus]);
|
|
135
|
+
const handleBlur = useCallback(() => {
|
|
136
|
+
setFocused(false);
|
|
137
|
+
onBlur?.();
|
|
138
|
+
}, [onBlur]);
|
|
139
|
+
const handleStartMention = useCallback(() => setMentionQuery(""), []);
|
|
140
|
+
const handleChangeMention = useCallback(e => setMentionQuery(e.text), []);
|
|
141
|
+
const handleEndMention = useCallback(() => setMentionQuery(null), []);
|
|
142
|
+
const mentionCandidates = useMemo(() => mentionQuery === null ? [] : filterMentionCandidates(mentionUsers, mentionQuery), [mentionQuery, mentionUsers]);
|
|
143
|
+
const selectMention = useCallback((id, label) => {
|
|
144
|
+
nativeRef.current?.setMention(MENTION_INDICATOR, label, {
|
|
145
|
+
id: String(id)
|
|
146
|
+
});
|
|
147
|
+
setMentionQuery(null);
|
|
148
|
+
}, []);
|
|
149
|
+
const openLinkDialog = useCallback(() => {
|
|
150
|
+
setLinkUrl("");
|
|
151
|
+
setLinkOpen(true);
|
|
152
|
+
}, []);
|
|
153
|
+
const closeLinkDialog = useCallback(() => setLinkOpen(false), []);
|
|
154
|
+
const confirmLink = useCallback(() => {
|
|
155
|
+
const {
|
|
156
|
+
start,
|
|
157
|
+
end,
|
|
158
|
+
text
|
|
159
|
+
} = selectionRef.current;
|
|
160
|
+
const url = linkUrl.trim();
|
|
161
|
+
nativeRef.current?.setLink(start, end, text || url, url);
|
|
162
|
+
setLinkOpen(false);
|
|
163
|
+
}, [linkUrl]);
|
|
164
|
+
const insertImage = useCallback(async () => {
|
|
165
|
+
if (!onRequestImage) return;
|
|
166
|
+
setImageBusy(true);
|
|
167
|
+
try {
|
|
168
|
+
const picked = await onRequestImage();
|
|
169
|
+
if (!picked || picked.width <= 0 || picked.height <= 0) return;
|
|
170
|
+
// Native `addImage` silently no-ops on a null selection, which is what an unfocused editor has.
|
|
171
|
+
nativeRef.current?.focus();
|
|
172
|
+
nativeRef.current?.setImage(picked.uri, picked.width, picked.height);
|
|
173
|
+
} catch (error) {
|
|
174
|
+
// Gated exactly as `FileUpload`/`PixelizeProvider` gate theirs — skipped only when `__DEV__`
|
|
175
|
+
// is DEFINITELY false, and never swallowed silently.
|
|
176
|
+
const isDefinitelyProd = typeof __DEV__ !== "undefined" && !__DEV__;
|
|
177
|
+
if (!isDefinitelyProd) {
|
|
178
|
+
console.warn("[pixelize-native-library] <RichTextEditor> onRequestImage rejected — nothing was inserted.", error);
|
|
179
|
+
}
|
|
180
|
+
} finally {
|
|
181
|
+
setImageBusy(false);
|
|
182
|
+
}
|
|
183
|
+
}, [onRequestImage]);
|
|
184
|
+
|
|
185
|
+
// Stable per (action → () => void), independent of theme/render — a fresh inline closure per
|
|
186
|
+
// toolbar Button would defeat its `React.memo` (CLAUDE.md "Performance", same discipline
|
|
187
|
+
// Menu/Select/MultiSelect follow for their option lists).
|
|
188
|
+
const runAction = useCallback(action => {
|
|
189
|
+
if (action === "link") {
|
|
190
|
+
openLinkDialog();
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
if (action === "image") {
|
|
194
|
+
void insertImage();
|
|
195
|
+
return;
|
|
196
|
+
}
|
|
197
|
+
const editor = nativeRef.current;
|
|
198
|
+
if (!editor) return;
|
|
199
|
+
switch (action) {
|
|
200
|
+
case "bold":
|
|
201
|
+
editor.toggleBold();
|
|
202
|
+
break;
|
|
203
|
+
case "italic":
|
|
204
|
+
editor.toggleItalic();
|
|
205
|
+
break;
|
|
206
|
+
case "underline":
|
|
207
|
+
editor.toggleUnderline();
|
|
208
|
+
break;
|
|
209
|
+
case "strikethrough":
|
|
210
|
+
editor.toggleStrikeThrough();
|
|
211
|
+
break;
|
|
212
|
+
case "inlineCode":
|
|
213
|
+
editor.toggleInlineCode();
|
|
214
|
+
break;
|
|
215
|
+
case "h1":
|
|
216
|
+
editor.toggleH1();
|
|
217
|
+
break;
|
|
218
|
+
case "h2":
|
|
219
|
+
editor.toggleH2();
|
|
220
|
+
break;
|
|
221
|
+
case "h3":
|
|
222
|
+
editor.toggleH3();
|
|
223
|
+
break;
|
|
224
|
+
case "blockQuote":
|
|
225
|
+
editor.toggleBlockQuote();
|
|
226
|
+
break;
|
|
227
|
+
case "codeBlock":
|
|
228
|
+
editor.toggleCodeBlock();
|
|
229
|
+
break;
|
|
230
|
+
case "unorderedList":
|
|
231
|
+
editor.toggleUnorderedList();
|
|
232
|
+
break;
|
|
233
|
+
case "orderedList":
|
|
234
|
+
editor.toggleOrderedList();
|
|
235
|
+
break;
|
|
236
|
+
case "checkboxList":
|
|
237
|
+
editor.toggleCheckboxList(false);
|
|
238
|
+
break;
|
|
239
|
+
case "mention":
|
|
240
|
+
editor.startMention(MENTION_INDICATOR);
|
|
241
|
+
break;
|
|
242
|
+
}
|
|
243
|
+
}, [insertImage, openLinkDialog]);
|
|
244
|
+
const actionHandlers = useMemo(() => {
|
|
245
|
+
const handlers = {};
|
|
246
|
+
for (const item of RICH_TEXT_EDITOR_TOOLBAR_ITEMS) {
|
|
247
|
+
handlers[item.action] = () => runAction(item.action);
|
|
248
|
+
}
|
|
249
|
+
return handlers;
|
|
250
|
+
}, [runAction]);
|
|
251
|
+
const mentionKeyExtractor = useCallback(user => String(user.id), []);
|
|
252
|
+
const renderMentionItem = useCallback(({
|
|
253
|
+
item: user
|
|
254
|
+
}) => /*#__PURE__*/_jsx(MentionRow, {
|
|
255
|
+
id: user.id,
|
|
256
|
+
label: user.label,
|
|
257
|
+
theme: theme,
|
|
258
|
+
colors: colors,
|
|
259
|
+
onSelect: selectMention
|
|
260
|
+
}), [theme, colors, selectMention]);
|
|
261
|
+
const toolbarItems = useMemo(() => RICH_TEXT_EDITOR_TOOLBAR_ITEMS.filter(item => (item.action !== "mention" || mentionEnabled) && (item.action !== "image" || onRequestImage !== undefined)), [mentionEnabled, onRequestImage]);
|
|
262
|
+
const rootStyle = useMemo(() => [richTextEditorLayout(theme), containerStyle], [theme, containerStyle]);
|
|
263
|
+
const labelStyle = useMemo(() => [theme.fontStyleForWeight(theme.fontWeights.medium), {
|
|
264
|
+
fontSize: theme.fontSizes.sm,
|
|
265
|
+
color: theme.colors.fg.default
|
|
266
|
+
}], [theme]);
|
|
267
|
+
const cardStyle = useMemo(() => [richTextEditorCardStructure(theme), {
|
|
268
|
+
backgroundColor: colors.cardBackground,
|
|
269
|
+
borderColor: focused ? colors.cardBorderFocus : colors.cardBorder
|
|
270
|
+
}], [theme, colors, focused]);
|
|
271
|
+
const toolbarStyle = useMemo(() => [richTextEditorToolbarStructure(theme), {
|
|
272
|
+
borderColor: colors.toolbarDivider,
|
|
273
|
+
backgroundColor: colors.toolbarBackground
|
|
274
|
+
}], [theme, colors.toolbarDivider, colors.toolbarBackground]);
|
|
275
|
+
const dropdownStyle = useMemo(() => [richTextEditorMentionDropdownStructure(theme), {
|
|
276
|
+
backgroundColor: colors.mentionDropdownBackground,
|
|
277
|
+
borderColor: colors.mentionDropdownBorder
|
|
278
|
+
}], [theme, colors.mentionDropdownBackground, colors.mentionDropdownBorder]);
|
|
279
|
+
const focusRingStyle = useMemo(() => ({
|
|
280
|
+
position: "absolute",
|
|
281
|
+
top: -(FOCUS_RING_GAP + FOCUS_RING_WIDTH),
|
|
282
|
+
left: -(FOCUS_RING_GAP + FOCUS_RING_WIDTH),
|
|
283
|
+
right: -(FOCUS_RING_GAP + FOCUS_RING_WIDTH),
|
|
284
|
+
bottom: -(FOCUS_RING_GAP + FOCUS_RING_WIDTH),
|
|
285
|
+
borderWidth: FOCUS_RING_WIDTH,
|
|
286
|
+
borderColor: theme.colors.border.focus,
|
|
287
|
+
borderRadius: theme.radii.base + FOCUS_RING_GAP + FOCUS_RING_WIDTH
|
|
288
|
+
}), [theme]);
|
|
289
|
+
const linkBodyStyle = useMemo(() => ({
|
|
290
|
+
rowGap: theme.space[4]
|
|
291
|
+
}), [theme.space]);
|
|
292
|
+
const linkActionsStyle = useMemo(() => ({
|
|
293
|
+
flexDirection: "row",
|
|
294
|
+
justifyContent: "flex-end",
|
|
295
|
+
columnGap: theme.space[2]
|
|
296
|
+
}), [theme.space]);
|
|
297
|
+
return /*#__PURE__*/_jsxs(View, {
|
|
298
|
+
style: rootStyle,
|
|
299
|
+
children: [label !== undefined && /*#__PURE__*/_jsx(Text, {
|
|
300
|
+
"aria-hidden": a11y["aria-hidden"],
|
|
301
|
+
style: labelStyle,
|
|
302
|
+
children: label
|
|
303
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
304
|
+
testID: testID ? `${testID}-card` : undefined,
|
|
305
|
+
style: cardStyle,
|
|
306
|
+
children: [/*#__PURE__*/_jsx(View, {
|
|
307
|
+
style: toolbarStyle,
|
|
308
|
+
children: /*#__PURE__*/_jsx(ScrollView, {
|
|
309
|
+
horizontal: true,
|
|
310
|
+
showsHorizontalScrollIndicator: false,
|
|
311
|
+
keyboardShouldPersistTaps: "always",
|
|
312
|
+
children: toolbarItems.map(item => {
|
|
313
|
+
const active = activeActions[item.action] === true;
|
|
314
|
+
return /*#__PURE__*/_jsx(Button, {
|
|
315
|
+
icon: item.icon,
|
|
316
|
+
accessibilityLabel: item.label,
|
|
317
|
+
variant: active ? "solid" : "outline"
|
|
318
|
+
// Without this the toggle state is carried by `variant`'s colour alone (WCAG 1.4.1).
|
|
319
|
+
,
|
|
320
|
+
selected: item.toggle ? active : undefined,
|
|
321
|
+
tone: "neutral",
|
|
322
|
+
size: "sm",
|
|
323
|
+
loading: item.action === "image" && imageBusy,
|
|
324
|
+
onPress: actionHandlers[item.action],
|
|
325
|
+
testID: testID ? `${testID}-${item.action}` : undefined
|
|
326
|
+
}, item.action);
|
|
327
|
+
})
|
|
328
|
+
})
|
|
329
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
330
|
+
style: styles.fieldWrap,
|
|
331
|
+
children: [/*#__PURE__*/_jsx(EnrichedTextInput, {
|
|
332
|
+
ref: nativeRef,
|
|
333
|
+
testID: testID,
|
|
334
|
+
accessibilityLabel: a11y.accessibilityLabel,
|
|
335
|
+
editable: editable,
|
|
336
|
+
defaultValue: defaultValue,
|
|
337
|
+
placeholder: placeholder,
|
|
338
|
+
placeholderTextColor: colors.placeholder,
|
|
339
|
+
cursorColor: colors.cursor,
|
|
340
|
+
selectionColor: colors.selection,
|
|
341
|
+
mentionIndicators: mentionEnabled ? MENTION_INDICATORS : EMPTY_MENTION_INDICATORS,
|
|
342
|
+
htmlStyle: htmlStyle,
|
|
343
|
+
style: fieldStyle,
|
|
344
|
+
scrollEnabled: scrollEnabled,
|
|
345
|
+
useHtmlNormalizer: useHtmlNormalizer,
|
|
346
|
+
onFocus: handleFocus,
|
|
347
|
+
onBlur: handleBlur,
|
|
348
|
+
onChangeText: handleChangeText,
|
|
349
|
+
onChangeSelection: handleChangeSelection,
|
|
350
|
+
onChangeState: handleChangeState,
|
|
351
|
+
onStartMention: handleStartMention,
|
|
352
|
+
onChangeMention: handleChangeMention,
|
|
353
|
+
onEndMention: handleEndMention
|
|
354
|
+
}), mentionQuery !== null && mentionCandidates.length > 0 && /*#__PURE__*/_jsx(View, {
|
|
355
|
+
style: dropdownStyle,
|
|
356
|
+
children: /*#__PURE__*/_jsx(VirtualList, {
|
|
357
|
+
data: mentionCandidates,
|
|
358
|
+
keyExtractor: mentionKeyExtractor,
|
|
359
|
+
renderItem: renderMentionItem,
|
|
360
|
+
itemHeight: MENTION_ROW_HEIGHT
|
|
361
|
+
// The dropdown only exists while the mention session (and so the keyboard) is up,
|
|
362
|
+
// so no tap anywhere on it may dismiss the keyboard — `"handled"` still would, for
|
|
363
|
+
// taps landing between rows, which ends the session mid-selection.
|
|
364
|
+
,
|
|
365
|
+
keyboardShouldPersistTaps: "always"
|
|
366
|
+
})
|
|
367
|
+
})]
|
|
368
|
+
}), focused && /*#__PURE__*/_jsx(View, {
|
|
369
|
+
pointerEvents: "none",
|
|
370
|
+
testID: "rich-text-editor-focus-ring",
|
|
371
|
+
style: focusRingStyle
|
|
372
|
+
})]
|
|
373
|
+
}), /*#__PURE__*/_jsx(Modal, {
|
|
374
|
+
visible: linkOpen,
|
|
375
|
+
onRequestClose: closeLinkDialog,
|
|
376
|
+
title: "Insert link",
|
|
377
|
+
size: "sm",
|
|
378
|
+
children: /*#__PURE__*/_jsxs(View, {
|
|
379
|
+
style: linkBodyStyle,
|
|
380
|
+
children: [/*#__PURE__*/_jsx(Input, {
|
|
381
|
+
value: linkUrl,
|
|
382
|
+
onChangeText: setLinkUrl,
|
|
383
|
+
label: "URL",
|
|
384
|
+
placeholder: "https://example.com",
|
|
385
|
+
leadingIcon: "link"
|
|
386
|
+
}), /*#__PURE__*/_jsxs(View, {
|
|
387
|
+
style: linkActionsStyle,
|
|
388
|
+
children: [/*#__PURE__*/_jsx(Button, {
|
|
389
|
+
label: "Cancel",
|
|
390
|
+
variant: "ghost",
|
|
391
|
+
tone: "neutral",
|
|
392
|
+
onPress: closeLinkDialog
|
|
393
|
+
}), /*#__PURE__*/_jsx(Button, {
|
|
394
|
+
label: "Insert",
|
|
395
|
+
variant: "solid",
|
|
396
|
+
tone: "accent",
|
|
397
|
+
onPress: confirmLink
|
|
398
|
+
})]
|
|
399
|
+
})]
|
|
400
|
+
})
|
|
401
|
+
})]
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
const styles = StyleSheet.create({
|
|
405
|
+
fieldWrap: {
|
|
406
|
+
position: "relative"
|
|
407
|
+
}
|
|
408
|
+
});
|
|
409
|
+
|
|
410
|
+
// A consumer's screen re-renders far more often than this component's own props change — memo is
|
|
411
|
+
// near-free insurance for a design-system primitive (CLAUDE.md "Performance").
|
|
412
|
+
export const RichTextEditor = /*#__PURE__*/memo(/*#__PURE__*/forwardRef(RichTextEditorImpl));
|
|
413
|
+
//# sourceMappingURL=RichTextEditor.js.map
|