pytech-ui 1.0.29 → 1.0.31
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/LICENSE +21 -21
- package/README.md +40 -40
- package/android/.gradle/buildOutputCleanup/cache.properties +2 -2
- package/android/.gradle/nb-cache/trust/8732A504261C070E1F639E78DF65F8E6DC6FFC865B3D7178A7609BB57105805F +1 -1
- package/android/build.gradle +47 -47
- package/android/src/main/AndroidManifest.xml +2 -2
- package/android/src/main/java/expo/modules/pytechui/Dialog.kt +39 -39
- package/android/src/main/java/expo/modules/pytechui/ForEach/ForEachRecords.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/ForEach/index.kt +82 -82
- package/android/src/main/java/expo/modules/pytechui/Gradient/GradientView.kt +124 -124
- package/android/src/main/java/expo/modules/pytechui/Icon/index.kt +36 -36
- package/android/src/main/java/expo/modules/pytechui/Icon/utils.kt +42 -42
- package/android/src/main/java/expo/modules/pytechui/ListItem/Data/ListItemDataRecords.kt +84 -84
- package/android/src/main/java/expo/modules/pytechui/ListItem/Data/ListItemFromData.kt +127 -127
- package/android/src/main/java/expo/modules/pytechui/ListItem/Slots/ListItemFromSlots.kt +60 -60
- package/android/src/main/java/expo/modules/pytechui/ListItem/Slots/types.kt +42 -42
- package/android/src/main/java/expo/modules/pytechui/ListItem/_shared/Decorator/Decorator.kt +79 -79
- package/android/src/main/java/expo/modules/pytechui/ListItem/_shared/Decorator/Divider.kt +36 -36
- package/android/src/main/java/expo/modules/pytechui/ListItem/_shared/Decorator/utilsDecorator.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/ListItem/_shared/Dynamic/Dynamic.kt +163 -163
- package/android/src/main/java/expo/modules/pytechui/ListItem/_shared/Dynamic/Row.kt +136 -136
- package/android/src/main/java/expo/modules/pytechui/PytechUiModifiers.kt +93 -93
- package/android/src/main/java/expo/modules/pytechui/PytechUiModule.kt +168 -168
- package/android/src/main/java/expo/modules/pytechui/SearchBar.kt +213 -213
- package/android/src/main/java/expo/modules/pytechui/Section/SectionHost.kt +81 -81
- package/android/src/main/java/expo/modules/pytechui/Section/SectionHostView.kt +65 -65
- package/android/src/main/java/expo/modules/pytechui/TextField.kt +251 -251
- package/android/src/main/java/expo/modules/pytechui/TypographySlot/TypographySlotBridge.kt +120 -120
- package/android/src/main/java/expo/modules/pytechui/TypographySlot/constants.kt +47 -47
- package/android/src/main/java/expo/modules/pytechui/extended-theme/ExtendedThemeView.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Colors/ExtendedColorBridge.kt +76 -76
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Constants/Constants.kt +10 -10
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AppBarLargeFlexibleTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AppBarLargeTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AppBarMediumFlexibleTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AppBarMediumTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AppBarSmallTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AppBarTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/AssistChipTokens.kt +25 -25
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/BadgeTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/BaselineButtonTokens.kt +26 -26
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/BottomAppBarTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ButtonGroupSmallTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ButtonLargeTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ButtonMediumTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ButtonSmallTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ButtonXLargeTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ButtonXSmallTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/CheckboxTokens.kt +35 -35
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/CircularProgressIndicatorTokens.kt +25 -25
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ConnectedButtonGroupSmallTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/DateInputModalTokens.kt +22 -22
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/DatePickerModalTokens.kt +33 -33
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/DialogTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/DividerTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/DockedToolbarTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/DragHandleTokens.kt +25 -25
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ElevatedButtonTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ElevatedCardTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ElevationTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ExpressiveMotionTokens.kt +28 -28
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ExtendedFabLargeTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ExtendedFabMediumTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ExtendedFabPrimaryTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ExtendedFabSmallTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FabBaselineTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FabLargeTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FabMediumTokens.kt +22 -22
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FabMenuBaselineTokens.kt +28 -28
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FabSmallTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledAutocompleteTokens.kt +31 -31
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledButtonTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledCardTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledIconButtonTokens.kt +18 -18
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledTextFieldTokens.kt +31 -31
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledTonalButtonTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilledTonalIconButtonTokens.kt +18 -18
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FilterChipTokens.kt +28 -28
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/FloatingToolbarTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/IconButtonTokens.kt +17 -17
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/InputChipTokens.kt +30 -30
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/LargeIconButtonTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/LinearProgressIndicatorTokens.kt +28 -28
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ListTokens.kt +57 -57
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/LoadingIndicatorTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/MediumIconButtonTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/MotionTokens.kt +44 -44
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationBarHorizontalItemTokens.kt +22 -22
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationBarTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationBarVerticalItemTokens.kt +22 -22
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationDrawerTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationRailBaselineItemTokens.kt +25 -25
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationRailCollapsedTokens.kt +23 -23
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationRailExpandedTokens.kt +22 -22
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationRailHorizontalItemTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/NavigationRailVerticalItemTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/OutlinedAutocompleteTokens.kt +30 -30
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/OutlinedButtonTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/OutlinedCardTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/OutlinedIconButtonTokens.kt +18 -18
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/OutlinedSegmentedButtonTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/OutlinedTextFieldTokens.kt +31 -31
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/PrimaryNavigationTabTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/RadioButtonTokens.kt +22 -22
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ScrimTokens.kt +17 -17
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SearchBarTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SearchViewTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SecondaryNavigationTabTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SegmentedMenuTokens.kt +42 -42
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/ShapeTokens.kt +74 -74
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SheetBottomTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SliderTokens.kt +39 -39
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SmallIconButtonTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SnackbarTokens.kt +21 -21
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SplitButtonLargeTokens.kt +26 -26
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SplitButtonMediumTokens.kt +26 -26
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SplitButtonSmallTokens.kt +26 -26
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SplitButtonXLargeTokens.kt +26 -26
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SplitButtonXSmallTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/StandardMenuTokens.kt +25 -25
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/StandardMotionTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/StateTokens.kt +20 -20
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SuggestionChipTokens.kt +25 -25
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/SwitchTokens.kt +37 -37
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/TextButtonTokens.kt +18 -18
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/TimeInputTokens.kt +24 -24
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/TimePickerTokens.kt +30 -30
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/TonalButtonTokens.kt +19 -19
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/TypeScaleTokens.kt +72 -72
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/VibrantMenuTokens.kt +26 -26
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/XLargeIconButtonTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/assets/XSmallIconButtonTokens.kt +27 -27
- package/android/src/main/java/expo/modules/pytechui/extended-theme/assets/Tokens/index.kt +216 -216
- package/android/src/main/java/expo/modules/pytechui/extended-theme/index.kt +38 -38
- package/android/src/main/java/expo/modules/pytechui/utils/children.kt +126 -126
- package/android/src/main/java/expo/modules/pytechui/utils/modifiers.kt +44 -44
- package/build/constants/utils.d.ts +1 -1
- package/build/contexts/alert/components/Alert/index.js +16 -16
- package/build/contexts/alert/components/Button/index.js +5 -5
- package/build/contexts/alert/components/Provider/index.ios.js +2 -2
- package/build/contexts/alert/components/Provider/index.js +3 -3
- package/build/contexts/alert/context/provider.d.ts +1 -1
- package/build/contexts/alert/context/provider.js +1 -1
- package/build/contexts/app/context.d.ts +1 -1
- package/build/contexts/app/context.js +15 -15
- package/build/contexts/app/index.d.ts +2 -2
- package/build/contexts/app/index.js +2 -2
- package/build/contexts/app/src/Head/index.d.ts +1 -1
- package/build/contexts/app/src/Head/index.web.js +12 -12
- package/build/contexts/app/src/Wrapper/index.d.ts +1 -1
- package/build/contexts/app/src/Wrapper/index.js +2 -2
- package/build/contexts/app/src/styles.css +16 -16
- package/build/contexts/app/types.d.ts +1 -1
- package/build/contexts/router/index.d.ts +1 -1
- package/build/contexts/router/index.js +3 -3
- package/build/jetpack-compose/components/Columns/CommonColumn/index.js +2 -2
- package/build/jetpack-compose/components/Columns/CommonColumn/types.d.ts +1 -1
- package/build/jetpack-compose/components/Columns/CommonColumn/utils.d.ts +1 -1
- package/build/jetpack-compose/components/Columns/CommonColumn/utils.js +1 -1
- package/build/jetpack-compose/components/DropdownMenu/index.d.ts +1 -1
- package/build/jetpack-compose/components/DropdownMenu/index.js +3 -3
- package/build/jetpack-compose/components/DropdownPicker/Picker.d.ts +3 -3
- package/build/jetpack-compose/components/DropdownPicker/Picker.js +24 -24
- package/build/jetpack-compose/components/DropdownPicker/PickerItem.js +5 -5
- package/build/jetpack-compose/components/DropdownPicker/context.d.ts +4 -10
- package/build/jetpack-compose/components/ForEach/src/ForEach.d.ts +1 -1
- package/build/jetpack-compose/components/ForEach/src/ForEach.js +5 -5
- package/build/jetpack-compose/components/ForEach/src/ListItem.d.ts +1 -1
- package/build/jetpack-compose/components/ForEach/src/types.d.ts +1 -1
- package/build/jetpack-compose/components/Gradient/Gradient.js +1 -1
- package/build/jetpack-compose/components/Gradient/types.d.ts +1 -1
- package/build/jetpack-compose/components/Icon/Icon/Icon.js +1 -1
- package/build/jetpack-compose/components/Icon/index.d.ts +1 -1
- package/build/jetpack-compose/components/IconSection/IconSection.js +19 -19
- package/build/jetpack-compose/components/IconSection/types.d.ts +1 -1
- package/build/jetpack-compose/components/IconSection/utils.js +1 -1
- package/build/jetpack-compose/components/List/CommonColumn.js +3 -3
- package/build/jetpack-compose/components/List/index.d.ts +1 -1
- package/build/jetpack-compose/components/List/index.js +11 -11
- package/build/jetpack-compose/components/ListItem/SlotListItem.d.ts +2 -2
- package/build/jetpack-compose/components/ListItem/SlotListItem.js +9 -9
- package/build/jetpack-compose/components/Menu/src/components/Divider.js +2 -2
- package/build/jetpack-compose/components/Menu/src/components/Icon.d.ts +1 -1
- package/build/jetpack-compose/components/Menu/src/components/Icon.js +1 -1
- package/build/jetpack-compose/components/Menu/src/components/Item.d.ts +2 -3
- package/build/jetpack-compose/components/Menu/src/components/Item.js +26 -26
- package/build/jetpack-compose/components/Menu/src/components/Label.d.ts +4 -1
- package/build/jetpack-compose/components/Menu/src/components/Label.js +3 -3
- package/build/jetpack-compose/components/Menu/src/components/Menu.d.ts +2 -2
- package/build/jetpack-compose/components/Menu/src/components/Menu.js +26 -26
- package/build/jetpack-compose/components/Menu/src/components/Trigger.js +7 -7
- package/build/jetpack-compose/components/Menu/src/context.d.ts +8 -6
- package/build/jetpack-compose/components/Menu/src/utils.js +3 -3
- package/build/jetpack-compose/components/PagePicker/Item.js +11 -11
- package/build/jetpack-compose/components/PagePicker/Picker.js +5 -5
- package/build/jetpack-compose/components/PagePicker/context/index.d.ts +1 -1
- package/build/jetpack-compose/components/PagePicker/context/index.js +8 -8
- package/build/jetpack-compose/components/PullToRefreshBox.js +1 -1
- package/build/jetpack-compose/components/SearchBar.d.ts +1 -1
- package/build/jetpack-compose/components/SearchBar.js +1 -1
- package/build/jetpack-compose/components/Section/components/Column.d.ts +1 -1
- package/build/jetpack-compose/components/Section/components/Column.js +3 -3
- package/build/jetpack-compose/components/Section/components/Section.js +18 -18
- package/build/jetpack-compose/components/Section/components/Slot.d.ts +1 -1
- package/build/jetpack-compose/components/Section/components/Slot.js +3 -3
- package/build/jetpack-compose/components/SectionHost/index.d.ts +1 -1
- package/build/jetpack-compose/components/SectionHost/index.js +3 -3
- package/build/jetpack-compose/components/TextField.d.ts +1 -1
- package/build/jetpack-compose/components/TextField.js +1 -1
- package/build/jetpack-compose/components/TextSlot.js +2 -3
- package/build/jetpack-compose/extended-theme/assets/Colors/index.js +2 -2
- package/build/jetpack-compose/modifiers/flexWeight.d.ts +1 -1
- package/build/jetpack-compose/modifiers/heightIn.d.ts +1 -1
- package/build/swift-ui/Image.js +2 -2
- package/build/swift-ui/ListItem.js +2 -2
- package/build/swift-ui/Slot.js +2 -2
- package/build/swift-ui/Text.js +2 -2
- package/build/universal/Column/index.android.js +2 -2
- package/build/universal/Column/index.ios.js +2 -2
- package/build/universal/Column/index.js +2 -2
- package/build/universal/Host/index.ios.js +2 -2
- package/build/universal/Row/index.android.js +2 -2
- package/build/universal/Row/index.ios.js +2 -2
- package/build/universal/Row/index.js +2 -2
- package/expo-module.config.json +11 -11
- package/ios/ChevronForwardView.swift +21 -21
- package/ios/GradientView.swift +40 -40
- package/ios/ImageView.swift +32 -32
- package/ios/ListItem.swift +161 -161
- package/ios/PytechUi.podspec +24 -24
- package/ios/PytechUiModule.swift +15 -15
- package/ios/SlotView.swift +107 -107
- package/ios/_shared/utils.swift +58 -58
- package/package.json +19 -15
package/build/swift-ui/Text.js
CHANGED
|
@@ -8,7 +8,7 @@ const Slot_1 = require("./Slot");
|
|
|
8
8
|
Text con slot "text" para que vistas nativas (p. ej. ListItem) puedan
|
|
9
9
|
detectar si el contenido es texto plano o una vista custom.
|
|
10
10
|
*/
|
|
11
|
-
const Text = ({ modifiers, ...restProps }) => (<Slot_1.Slot name="text">
|
|
12
|
-
<swift_ui_1.Text modifiers={modifiers} {...(modifiers ? (0, modifiers_1.createViewModifierEventListener)(modifiers) : undefined)} {...restProps}/>
|
|
11
|
+
const Text = ({ modifiers, ...restProps }) => (<Slot_1.Slot name="text">
|
|
12
|
+
<swift_ui_1.Text modifiers={modifiers} {...(modifiers ? (0, modifiers_1.createViewModifierEventListener)(modifiers) : undefined)} {...restProps}/>
|
|
13
13
|
</Slot_1.Slot>);
|
|
14
14
|
exports.Text = Text;
|
|
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const react_1 = require("react");
|
|
4
4
|
const jetpack_compose_1 = require("@expo/ui/jetpack-compose");
|
|
5
5
|
const modifiers_1 = require("@expo/ui/jetpack-compose/modifiers");
|
|
6
|
-
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<jetpack_compose_1.Column modifiers={[(0, modifiers_1.fillMaxWidth)()]} horizontalAlignment={alignment === 'center' ? 'center' : alignment === 'leading' ? 'start' : 'end'} verticalArrangement={spacing ? { spacedBy: spacing } : undefined}>
|
|
7
|
-
{children}
|
|
6
|
+
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<jetpack_compose_1.Column modifiers={[(0, modifiers_1.fillMaxWidth)()]} horizontalAlignment={alignment === 'center' ? 'center' : alignment === 'leading' ? 'start' : 'end'} verticalArrangement={spacing ? { spacedBy: spacing } : undefined}>
|
|
7
|
+
{children}
|
|
8
8
|
</jetpack_compose_1.Column>));
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const react_1 = require("react");
|
|
4
4
|
const swift_ui_1 = require("@expo/ui/swift-ui");
|
|
5
|
-
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<swift_ui_1.VStack spacing={spacing} alignment={alignment}>
|
|
6
|
-
{children}
|
|
5
|
+
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<swift_ui_1.VStack spacing={spacing} alignment={alignment}>
|
|
6
|
+
{children}
|
|
7
7
|
</swift_ui_1.VStack>));
|
|
@@ -8,8 +8,8 @@ exports.default = (0, react_1.memo)(({ children, spacing = 10, alignment = 'cent
|
|
|
8
8
|
gap: spacing,
|
|
9
9
|
alignItems: alignment === 'center' ? 'center' : alignment === 'leading' ? 'flex-start' : 'flex-end',
|
|
10
10
|
}
|
|
11
|
-
]}>
|
|
12
|
-
{children}
|
|
11
|
+
]}>
|
|
12
|
+
{children}
|
|
13
13
|
</react_native_1.View>));
|
|
14
14
|
const styles = react_native_1.StyleSheet.create({
|
|
15
15
|
container: {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const react_1 = require("react");
|
|
4
4
|
const swift_ui_1 = require("@expo/ui/swift-ui");
|
|
5
|
-
exports.default = (0, react_1.memo)(({ children }) => (<swift_ui_1.Host style={{ flex: 1 }}>
|
|
6
|
-
{children}
|
|
5
|
+
exports.default = (0, react_1.memo)(({ children }) => (<swift_ui_1.Host style={{ flex: 1 }}>
|
|
6
|
+
{children}
|
|
7
7
|
</swift_ui_1.Host>));
|
|
@@ -3,6 +3,6 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
const react_1 = require("react");
|
|
4
4
|
const jetpack_compose_1 = require("@expo/ui/jetpack-compose");
|
|
5
5
|
const modifiers_1 = require("@expo/ui/jetpack-compose/modifiers");
|
|
6
|
-
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<jetpack_compose_1.Row modifiers={[(0, modifiers_1.fillMaxWidth)()]} horizontalAlignment={alignment === 'center' ? 'center' : alignment === 'top' ? 'start' : 'end'} verticalArrangement={spacing ? { spacedBy: spacing } : undefined}>
|
|
7
|
-
{children}
|
|
6
|
+
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<jetpack_compose_1.Row modifiers={[(0, modifiers_1.fillMaxWidth)()]} horizontalAlignment={alignment === 'center' ? 'center' : alignment === 'top' ? 'start' : 'end'} verticalArrangement={spacing ? { spacedBy: spacing } : undefined}>
|
|
7
|
+
{children}
|
|
8
8
|
</jetpack_compose_1.Row>));
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const react_1 = require("react");
|
|
4
4
|
const swift_ui_1 = require("@expo/ui/swift-ui");
|
|
5
|
-
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<swift_ui_1.HStack spacing={spacing} alignment={alignment}>
|
|
6
|
-
{children}
|
|
5
|
+
exports.default = (0, react_1.memo)(({ children, spacing, alignment = 'center' }) => (<swift_ui_1.HStack spacing={spacing} alignment={alignment}>
|
|
6
|
+
{children}
|
|
7
7
|
</swift_ui_1.HStack>));
|
|
@@ -8,8 +8,8 @@ exports.default = (0, react_1.memo)(({ children, spacing = 10, alignment = 'cent
|
|
|
8
8
|
gap: spacing,
|
|
9
9
|
justifyContent: alignment === 'center' ? 'center' : alignment === 'top' ? 'flex-start' : 'flex-end',
|
|
10
10
|
}
|
|
11
|
-
]}>
|
|
12
|
-
{children}
|
|
11
|
+
]}>
|
|
12
|
+
{children}
|
|
13
13
|
</react_native_1.View>));
|
|
14
14
|
const styles = react_native_1.StyleSheet.create({
|
|
15
15
|
container: {
|
package/expo-module.config.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "pytech-ui",
|
|
3
|
-
"platforms": ["apple", "android"],
|
|
4
|
-
"coreFeatures": ["swiftui", "compose"],
|
|
5
|
-
"apple": {
|
|
6
|
-
"modules": ["PytechUiModule"]
|
|
7
|
-
},
|
|
8
|
-
"android": {
|
|
9
|
-
"modules": ["expo.modules.pytechui.PytechUiModule"]
|
|
10
|
-
}
|
|
11
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "pytech-ui",
|
|
3
|
+
"platforms": ["apple", "android"],
|
|
4
|
+
"coreFeatures": ["swiftui", "compose"],
|
|
5
|
+
"apple": {
|
|
6
|
+
"modules": ["PytechUiModule"]
|
|
7
|
+
},
|
|
8
|
+
"android": {
|
|
9
|
+
"modules": ["expo.modules.pytechui.PytechUiModule"]
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -1,21 +1,21 @@
|
|
|
1
|
-
import SwiftUI
|
|
2
|
-
import ExpoModulesCore
|
|
3
|
-
import ExpoUI
|
|
4
|
-
|
|
5
|
-
struct ChevronForward: View {
|
|
6
|
-
var body: some View {
|
|
7
|
-
Image(systemName: "chevron.forward")
|
|
8
|
-
.font(.footnote.weight(.bold))
|
|
9
|
-
.foregroundStyle(Color(.tertiaryLabel))
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
public final class ChevronForwardViewProps: UIBaseViewProps {}
|
|
14
|
-
|
|
15
|
-
struct ChevronForwardView: ExpoSwiftUI.View {
|
|
16
|
-
@ObservedObject var props: ChevronForwardViewProps
|
|
17
|
-
|
|
18
|
-
var body: some View {
|
|
19
|
-
ChevronForward()
|
|
20
|
-
}
|
|
21
|
-
}
|
|
1
|
+
import SwiftUI
|
|
2
|
+
import ExpoModulesCore
|
|
3
|
+
import ExpoUI
|
|
4
|
+
|
|
5
|
+
struct ChevronForward: View {
|
|
6
|
+
var body: some View {
|
|
7
|
+
Image(systemName: "chevron.forward")
|
|
8
|
+
.font(.footnote.weight(.bold))
|
|
9
|
+
.foregroundStyle(Color(.tertiaryLabel))
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public final class ChevronForwardViewProps: UIBaseViewProps {}
|
|
14
|
+
|
|
15
|
+
struct ChevronForwardView: ExpoSwiftUI.View {
|
|
16
|
+
@ObservedObject var props: ChevronForwardViewProps
|
|
17
|
+
|
|
18
|
+
var body: some View {
|
|
19
|
+
ChevronForward()
|
|
20
|
+
}
|
|
21
|
+
}
|
package/ios/GradientView.swift
CHANGED
|
@@ -1,40 +1,40 @@
|
|
|
1
|
-
import SwiftUI
|
|
2
|
-
import ExpoModulesCore
|
|
3
|
-
import ExpoUI
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
final class GradientViewProps: UIBaseViewProps {
|
|
7
|
-
@Field var text: String?
|
|
8
|
-
@Field var systemImage: String?
|
|
9
|
-
@Field var colors: [Color]
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
struct GradientView: ExpoSwiftUI.View {
|
|
13
|
-
@ObservedObject public var props: GradientViewProps
|
|
14
|
-
|
|
15
|
-
public init(props: GradientViewProps) {
|
|
16
|
-
self.props = props
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
public var body: some View {
|
|
20
|
-
Circle()
|
|
21
|
-
.fill(
|
|
22
|
-
LinearGradient(
|
|
23
|
-
colors: props.colors,
|
|
24
|
-
startPoint: .top,
|
|
25
|
-
endPoint: .bottom
|
|
26
|
-
)
|
|
27
|
-
)
|
|
28
|
-
.overlay {
|
|
29
|
-
if let text = props.text {
|
|
30
|
-
Text(String(text.prefix(3)).uppercased())
|
|
31
|
-
.fontWeight(.bold)
|
|
32
|
-
.kerning(-0.5)
|
|
33
|
-
.foregroundStyle(.white)
|
|
34
|
-
} else if let systemImage = props.systemImage {
|
|
35
|
-
Image(systemName: systemImage)
|
|
36
|
-
.foregroundStyle(.white)
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
}
|
|
1
|
+
import SwiftUI
|
|
2
|
+
import ExpoModulesCore
|
|
3
|
+
import ExpoUI
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
final class GradientViewProps: UIBaseViewProps {
|
|
7
|
+
@Field var text: String?
|
|
8
|
+
@Field var systemImage: String?
|
|
9
|
+
@Field var colors: [Color]
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
struct GradientView: ExpoSwiftUI.View {
|
|
13
|
+
@ObservedObject public var props: GradientViewProps
|
|
14
|
+
|
|
15
|
+
public init(props: GradientViewProps) {
|
|
16
|
+
self.props = props
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
public var body: some View {
|
|
20
|
+
Circle()
|
|
21
|
+
.fill(
|
|
22
|
+
LinearGradient(
|
|
23
|
+
colors: props.colors,
|
|
24
|
+
startPoint: .top,
|
|
25
|
+
endPoint: .bottom
|
|
26
|
+
)
|
|
27
|
+
)
|
|
28
|
+
.overlay {
|
|
29
|
+
if let text = props.text {
|
|
30
|
+
Text(String(text.prefix(3)).uppercased())
|
|
31
|
+
.fontWeight(.bold)
|
|
32
|
+
.kerning(-0.5)
|
|
33
|
+
.foregroundStyle(.white)
|
|
34
|
+
} else if let systemImage = props.systemImage {
|
|
35
|
+
Image(systemName: systemImage)
|
|
36
|
+
.foregroundStyle(.white)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
package/ios/ImageView.swift
CHANGED
|
@@ -1,32 +1,32 @@
|
|
|
1
|
-
import SwiftUI
|
|
2
|
-
import ExpoModulesCore
|
|
3
|
-
import ExpoUI
|
|
4
|
-
|
|
5
|
-
public final class ImageViewProps: UIBaseViewProps {
|
|
6
|
-
@Field var systemName: String = ""
|
|
7
|
-
@Field var color: Color?
|
|
8
|
-
@Field var size: Double?
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
struct ImageView: ExpoSwiftUI.View {
|
|
12
|
-
@ObservedObject var props: ImageViewProps
|
|
13
|
-
|
|
14
|
-
var body: some View {
|
|
15
|
-
styledImage(Image(systemName: props.systemName))
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
@ViewBuilder
|
|
19
|
-
private func styledImage(_ image: Image) -> some View {
|
|
20
|
-
if let size = props.size, let color = props.color {
|
|
21
|
-
image
|
|
22
|
-
.font(.system(size: size))
|
|
23
|
-
.foregroundStyle(color)
|
|
24
|
-
} else if let size = props.size {
|
|
25
|
-
image.font(.system(size: size))
|
|
26
|
-
} else if let color = props.color {
|
|
27
|
-
image.foregroundStyle(color)
|
|
28
|
-
} else {
|
|
29
|
-
image
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
}
|
|
1
|
+
import SwiftUI
|
|
2
|
+
import ExpoModulesCore
|
|
3
|
+
import ExpoUI
|
|
4
|
+
|
|
5
|
+
public final class ImageViewProps: UIBaseViewProps {
|
|
6
|
+
@Field var systemName: String = ""
|
|
7
|
+
@Field var color: Color?
|
|
8
|
+
@Field var size: Double?
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
struct ImageView: ExpoSwiftUI.View {
|
|
12
|
+
@ObservedObject var props: ImageViewProps
|
|
13
|
+
|
|
14
|
+
var body: some View {
|
|
15
|
+
styledImage(Image(systemName: props.systemName))
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
@ViewBuilder
|
|
19
|
+
private func styledImage(_ image: Image) -> some View {
|
|
20
|
+
if let size = props.size, let color = props.color {
|
|
21
|
+
image
|
|
22
|
+
.font(.system(size: size))
|
|
23
|
+
.foregroundStyle(color)
|
|
24
|
+
} else if let size = props.size {
|
|
25
|
+
image.font(.system(size: size))
|
|
26
|
+
} else if let color = props.color {
|
|
27
|
+
image.foregroundStyle(color)
|
|
28
|
+
} else {
|
|
29
|
+
image
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
package/ios/ListItem.swift
CHANGED
|
@@ -1,161 +1,161 @@
|
|
|
1
|
-
import SwiftUI
|
|
2
|
-
import ExpoModulesCore
|
|
3
|
-
import ExpoUI
|
|
4
|
-
|
|
5
|
-
struct ListItemInsetsRecord: Record {
|
|
6
|
-
@Field var horizontal: Double?
|
|
7
|
-
@Field var vertical: Double?
|
|
8
|
-
@Field var top: Double?
|
|
9
|
-
@Field var bottom: Double?
|
|
10
|
-
@Field var leading: Double?
|
|
11
|
-
@Field var trailing: Double?
|
|
12
|
-
}
|
|
13
|
-
|
|
14
|
-
extension ListItemInsetsRecord: ListRowInsetsProviding {}
|
|
15
|
-
|
|
16
|
-
enum ListItemButtonRole: String, Enumerable {
|
|
17
|
-
case cancel
|
|
18
|
-
case destructive
|
|
19
|
-
|
|
20
|
-
var swiftUIRole: SwiftUI.ButtonRole {
|
|
21
|
-
switch self {
|
|
22
|
-
case .cancel:
|
|
23
|
-
return .cancel
|
|
24
|
-
case .destructive:
|
|
25
|
-
return .destructive
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
public final class ListItemViewProps: UIBaseViewProps {
|
|
31
|
-
@Field var hasNavigationLink: Bool = false
|
|
32
|
-
@Field var insets: ListItemInsetsRecord?
|
|
33
|
-
@Field var hasOnPress: Bool = false
|
|
34
|
-
@Field var buttonRole: ListItemButtonRole?
|
|
35
|
-
var onListItemPress = EventDispatcher()
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
struct ListItemView: ExpoSwiftUI.View {
|
|
39
|
-
@ObservedObject var props: ListItemViewProps
|
|
40
|
-
|
|
41
|
-
// Si se le pasan insets, y tiene una versión mínima de iOS 26, se aplican al item
|
|
42
|
-
var body: some View {
|
|
43
|
-
if #available(iOS 26.0, *) {
|
|
44
|
-
applyInsets(to: pressableRowContent)
|
|
45
|
-
} else {
|
|
46
|
-
pressableRowContent
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
// Si se le envia un onPress sin navigation link, se coloca un Button sobre toda la row.
|
|
51
|
-
@ViewBuilder
|
|
52
|
-
private var pressableRowContent: some View {
|
|
53
|
-
if props.hasOnPress && !props.hasNavigationLink {
|
|
54
|
-
listItemButton {
|
|
55
|
-
rowContent
|
|
56
|
-
}
|
|
57
|
-
} else {
|
|
58
|
-
rowContent
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
@ViewBuilder
|
|
63
|
-
private var rowContent: some View {
|
|
64
|
-
if props.children?.slot("trailingContent") != nil || props.hasNavigationLink {
|
|
65
|
-
HStack {
|
|
66
|
-
if props.hasOnPress && props.hasNavigationLink {
|
|
67
|
-
SwiftUI.Button(action: {
|
|
68
|
-
props.onListItemPress()
|
|
69
|
-
}){
|
|
70
|
-
mainLabel
|
|
71
|
-
}
|
|
72
|
-
.foregroundStyle(.primary)
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
Spacer()
|
|
76
|
-
|
|
77
|
-
slotContent(in: props.children, named: "trailingContent", secondary: true)
|
|
78
|
-
|
|
79
|
-
if props.hasNavigationLink {
|
|
80
|
-
ChevronForward()
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
} else {
|
|
84
|
-
mainLabel
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
// Es para aplicar los insets al item. Los ejes se aplican primero; top/bottom/leading/trailing los sobrescriben.
|
|
89
|
-
@available(iOS 26.0, *)
|
|
90
|
-
@ViewBuilder
|
|
91
|
-
private func applyInsets(to content: some View) -> some View {
|
|
92
|
-
if let insets = props.insets {
|
|
93
|
-
applyEdgeInsets(to: content, insets: insets)
|
|
94
|
-
} else {
|
|
95
|
-
content
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
// Button con role aplicado.
|
|
100
|
-
@ViewBuilder
|
|
101
|
-
private func listItemButton<Label: View>(@ViewBuilder label: () -> Label) -> some View {
|
|
102
|
-
if let buttonRole = props.buttonRole {
|
|
103
|
-
Button(role: buttonRole.swiftUIRole) {
|
|
104
|
-
props.onListItemPress()
|
|
105
|
-
} label: {
|
|
106
|
-
label()
|
|
107
|
-
}
|
|
108
|
-
} else {
|
|
109
|
-
Button {
|
|
110
|
-
props.onListItemPress()
|
|
111
|
-
} label: {
|
|
112
|
-
label()
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Renderiza el leading, headline y supporting content.
|
|
118
|
-
@ViewBuilder
|
|
119
|
-
private var mainLabel: some View {
|
|
120
|
-
let leading = props.children?.slot("leadingContent")
|
|
121
|
-
let hasImage = leading?.props.children?.slot("image") != nil
|
|
122
|
-
|
|
123
|
-
if let leading {
|
|
124
|
-
if hasImage {
|
|
125
|
-
Label {
|
|
126
|
-
titleContent // Label ya apila título + subtítulo
|
|
127
|
-
} icon: {
|
|
128
|
-
leading.foregroundStyle(.blue)
|
|
129
|
-
}
|
|
130
|
-
} else {
|
|
131
|
-
HStack {
|
|
132
|
-
leading
|
|
133
|
-
alignedTitleContent
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
} else {
|
|
137
|
-
alignedTitleContent
|
|
138
|
-
}
|
|
139
|
-
}
|
|
140
|
-
|
|
141
|
-
// Se fija si tiene que llevar un VStack o no.
|
|
142
|
-
@ViewBuilder
|
|
143
|
-
private var alignedTitleContent: some View {
|
|
144
|
-
let hasSupporting = props.children?.slot("supportingContent") != nil
|
|
145
|
-
|
|
146
|
-
if hasSupporting {
|
|
147
|
-
VStack(alignment: .leading) {
|
|
148
|
-
titleContent
|
|
149
|
-
}
|
|
150
|
-
} else {
|
|
151
|
-
slotContent(in: props.children, named: "headlineContent")
|
|
152
|
-
}
|
|
153
|
-
}
|
|
154
|
-
|
|
155
|
-
// Renderiza el headline y supporting content dentro de Label o VStack.
|
|
156
|
-
@ViewBuilder
|
|
157
|
-
private var titleContent: some View {
|
|
158
|
-
slotContent(in: props.children, named: "headlineContent")
|
|
159
|
-
slotContent(in: props.children, named: "supportingContent", font: .subheadline, secondary: true)
|
|
160
|
-
}
|
|
161
|
-
}
|
|
1
|
+
import SwiftUI
|
|
2
|
+
import ExpoModulesCore
|
|
3
|
+
import ExpoUI
|
|
4
|
+
|
|
5
|
+
struct ListItemInsetsRecord: Record {
|
|
6
|
+
@Field var horizontal: Double?
|
|
7
|
+
@Field var vertical: Double?
|
|
8
|
+
@Field var top: Double?
|
|
9
|
+
@Field var bottom: Double?
|
|
10
|
+
@Field var leading: Double?
|
|
11
|
+
@Field var trailing: Double?
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
extension ListItemInsetsRecord: ListRowInsetsProviding {}
|
|
15
|
+
|
|
16
|
+
enum ListItemButtonRole: String, Enumerable {
|
|
17
|
+
case cancel
|
|
18
|
+
case destructive
|
|
19
|
+
|
|
20
|
+
var swiftUIRole: SwiftUI.ButtonRole {
|
|
21
|
+
switch self {
|
|
22
|
+
case .cancel:
|
|
23
|
+
return .cancel
|
|
24
|
+
case .destructive:
|
|
25
|
+
return .destructive
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public final class ListItemViewProps: UIBaseViewProps {
|
|
31
|
+
@Field var hasNavigationLink: Bool = false
|
|
32
|
+
@Field var insets: ListItemInsetsRecord?
|
|
33
|
+
@Field var hasOnPress: Bool = false
|
|
34
|
+
@Field var buttonRole: ListItemButtonRole?
|
|
35
|
+
var onListItemPress = EventDispatcher()
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
struct ListItemView: ExpoSwiftUI.View {
|
|
39
|
+
@ObservedObject var props: ListItemViewProps
|
|
40
|
+
|
|
41
|
+
// Si se le pasan insets, y tiene una versión mínima de iOS 26, se aplican al item
|
|
42
|
+
var body: some View {
|
|
43
|
+
if #available(iOS 26.0, *) {
|
|
44
|
+
applyInsets(to: pressableRowContent)
|
|
45
|
+
} else {
|
|
46
|
+
pressableRowContent
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// Si se le envia un onPress sin navigation link, se coloca un Button sobre toda la row.
|
|
51
|
+
@ViewBuilder
|
|
52
|
+
private var pressableRowContent: some View {
|
|
53
|
+
if props.hasOnPress && !props.hasNavigationLink {
|
|
54
|
+
listItemButton {
|
|
55
|
+
rowContent
|
|
56
|
+
}
|
|
57
|
+
} else {
|
|
58
|
+
rowContent
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@ViewBuilder
|
|
63
|
+
private var rowContent: some View {
|
|
64
|
+
if props.children?.slot("trailingContent") != nil || props.hasNavigationLink {
|
|
65
|
+
HStack {
|
|
66
|
+
if props.hasOnPress && props.hasNavigationLink {
|
|
67
|
+
SwiftUI.Button(action: {
|
|
68
|
+
props.onListItemPress()
|
|
69
|
+
}){
|
|
70
|
+
mainLabel
|
|
71
|
+
}
|
|
72
|
+
.foregroundStyle(.primary)
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
Spacer()
|
|
76
|
+
|
|
77
|
+
slotContent(in: props.children, named: "trailingContent", secondary: true)
|
|
78
|
+
|
|
79
|
+
if props.hasNavigationLink {
|
|
80
|
+
ChevronForward()
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
} else {
|
|
84
|
+
mainLabel
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Es para aplicar los insets al item. Los ejes se aplican primero; top/bottom/leading/trailing los sobrescriben.
|
|
89
|
+
@available(iOS 26.0, *)
|
|
90
|
+
@ViewBuilder
|
|
91
|
+
private func applyInsets(to content: some View) -> some View {
|
|
92
|
+
if let insets = props.insets {
|
|
93
|
+
applyEdgeInsets(to: content, insets: insets)
|
|
94
|
+
} else {
|
|
95
|
+
content
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// Button con role aplicado.
|
|
100
|
+
@ViewBuilder
|
|
101
|
+
private func listItemButton<Label: View>(@ViewBuilder label: () -> Label) -> some View {
|
|
102
|
+
if let buttonRole = props.buttonRole {
|
|
103
|
+
Button(role: buttonRole.swiftUIRole) {
|
|
104
|
+
props.onListItemPress()
|
|
105
|
+
} label: {
|
|
106
|
+
label()
|
|
107
|
+
}
|
|
108
|
+
} else {
|
|
109
|
+
Button {
|
|
110
|
+
props.onListItemPress()
|
|
111
|
+
} label: {
|
|
112
|
+
label()
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Renderiza el leading, headline y supporting content.
|
|
118
|
+
@ViewBuilder
|
|
119
|
+
private var mainLabel: some View {
|
|
120
|
+
let leading = props.children?.slot("leadingContent")
|
|
121
|
+
let hasImage = leading?.props.children?.slot("image") != nil
|
|
122
|
+
|
|
123
|
+
if let leading {
|
|
124
|
+
if hasImage {
|
|
125
|
+
Label {
|
|
126
|
+
titleContent // Label ya apila título + subtítulo
|
|
127
|
+
} icon: {
|
|
128
|
+
leading.foregroundStyle(.blue)
|
|
129
|
+
}
|
|
130
|
+
} else {
|
|
131
|
+
HStack {
|
|
132
|
+
leading
|
|
133
|
+
alignedTitleContent
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
} else {
|
|
137
|
+
alignedTitleContent
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Se fija si tiene que llevar un VStack o no.
|
|
142
|
+
@ViewBuilder
|
|
143
|
+
private var alignedTitleContent: some View {
|
|
144
|
+
let hasSupporting = props.children?.slot("supportingContent") != nil
|
|
145
|
+
|
|
146
|
+
if hasSupporting {
|
|
147
|
+
VStack(alignment: .leading) {
|
|
148
|
+
titleContent
|
|
149
|
+
}
|
|
150
|
+
} else {
|
|
151
|
+
slotContent(in: props.children, named: "headlineContent")
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
// Renderiza el headline y supporting content dentro de Label o VStack.
|
|
156
|
+
@ViewBuilder
|
|
157
|
+
private var titleContent: some View {
|
|
158
|
+
slotContent(in: props.children, named: "headlineContent")
|
|
159
|
+
slotContent(in: props.children, named: "supportingContent", font: .subheadline, secondary: true)
|
|
160
|
+
}
|
|
161
|
+
}
|
package/ios/PytechUi.podspec
CHANGED
|
@@ -1,24 +1,24 @@
|
|
|
1
|
-
Pod::Spec.new do |s|
|
|
2
|
-
s.name = 'PytechUi'
|
|
3
|
-
s.version = '1.0.3'
|
|
4
|
-
s.summary = 'Native SwiftUI components for pytech-ui'
|
|
5
|
-
s.description = 'Native SwiftUI components for pytech-ui'
|
|
6
|
-
s.author = 'Matias Tobias Gutierrez'
|
|
7
|
-
s.homepage = 'https://github.com/MatiTobi/UI#readme'
|
|
8
|
-
s.license = { :type => 'MIT' }
|
|
9
|
-
s.platforms = {
|
|
10
|
-
:ios => '16.4',
|
|
11
|
-
:tvos => '16.4'
|
|
12
|
-
}
|
|
13
|
-
s.source = { git: 'https://github.com/MatiTobi/UI.git' }
|
|
14
|
-
s.static_framework = true
|
|
15
|
-
|
|
16
|
-
s.dependency 'ExpoModulesCore'
|
|
17
|
-
s.dependency 'ExpoUI'
|
|
18
|
-
|
|
19
|
-
s.pod_target_xcconfig = {
|
|
20
|
-
'DEFINES_MODULE' => 'YES',
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
s.source_files = '**/*.{h,m,mm,swift,hpp,cpp}'
|
|
24
|
-
end
|
|
1
|
+
Pod::Spec.new do |s|
|
|
2
|
+
s.name = 'PytechUi'
|
|
3
|
+
s.version = '1.0.3'
|
|
4
|
+
s.summary = 'Native SwiftUI components for pytech-ui'
|
|
5
|
+
s.description = 'Native SwiftUI components for pytech-ui'
|
|
6
|
+
s.author = 'Matias Tobias Gutierrez'
|
|
7
|
+
s.homepage = 'https://github.com/MatiTobi/UI#readme'
|
|
8
|
+
s.license = { :type => 'MIT' }
|
|
9
|
+
s.platforms = {
|
|
10
|
+
:ios => '16.4',
|
|
11
|
+
:tvos => '16.4'
|
|
12
|
+
}
|
|
13
|
+
s.source = { git: 'https://github.com/MatiTobi/UI.git' }
|
|
14
|
+
s.static_framework = true
|
|
15
|
+
|
|
16
|
+
s.dependency 'ExpoModulesCore'
|
|
17
|
+
s.dependency 'ExpoUI'
|
|
18
|
+
|
|
19
|
+
s.pod_target_xcconfig = {
|
|
20
|
+
'DEFINES_MODULE' => 'YES',
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
s.source_files = '**/*.{h,m,mm,swift,hpp,cpp}'
|
|
24
|
+
end
|