@octane-xplat/ui 0.6.0 → 0.7.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/README.md +14 -4
- package/dist/native/{Absolute.native.tsrx.js → Absolute.tsrx.js} +2 -2
- package/dist/native/{Accordion.native.tsrx.js → Accordion.tsrx.js} +3 -3
- package/dist/native/{ActivityIndicator.native.tsrx.js → ActivityIndicator.tsrx.js} +2 -2
- package/dist/native/{Alert.native.tsrx.js → Alert.tsrx.js} +3 -3
- package/dist/native/{Avatar.native.tsrx.js → Avatar.tsrx.js} +3 -3
- package/dist/native/{AvatarGroup.native.tsrx.js → AvatarGroup.tsrx.js} +3 -3
- package/dist/native/{Badge.native.tsrx.js → Badge.tsrx.js} +2 -2
- package/dist/native/{Banner.native.tsrx.js → Banner.tsrx.js} +3 -3
- package/dist/native/{Breadcrumb.native.tsrx.js → Breadcrumb.tsrx.js} +2 -2
- package/dist/native/{Button.native.tsrx.js → Button.tsrx.js} +3 -3
- package/dist/native/{Card.native.tsrx.js → Card.tsrx.js} +2 -2
- package/dist/native/{Checkbox.native.tsrx.js → Checkbox.tsrx.js} +2 -2
- package/dist/native/{CheckboxGroup.native.tsrx.js → CheckboxGroup.tsrx.js} +3 -3
- package/dist/native/{Chip.native.tsrx.js → Chip.tsrx.js} +2 -2
- package/dist/native/{Collapsible.native.tsrx.js → Collapsible.tsrx.js} +3 -3
- package/dist/native/{CommandPalette.native.tsrx.js → CommandPalette.tsrx.js} +4 -4
- package/dist/native/{ContextMenu.native.tsrx.js → ContextMenu.tsrx.js} +4 -4
- package/dist/native/{Drawer.native.tsrx.js → Drawer.tsrx.js} +2 -2
- package/dist/native/{DropdownMenu.native.tsrx.js → DropdownMenu.tsrx.js} +5 -5
- package/dist/native/{Empty.native.tsrx.js → Empty.tsrx.js} +3 -3
- package/dist/native/{FieldGroup.native.tsrx.js → FieldGroup.tsrx.js} +2 -2
- package/dist/native/{FormField.native.tsrx.js → FormField.tsrx.js} +2 -2
- package/dist/native/{Grid.native.tsrx.js → Grid.tsrx.js} +2 -2
- package/dist/native/{Heading.native.tsrx.js → Heading.tsrx.js} +3 -3
- package/dist/native/Hoverable.tsrx.js +139 -0
- package/dist/native/{Icon.native.tsrx.js → Icon.tsrx.js} +3 -3
- package/dist/native/{Image.native.tsrx.js → Image.tsrx.js} +4 -4
- package/dist/native/{InputNumber.native.tsrx.js → InputNumber.tsrx.js} +4 -4
- package/dist/native/{InputRating.native.tsrx.js → InputRating.tsrx.js} +3 -3
- package/dist/native/{InputTags.native.tsrx.js → InputTags.tsrx.js} +4 -4
- package/dist/native/{Kbd.native.tsrx.js → Kbd.tsrx.js} +2 -2
- package/dist/native/{KeyboardAvoiding.native.tsrx.js → KeyboardAvoiding.mobile.tsrx.js} +5 -3
- package/dist/native/{Link.native.tsrx.js → Link.tsrx.js} +2 -2
- package/dist/native/ListItem.tsrx.js +178 -0
- package/dist/native/Meter.tsrx.js +70 -0
- package/dist/native/{NavLink.native.tsrx.js → NavLink.tsrx.js} +3 -3
- package/dist/native/{NavigationMenu.native.tsrx.js → NavigationMenu.tsrx.js} +3 -3
- package/dist/native/{Overlay.native.tsrx.js → Overlay.tsrx.js} +2 -2
- package/dist/native/{Pagination.native.tsrx.js → Pagination.tsrx.js} +2 -2
- package/dist/native/{PinInput.native.tsrx.js → PinInput.tsrx.js} +3 -3
- package/dist/native/{Popover.native.tsrx.js → Popover.tsrx.js} +4 -4
- package/dist/native/{Pressable.native.tsrx.js → Pressable.tsrx.js} +4 -4
- package/dist/native/{ProgressGroup.native.tsrx.js → ProgressGroup.tsrx.js} +3 -3
- package/dist/native/{RadioGroup.native.tsrx.js → RadioGroup.tsrx.js} +2 -2
- package/dist/native/{RichText.native.tsrx.js → RichText.tsrx.js} +3 -3
- package/dist/native/{RouteHost.native.tsrx.js → RouteHost.mobile.tsrx.js} +13 -2
- package/dist/native/{Row.native.tsrx.js → Row.tsrx.js} +4 -4
- package/dist/native/{SafeArea.native.tsrx.js → SafeArea.tsrx.js} +9 -3
- package/dist/native/{Screen.native.tsrx.js → Screen.tsrx.js} +13 -5
- package/dist/native/{ScrollBox.native.tsrx.js → ScrollBox.tsrx.js} +2 -2
- package/dist/native/{ScrollView.native.tsrx.js → ScrollView.tsrx.js} +5 -5
- package/dist/native/{SearchInput.native.tsrx.js → SearchInput.tsrx.js} +4 -4
- package/dist/native/{SegmentedControl.native.tsrx.js → SegmentedControl.tsrx.js} +2 -2
- package/dist/native/{Select.native.tsrx.js → Select.tsrx.js} +4 -4
- package/dist/native/{Separator.native.tsrx.js → Separator.tsrx.js} +2 -2
- package/dist/native/{Sheet.native.tsrx.js → Sheet.tsrx.js} +11 -3
- package/dist/native/{Skeleton.native.tsrx.js → Skeleton.tsrx.js} +2 -2
- package/dist/native/{Slider.native.tsrx.js → Slider.tsrx.js} +5 -5
- package/dist/native/{Spacer.native.tsrx.js → Spacer.tsrx.js} +2 -2
- package/dist/native/{Stack.native.tsrx.js → Stack.tsrx.js} +2 -2
- package/dist/native/{Stepper.native.tsrx.js → Stepper.tsrx.js} +2 -2
- package/dist/native/{Switch.native.tsrx.js → Switch.tsrx.js} +2 -2
- package/dist/native/{Table.native.tsrx.js → Table.tsrx.js} +2 -2
- package/dist/native/{Tabs.native.tsrx.js → Tabs.tsrx.js} +8 -18
- package/dist/native/{Text.native.tsrx.js → Text.tsrx.js} +3 -3
- package/dist/native/{TextArea.native.tsrx.js → TextArea.tsrx.js} +3 -3
- package/dist/native/{TextInput.native.tsrx.js → TextInput.tsrx.js} +3 -3
- package/dist/native/{Timeline.native.tsrx.js → Timeline.tsrx.js} +3 -3
- package/dist/native/Tooltip.tsrx.js +131 -0
- package/dist/native/{Tree.native.tsrx.js → Tree.tsrx.js} +2 -2
- package/dist/native/{User.native.tsrx.js → User.tsrx.js} +3 -3
- package/dist/native/{View.native.tsrx.js → View.tsrx.js} +4 -4
- package/dist/native/VirtualList.tsrx.js +466 -0
- package/dist/native/{WebView.native.tsrx.js → WebView.tsrx.js} +31 -6
- package/dist/native/{aliases.native.tsrx.js → aliases.tsrx.js} +2 -2
- package/dist/native/android/BottomNavigationView.android.tsrx.js +72 -23
- package/dist/native/android/CircularProgressIndicator.android.tsrx.js +1 -1
- package/dist/native/android/DrawerLayout.android.tsrx.js +2 -1
- package/dist/native/android/MaterialDialog.android.tsrx.js +1 -1
- package/dist/native/android/MaterialSwitch.android.tsrx.js +1 -1
- package/dist/native/android/RecyclerView.android.tsrx.js +15 -3
- package/dist/native/android/SeekBar.android.tsrx.js +1 -1
- package/dist/native/android/icon.android.js +7 -0
- package/dist/native/android/index.js +3 -1
- package/dist/native/android/openModal.android.js +1 -1
- package/dist/native/{anim.native.tsrx.js → anim.tsrx.js} +1 -1
- package/dist/native/apply-native-modifiers.native.js +9 -0
- package/dist/native/{escape-props.native.js → escape-props.js} +3 -1
- package/dist/native/index.shared.js +92 -0
- package/dist/native/ios/LiquidGlass.ios.tsrx.js +2 -2
- package/dist/native/ios/LiquidGlassContainer.ios.tsrx.js +2 -2
- package/dist/native/ios/SideDrawer.ios.tsrx.js +2 -1
- package/dist/native/ios/UIActivityIndicatorView.ios.tsrx.js +1 -1
- package/dist/native/ios/UIModal.ios.tsrx.js +1 -1
- package/dist/native/ios/UISlider.ios.tsrx.js +1 -1
- package/dist/native/ios/UISwitch.ios.tsrx.js +1 -1
- package/dist/native/ios/UITabBar.ios.tsrx.js +33 -12
- package/dist/native/ios/UITableView.ios.tsrx.js +15 -3
- package/dist/native/ios/icon.ios.js +7 -0
- package/dist/native/ios/index.js +3 -1
- package/dist/native/ios/openModal.ios.js +1 -1
- package/dist/native/keyboard-inset.mobile.js +66 -0
- package/dist/native/{layout-child.native.js → layout-child.js} +1 -1
- package/dist/native/{modal-presenter.native.js → modal-presenter.mobile.js} +1 -1
- package/dist/native/modifier-factories.js +24 -0
- package/dist/native/native/index.js +3 -3
- package/dist/native/octane-client-build.json +1 -1
- package/dist/native/{pan.native.tsrx.js → pan.tsrx.js} +1 -1
- package/dist/native/{platform.native.js → platform.js} +3 -3
- package/dist/native/{platformProps.native.js → platformProps.js} +3 -1
- package/dist/native/{refresh.native.js → refresh.js} +1 -1
- package/dist/native/{root-layout.native.js → root-layout.mobile.js} +2 -2
- package/dist/native/route-host.mobile.js +2 -0
- package/dist/native/route-table.js +105 -4
- package/dist/native/{route.native.js → route.js} +49 -13
- package/dist/native/safeAreaInsets.tsrx.js +67 -0
- package/dist/native/shared.js +93 -0
- package/dist/native/{sheet-detents.native.js → sheet-detents.js} +1 -1
- package/dist/native/{sheet-service.native.js → sheet-service.js} +9 -3
- package/dist/native/{stacks.native.js → stacks.js} +1 -1
- package/dist/native/{styled.native.tsrx.js → styled.tsrx.js} +1 -1
- package/dist/native/{svg.native.js → svg.mobile.js} +2 -2
- package/dist/native/tap-to-blur.mobile.js +94 -0
- package/dist/native/{text-write.native.js → text-write.js} +1 -1
- package/dist/native/theme/{colorScheme.native.js → colorScheme.js} +2 -2
- package/dist/native/theme/{status-bar-scheme.native.js → status-bar-scheme.mobile.js} +1 -1
- package/dist/native/theme/theme-scheme.js +2 -2
- package/dist/native/{toast-anchor.native.tsrx.js → toast-anchor.tsrx.js} +3 -3
- package/dist/native/{translate.native.js → translate.js} +1 -1
- package/dist/native/ui.js +92 -90
- package/dist/native/{use-back.native.tsrx.js → use-back.tsrx.js} +2 -2
- package/dist/native/{use-store.native.tsrx.js → use-store.tsrx.js} +1 -1
- package/dist/native/{useMeasure.native.tsrx.js → useMeasure.tsrx.js} +1 -1
- package/dist/native/vendor/ui-svg/index.android.js +137 -0
- package/dist/native/vendor/ui-svg/index.common.js +10 -0
- package/dist/native/vendor/ui-svg/index.ios.js +111 -0
- package/dist/native/virtual-list-layout.js +146 -0
- package/dist/native/{windows.native.js → windows.js} +1 -1
- package/dist/web/{web/Hoverable.web.tsrx.js → Hoverable.web.tsrx.js} +7 -6
- package/dist/web/ListItem.web.tsrx.js +139 -0
- package/dist/web/SafeArea.web.tsrx.js +9 -3
- package/dist/web/Tabs.web.tsrx.js +88 -44
- package/dist/web/{web/Tooltip.web.tsrx.js → Tooltip.web.tsrx.js} +7 -6
- package/dist/web/VirtualList.web.tsrx.js +622 -0
- package/dist/web/WebView.web.tsrx.js +42 -5
- package/dist/web/index.shared.web.js +92 -0
- package/dist/web/octane-client-build.json +1 -1
- package/dist/web/platform.web.js +1 -1
- package/dist/web/route-table.js +105 -4
- package/dist/web/route.web.js +36 -11
- package/dist/web/ui.js +10 -8
- package/dist/web/virtual-list-layout.js +146 -0
- package/dist/web/web/index.js +2 -2
- package/package.json +35 -23
- package/platforms/android/include.gradle +8 -0
- package/platforms/android/native-api-usage.json +8 -0
- package/platforms/ios/Podfile +2 -0
- package/src/Absolute.tsrx +22 -0
- package/src/Absolute.web.tsrx +22 -0
- package/src/Accordion.macos.tsrx +50 -0
- package/src/Accordion.tsrx +50 -0
- package/src/Accordion.web.tsrx +43 -0
- package/src/ActivityIndicator.tsrx +29 -0
- package/src/ActivityIndicator.web.tsrx +14 -0
- package/src/Alert.macos.tsrx +42 -0
- package/src/Alert.tsrx +24 -0
- package/src/Alert.web.tsrx +23 -0
- package/src/Avatar.macos.tsrx +25 -0
- package/src/Avatar.tsrx +25 -0
- package/src/Avatar.web.tsrx +24 -0
- package/src/AvatarGroup.macos.tsrx +32 -0
- package/src/AvatarGroup.tsrx +32 -0
- package/src/AvatarGroup.web.tsrx +29 -0
- package/src/Badge.macos.tsrx +12 -0
- package/src/Badge.tsrx +12 -0
- package/src/Badge.web.tsrx +10 -0
- package/src/Banner.macos.tsrx +20 -0
- package/src/Banner.tsrx +20 -0
- package/src/Banner.web.tsrx +20 -0
- package/src/Breadcrumb.macos.tsrx +27 -0
- package/src/Breadcrumb.tsrx +27 -0
- package/src/Breadcrumb.web.tsrx +25 -0
- package/src/Button.tsrx +23 -0
- package/src/Button.web.tsrx +21 -0
- package/src/CameraView.macos.tsrx +6 -0
- package/src/Card.macos.tsrx +13 -0
- package/src/Card.tsrx +13 -0
- package/src/Card.web.tsrx +11 -0
- package/src/Checkbox.tsrx +23 -0
- package/src/Checkbox.web.tsrx +34 -0
- package/src/CheckboxGroup.macos.tsrx +39 -0
- package/src/CheckboxGroup.tsrx +39 -0
- package/src/CheckboxGroup.web.tsrx +38 -0
- package/src/Chip.macos.tsrx +25 -0
- package/src/Chip.tsrx +25 -0
- package/src/Chip.web.tsrx +25 -0
- package/src/Collapsible.macos.tsrx +39 -0
- package/src/Collapsible.tsrx +39 -0
- package/src/Collapsible.web.tsrx +33 -0
- package/src/CommandPalette.macos.tsrx +58 -0
- package/src/CommandPalette.tsrx +58 -0
- package/src/CommandPalette.web.tsrx +59 -0
- package/src/ContextMenu.macos.tsrx +59 -0
- package/src/ContextMenu.tsrx +59 -0
- package/src/ContextMenu.web.tsrx +69 -0
- package/src/Drawer.macos.tsrx +28 -0
- package/src/Drawer.tsrx +25 -0
- package/src/Drawer.web.tsrx +31 -0
- package/src/DropdownMenu.macos.tsrx +63 -0
- package/src/DropdownMenu.tsrx +63 -0
- package/src/DropdownMenu.web.tsrx +78 -0
- package/src/Empty.macos.tsrx +15 -0
- package/src/Empty.tsrx +15 -0
- package/src/Empty.web.tsrx +13 -0
- package/src/FieldGroup.macos.tsrx +17 -0
- package/src/FieldGroup.tsrx +17 -0
- package/src/FieldGroup.web.tsrx +17 -0
- package/src/FormField.macos.tsrx +25 -0
- package/src/FormField.tsrx +25 -0
- package/src/FormField.web.tsrx +24 -0
- package/src/Grid.tsrx +32 -0
- package/src/Grid.web.tsrx +43 -0
- package/src/Heading.macos.tsrx +8 -0
- package/src/Heading.tsrx +17 -0
- package/src/Heading.web.tsrx +15 -0
- package/src/Hoverable.mobile.tsrx +21 -0
- package/src/Hoverable.tsrx +113 -0
- package/src/Hoverable.web.tsrx +98 -0
- package/src/Icon.macos.tsrx +18 -0
- package/src/Icon.tsrx +65 -0
- package/src/Icon.web.tsrx +75 -0
- package/src/Image.macos.tsrx +12 -0
- package/src/Image.tsrx +51 -0
- package/src/Image.web.tsrx +14 -0
- package/src/InputNumber.macos.tsrx +49 -0
- package/src/InputNumber.tsrx +49 -0
- package/src/InputNumber.web.tsrx +47 -0
- package/src/InputRating.macos.tsrx +42 -0
- package/src/InputRating.tsrx +39 -0
- package/src/InputRating.web.tsrx +52 -0
- package/src/InputTags.macos.tsrx +49 -0
- package/src/InputTags.tsrx +49 -0
- package/src/InputTags.web.tsrx +49 -0
- package/src/Kbd.macos.tsrx +11 -0
- package/src/Kbd.tsrx +11 -0
- package/src/Kbd.web.tsrx +9 -0
- package/src/KeyboardAvoiding.macos.tsrx +8 -0
- package/src/KeyboardAvoiding.mobile.tsrx +63 -0
- package/src/Link.macos.tsrx +15 -0
- package/src/Link.tsrx +10 -0
- package/src/Link.web.tsrx +12 -0
- package/src/ListItem.macos.tsrx +52 -0
- package/src/ListItem.tsrx +52 -0
- package/src/ListItem.web.tsrx +50 -0
- package/src/Meter.macos.tsrx +8 -0
- package/src/Meter.tsrx +45 -0
- package/src/Meter.web.tsrx +32 -0
- package/src/NavLink.macos.tsrx +24 -0
- package/src/NavLink.tsrx +22 -0
- package/src/NavLink.web.tsrx +23 -0
- package/src/NavigationMenu.macos.tsrx +31 -0
- package/src/NavigationMenu.tsrx +28 -0
- package/src/NavigationMenu.web.tsrx +31 -0
- package/src/Overlay.macos.tsrx +11 -0
- package/src/Overlay.tsrx +84 -0
- package/src/Overlay.web.tsrx +23 -0
- package/src/Pagination.macos.tsrx +54 -0
- package/src/Pagination.tsrx +47 -0
- package/src/Pagination.web.tsrx +50 -0
- package/src/PinInput.macos.tsrx +46 -0
- package/src/PinInput.tsrx +46 -0
- package/src/PinInput.web.tsrx +45 -0
- package/src/Popover.macos.tsrx +11 -0
- package/src/Popover.tsrx +157 -0
- package/src/Popover.web.tsrx +109 -0
- package/src/Pressable.macos.tsrx +19 -0
- package/src/Pressable.tsrx +37 -0
- package/src/Pressable.web.tsrx +45 -0
- package/src/ProgressGroup.macos.tsrx +17 -0
- package/src/ProgressGroup.tsrx +17 -0
- package/src/ProgressGroup.web.tsrx +15 -0
- package/src/RadioGroup.macos.tsrx +50 -0
- package/src/RadioGroup.tsrx +34 -0
- package/src/RadioGroup.web.tsrx +43 -0
- package/src/RichText.tsrx +40 -0
- package/src/RichText.web.tsrx +24 -0
- package/src/RouteHost.macos.tsrx +18 -0
- package/src/RouteHost.mobile.tsrx +44 -0
- package/src/Row.macos.tsrx +26 -0
- package/src/Row.tsrx +27 -0
- package/src/Row.web.tsrx +27 -0
- package/src/SafeArea.macos.tsrx +8 -0
- package/src/SafeArea.tsrx +20 -0
- package/src/SafeArea.web.tsrx +24 -0
- package/src/Screen.macos.tsrx +14 -0
- package/src/Screen.tsrx +31 -0
- package/src/Screen.web.tsrx +7 -0
- package/src/ScrollBox.tsrx +8 -0
- package/src/ScrollBox.web.tsrx +7 -0
- package/src/ScrollView.macos.tsrx +19 -0
- package/src/ScrollView.tsrx +117 -0
- package/src/ScrollView.web.tsrx +109 -0
- package/src/SearchInput.tsrx +60 -0
- package/src/SearchInput.web.test.tsrx +58 -0
- package/src/SearchInput.web.tsrx +55 -0
- package/src/SegmentedControl.tsrx +43 -0
- package/src/SegmentedControl.web.test.tsrx +46 -0
- package/src/SegmentedControl.web.tsrx +51 -0
- package/src/Select.macos.tsrx +104 -0
- package/src/Select.tsrx +104 -0
- package/src/Select.web.tsrx +124 -0
- package/src/Separator.macos.tsrx +17 -0
- package/src/Separator.tsrx +17 -0
- package/src/Separator.web.tsrx +17 -0
- package/src/Sheet.macos.tsrx +15 -0
- package/src/Sheet.tsrx +122 -0
- package/src/Sheet.web.tsrx +56 -0
- package/src/Skeleton.macos.tsrx +15 -0
- package/src/Skeleton.tsrx +15 -0
- package/src/Skeleton.web.tsrx +15 -0
- package/src/Slider.tsrx +71 -0
- package/src/Slider.web.tsrx +60 -0
- package/src/Spacer.tsrx +8 -0
- package/src/Spacer.web.tsrx +6 -0
- package/src/Stack.tsrx +24 -0
- package/src/Stack.web.tsrx +22 -0
- package/src/Stepper.macos.tsrx +52 -0
- package/src/Stepper.tsrx +31 -0
- package/src/Stepper.web.tsrx +37 -0
- package/src/Switch.tsrx +21 -0
- package/src/Switch.web.tsrx +28 -0
- package/src/Table.macos.tsrx +37 -0
- package/src/Table.tsrx +37 -0
- package/src/Table.web.tsrx +37 -0
- package/src/Tabs.macos.tsrx +60 -0
- package/src/Tabs.tsrx +55 -0
- package/src/Tabs.web.tsrx +98 -0
- package/src/Text.macos.tsrx +18 -0
- package/src/Text.tsrx +62 -0
- package/src/Text.web.tsrx +31 -0
- package/src/TextArea.tsrx +65 -0
- package/src/TextArea.web.tsrx +61 -0
- package/src/TextInput.tsrx +39 -0
- package/src/TextInput.web.tsrx +28 -0
- package/src/Timeline.macos.tsrx +27 -0
- package/src/Timeline.tsrx +24 -0
- package/src/Timeline.web.tsrx +22 -0
- package/src/Tooltip.mobile.tsrx +20 -0
- package/src/Tooltip.tsrx +102 -0
- package/src/Tooltip.web.tsrx +156 -0
- package/src/Tree.macos.tsrx +45 -0
- package/src/Tree.tsrx +45 -0
- package/src/Tree.web.tsrx +52 -0
- package/src/User.macos.tsrx +24 -0
- package/src/User.tsrx +24 -0
- package/src/User.web.tsrx +24 -0
- package/src/View.macos.tsrx +29 -0
- package/src/View.tsrx +32 -0
- package/src/View.web.tsrx +33 -0
- package/src/VirtualList.macos.tsrx +298 -0
- package/src/VirtualList.tsrx +358 -0
- package/src/VirtualList.web.tsrx +313 -0
- package/src/WebView.macos.tsrx +6 -0
- package/src/WebView.tsrx +89 -0
- package/src/WebView.web.tsrx +92 -0
- package/src/aliases.macos.tsrx +18 -0
- package/src/aliases.tsrx +18 -0
- package/src/aliases.web.tsrx +17 -0
- package/src/android/BottomNavigationView.android.tsrx +170 -0
- package/src/android/CircularProgressIndicator.android.tsrx +19 -0
- package/src/android/DrawerLayout.android.tsrx +48 -0
- package/src/android/MaterialDialog.android.tsrx +62 -0
- package/src/android/MaterialSwitch.android.tsrx +18 -0
- package/src/android/RecyclerView.android.tsrx +173 -0
- package/src/android/SeekBar.android.tsrx +20 -0
- package/src/android/icon.android.ts +8 -0
- package/src/android/index.ts +37 -0
- package/src/android/openModal.android.ts +55 -0
- package/src/anim.macos.tsrx +20 -0
- package/src/anim.tsrx +65 -0
- package/src/anim.web.tsrx +55 -0
- package/src/apply-native-modifiers.native.ts +13 -0
- package/src/camera-permission.web.ts +11 -0
- package/src/child-array.ts +16 -0
- package/src/colorScheme.macos.ts +27 -0
- package/src/controls.macos.tsrx +171 -0
- package/src/cx.ts +8 -0
- package/src/escape-props.macos.ts +11 -0
- package/src/escape-props.ts +70 -0
- package/src/escape-props.web.ts +25 -0
- package/src/hosted-unsupported.macos.tsrx +9 -0
- package/src/icons.ts +60 -0
- package/src/index.linux.ts +10 -0
- package/src/index.macos.ts +106 -0
- package/src/index.mobile.ts +6 -0
- package/src/index.shared.ts +269 -0
- package/src/index.shared.web.ts +270 -0
- package/src/index.ts +1 -0
- package/src/index.web.ts +1 -0
- package/src/ios/LiquidGlass.ios.tsrx +41 -0
- package/src/ios/LiquidGlassContainer.ios.tsrx +34 -0
- package/src/ios/SideDrawer.ios.tsrx +49 -0
- package/src/ios/UIActivityIndicatorView.ios.tsrx +18 -0
- package/src/ios/UIModal.ios.tsrx +68 -0
- package/src/ios/UISlider.ios.tsrx +20 -0
- package/src/ios/UISwitch.ios.tsrx +18 -0
- package/src/ios/UITabBar.ios.tsrx +172 -0
- package/src/ios/UITableView.ios.tsrx +186 -0
- package/src/ios/icon.ios.ts +8 -0
- package/src/ios/index.ts +42 -0
- package/src/ios/openModal.ios.ts +55 -0
- package/src/keyboard-inset.mobile.ts +89 -0
- package/src/layout-child.ts +57 -0
- package/src/layout-child.web.ts +108 -0
- package/src/layout-shells.macos.tsrx +10 -0
- package/src/layout.macos.tsrx +41 -0
- package/src/macos-extras.macos.tsrx +40 -0
- package/src/meter-math.ts +6 -0
- package/src/modal-presenter.mobile.ts +24 -0
- package/src/modifier-factories.ts +20 -0
- package/src/native/index.ts +6 -0
- package/src/pan.tsrx +64 -0
- package/src/pan.web.tsrx +38 -0
- package/src/platform.macos.ts +1 -0
- package/src/platform.ts +7 -0
- package/src/platform.web.ts +6 -0
- package/src/platformProps.ts +23 -0
- package/src/platformProps.web.ts +14 -0
- package/src/popover-position.ts +62 -0
- package/src/popover.mobile.test.ts +54 -0
- package/src/props.ts +1812 -0
- package/src/references.d.ts +2 -0
- package/src/refresh-metrics.ts +11 -0
- package/src/refresh.ts +271 -0
- package/src/refresh.web.test.ts +111 -0
- package/src/refresh.web.ts +205 -0
- package/src/root-layout.mobile.ts +89 -0
- package/src/route-host.mobile.ts +1 -0
- package/src/route-table.test.ts +345 -0
- package/src/route-table.ts +585 -0
- package/src/route.macos.ts +201 -0
- package/src/route.ts +703 -0
- package/src/route.web.ts +366 -0
- package/src/safeAreaInsets.macos.tsrx +7 -0
- package/src/safeAreaInsets.tsrx +60 -0
- package/src/safeAreaInsets.web.tsrx +38 -0
- package/src/sheet-detents.ts +142 -0
- package/src/sheet-detents.web.ts +147 -0
- package/src/sheet-service.macos.ts +60 -0
- package/src/sheet-service.ts +124 -0
- package/src/sheet-service.web.ts +64 -0
- package/src/sheet-snap.test.ts +46 -0
- package/src/sheet-snap.ts +66 -0
- package/src/stacks.macos.ts +13 -0
- package/src/stacks.ts +44 -0
- package/src/stacks.web.ts +9 -0
- package/src/store.mobile.test.ts +149 -0
- package/src/store.ts +39 -0
- package/src/store.web.test.tsrx +58 -0
- package/src/styled.macos.tsrx +23 -0
- package/src/styled.test.ts +40 -0
- package/src/styled.tsrx +36 -0
- package/src/styled.web.tsrx +23 -0
- package/src/surfaces.macos.tsrx +27 -0
- package/src/svg.mobile.ts +76 -0
- package/src/tap-to-blur.mobile.ts +108 -0
- package/src/text-controls.macos.tsrx +11 -0
- package/src/text-write.ts +28 -0
- package/src/text-write.web.ts +13 -0
- package/src/theme/colorScheme.linux.ts +52 -0
- package/src/theme/colorScheme.ts +26 -0
- package/src/theme/colorScheme.web.ts +20 -0
- package/src/theme/status-bar-scheme.mobile.ts +39 -0
- package/src/theme/theme-scheme.macos.ts +50 -0
- package/src/theme/theme-scheme.ts +66 -0
- package/src/theme/tokens.css +44 -22
- package/src/toast-anchor.macos.tsrx +3 -0
- package/src/toast-anchor.tsrx +122 -0
- package/src/toast-anchor.web.tsrx +92 -0
- package/src/toast.tsrx +90 -0
- package/src/toast.web.tsrx +50 -0
- package/src/transform.web.ts +52 -0
- package/src/translate.macos.ts +5 -0
- package/src/translate.ts +13 -0
- package/src/translate.web.ts +15 -0
- package/src/tsconfig.json +8 -0
- package/src/unsupported.macos.tsrx +5 -0
- package/src/use-back.tsrx +11 -0
- package/src/use-back.web.tsrx +12 -0
- package/src/use-store.tsrx +18 -0
- package/src/use-store.web.tsrx +18 -0
- package/src/useMeasure.macos.tsrx +23 -0
- package/src/useMeasure.tsrx +66 -0
- package/src/useMeasure.web.tsrx +39 -0
- package/src/useStore.macos.tsrx +6 -0
- package/src/vendor/ui-svg/LICENSE +201 -0
- package/src/vendor/ui-svg/index.android.ts +189 -0
- package/src/vendor/ui-svg/index.common.ts +19 -0
- package/src/vendor/ui-svg/index.ios.ts +147 -0
- package/src/vendor/ui-svg/index.ts +1 -0
- package/src/vendor/ui-svg/typings/SVGKit.d.ts +2862 -0
- package/src/vendor/ui-svg/typings/android.d.ts +1483 -0
- package/src/vendor/ui-svg/typings/ios.d.ts +1511 -0
- package/src/virtual-list-layout.test.ts +81 -0
- package/src/virtual-list-layout.ts +246 -0
- package/src/web/index.ts +11 -0
- package/src/windows.linux.ts +59 -0
- package/src/windows.macos.ts +10 -0
- package/src/windows.ts +7 -0
- package/src/windows.web.ts +6 -0
- package/types/generated/.tsrx-typegen-manifest.json +250 -0
- package/types/generated/Absolute.d.ts +3 -0
- package/types/generated/Absolute.web.d.ts +3 -0
- package/types/generated/Accordion.d.ts +5 -0
- package/types/generated/Accordion.web.d.ts +5 -0
- package/types/generated/ActivityIndicator.d.ts +7 -0
- package/types/generated/ActivityIndicator.web.d.ts +3 -0
- package/types/generated/Alert.d.ts +4 -0
- package/types/generated/Alert.web.d.ts +5 -0
- package/types/generated/Avatar.d.ts +6 -0
- package/types/generated/Avatar.web.d.ts +7 -0
- package/types/generated/AvatarGroup.d.ts +6 -0
- package/types/generated/AvatarGroup.web.d.ts +6 -0
- package/types/generated/Badge.d.ts +5 -0
- package/types/generated/Badge.web.d.ts +5 -0
- package/types/generated/Banner.d.ts +4 -0
- package/types/generated/Banner.web.d.ts +4 -0
- package/types/generated/Breadcrumb.d.ts +4 -0
- package/types/generated/Breadcrumb.web.d.ts +5 -0
- package/types/generated/Button.d.ts +6 -0
- package/types/generated/Button.web.d.ts +6 -0
- package/types/generated/Card.d.ts +4 -0
- package/types/generated/Card.web.d.ts +4 -0
- package/types/generated/Checkbox.d.ts +5 -0
- package/types/generated/Checkbox.web.d.ts +6 -0
- package/types/generated/CheckboxGroup.d.ts +3 -0
- package/types/generated/CheckboxGroup.web.d.ts +3 -0
- package/types/generated/Chip.d.ts +5 -0
- package/types/generated/Chip.web.d.ts +5 -0
- package/types/generated/Collapsible.d.ts +5 -0
- package/types/generated/Collapsible.web.d.ts +5 -0
- package/types/generated/CommandPalette.d.ts +4 -0
- package/types/generated/CommandPalette.web.d.ts +4 -0
- package/types/generated/ContextMenu.d.ts +5 -0
- package/types/generated/ContextMenu.web.d.ts +4 -0
- package/types/generated/Drawer.d.ts +7 -0
- package/types/generated/Drawer.web.d.ts +7 -0
- package/types/generated/DropdownMenu.d.ts +5 -0
- package/types/generated/DropdownMenu.web.d.ts +5 -0
- package/types/generated/Empty.d.ts +4 -0
- package/types/generated/Empty.web.d.ts +4 -0
- package/types/generated/FieldGroup.d.ts +4 -0
- package/types/generated/FieldGroup.web.d.ts +4 -0
- package/types/generated/FormField.d.ts +5 -0
- package/types/generated/FormField.web.d.ts +5 -0
- package/types/generated/Grid.d.ts +3 -0
- package/types/generated/Grid.web.d.ts +3 -0
- package/types/generated/Heading.d.ts +2 -0
- package/types/generated/Heading.web.d.ts +2 -0
- package/types/generated/Hoverable.d.ts +10 -0
- package/types/generated/Hoverable.web.d.ts +9 -0
- package/types/generated/Icon.d.ts +3 -0
- package/types/generated/Icon.web.d.ts +3 -0
- package/types/generated/Image.d.ts +7 -0
- package/types/generated/Image.web.d.ts +3 -0
- package/types/generated/InputNumber.d.ts +5 -0
- package/types/generated/InputNumber.web.d.ts +5 -0
- package/types/generated/InputRating.d.ts +4 -0
- package/types/generated/InputRating.web.d.ts +4 -0
- package/types/generated/InputTags.d.ts +4 -0
- package/types/generated/InputTags.web.d.ts +5 -0
- package/types/generated/Kbd.d.ts +4 -0
- package/types/generated/Kbd.web.d.ts +4 -0
- package/types/generated/KeyboardAvoiding.mobile.d.ts +2 -0
- package/types/generated/Link.d.ts +2 -0
- package/types/generated/Link.web.d.ts +3 -0
- package/types/generated/ListItem.d.ts +3 -0
- package/types/generated/ListItem.web.d.ts +3 -0
- package/types/generated/Meter.d.ts +3 -0
- package/types/generated/Meter.web.d.ts +3 -0
- package/types/generated/NavLink.d.ts +3 -0
- package/types/generated/NavLink.web.d.ts +3 -0
- package/types/generated/NavigationMenu.d.ts +4 -0
- package/types/generated/NavigationMenu.web.d.ts +5 -0
- package/types/generated/Overlay.d.ts +3 -0
- package/types/generated/Overlay.web.d.ts +3 -0
- package/types/generated/Pagination.d.ts +4 -0
- package/types/generated/Pagination.web.d.ts +5 -0
- package/types/generated/PinInput.d.ts +4 -0
- package/types/generated/PinInput.web.d.ts +4 -0
- package/types/generated/Popover.d.ts +6 -0
- package/types/generated/Popover.web.d.ts +3 -0
- package/types/generated/Pressable.d.ts +6 -0
- package/types/generated/Pressable.web.d.ts +2 -0
- package/types/generated/ProgressGroup.d.ts +3 -0
- package/types/generated/ProgressGroup.web.d.ts +4 -0
- package/types/generated/RadioGroup.d.ts +5 -0
- package/types/generated/RadioGroup.web.d.ts +5 -0
- package/types/generated/RichText.d.ts +7 -0
- package/types/generated/RichText.web.d.ts +3 -0
- package/types/generated/RouteHost.mobile.d.ts +14 -0
- package/types/generated/Row.d.ts +2 -0
- package/types/generated/Row.web.d.ts +2 -0
- package/types/generated/SafeArea.d.ts +2 -0
- package/types/generated/SafeArea.web.d.ts +3 -0
- package/types/generated/Screen.d.ts +3 -0
- package/types/generated/Screen.web.d.ts +3 -0
- package/types/generated/ScrollBox.d.ts +3 -0
- package/types/generated/ScrollBox.web.d.ts +3 -0
- package/types/generated/ScrollView.d.ts +7 -0
- package/types/generated/ScrollView.web.d.ts +6 -0
- package/types/generated/SearchInput.d.ts +7 -0
- package/types/generated/SearchInput.web.d.ts +6 -0
- package/types/generated/SegmentedControl.d.ts +7 -0
- package/types/generated/SegmentedControl.web.d.ts +6 -0
- package/types/generated/Select.d.ts +6 -0
- package/types/generated/Select.web.d.ts +6 -0
- package/types/generated/Separator.d.ts +5 -0
- package/types/generated/Separator.web.d.ts +5 -0
- package/types/generated/Sheet.d.ts +5 -0
- package/types/generated/Sheet.web.d.ts +7 -0
- package/types/generated/Skeleton.d.ts +5 -0
- package/types/generated/Skeleton.web.d.ts +6 -0
- package/types/generated/Slider.d.ts +6 -0
- package/types/generated/Slider.web.d.ts +6 -0
- package/types/generated/Spacer.d.ts +3 -0
- package/types/generated/Spacer.web.d.ts +3 -0
- package/types/generated/Stack.d.ts +3 -0
- package/types/generated/Stack.web.d.ts +3 -0
- package/types/generated/Stepper.d.ts +4 -0
- package/types/generated/Stepper.web.d.ts +5 -0
- package/types/generated/Switch.d.ts +7 -0
- package/types/generated/Switch.web.d.ts +6 -0
- package/types/generated/Table.d.ts +4 -0
- package/types/generated/Table.web.d.ts +5 -0
- package/types/generated/Tabs.d.ts +10 -0
- package/types/generated/Tabs.web.d.ts +6 -0
- package/types/generated/Text.d.ts +2 -0
- package/types/generated/Text.web.d.ts +2 -0
- package/types/generated/TextArea.d.ts +8 -0
- package/types/generated/TextArea.web.d.ts +9 -0
- package/types/generated/TextInput.d.ts +9 -0
- package/types/generated/TextInput.web.d.ts +2 -0
- package/types/generated/Timeline.d.ts +3 -0
- package/types/generated/Timeline.web.d.ts +4 -0
- package/types/generated/Tooltip.d.ts +9 -0
- package/types/generated/Tooltip.web.d.ts +12 -0
- package/types/generated/Tree.d.ts +4 -0
- package/types/generated/Tree.web.d.ts +4 -0
- package/types/generated/User.d.ts +5 -0
- package/types/generated/User.web.d.ts +5 -0
- package/types/generated/View.d.ts +7 -0
- package/types/generated/View.web.d.ts +7 -0
- package/types/generated/VirtualList.d.ts +5 -0
- package/types/generated/VirtualList.web.d.ts +4 -0
- package/types/generated/WebView.d.ts +11 -0
- package/types/generated/WebView.web.d.ts +5 -0
- package/types/generated/aliases.d.ts +7 -0
- package/types/generated/aliases.web.d.ts +7 -0
- package/types/generated/android/BottomNavigationView.android.d.ts +9 -0
- package/types/generated/android/CircularProgressIndicator.android.d.ts +6 -0
- package/types/generated/android/DrawerLayout.android.d.ts +12 -0
- package/types/generated/android/MaterialDialog.android.d.ts +8 -0
- package/types/generated/android/MaterialSwitch.android.d.ts +6 -0
- package/types/generated/android/RecyclerView.android.d.ts +14 -0
- package/types/generated/android/SeekBar.android.d.ts +5 -0
- package/types/generated/android/icon.android.d.ts +5 -0
- package/types/generated/android/index.d.ts +12 -0
- package/types/generated/android/openModal.android.d.ts +4 -0
- package/types/generated/anim.d.ts +10 -0
- package/types/generated/anim.web.d.ts +3 -0
- package/types/generated/apply-native-modifiers.native.d.ts +3 -0
- package/types/generated/child-array.d.ts +3 -0
- package/types/generated/cx.d.ts +6 -0
- package/types/generated/escape-props.d.ts +16 -0
- package/types/generated/icons.d.ts +5 -0
- package/types/generated/index.d.ts +1 -0
- package/types/generated/index.linux.d.ts +5 -0
- package/types/generated/index.mobile.d.ts +4 -0
- package/types/generated/index.shared.d.ts +111 -0
- package/types/generated/index.shared.web.d.ts +111 -0
- package/types/generated/index.web.d.ts +1 -0
- package/types/generated/ios/LiquidGlass.ios.d.ts +12 -0
- package/types/generated/ios/LiquidGlassContainer.ios.d.ts +13 -0
- package/types/generated/ios/SideDrawer.ios.d.ts +12 -0
- package/types/generated/ios/UIActivityIndicatorView.ios.d.ts +5 -0
- package/types/generated/ios/UIModal.ios.d.ts +7 -0
- package/types/generated/ios/UISlider.ios.d.ts +5 -0
- package/types/generated/ios/UISwitch.ios.d.ts +6 -0
- package/types/generated/ios/UITabBar.ios.d.ts +7 -0
- package/types/generated/ios/UITableView.ios.d.ts +14 -0
- package/types/generated/ios/icon.ios.d.ts +5 -0
- package/types/generated/ios/index.d.ts +14 -0
- package/types/generated/ios/openModal.ios.d.ts +4 -0
- package/types/generated/keyboard-inset.mobile.d.ts +10 -0
- package/types/generated/layout-child.d.ts +6 -0
- package/types/generated/layout-child.web.d.ts +15 -0
- package/types/generated/meter-math.d.ts +6 -0
- package/types/generated/modal-presenter.mobile.d.ts +14 -0
- package/types/generated/modifier-factories.d.ts +15 -0
- package/types/generated/native/index.d.ts +3 -0
- package/types/generated/pan.d.ts +2 -0
- package/types/generated/pan.web.d.ts +9 -0
- package/types/generated/platform.d.ts +7 -0
- package/types/generated/platform.web.d.ts +6 -0
- package/types/generated/platformProps.d.ts +7 -0
- package/types/generated/platformProps.web.d.ts +2 -0
- package/types/generated/popover-position.d.ts +14 -0
- package/types/{props.d.ts → generated/props.d.ts} +127 -133
- package/types/generated/refresh-metrics.d.ts +8 -0
- package/types/generated/refresh.d.ts +42 -0
- package/types/generated/refresh.web.d.ts +23 -0
- package/types/generated/root-layout.mobile.d.ts +22 -0
- package/types/generated/route-host.mobile.d.ts +1 -0
- package/types/generated/route-table.d.ts +90 -0
- package/types/generated/route.d.ts +74 -0
- package/types/generated/route.web.d.ts +67 -0
- package/types/generated/safeAreaInsets.d.ts +8 -0
- package/types/generated/safeAreaInsets.web.d.ts +8 -0
- package/types/generated/sheet-detents.d.ts +23 -0
- package/types/generated/sheet-detents.web.d.ts +13 -0
- package/types/generated/sheet-service.d.ts +11 -0
- package/types/generated/sheet-service.web.d.ts +6 -0
- package/types/generated/sheet-snap.d.ts +18 -0
- package/types/generated/stacks.d.ts +9 -0
- package/types/generated/stacks.web.d.ts +4 -0
- package/types/generated/store.d.ts +14 -0
- package/types/generated/styled.d.ts +20 -0
- package/types/generated/styled.web.d.ts +10 -0
- package/types/generated/svg.mobile.d.ts +23 -0
- package/types/generated/tap-to-blur.mobile.d.ts +16 -0
- package/types/generated/text-write.d.ts +9 -0
- package/types/generated/theme/colorScheme.d.ts +6 -0
- package/types/generated/theme/colorScheme.linux.d.ts +5 -0
- package/types/generated/theme/colorScheme.web.d.ts +5 -0
- package/types/generated/theme/status-bar-scheme.mobile.d.ts +1 -0
- package/types/generated/theme/theme-scheme.d.ts +20 -0
- package/types/generated/toast-anchor.d.ts +4 -0
- package/types/generated/toast-anchor.web.d.ts +4 -0
- package/types/generated/transform.web.d.ts +8 -0
- package/types/generated/translate.d.ts +5 -0
- package/types/generated/translate.web.d.ts +6 -0
- package/types/generated/use-back.d.ts +6 -0
- package/types/generated/use-back.web.d.ts +7 -0
- package/types/generated/use-store.d.ts +9 -0
- package/types/generated/use-store.web.d.ts +9 -0
- package/types/generated/useMeasure.d.ts +3 -0
- package/types/generated/useMeasure.web.d.ts +3 -0
- package/types/generated/vendor/ui-svg/index.common.d.ts +7 -0
- package/types/generated/vendor/ui-svg/index.d.ts +1 -0
- package/types/generated/vendor/ui-svg/index.ios.d.ts +13 -0
- package/types/generated/virtual-list-layout.d.ts +44 -0
- package/types/generated/web/index.d.ts +3 -0
- package/types/generated/windows.d.ts +3 -0
- package/types/generated/windows.linux.d.ts +15 -0
- package/types/generated/windows.web.d.ts +3 -0
- package/types/index.macos.d.ts +142 -0
- package/dist/native/CameraView.native.tsrx.js +0 -165
- package/dist/native/Meter.native.tsrx.js +0 -92
- package/dist/native/Pager.native.tsrx.js +0 -282
- package/dist/native/Video.native.tsrx.js +0 -248
- package/dist/native/camera-permission.native.js +0 -47
- package/dist/native/safeAreaInsets.native.tsrx.js +0 -35
- package/dist/native/video-chrome.native.tsrx.js +0 -365
- package/dist/web/CameraView.web.tsrx.js +0 -310
- package/dist/web/Pager.web.tsrx.js +0 -337
- package/dist/web/Video.web.tsrx.js +0 -400
- package/dist/web/video-chrome.web.tsrx.js +0 -207
- package/types/android.d.ts +0 -53
- package/types/index.d.ts +0 -273
- package/types/index.native.d.ts +0 -273
- package/types/index.web.d.ts +0 -272
- package/types/ios.d.ts +0 -59
- package/types/native.d.ts +0 -5
- package/types/web.d.ts +0 -17
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
import { memo } from 'octane';
|
|
3
|
+
import { Frame, GridLayout, Page, TabView, TabViewItem } from '@nativescript/core';
|
|
4
|
+
import { createNativeScriptRoot } from '@nativescript-community/octane';
|
|
5
|
+
import type { UniversalComponent } from 'octane/universal';
|
|
6
|
+
import { registerStack } from '../stacks';
|
|
7
|
+
import { cx } from '../cx';
|
|
8
|
+
import { getIcon } from '../icons';
|
|
9
|
+
import { Icon } from '../Icon.tsrx';
|
|
10
|
+
import { Pressable } from '../Pressable.tsrx';
|
|
11
|
+
import { Text } from '../Text.tsrx';
|
|
12
|
+
import { layoutsForRoute, screenFor, useRoute } from '../route';
|
|
13
|
+
import { RouteHost, screenParamsFor } from '../route-host.mobile';
|
|
14
|
+
import type { PlatformTabSpec, PlatformTabsProps, PlatformWidgetProps } from '../props';
|
|
15
|
+
import { applyEscapeProps } from '../escape-props';
|
|
16
|
+
|
|
17
|
+
export type { PlatformTabSpec as TabSpec } from '../props';
|
|
18
|
+
|
|
19
|
+
// Android named stacks never navigate a Frame (upstream #11444 makes
|
|
20
|
+
// TabViewItem frames unsafe) — pushes live in the route store instead, and a
|
|
21
|
+
// stack pane renders the current route here, same shape as the self-drawn
|
|
22
|
+
// Tabs. The bottom bar's OS chrome stays platform-authentic; only the pane
|
|
23
|
+
// content swaps.
|
|
24
|
+
type TabPaneProps = { render: () => any; stack?: string };
|
|
25
|
+
function TabPane(props: TabPaneProps) @{
|
|
26
|
+
const route = useRoute(props.stack ?? '');
|
|
27
|
+
const Screen = route ? screenFor(route.name) : undefined;
|
|
28
|
+
|
|
29
|
+
@if (route && Screen) {
|
|
30
|
+
<RouteHost
|
|
31
|
+
screen={Screen}
|
|
32
|
+
layouts={layoutsForRoute(route.name)}
|
|
33
|
+
params={screenParamsFor(route)}
|
|
34
|
+
/>
|
|
35
|
+
} @else {
|
|
36
|
+
<>{props.render()}</>
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const paneRoots = new WeakMap<GridLayout, any>();
|
|
41
|
+
const tabsByView = new WeakMap<GridLayout, () => any>();
|
|
42
|
+
const itemsCache = new WeakMap<readonly PlatformTabSpec[], TabViewItem[]>();
|
|
43
|
+
const iconWarned = new Set<string>();
|
|
44
|
+
|
|
45
|
+
function applyIcon(item: TabViewItem, name: string): void {
|
|
46
|
+
if (name.startsWith('res://')) {
|
|
47
|
+
item.iconSource = name;
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
const glyph = getIcon(name);
|
|
51
|
+
if (!glyph) {
|
|
52
|
+
warnIconOnce(name, `tab icon '${name}' isn't registered — call registerIcons() at boot.`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
if (glyph.src) {
|
|
57
|
+
item.iconSource = glyph.src;
|
|
58
|
+
} else if (glyph.font) {
|
|
59
|
+
item.iconSource = 'font://' + glyph.font.glyph;
|
|
60
|
+
item.iconFontFamily = glyph.font.family;
|
|
61
|
+
} else if (glyph.text) {
|
|
62
|
+
item.iconSource = 'font://' + glyph.text;
|
|
63
|
+
} else {
|
|
64
|
+
warnIconOnce(
|
|
65
|
+
name,
|
|
66
|
+
`tab icon '${name}' has no src/font/text representation — the platform tab bar can't render svg/markup glyphs.`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
function warnIconOnce(name: string, msg: string): void {
|
|
72
|
+
if (iconWarned.has(name)) return;
|
|
73
|
+
iconWarned.add(name);
|
|
74
|
+
console.warn('[octane-xplat] ' + msg);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
function itemsFor(tabs: readonly PlatformTabSpec[]): TabViewItem[] {
|
|
78
|
+
let items = itemsCache.get(tabs);
|
|
79
|
+
if (items !== undefined) return items;
|
|
80
|
+
items = tabs.map((t) => {
|
|
81
|
+
const item = new TabViewItem();
|
|
82
|
+
item.title = t.title;
|
|
83
|
+
if (t.icon) applyIcon(item, t.icon);
|
|
84
|
+
if (t.stack) {
|
|
85
|
+
const frame = new Frame();
|
|
86
|
+
frame.once('loaded', () => {
|
|
87
|
+
frame.navigate({
|
|
88
|
+
create: () => {
|
|
89
|
+
const page = new Page();
|
|
90
|
+
page.actionBarHidden = true;
|
|
91
|
+
const pane = new GridLayout();
|
|
92
|
+
page.content = pane;
|
|
93
|
+
createNativeScriptRoot(pane).render(
|
|
94
|
+
TabPane as unknown as UniversalComponent, { render: t.render, stack: t.stack });
|
|
95
|
+
|
|
96
|
+
return page;
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
registerStack(t.stack, frame);
|
|
102
|
+
item.view = frame;
|
|
103
|
+
return item;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
const cv = new GridLayout();
|
|
107
|
+
tabsByView.set(cv, t.render);
|
|
108
|
+
item.view = cv;
|
|
109
|
+
return item;
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
itemsCache.set(tabs, items);
|
|
113
|
+
return items;
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
function mountPanes(e: any) {
|
|
117
|
+
const tv = e.object as TabView;
|
|
118
|
+
for (const item of tv.items as TabViewItem[]) {
|
|
119
|
+
const cv = item.view as GridLayout;
|
|
120
|
+
if (!(cv instanceof GridLayout) || paneRoots.has(cv)) continue;
|
|
121
|
+
const render = tabsByView.get(cv);
|
|
122
|
+
if (!render) continue;
|
|
123
|
+
const root = createNativeScriptRoot(cv);
|
|
124
|
+
paneRoots.set(cv, root);
|
|
125
|
+
root.render(TabPane as unknown as UniversalComponent, { render });
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
function NavInner(props: {
|
|
130
|
+
className?: any;
|
|
131
|
+
style?: any;
|
|
132
|
+
id?: string;
|
|
133
|
+
tabs: readonly PlatformTabSpec[];
|
|
134
|
+
selectedIndex?: number;
|
|
135
|
+
onSelectedIndexChanged?: (index: number) => void;
|
|
136
|
+
modifiers?: PlatformWidgetProps<PlatformTabsProps>['modifiers'];
|
|
137
|
+
}) @{
|
|
138
|
+
<tabview
|
|
139
|
+
ref={(v: any) => applyEscapeProps(v, props)}
|
|
140
|
+
id={props.id}
|
|
141
|
+
className={cx(props.className)}
|
|
142
|
+
style={props.style}
|
|
143
|
+
items={itemsFor(props.tabs)}
|
|
144
|
+
selectedIndex={props.selectedIndex}
|
|
145
|
+
onSelectedIndexChanged={(e: any) => props.onSelectedIndexChanged?.(e.value)}
|
|
146
|
+
onLoaded={mountPanes}
|
|
147
|
+
/>
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Memoized on the tabs array — TabView.item writes rebuild the native
|
|
151
|
+
// structure, and the driver re-applies props every render.
|
|
152
|
+
const MemoNav = memo(NavInner, (a, b) => a.tabs === b.tabs && a.selectedIndex === b.selectedIndex && a.modifiers === b.modifiers);
|
|
153
|
+
|
|
154
|
+
/** BottomNavigationView — the platform tab bar (Android bottom navigation
|
|
155
|
+
* via NativeScript TabView). Each `stack` pane hosts a Frame for the tab's
|
|
156
|
+
* chrome, but pushes stay in the route store and render through RouteHost —
|
|
157
|
+
* TabViewItem-hosted Frames lose navigation bookkeeping upstream
|
|
158
|
+
* (NativeScript#11444; the #11446 fix ships in the xplat core patch).
|
|
159
|
+
* `tabs` is identity-stable. */
|
|
160
|
+
export function BottomNavigationView(props: PlatformWidgetProps<PlatformTabsProps>) @{
|
|
161
|
+
<MemoNav
|
|
162
|
+
id={props.id}
|
|
163
|
+
className={props.className}
|
|
164
|
+
style={props.style}
|
|
165
|
+
tabs={props.tabs}
|
|
166
|
+
selectedIndex={props.selectedIndex}
|
|
167
|
+
onSelectedIndexChanged={props.onSelectedIndexChanged}
|
|
168
|
+
modifiers={props.modifiers}
|
|
169
|
+
/>
|
|
170
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
import type { ActivityIndicatorProps, PlatformWidgetProps } from '../props';
|
|
3
|
+
import { cx } from '../cx';
|
|
4
|
+
import { applyNativeProps } from '../platformProps';
|
|
5
|
+
|
|
6
|
+
/** CircularProgressIndicator — the platform spinner (Android indeterminate
|
|
7
|
+
* ProgressBar via NativeScript `activityindicator`). The self-drawn shared
|
|
8
|
+
* `ActivityIndicator` lives in the root export. */
|
|
9
|
+
export function CircularProgressIndicator(props: PlatformWidgetProps<ActivityIndicatorProps>) @{
|
|
10
|
+
if (props.busy === false) return null;
|
|
11
|
+
|
|
12
|
+
<activityindicator
|
|
13
|
+
id={props.id}
|
|
14
|
+
className={cx(props.className)}
|
|
15
|
+
style={props.style}
|
|
16
|
+
busy={props.busy ?? true}
|
|
17
|
+
ref={(el: any) => applyNativeProps(el, props)}
|
|
18
|
+
/>
|
|
19
|
+
}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
import { registerElement } from '@nativescript-community/octane';
|
|
3
|
+
import type { Attributes } from '@nativescript-community/octane/intrinsics';
|
|
4
|
+
import { Drawer as NSDrawer, install } from '@nativescript-community/ui-drawer';
|
|
5
|
+
import { useEffect, useRef } from 'octane';
|
|
6
|
+
import type { DrawerProps, PlatformWidgetProps } from '../props';
|
|
7
|
+
import { cx } from '../cx';
|
|
8
|
+
import { applyEscapeProps } from '../escape-props';
|
|
9
|
+
|
|
10
|
+
declare module '@nativescript-community/octane/intrinsics' {
|
|
11
|
+
interface NativeScriptElements {
|
|
12
|
+
drawer: Attributes<typeof NSDrawer>;
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Optional peer: this leaf resolves only when the app ships the plugin
|
|
17
|
+
// (isolated linker resolves it under the app root). install() registers the
|
|
18
|
+
// plugin's gesture handler once at module load. The self-drawn shared
|
|
19
|
+
// `Drawer` lives in the root export.
|
|
20
|
+
install();
|
|
21
|
+
registerElement('drawer', NSDrawer);
|
|
22
|
+
|
|
23
|
+
/** DrawerLayout — ui-drawer host (AndroidX DrawerLayout behavior via the
|
|
24
|
+
* plugin). `main`/`drawer` are slot props wired via the driver's hostSlot
|
|
25
|
+
* mechanism; `open` drives the imperative open()/close(). Slot hosts are
|
|
26
|
+
* gridlayout so each side stays multi-child. */
|
|
27
|
+
export function DrawerLayout(props: PlatformWidgetProps<DrawerProps>) @{
|
|
28
|
+
const host = useRef<NSDrawer | null>(null);
|
|
29
|
+
|
|
30
|
+
useEffect(() => {
|
|
31
|
+
const d = host.current;
|
|
32
|
+
if (!d) return;
|
|
33
|
+
if (props.open && !d.isOpened('left')) d.open('left').catch(() => {});
|
|
34
|
+
else if (!props.open && d.isOpened('left')) d.close('left').catch(() => {});
|
|
35
|
+
}, [props.open]);
|
|
36
|
+
|
|
37
|
+
<drawer
|
|
38
|
+
id={props.id}
|
|
39
|
+
ref={(d: any) => { host.current = d; applyEscapeProps(d, props); }}
|
|
40
|
+
className={cx('vx-drawer', props.className)}
|
|
41
|
+
style={props.style}
|
|
42
|
+
>
|
|
43
|
+
<gridlayout hostSlot="mainContent">{props.main}</gridlayout>
|
|
44
|
+
@if (props.drawer != null) {
|
|
45
|
+
<gridlayout hostSlot="leftDrawer">{props.drawer}</gridlayout>
|
|
46
|
+
}
|
|
47
|
+
</drawer>
|
|
48
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
import { useEffect, useRef } from 'octane';
|
|
3
|
+
import type { ModalProps } from "../props";
|
|
4
|
+
import { Frame, GridLayout } from '@nativescript/core';
|
|
5
|
+
import { createNativeScriptRoot } from '@nativescript-community/octane';
|
|
6
|
+
import type { UniversalComponent } from 'octane/universal';
|
|
7
|
+
import { applyThemeClasses } from '../theme/theme-scheme';
|
|
8
|
+
import { modalPresenter } from '../modal-presenter.mobile';
|
|
9
|
+
|
|
10
|
+
// The modal's content renders inside a separate Octane root on a GridLayout
|
|
11
|
+
// host — modals never share context with their presenter (decision #9).
|
|
12
|
+
function Panel(props: { children?: any }) @{
|
|
13
|
+
<>{props.children}</>
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
/** MaterialDialog — declarative `open` drives the platform modal
|
|
17
|
+
* presentation (`showModal`; fullscreen=false is a centered dialog sized
|
|
18
|
+
* to its content, not a bottom sheet). Renders nothing inline; the
|
|
19
|
+
* content lives on the modal's own root above the whole tree. The shared
|
|
20
|
+
* `ui` surface has no Modal — `Overlay`/`Sheet` are the self-drawn
|
|
21
|
+
* in-window versions. */
|
|
22
|
+
export function MaterialDialog(props: ModalProps) @{
|
|
23
|
+
const shown = useRef<{ host: GridLayout; root: any; unbindTheme?: () => void } | null>(null);
|
|
24
|
+
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
if (props.open && !shown.current) {
|
|
27
|
+
const presenter = modalPresenter(Frame.topmost());
|
|
28
|
+
if (!presenter) {
|
|
29
|
+
// Dropped, not deferred: the effect only re-runs when props
|
|
30
|
+
// change, so warn loudly instead of silently swallowing open.
|
|
31
|
+
console.warn('[Modal] open dropped — no live presenter (currentPage mid-navigation or no active frame).');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
34
|
+
const host = new GridLayout();
|
|
35
|
+
const unbindTheme = applyThemeClasses(host, 'vx-modal-host');
|
|
36
|
+
const root = createNativeScriptRoot(host);
|
|
37
|
+
shown.current = { host, root, unbindTheme };
|
|
38
|
+
if (props.component) {
|
|
39
|
+
root.render(props.component as UniversalComponent, props.params ?? {});
|
|
40
|
+
} else {
|
|
41
|
+
root.render(Panel as unknown as UniversalComponent, { children: props.children });
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const fullscreen = props.presentation
|
|
45
|
+
? props.presentation === 'fullscreen'
|
|
46
|
+
: props.fullscreen ?? true;
|
|
47
|
+
|
|
48
|
+
presenter.showModal(host, {
|
|
49
|
+
context: {},
|
|
50
|
+
closeCallback: (result?: unknown) => { shown.current?.unbindTheme?.(); shown.current = null; props.onClose?.(result); },
|
|
51
|
+
fullscreen,
|
|
52
|
+
animated: true,
|
|
53
|
+
});
|
|
54
|
+
} else if (!props.open && shown.current) {
|
|
55
|
+
const { host } = shown.current;
|
|
56
|
+
shown.current = null;
|
|
57
|
+
host.closeModal();
|
|
58
|
+
}
|
|
59
|
+
}, [props.open]);
|
|
60
|
+
|
|
61
|
+
<></>
|
|
62
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
import type { PlatformWidgetProps, SwitchProps } from "../props";
|
|
3
|
+
import { cx } from "../cx";
|
|
4
|
+
import { applyEscapeProps } from "../escape-props";
|
|
5
|
+
|
|
6
|
+
/** MaterialSwitch — the platform widget (Material SwitchMaterial via
|
|
7
|
+
* NativeScript `switch`). OS chrome is the point here; the self-drawn
|
|
8
|
+
* shared `Switch` lives in the root export. */
|
|
9
|
+
export function MaterialSwitch(props: PlatformWidgetProps<SwitchProps>) @{
|
|
10
|
+
<switch
|
|
11
|
+
ref={(v: any) => applyEscapeProps(v, props)}
|
|
12
|
+
id={props.id}
|
|
13
|
+
className={cx(props.className)}
|
|
14
|
+
style={props.style}
|
|
15
|
+
checked={props.checked}
|
|
16
|
+
onCheckedChange={(e: any) => props.onCheckedChange?.(e.value)}
|
|
17
|
+
/>
|
|
18
|
+
}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
// Universal hooks import from 'octane' — the compiler retargets them to the
|
|
3
|
+
// nativescript runtime, and the dev server serves them via HTTP-ESM.
|
|
4
|
+
import { memo, useEffect, useRef } from 'octane';
|
|
5
|
+
import { ScrollView } from '@nativescript/core';
|
|
6
|
+
import type { ListProps, PlatformWidgetProps } from "../props";
|
|
7
|
+
import type { RefreshConfig, RefreshController } from '../refresh';
|
|
8
|
+
import { cx } from "../cx";
|
|
9
|
+
import { ActivityIndicator } from '../ActivityIndicator.tsrx';
|
|
10
|
+
import { applyEscapeProps } from '../escape-props';
|
|
11
|
+
import { REFRESH_HEADER_HEIGHT } from '../refresh-metrics';
|
|
12
|
+
import { createPullToRefresh } from '../refresh';
|
|
13
|
+
|
|
14
|
+
function rejectNestedScrollView(event: any) {
|
|
15
|
+
let parent = event.object?.parent;
|
|
16
|
+
while (parent) {
|
|
17
|
+
if (parent instanceof ScrollView) {
|
|
18
|
+
throw new Error('[RecyclerView] cannot be nested inside native ScrollView. Use ScrollBox so the list owns scrolling.');
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
parent = parent.parent;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/** Stable ref bag across the memo boundary — refresh callbacks are fresh
|
|
26
|
+
* closures each parent render, so the props live behind refs and the
|
|
27
|
+
* memo compare just sees the same bag. */
|
|
28
|
+
interface RefreshBag {
|
|
29
|
+
cfg: { current: RefreshConfig };
|
|
30
|
+
indicator: { current: any };
|
|
31
|
+
ctl: { current: RefreshController | null };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Cell machinery is driver-owned since @nativescript-community/octane 0.2.1
|
|
35
|
+
// (upstream #7, closes our issue #1): `renderItem` on <listview> makes
|
|
36
|
+
// itemTemplate vend a ContentView per recycled cell, each with its own
|
|
37
|
+
// universal root; itemLoading binds items[index] and skips unchanged rows;
|
|
38
|
+
// a changed renderItem re-binds live cells; discard unmounts the roots.
|
|
39
|
+
// The cell ContentView is single-child — a renderItem returning multiple
|
|
40
|
+
// roots would silently drop siblings — so output wraps in a gridlayout.
|
|
41
|
+
function RecyclerViewInner(props: {
|
|
42
|
+
className?: any;
|
|
43
|
+
style?: any;
|
|
44
|
+
id?: string;
|
|
45
|
+
items: any[];
|
|
46
|
+
renderItem: (item: any, index: number) => any;
|
|
47
|
+
onEndReached?: () => void;
|
|
48
|
+
android?: Record<string, any>;
|
|
49
|
+
modifiers?: PlatformWidgetProps<ListProps>['modifiers'];
|
|
50
|
+
refresh?: RefreshBag;
|
|
51
|
+
}) @{
|
|
52
|
+
const lv = useRef<any>(null);
|
|
53
|
+
useEffect(() => {
|
|
54
|
+
const bag = props.refresh;
|
|
55
|
+
if (!bag || !lv.current) return;
|
|
56
|
+
bag.ctl.current = createPullToRefresh({
|
|
57
|
+
scroller: lv.current,
|
|
58
|
+
indicator: bag.indicator.current,
|
|
59
|
+
isAtTop: () => (lv.current?.android?.computeVerticalScrollOffset?.() ?? 0) <= 0,
|
|
60
|
+
cfg: bag.cfg,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
return () => {
|
|
64
|
+
bag.ctl.current?.detach();
|
|
65
|
+
bag.ctl.current = null;
|
|
66
|
+
};
|
|
67
|
+
}, []);
|
|
68
|
+
|
|
69
|
+
<listview
|
|
70
|
+
ref={(v: any) => {
|
|
71
|
+
lv.current = v;
|
|
72
|
+
applyEscapeProps(v, props);
|
|
73
|
+
}}
|
|
74
|
+
id={props.id}
|
|
75
|
+
className={cx(props.className)}
|
|
76
|
+
style={props.style}
|
|
77
|
+
items={props.items}
|
|
78
|
+
onLoadMoreItems={props.onEndReached}
|
|
79
|
+
onLoaded={rejectNestedScrollView}
|
|
80
|
+
renderItem={(item: any, index: number) => <gridlayout>{props.renderItem(item, index)}</gridlayout>}
|
|
81
|
+
{...props.android}
|
|
82
|
+
/>
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// The listview subtree is memoized on `items` and list configuration: the
|
|
86
|
+
// universal driver re-applies props on every render (no value diffing), and
|
|
87
|
+
// each write can trigger view-level side effects — measured: every unrelated
|
|
88
|
+
// parent re-render refired itemLoading for all visible cells. Memoized on the
|
|
89
|
+
// items reference and list configuration, unrelated parent re-renders skip
|
|
90
|
+
// this subtree. Constraint: `renderItem` should be identity-stable (a
|
|
91
|
+
// useCallback-style ref) — a fresh closure each render is deliberately
|
|
92
|
+
// not part of the compare. (`RecyclerViewInner` must precede this —
|
|
93
|
+
// compiled components are consts, not hoisted functions.)
|
|
94
|
+
const MemoListView = memo(RecyclerViewInner, (a, b) =>
|
|
95
|
+
a.items === b.items &&
|
|
96
|
+
a.className === b.className &&
|
|
97
|
+
a.style === b.style &&
|
|
98
|
+
a.id === b.id &&
|
|
99
|
+
a.onEndReached === b.onEndReached &&
|
|
100
|
+
a.android === b.android &&
|
|
101
|
+
a.modifiers === b.modifiers &&
|
|
102
|
+
a.refresh === b.refresh
|
|
103
|
+
);
|
|
104
|
+
|
|
105
|
+
/** RecyclerView — the platform recycling list (Android RecyclerView via
|
|
106
|
+
* NativeScript `listview`). `items` is a plain array, ItemsSource, or
|
|
107
|
+
* ObservableArray — the driver binds `items[index]` into the recycled
|
|
108
|
+
* cell's root and skips rebinds whose row, item, and renderer are
|
|
109
|
+
* unchanged. Cell identity = the recycled host view, not the item.
|
|
110
|
+
* The shared `ui` export has no List — compose ScrollView + mapped
|
|
111
|
+
* children there.
|
|
112
|
+
*
|
|
113
|
+
* `refreshing`/`onRefresh`/`refreshThreshold` enable pull-to-refresh:
|
|
114
|
+
* the indicator is self-drawn (vx-spinner) and the list is translated
|
|
115
|
+
* inside a clipped wrapper while the drag accumulates — no
|
|
116
|
+
* SwipeRefreshLayout, so the pixels match the shared ScrollView path. */
|
|
117
|
+
export function RecyclerView(props: PlatformWidgetProps<ListProps>) @{
|
|
118
|
+
const refreshCapable = props.onRefresh != null || props.refreshing != null;
|
|
119
|
+
const cfg = useRef<RefreshConfig>({});
|
|
120
|
+
cfg.current = {
|
|
121
|
+
onRefresh: props.onRefresh,
|
|
122
|
+
refreshing: props.refreshing,
|
|
123
|
+
threshold: props.refreshThreshold,
|
|
124
|
+
};
|
|
125
|
+
|
|
126
|
+
const indicator = useRef<any>(null);
|
|
127
|
+
const ctl = useRef<RefreshController | null>(null);
|
|
128
|
+
const refresh = useRef<RefreshBag>({ cfg, indicator, ctl });
|
|
129
|
+
|
|
130
|
+
useEffect(() => {
|
|
131
|
+
ctl.current?.sync();
|
|
132
|
+
}, [props.refreshing]);
|
|
133
|
+
|
|
134
|
+
@if (props.items.length > 0) {
|
|
135
|
+
@if (refreshCapable) {
|
|
136
|
+
<gridlayout className={cx('vx-refresh-wrap', props.className)} style={props.style}>
|
|
137
|
+
<MemoListView
|
|
138
|
+
id={props.id}
|
|
139
|
+
items={props.items}
|
|
140
|
+
renderItem={props.renderItem}
|
|
141
|
+
onEndReached={props.onEndReached}
|
|
142
|
+
android={props.android}
|
|
143
|
+
modifiers={props.modifiers}
|
|
144
|
+
refresh={refresh.current}
|
|
145
|
+
/>
|
|
146
|
+
<flexboxlayout
|
|
147
|
+
ref={(v: any) => {
|
|
148
|
+
indicator.current = v;
|
|
149
|
+
}}
|
|
150
|
+
className="vx-refresh"
|
|
151
|
+
verticalAlignment="top"
|
|
152
|
+
height={REFRESH_HEADER_HEIGHT}
|
|
153
|
+
translateY={-REFRESH_HEADER_HEIGHT}
|
|
154
|
+
>
|
|
155
|
+
<ActivityIndicator />
|
|
156
|
+
</flexboxlayout>
|
|
157
|
+
</gridlayout>
|
|
158
|
+
} @else {
|
|
159
|
+
<MemoListView
|
|
160
|
+
id={props.id}
|
|
161
|
+
items={props.items}
|
|
162
|
+
className={props.className}
|
|
163
|
+
style={props.style}
|
|
164
|
+
renderItem={props.renderItem}
|
|
165
|
+
onEndReached={props.onEndReached}
|
|
166
|
+
android={props.android}
|
|
167
|
+
modifiers={props.modifiers}
|
|
168
|
+
/>
|
|
169
|
+
}
|
|
170
|
+
} @else {
|
|
171
|
+
<>{props.renderEmpty?.()}</>
|
|
172
|
+
}
|
|
173
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/** @jsxImportSource @nativescript-community/octane */
|
|
2
|
+
import type { PlatformWidgetProps, SliderProps } from '../props';
|
|
3
|
+
import { cx } from '../cx';
|
|
4
|
+
import { applyNativeProps } from '../platformProps';
|
|
5
|
+
|
|
6
|
+
/** SeekBar — the platform widget (Android SeekBar via NativeScript
|
|
7
|
+
* `slider`). The self-drawn shared `Slider` lives in the root export. */
|
|
8
|
+
export function SeekBar(props: PlatformWidgetProps<SliderProps>) @{
|
|
9
|
+
<slider
|
|
10
|
+
id={props.id}
|
|
11
|
+
className={cx(props.className)}
|
|
12
|
+
style={props.style}
|
|
13
|
+
value={props.value}
|
|
14
|
+
minValue={props.minValue ?? 0}
|
|
15
|
+
maxValue={props.maxValue ?? 100}
|
|
16
|
+
isEnabled={props.disabled ? false : true}
|
|
17
|
+
onValueChange={(e: any) => props.onValueChange?.(e.value)}
|
|
18
|
+
ref={(el: any) => applyNativeProps(el, props)}
|
|
19
|
+
/>
|
|
20
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { PlatformIconChoice } from '../props'
|
|
2
|
+
|
|
3
|
+
/** Selector for glyphs used by Android-authentic widgets; the shared root Icon is unchanged. */
|
|
4
|
+
export const Icon = {
|
|
5
|
+
select(choice: PlatformIconChoice): string {
|
|
6
|
+
return choice.android.startsWith('res://') ? choice.android : `res://drawable/${choice.android}`
|
|
7
|
+
},
|
|
8
|
+
}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
// @octane-xplat/ui/android — Android-authentic widgets. OS chrome is the
|
|
2
|
+
// point: these resolve only in native builds (the `ui/android` subpath has
|
|
3
|
+
// no `web` export condition). Use inside `.android.tsrx`/`.mobile.tsrx`
|
|
4
|
+
// files, or behind `isAndroid` in native-default code — a shared `.tsrx` that
|
|
5
|
+
// imports this path fails the web build on purpose.
|
|
6
|
+
|
|
7
|
+
export { MaterialSwitch } from './MaterialSwitch.android.tsrx'
|
|
8
|
+
export { SeekBar } from './SeekBar.android.tsrx'
|
|
9
|
+
export { CircularProgressIndicator } from './CircularProgressIndicator.android.tsrx'
|
|
10
|
+
export { RecyclerView } from './RecyclerView.android.tsrx'
|
|
11
|
+
export { BottomNavigationView } from './BottomNavigationView.android.tsrx'
|
|
12
|
+
export type { PlatformTabSpec as TabSpec } from '../props'
|
|
13
|
+
export { MaterialDialog } from './MaterialDialog.android.tsrx'
|
|
14
|
+
export { openModal } from './openModal.android'
|
|
15
|
+
export { DrawerLayout } from './DrawerLayout.android.tsrx'
|
|
16
|
+
export { Icon } from './icon.android'
|
|
17
|
+
export { modifier } from '../modifier-factories'
|
|
18
|
+
|
|
19
|
+
export type {
|
|
20
|
+
SwitchProps,
|
|
21
|
+
SliderProps,
|
|
22
|
+
ActivityIndicatorProps,
|
|
23
|
+
ListProps,
|
|
24
|
+
TabsProps,
|
|
25
|
+
ModalProps,
|
|
26
|
+
ModalOpenOptions,
|
|
27
|
+
ModalOpenResult,
|
|
28
|
+
OpenModal,
|
|
29
|
+
DrawerProps,
|
|
30
|
+
NativeModifier,
|
|
31
|
+
NativeModifierValue,
|
|
32
|
+
PlatformIconChoice,
|
|
33
|
+
PlatformTabSpec,
|
|
34
|
+
PlatformTabsProps,
|
|
35
|
+
PlatformWidgetProps,
|
|
36
|
+
RefreshProps,
|
|
37
|
+
} from '../props'
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Frame, GridLayout } from '@nativescript/core'
|
|
2
|
+
import { createNativeScriptRoot } from '@nativescript-community/octane'
|
|
3
|
+
import type { UniversalComponent } from 'octane/universal'
|
|
4
|
+
import type { ModalOpenOptions, ModalOpenResult, OpenModal } from '../props'
|
|
5
|
+
import { applyThemeClasses } from '../theme/theme-scheme'
|
|
6
|
+
import { modalPresenter } from '../modal-presenter.mobile'
|
|
7
|
+
|
|
8
|
+
/** Open a component in its own NativeScript modal root and resolve on close. */
|
|
9
|
+
export const openModal: OpenModal = (Component, params, options = {}) =>
|
|
10
|
+
new Promise<ModalOpenResult>((resolve, reject) => {
|
|
11
|
+
const presenter = modalPresenter(Frame.topmost())
|
|
12
|
+
if (!presenter) {
|
|
13
|
+
reject(
|
|
14
|
+
new Error(
|
|
15
|
+
'openModal dropped — no live presenter. The topmost frame has no loaded currentPage (a page mid-navigation), or no frame is active yet.',
|
|
16
|
+
),
|
|
17
|
+
)
|
|
18
|
+
|
|
19
|
+
return
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const host = new GridLayout()
|
|
23
|
+
const unbindTheme = applyThemeClasses(host, 'vx-modal-host')
|
|
24
|
+
const root = createNativeScriptRoot(host) as any
|
|
25
|
+
let finished = false
|
|
26
|
+
const finish = (result?: ModalOpenResult) => {
|
|
27
|
+
if (finished) {
|
|
28
|
+
return
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
finished = true
|
|
32
|
+
unbindTheme()
|
|
33
|
+
root.unmount?.()
|
|
34
|
+
host.removeChildren?.()
|
|
35
|
+
resolve(result)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const close = (result?: ModalOpenResult) => host.closeModal(result)
|
|
39
|
+
root.render(Component as UniversalComponent, { params, close })
|
|
40
|
+
|
|
41
|
+
const fullscreen = options.presentation
|
|
42
|
+
? options.presentation === 'fullscreen'
|
|
43
|
+
: (options.fullscreen ?? true)
|
|
44
|
+
|
|
45
|
+
// showModal takes (viewToShow, options). On Android fullscreen=false is
|
|
46
|
+
// a centered dialog sized to its content.
|
|
47
|
+
presenter.showModal(host, {
|
|
48
|
+
context: {},
|
|
49
|
+
closeCallback: finish,
|
|
50
|
+
fullscreen,
|
|
51
|
+
animated: options.animated ?? true,
|
|
52
|
+
})
|
|
53
|
+
})
|
|
54
|
+
|
|
55
|
+
export type { ModalOpenOptions }
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { AnimatedValue } from './props'
|
|
2
|
+
|
|
3
|
+
/** AppKit animation writes currently commit their target value immediately.
|
|
4
|
+
* This preserves the shared hook surface while the host animation driver is
|
|
5
|
+
* still unsupported. */
|
|
6
|
+
export function useAnimation(initial = 0, property = 'opacity'): AnimatedValue {
|
|
7
|
+
let value = initial
|
|
8
|
+
let view: any
|
|
9
|
+
const write = (next: number) => {
|
|
10
|
+
value = next
|
|
11
|
+
if (view) {view[property] = next}
|
|
12
|
+
}
|
|
13
|
+
return {
|
|
14
|
+
get value() { return value },
|
|
15
|
+
bind(el: any) { view = el; write(value) },
|
|
16
|
+
to(target: number) { write(target) },
|
|
17
|
+
spring(target: number) { write(target) },
|
|
18
|
+
stop() {},
|
|
19
|
+
}
|
|
20
|
+
}
|