@yahoo/uds-mobile 1.0.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/CONTRIBUTING.md +1174 -0
- package/README.md +614 -0
- package/cli/uds-mobile.js +10 -0
- package/dist/_virtual/rolldown_runtime.cjs +30 -0
- package/dist/bin/generateTheme.mjs +390 -0
- package/dist/bin/mobile/scripts/utils/configToRNMappings.mjs +74 -0
- package/dist/bin/uds/dist/fixtures.mjs +404 -0
- package/dist/bin/uds/dist/tokens/configs/palette/alwaysPalette.mjs +23 -0
- package/dist/bin/uds/dist/tokens/consts/defaultModes.mjs +6 -0
- package/dist/bin/uds/dist/tokens/consts/fontDeclarationsMap.mjs +652 -0
- package/dist/bin/uds-mobile.mjs +256 -0
- package/dist/components/Avatar.cjs +109 -0
- package/dist/components/Avatar.d.cts +60 -0
- package/dist/components/Avatar.d.cts.map +1 -0
- package/dist/components/Avatar.d.mts +60 -0
- package/dist/components/Avatar.d.mts.map +1 -0
- package/dist/components/Avatar.mjs +109 -0
- package/dist/components/Avatar.mjs.map +1 -0
- package/dist/components/Badge.cjs +68 -0
- package/dist/components/Badge.d.cts +43 -0
- package/dist/components/Badge.d.cts.map +1 -0
- package/dist/components/Badge.d.mts +43 -0
- package/dist/components/Badge.d.mts.map +1 -0
- package/dist/components/Badge.mjs +68 -0
- package/dist/components/Badge.mjs.map +1 -0
- package/dist/components/Box.cjs +114 -0
- package/dist/components/Box.d.cts +87 -0
- package/dist/components/Box.d.cts.map +1 -0
- package/dist/components/Box.d.mts +87 -0
- package/dist/components/Box.d.mts.map +1 -0
- package/dist/components/Box.mjs +114 -0
- package/dist/components/Box.mjs.map +1 -0
- package/dist/components/Button.cjs +187 -0
- package/dist/components/Button.d.cts +56 -0
- package/dist/components/Button.d.cts.map +1 -0
- package/dist/components/Button.d.mts +56 -0
- package/dist/components/Button.d.mts.map +1 -0
- package/dist/components/Button.mjs +186 -0
- package/dist/components/Button.mjs.map +1 -0
- package/dist/components/Checkbox.cjs +156 -0
- package/dist/components/Checkbox.d.cts +48 -0
- package/dist/components/Checkbox.d.cts.map +1 -0
- package/dist/components/Checkbox.d.mts +48 -0
- package/dist/components/Checkbox.d.mts.map +1 -0
- package/dist/components/Checkbox.mjs +155 -0
- package/dist/components/Checkbox.mjs.map +1 -0
- package/dist/components/Chip.cjs +124 -0
- package/dist/components/Chip.d.cts +60 -0
- package/dist/components/Chip.d.cts.map +1 -0
- package/dist/components/Chip.d.mts +60 -0
- package/dist/components/Chip.d.mts.map +1 -0
- package/dist/components/Chip.mjs +124 -0
- package/dist/components/Chip.mjs.map +1 -0
- package/dist/components/HStack.cjs +46 -0
- package/dist/components/HStack.d.cts +41 -0
- package/dist/components/HStack.d.cts.map +1 -0
- package/dist/components/HStack.d.mts +41 -0
- package/dist/components/HStack.d.mts.map +1 -0
- package/dist/components/HStack.mjs +46 -0
- package/dist/components/HStack.mjs.map +1 -0
- package/dist/components/Icon.cjs +150 -0
- package/dist/components/Icon.d.cts +90 -0
- package/dist/components/Icon.d.cts.map +1 -0
- package/dist/components/Icon.d.mts +90 -0
- package/dist/components/Icon.d.mts.map +1 -0
- package/dist/components/Icon.mjs +148 -0
- package/dist/components/Icon.mjs.map +1 -0
- package/dist/components/IconButton.cjs +127 -0
- package/dist/components/IconButton.d.cts +46 -0
- package/dist/components/IconButton.d.cts.map +1 -0
- package/dist/components/IconButton.d.mts +46 -0
- package/dist/components/IconButton.d.mts.map +1 -0
- package/dist/components/IconButton.mjs +127 -0
- package/dist/components/IconButton.mjs.map +1 -0
- package/dist/components/IconSlot.cjs +55 -0
- package/dist/components/IconSlot.d.cts +45 -0
- package/dist/components/IconSlot.d.cts.map +1 -0
- package/dist/components/IconSlot.d.mts +45 -0
- package/dist/components/IconSlot.d.mts.map +1 -0
- package/dist/components/IconSlot.mjs +55 -0
- package/dist/components/IconSlot.mjs.map +1 -0
- package/dist/components/Image.cjs +104 -0
- package/dist/components/Image.d.cts +85 -0
- package/dist/components/Image.d.cts.map +1 -0
- package/dist/components/Image.d.mts +85 -0
- package/dist/components/Image.d.mts.map +1 -0
- package/dist/components/Image.mjs +104 -0
- package/dist/components/Image.mjs.map +1 -0
- package/dist/components/Input.cjs +174 -0
- package/dist/components/Input.d.cts +39 -0
- package/dist/components/Input.d.cts.map +1 -0
- package/dist/components/Input.d.mts +39 -0
- package/dist/components/Input.d.mts.map +1 -0
- package/dist/components/Input.mjs +174 -0
- package/dist/components/Input.mjs.map +1 -0
- package/dist/components/Link.cjs +139 -0
- package/dist/components/Link.d.cts +45 -0
- package/dist/components/Link.d.cts.map +1 -0
- package/dist/components/Link.d.mts +45 -0
- package/dist/components/Link.d.mts.map +1 -0
- package/dist/components/Link.mjs +138 -0
- package/dist/components/Link.mjs.map +1 -0
- package/dist/components/Pressable.cjs +120 -0
- package/dist/components/Pressable.d.cts +90 -0
- package/dist/components/Pressable.d.cts.map +1 -0
- package/dist/components/Pressable.d.mts +90 -0
- package/dist/components/Pressable.d.mts.map +1 -0
- package/dist/components/Pressable.mjs +118 -0
- package/dist/components/Pressable.mjs.map +1 -0
- package/dist/components/Radio.cjs +153 -0
- package/dist/components/Radio.d.cts +46 -0
- package/dist/components/Radio.d.cts.map +1 -0
- package/dist/components/Radio.d.mts +46 -0
- package/dist/components/Radio.d.mts.map +1 -0
- package/dist/components/Radio.mjs +152 -0
- package/dist/components/Radio.mjs.map +1 -0
- package/dist/components/Screen.cjs +89 -0
- package/dist/components/Screen.d.cts +53 -0
- package/dist/components/Screen.d.cts.map +1 -0
- package/dist/components/Screen.d.mts +53 -0
- package/dist/components/Screen.d.mts.map +1 -0
- package/dist/components/Screen.mjs +89 -0
- package/dist/components/Screen.mjs.map +1 -0
- package/dist/components/Switch.cjs +172 -0
- package/dist/components/Switch.d.cts +42 -0
- package/dist/components/Switch.d.cts.map +1 -0
- package/dist/components/Switch.d.mts +42 -0
- package/dist/components/Switch.d.mts.map +1 -0
- package/dist/components/Switch.mjs +171 -0
- package/dist/components/Switch.mjs.map +1 -0
- package/dist/components/Text.cjs +107 -0
- package/dist/components/Text.d.cts +96 -0
- package/dist/components/Text.d.cts.map +1 -0
- package/dist/components/Text.d.mts +96 -0
- package/dist/components/Text.d.mts.map +1 -0
- package/dist/components/Text.mjs +107 -0
- package/dist/components/Text.mjs.map +1 -0
- package/dist/components/VStack.cjs +46 -0
- package/dist/components/VStack.d.cts +41 -0
- package/dist/components/VStack.d.cts.map +1 -0
- package/dist/components/VStack.d.mts +41 -0
- package/dist/components/VStack.d.mts.map +1 -0
- package/dist/components/VStack.mjs +46 -0
- package/dist/components/VStack.mjs.map +1 -0
- package/dist/icons/dist/glyphMap.cjs +5475 -0
- package/dist/icons/dist/glyphMap.d.cts +10 -0
- package/dist/icons/dist/glyphMap.d.cts.map +1 -0
- package/dist/icons/dist/glyphMap.d.mts +10 -0
- package/dist/icons/dist/glyphMap.d.mts.map +1 -0
- package/dist/icons/dist/glyphMap.mjs +5474 -0
- package/dist/icons/dist/glyphMap.mjs.map +1 -0
- package/dist/icons/dist/svgMap.cjs +525 -0
- package/dist/icons/dist/svgMap.d.cts +10 -0
- package/dist/icons/dist/svgMap.d.cts.map +1 -0
- package/dist/icons/dist/svgMap.d.mts +10 -0
- package/dist/icons/dist/svgMap.d.mts.map +1 -0
- package/dist/icons/dist/svgMap.mjs +524 -0
- package/dist/icons/dist/svgMap.mjs.map +1 -0
- package/dist/icons/dist/tokens.cjs +13 -0
- package/dist/icons/dist/tokens.mjs +13 -0
- package/dist/icons/dist/tokens.mjs.map +1 -0
- package/dist/icons/dist/types.d.cts +24 -0
- package/dist/icons/dist/types.d.cts.map +1 -0
- package/dist/icons/dist/types.d.mts +24 -0
- package/dist/icons/dist/types.d.mts.map +1 -0
- package/dist/motion.cjs +56 -0
- package/dist/motion.d.cts +46 -0
- package/dist/motion.d.cts.map +1 -0
- package/dist/motion.d.mts +46 -0
- package/dist/motion.d.mts.map +1 -0
- package/dist/motion.mjs +52 -0
- package/dist/motion.mjs.map +1 -0
- package/dist/types.cjs +1 -0
- package/dist/types.d.cts +13 -0
- package/dist/types.d.cts.map +1 -0
- package/dist/types.d.mts +13 -0
- package/dist/types.d.mts.map +1 -0
- package/dist/types.mjs +2 -0
- package/dist/uds/dist/components/Box.d.cts +3 -0
- package/dist/uds/dist/components/Box.d.mts +3 -0
- package/dist/uds/dist/components/Divider/Divider.d.cts +3 -0
- package/dist/uds/dist/components/Divider/Divider.d.mts +3 -0
- package/dist/uds/dist/components/Divider/DividerCore.d.cts +4 -0
- package/dist/uds/dist/components/Divider/DividerCore.d.mts +4 -0
- package/dist/uds/dist/components/Divider/DividerInternal.d.cts +4 -0
- package/dist/uds/dist/components/Divider/DividerInternal.d.mts +4 -0
- package/dist/uds/dist/components/Divider/index.d.cts +2 -0
- package/dist/uds/dist/components/Divider/index.d.mts +2 -0
- package/dist/uds/dist/components/FormLabel.d.cts +3 -0
- package/dist/uds/dist/components/FormLabel.d.mts +4 -0
- package/dist/uds/dist/components/HStack.d.cts +4 -0
- package/dist/uds/dist/components/HStack.d.mts +4 -0
- package/dist/uds/dist/components/Icon.d.cts +3 -0
- package/dist/uds/dist/components/Icon.d.mts +3 -0
- package/dist/uds/dist/components/Image.d.cts +2 -0
- package/dist/uds/dist/components/Image.d.mts +3 -0
- package/dist/uds/dist/components/Link.d.cts +3 -0
- package/dist/uds/dist/components/Link.d.mts +3 -0
- package/dist/uds/dist/components/Text.d.cts +3 -0
- package/dist/uds/dist/components/Text.d.mts +3 -0
- package/dist/uds/dist/components/VStack.d.cts +4 -0
- package/dist/uds/dist/components/VStack.d.mts +4 -0
- package/dist/uds/dist/components/client/Avatar/Avatar.d.cts +2 -0
- package/dist/uds/dist/components/client/Avatar/Avatar.d.mts +3 -0
- package/dist/uds/dist/components/client/Avatar/AvatarIcon.d.cts +2 -0
- package/dist/uds/dist/components/client/Avatar/AvatarIcon.d.mts +3 -0
- package/dist/uds/dist/components/client/Avatar/AvatarImage.d.cts +4 -0
- package/dist/uds/dist/components/client/Avatar/AvatarImage.d.mts +5 -0
- package/dist/uds/dist/components/client/Avatar/AvatarText.d.cts +3 -0
- package/dist/uds/dist/components/client/Avatar/AvatarText.d.mts +4 -0
- package/dist/uds/dist/components/client/Avatar/index.d.cts +5 -0
- package/dist/uds/dist/components/client/Avatar/index.d.mts +5 -0
- package/dist/uds/dist/components/client/Badge.d.cts +3 -0
- package/dist/uds/dist/components/client/Badge.d.mts +3 -0
- package/dist/uds/dist/components/client/Button.d.cts +3 -0
- package/dist/uds/dist/components/client/Button.d.mts +3 -0
- package/dist/uds/dist/components/client/Checkbox.d.cts +3 -0
- package/dist/uds/dist/components/client/Checkbox.d.mts +3 -0
- package/dist/uds/dist/components/client/Chip/Chip.d.cts +4 -0
- package/dist/uds/dist/components/client/Chip/Chip.d.mts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipBase.d.cts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipBase.d.mts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipButton.d.cts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipButton.d.mts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipDismissible.d.cts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipDismissible.d.mts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipLink.d.cts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipLink.d.mts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipToggle.d.cts +4 -0
- package/dist/uds/dist/components/client/Chip/ChipToggle.d.mts +4 -0
- package/dist/uds/dist/components/client/Chip/index.d.cts +6 -0
- package/dist/uds/dist/components/client/Chip/index.d.mts +6 -0
- package/dist/uds/dist/components/client/IconButton.d.cts +3 -0
- package/dist/uds/dist/components/client/IconButton.d.mts +3 -0
- package/dist/uds/dist/components/client/Input/Input.d.cts +4 -0
- package/dist/uds/dist/components/client/Input/Input.d.mts +4 -0
- package/dist/uds/dist/components/client/Input/InputHelpText.d.cts +2 -0
- package/dist/uds/dist/components/client/Input/InputHelpText.d.mts +3 -0
- package/dist/uds/dist/components/client/Input/InputHelpTextInternal.d.cts +5 -0
- package/dist/uds/dist/components/client/Input/InputHelpTextInternal.d.mts +6 -0
- package/dist/uds/dist/components/client/Input/index.d.cts +3 -0
- package/dist/uds/dist/components/client/Input/index.d.mts +3 -0
- package/dist/uds/dist/components/client/Menu/Menu.Content.d.cts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.Content.d.mts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.Divider.d.cts +3 -0
- package/dist/uds/dist/components/client/Menu/Menu.Divider.d.mts +3 -0
- package/dist/uds/dist/components/client/Menu/Menu.Item.d.cts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.Item.d.mts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.ItemCheckbox.d.cts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.ItemCheckbox.d.mts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.Provider.d.cts +2 -0
- package/dist/uds/dist/components/client/Menu/Menu.Provider.d.mts +3 -0
- package/dist/uds/dist/components/client/Menu/Menu.Trigger.d.cts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.Trigger.d.mts +4 -0
- package/dist/uds/dist/components/client/Menu/Menu.d.cts +2 -0
- package/dist/uds/dist/components/client/Menu/Menu.d.mts +2 -0
- package/dist/uds/dist/components/client/Menu/Menu.index.d.cts +7 -0
- package/dist/uds/dist/components/client/Menu/Menu.index.d.mts +7 -0
- package/dist/uds/dist/components/client/Menu/index.d.cts +9 -0
- package/dist/uds/dist/components/client/Menu/index.d.mts +9 -0
- package/dist/uds/dist/components/client/Pressable.d.cts +3 -0
- package/dist/uds/dist/components/client/Pressable.d.mts +3 -0
- package/dist/uds/dist/components/client/Radio/Radio.d.cts +3 -0
- package/dist/uds/dist/components/client/Radio/Radio.d.mts +3 -0
- package/dist/uds/dist/components/client/Radio/RadioGroupProvider.d.cts +3 -0
- package/dist/uds/dist/components/client/Radio/RadioGroupProvider.d.mts +3 -0
- package/dist/uds/dist/components/client/Radio/index.d.cts +3 -0
- package/dist/uds/dist/components/client/Radio/index.d.mts +3 -0
- package/dist/uds/dist/components/client/SpringMotionConfig.d.cts +3 -0
- package/dist/uds/dist/components/client/SpringMotionConfig.d.mts +3 -0
- package/dist/uds/dist/components/client/Switch.d.cts +3 -0
- package/dist/uds/dist/components/client/Switch.d.mts +3 -0
- package/dist/uds/dist/components/client/index.d.cts +33 -0
- package/dist/uds/dist/components/client/index.d.mts +33 -0
- package/dist/uds/dist/components/index.d.cts +40 -0
- package/dist/uds/dist/components/index.d.mts +40 -0
- package/dist/uds/dist/index.d.cts +46 -0
- package/dist/uds/dist/index.d.mts +46 -0
- package/dist/uds/dist/styles/styler.d.cts +2 -0
- package/dist/uds/dist/styles/styler.d.mts +2 -0
- package/dist/uds/dist/styles/stylerTypes.d.cts +2 -0
- package/dist/uds/dist/styles/stylerTypes.d.mts +2 -0
- package/dist/uds/dist/tokens/automation/configs/avatar.d.cts +2 -0
- package/dist/uds/dist/tokens/automation/configs/avatar.d.mts +2 -0
- package/dist/uds/dist/tokens/automation/properties.d.cts +3 -0
- package/dist/uds/dist/tokens/automation/properties.d.mts +3 -0
- package/dist/uds/dist/tokens/automation/types/ComponentConfig.d.cts +3 -0
- package/dist/uds/dist/tokens/automation/types/ComponentConfig.d.mts +3 -0
- package/dist/uds/dist/tokens/configs/motion.cjs +109 -0
- package/dist/uds/dist/tokens/configs/motion.d.cts +20 -0
- package/dist/uds/dist/tokens/configs/motion.d.cts.map +1 -0
- package/dist/uds/dist/tokens/configs/motion.d.mts +20 -0
- package/dist/uds/dist/tokens/configs/motion.d.mts.map +1 -0
- package/dist/uds/dist/tokens/configs/motion.mjs +108 -0
- package/dist/uds/dist/tokens/configs/motion.mjs.map +1 -0
- package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.cts +32 -0
- package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.cts.map +1 -0
- package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.mts +32 -0
- package/dist/uds/dist/tokens/configs/palette/alwaysPalette.d.mts.map +1 -0
- package/dist/uds/dist/tokens/types.d.cts +426 -0
- package/dist/uds/dist/tokens/types.d.cts.map +1 -0
- package/dist/uds/dist/tokens/types.d.mts +426 -0
- package/dist/uds/dist/tokens/types.d.mts.map +1 -0
- package/dist/uds/dist/types.d.cts +2 -0
- package/dist/uds/dist/types.d.mts +2 -0
- package/fonts/centra-no2-black-italic.otf +0 -0
- package/fonts/centra-no2-black.otf +0 -0
- package/fonts/centra-no2-bold-italic.otf +0 -0
- package/fonts/centra-no2-bold.otf +0 -0
- package/fonts/centra-no2-book-italic.otf +0 -0
- package/fonts/centra-no2-book.otf +0 -0
- package/fonts/centra-no2-extrabold-italic.otf +0 -0
- package/fonts/centra-no2-extrabold.otf +0 -0
- package/fonts/centra-no2-hairline-italic.otf +0 -0
- package/fonts/centra-no2-hairline.otf +0 -0
- package/fonts/centra-no2-light-italic.otf +0 -0
- package/fonts/centra-no2-light.otf +0 -0
- package/fonts/centra-no2-medium-italic.otf +0 -0
- package/fonts/centra-no2-medium.otf +0 -0
- package/fonts/centra-no2-thin-italic.otf +0 -0
- package/fonts/centra-no2-thin.otf +0 -0
- package/fonts/gelica-black-italic.otf +0 -0
- package/fonts/gelica-black.otf +0 -0
- package/fonts/gelica-bold-italic.otf +0 -0
- package/fonts/gelica-bold.otf +0 -0
- package/fonts/gelica-extra-light-italic.otf +0 -0
- package/fonts/gelica-extra-light.otf +0 -0
- package/fonts/gelica-light-italic.otf +0 -0
- package/fonts/gelica-light.otf +0 -0
- package/fonts/gelica-medium-italic.otf +0 -0
- package/fonts/gelica-medium.otf +0 -0
- package/fonts/gelica-regular-italic.otf +0 -0
- package/fonts/gelica-regular.otf +0 -0
- package/fonts/gelica-semi-bold-italic.otf +0 -0
- package/fonts/gelica-semi-bold.otf +0 -0
- package/fonts/index.cjs +270 -0
- package/fonts/index.d.ts +10 -0
- package/fonts/index.mjs +272 -0
- package/fonts/inter-black.ttf +0 -0
- package/fonts/inter-bold.ttf +0 -0
- package/fonts/inter-extra-bold.ttf +0 -0
- package/fonts/inter-extra-light.ttf +0 -0
- package/fonts/inter-light.ttf +0 -0
- package/fonts/inter-medium.ttf +0 -0
- package/fonts/inter-regular.ttf +0 -0
- package/fonts/inter-semi-bold.ttf +0 -0
- package/fonts/inter-thin.ttf +0 -0
- package/fonts/roboto-mono-bold-italic.ttf +0 -0
- package/fonts/roboto-mono-bold.ttf +0 -0
- package/fonts/roboto-mono-light-italic.ttf +0 -0
- package/fonts/roboto-mono-light.ttf +0 -0
- package/fonts/roboto-mono-medium-italic.ttf +0 -0
- package/fonts/roboto-mono-medium.ttf +0 -0
- package/fonts/roboto-mono-regular-italic.ttf +0 -0
- package/fonts/roboto-mono-regular.ttf +0 -0
- package/fonts/roboto-mono-thin-italic.ttf +0 -0
- package/fonts/roboto-mono-thin.ttf +0 -0
- package/fonts/uds-icons.ttf +0 -0
- package/fonts/yahoo-product-sans-bold.otf +0 -0
- package/fonts/yahoo-product-sans-extended-black-italic.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-black.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-bold-italic.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-bold.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-light-italic.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-light.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-medium-italic.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-medium.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-regular-italic.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-regular.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-semibold-italic.ttf +0 -0
- package/fonts/yahoo-product-sans-extended-semibold.ttf +0 -0
- package/fonts/yahoo-product-sans-medium.otf +0 -0
- package/fonts/yahoo-product-sans-regular.otf +0 -0
- package/fonts/yahoo-sans-beta-bold.otf +0 -0
- package/fonts/yahoo-sans-beta-medium.otf +0 -0
- package/fonts/yahoo-sans-beta-regular.otf +0 -0
- package/fonts/yahoo-sans-black.otf +0 -0
- package/fonts/yahoo-sans-bold.otf +0 -0
- package/fonts/yahoo-sans-condensed-black.otf +0 -0
- package/fonts/yahoo-sans-condensed-bold.otf +0 -0
- package/fonts/yahoo-sans-condensed-light.otf +0 -0
- package/fonts/yahoo-sans-condensed-medium.otf +0 -0
- package/fonts/yahoo-sans-condensed-regular.otf +0 -0
- package/fonts/yahoo-sans-condensed-xbold.ttf +0 -0
- package/fonts/yahoo-sans-cr4-bold.ttf +0 -0
- package/fonts/yahoo-sans-cr4-medium.ttf +0 -0
- package/fonts/yahoo-sans-cr4-regular.ttf +0 -0
- package/fonts/yahoo-sans-extrabold.otf +0 -0
- package/fonts/yahoo-sans-extralight.otf +0 -0
- package/fonts/yahoo-sans-italic.otf +0 -0
- package/fonts/yahoo-sans-light.otf +0 -0
- package/fonts/yahoo-sans-medium.otf +0 -0
- package/fonts/yahoo-sans-regular-italic.otf +0 -0
- package/fonts/yahoo-sans-regular.otf +0 -0
- package/fonts/yahoo-sans-semibold.otf +0 -0
- package/fonts/yahoo-serif-display-black.otf +0 -0
- package/fonts/yahoo-serif-display-bold.otf +0 -0
- package/fonts/yahoo-serif-display-extrabold.otf +0 -0
- package/fonts/yahoo-serif-display-light.otf +0 -0
- package/fonts/yahoo-serif-display-regular.otf +0 -0
- package/fonts/yahoo-serif-text-bold-italic.ttf +0 -0
- package/fonts/yahoo-serif-text-bold.otf +0 -0
- package/fonts/yahoo-serif-text-italic.otf +0 -0
- package/fonts/yahoo-serif-text-regular.otf +0 -0
- package/fonts/yas-black-italic.otf +0 -0
- package/fonts/yas-black.otf +0 -0
- package/fonts/yas-bold-italic.otf +0 -0
- package/fonts/yas-bold.otf +0 -0
- package/fonts/yas-condensed-black-italic.otf +0 -0
- package/fonts/yas-condensed-black.otf +0 -0
- package/fonts/yas-condensed-bold-italic.otf +0 -0
- package/fonts/yas-condensed-bold.otf +0 -0
- package/fonts/yas-condensed-light-italic.otf +0 -0
- package/fonts/yas-condensed-light.otf +0 -0
- package/fonts/yas-condensed-medium-italic.otf +0 -0
- package/fonts/yas-condensed-medium.otf +0 -0
- package/fonts/yas-condensed-regular-italic.otf +0 -0
- package/fonts/yas-condensed-regular.otf +0 -0
- package/fonts/yas-condensed-semibold-italic.otf +0 -0
- package/fonts/yas-condensed-semibold.otf +0 -0
- package/fonts/yas-extended-black-italic.otf +0 -0
- package/fonts/yas-extended-black.otf +0 -0
- package/fonts/yas-extended-bold-italic.otf +0 -0
- package/fonts/yas-extended-bold.otf +0 -0
- package/fonts/yas-extended-light-italic.otf +0 -0
- package/fonts/yas-extended-light.otf +0 -0
- package/fonts/yas-extended-medium-italic.otf +0 -0
- package/fonts/yas-extended-medium.otf +0 -0
- package/fonts/yas-extended-regular-italic.otf +0 -0
- package/fonts/yas-extended-regular.otf +0 -0
- package/fonts/yas-extended-semibold-italic.otf +0 -0
- package/fonts/yas-extended-semibold.otf +0 -0
- package/fonts/yas-light-italic.otf +0 -0
- package/fonts/yas-light.otf +0 -0
- package/fonts/yas-medium-italic.otf +0 -0
- package/fonts/yas-medium.otf +0 -0
- package/fonts/yas-regular-italic.otf +0 -0
- package/fonts/yas-regular.otf +0 -0
- package/fonts/yas-semibold-italic.otf +0 -0
- package/fonts/yas-semibold.otf +0 -0
- package/generated/styles.cjs +4510 -0
- package/generated/styles.d.cts +1 -0
- package/generated/styles.d.mts +1 -0
- package/generated/styles.d.ts +2965 -0
- package/generated/styles.mjs +4510 -0
- package/generated/unistyles.d.ts +4320 -0
- package/package.json +308 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { memo, useMemo } from "react";
|
|
3
|
+
import { Image as Image$1 } from "react-native";
|
|
4
|
+
import { styles } from "../../generated/styles";
|
|
5
|
+
import { jsx } from "react/jsx-runtime";
|
|
6
|
+
|
|
7
|
+
//#region src/components/Image.tsx
|
|
8
|
+
const CONTENT_FIT_TO_RESIZE_MODE = {
|
|
9
|
+
cover: "cover",
|
|
10
|
+
contain: "contain",
|
|
11
|
+
fill: "stretch",
|
|
12
|
+
none: "center",
|
|
13
|
+
"scale-down": "contain"
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* **A component for displaying images**
|
|
17
|
+
*
|
|
18
|
+
* @description
|
|
19
|
+
* Wrapper for the React Native Image component with UDS styling props.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* import { Image } from '~/components/ui/Image';
|
|
24
|
+
*
|
|
25
|
+
* <Image src="https://example.com/image.png" width={200} height={150} />
|
|
26
|
+
* <Image src={require('./local-image.png')} contentFit="cover" borderRadius="md" />
|
|
27
|
+
* ```
|
|
28
|
+
*/
|
|
29
|
+
const Image = memo(function Image$2({ src, alt, width, height, contentFit = "cover", style, backgroundColor, borderRadius, borderTopStartRadius, borderTopEndRadius, borderBottomStartRadius, borderBottomEndRadius, borderColor, borderStartColor, borderEndColor, borderTopColor, borderBottomColor, borderWidth, borderVerticalWidth, borderHorizontalWidth, borderStartWidth, borderEndWidth, borderTopWidth, borderBottomWidth, alignContent, alignItems, alignSelf, flex, flexDirection, flexGrow, flexShrink, flexWrap, justifyContent, display, overflow, spacing, spacingHorizontal, spacingVertical, spacingBottom, spacingEnd, spacingStart, spacingTop, offset, offsetVertical, offsetHorizontal, offsetBottom, offsetEnd, offsetStart, offsetTop, columnGap, rowGap, ref, ...props }) {
|
|
30
|
+
styles.useVariants({
|
|
31
|
+
backgroundColor,
|
|
32
|
+
borderRadius,
|
|
33
|
+
borderTopStartRadius,
|
|
34
|
+
borderTopEndRadius,
|
|
35
|
+
borderBottomStartRadius,
|
|
36
|
+
borderBottomEndRadius,
|
|
37
|
+
borderColor,
|
|
38
|
+
borderStartColor,
|
|
39
|
+
borderEndColor,
|
|
40
|
+
borderTopColor,
|
|
41
|
+
borderBottomColor,
|
|
42
|
+
borderWidth,
|
|
43
|
+
borderVerticalWidth,
|
|
44
|
+
borderHorizontalWidth,
|
|
45
|
+
borderStartWidth,
|
|
46
|
+
borderEndWidth,
|
|
47
|
+
borderTopWidth,
|
|
48
|
+
borderBottomWidth,
|
|
49
|
+
alignContent,
|
|
50
|
+
alignItems,
|
|
51
|
+
alignSelf,
|
|
52
|
+
flex,
|
|
53
|
+
flexDirection,
|
|
54
|
+
flexGrow,
|
|
55
|
+
flexShrink,
|
|
56
|
+
flexWrap,
|
|
57
|
+
justifyContent,
|
|
58
|
+
display,
|
|
59
|
+
overflow,
|
|
60
|
+
spacing,
|
|
61
|
+
spacingHorizontal,
|
|
62
|
+
spacingVertical,
|
|
63
|
+
spacingBottom,
|
|
64
|
+
spacingEnd,
|
|
65
|
+
spacingStart,
|
|
66
|
+
spacingTop,
|
|
67
|
+
offset,
|
|
68
|
+
offsetVertical,
|
|
69
|
+
offsetHorizontal,
|
|
70
|
+
offsetBottom,
|
|
71
|
+
offsetEnd,
|
|
72
|
+
offsetStart,
|
|
73
|
+
offsetTop,
|
|
74
|
+
columnGap,
|
|
75
|
+
rowGap
|
|
76
|
+
});
|
|
77
|
+
const source = useMemo(() => typeof src === "string" ? { uri: src } : src, [src]);
|
|
78
|
+
const imageStyles = useMemo(() => [
|
|
79
|
+
styles.foundation,
|
|
80
|
+
{
|
|
81
|
+
width,
|
|
82
|
+
height
|
|
83
|
+
},
|
|
84
|
+
style
|
|
85
|
+
], [
|
|
86
|
+
styles.foundation,
|
|
87
|
+
width,
|
|
88
|
+
height,
|
|
89
|
+
style
|
|
90
|
+
]);
|
|
91
|
+
return /* @__PURE__ */ jsx(Image$1, {
|
|
92
|
+
ref,
|
|
93
|
+
source,
|
|
94
|
+
accessibilityLabel: alt,
|
|
95
|
+
resizeMode: CONTENT_FIT_TO_RESIZE_MODE[contentFit],
|
|
96
|
+
style: imageStyles,
|
|
97
|
+
...props
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
Image.displayName = "Image";
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
export { Image };
|
|
104
|
+
//# sourceMappingURL=Image.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Image.mjs","names":["CONTENT_FIT_TO_RESIZE_MODE: Record<ContentFit, ImageStyle['resizeMode']>","Image","RNImage"],"sources":["../../src/components/Image.tsx"],"sourcesContent":["import type { UniversalImageProps } from '@yahoo/uds/tokens';\nimport type { Ref } from 'react';\nimport { memo, useMemo } from 'react';\nimport type { ImageProps as RNImageProps, ImageStyle } from 'react-native';\nimport { Image as RNImage } from 'react-native';\n\nimport type { StyleProps } from '../../generated/styles';\nimport { styles } from '../../generated/styles';\n\ntype ContentFit = NonNullable<UniversalImageProps['contentFit']>;\n\nconst CONTENT_FIT_TO_RESIZE_MODE: Record<ContentFit, ImageStyle['resizeMode']> = {\n cover: 'cover',\n contain: 'contain',\n fill: 'stretch',\n none: 'center',\n 'scale-down': 'contain',\n};\n\ninterface ImageProps extends Omit<\n RNImageProps,\n 'source' | 'src' | 'width' | 'height' | 'borderRadius'\n> {\n ref?: Ref<RNImage>;\n /** Image source URL or require() */\n src: UniversalImageProps['src'];\n /** Alt text for accessibility */\n alt?: string;\n /** Image width */\n width?: number;\n /** Image height */\n height?: number;\n /** How to fit the image within its container */\n contentFit?: ContentFit;\n // Background\n backgroundColor?: StyleProps['backgroundColor'];\n // Border\n borderRadius?: StyleProps['borderRadius'];\n borderTopStartRadius?: StyleProps['borderTopStartRadius'];\n borderTopEndRadius?: StyleProps['borderTopEndRadius'];\n borderBottomStartRadius?: StyleProps['borderBottomStartRadius'];\n borderBottomEndRadius?: StyleProps['borderBottomEndRadius'];\n borderColor?: StyleProps['borderColor'];\n borderStartColor?: StyleProps['borderStartColor'];\n borderEndColor?: StyleProps['borderEndColor'];\n borderTopColor?: StyleProps['borderTopColor'];\n borderBottomColor?: StyleProps['borderBottomColor'];\n borderWidth?: StyleProps['borderWidth'];\n borderVerticalWidth?: StyleProps['borderVerticalWidth'];\n borderHorizontalWidth?: StyleProps['borderHorizontalWidth'];\n borderStartWidth?: StyleProps['borderStartWidth'];\n borderEndWidth?: StyleProps['borderEndWidth'];\n borderTopWidth?: StyleProps['borderTopWidth'];\n borderBottomWidth?: StyleProps['borderBottomWidth'];\n // Flex\n alignContent?: StyleProps['alignContent'];\n alignItems?: StyleProps['alignItems'];\n alignSelf?: StyleProps['alignSelf'];\n flex?: StyleProps['flex'];\n flexDirection?: StyleProps['flexDirection'];\n flexGrow?: StyleProps['flexGrow'];\n flexShrink?: StyleProps['flexShrink'];\n flexWrap?: StyleProps['flexWrap'];\n justifyContent?: StyleProps['justifyContent'];\n // Layout\n display?: StyleProps['display'];\n overflow?: StyleProps['overflow'];\n // Spacing\n spacing?: StyleProps['spacing'];\n spacingHorizontal?: StyleProps['spacingHorizontal'];\n spacingVertical?: StyleProps['spacingVertical'];\n spacingBottom?: StyleProps['spacingBottom'];\n spacingEnd?: StyleProps['spacingEnd'];\n spacingStart?: StyleProps['spacingStart'];\n spacingTop?: StyleProps['spacingTop'];\n offset?: StyleProps['offset'];\n offsetVertical?: StyleProps['offsetVertical'];\n offsetHorizontal?: StyleProps['offsetHorizontal'];\n offsetBottom?: StyleProps['offsetBottom'];\n offsetEnd?: StyleProps['offsetEnd'];\n offsetStart?: StyleProps['offsetStart'];\n offsetTop?: StyleProps['offsetTop'];\n columnGap?: StyleProps['columnGap'];\n rowGap?: StyleProps['rowGap'];\n}\n\n/**\n * **A component for displaying images**\n *\n * @description\n * Wrapper for the React Native Image component with UDS styling props.\n *\n * @example\n * ```tsx\n * import { Image } from '~/components/ui/Image';\n *\n * <Image src=\"https://example.com/image.png\" width={200} height={150} />\n * <Image src={require('./local-image.png')} contentFit=\"cover\" borderRadius=\"md\" />\n * ```\n */\nconst Image = memo(function Image({\n src,\n alt,\n width,\n height,\n contentFit = 'cover',\n style,\n // background\n backgroundColor,\n // border\n borderRadius,\n borderTopStartRadius,\n borderTopEndRadius,\n borderBottomStartRadius,\n borderBottomEndRadius,\n borderColor,\n borderStartColor,\n borderEndColor,\n borderTopColor,\n borderBottomColor,\n borderWidth,\n borderVerticalWidth,\n borderHorizontalWidth,\n borderStartWidth,\n borderEndWidth,\n borderTopWidth,\n borderBottomWidth,\n // flex\n alignContent,\n alignItems,\n alignSelf,\n flex,\n flexDirection,\n flexGrow,\n flexShrink,\n flexWrap,\n justifyContent,\n // layout\n display,\n overflow,\n // spacing\n spacing,\n spacingHorizontal,\n spacingVertical,\n spacingBottom,\n spacingEnd,\n spacingStart,\n spacingTop,\n offset,\n offsetVertical,\n offsetHorizontal,\n offsetBottom,\n offsetEnd,\n offsetStart,\n offsetTop,\n columnGap,\n rowGap,\n ref,\n ...props\n}: ImageProps) {\n // Apply styles using useVariants\n styles.useVariants({\n backgroundColor,\n // border\n borderRadius,\n borderTopStartRadius,\n borderTopEndRadius,\n borderBottomStartRadius,\n borderBottomEndRadius,\n borderColor,\n borderStartColor,\n borderEndColor,\n borderTopColor,\n borderBottomColor,\n borderWidth,\n borderVerticalWidth,\n borderHorizontalWidth,\n borderStartWidth,\n borderEndWidth,\n borderTopWidth,\n borderBottomWidth,\n // flex\n alignContent,\n alignItems,\n alignSelf,\n flex,\n flexDirection,\n flexGrow,\n flexShrink,\n flexWrap,\n justifyContent,\n // layout\n display,\n overflow,\n // spacing\n spacing,\n spacingHorizontal,\n spacingVertical,\n spacingBottom,\n spacingEnd,\n spacingStart,\n spacingTop,\n offset,\n offsetVertical,\n offsetHorizontal,\n offsetBottom,\n offsetEnd,\n offsetStart,\n offsetTop,\n columnGap,\n rowGap,\n });\n\n const source = useMemo(() => (typeof src === 'string' ? { uri: src } : src), [src]);\n\n // styles.foundation must be in deps - it returns a new reference when variants change\n const imageStyles = useMemo(\n () => [styles.foundation as ImageStyle, { width, height }, style],\n [styles.foundation, width, height, style],\n );\n\n return (\n <RNImage\n ref={ref}\n source={source}\n accessibilityLabel={alt}\n resizeMode={CONTENT_FIT_TO_RESIZE_MODE[contentFit]}\n style={imageStyles}\n {...props}\n />\n );\n});\n\nImage.displayName = 'Image';\n\nexport { Image, type ImageProps };\n"],"mappings":";;;;;;;AAWA,MAAMA,6BAA2E;CAC/E,OAAO;CACP,SAAS;CACT,MAAM;CACN,MAAM;CACN,cAAc;CACf;;;;;;;;;;;;;;;AAmFD,MAAM,QAAQ,KAAK,SAASC,QAAM,EAChC,KACA,KACA,OACA,QACA,aAAa,SACb,OAEA,iBAEA,cACA,sBACA,oBACA,yBACA,uBACA,aACA,kBACA,gBACA,gBACA,mBACA,aACA,qBACA,uBACA,kBACA,gBACA,gBACA,mBAEA,cACA,YACA,WACA,MACA,eACA,UACA,YACA,UACA,gBAEA,SACA,UAEA,SACA,mBACA,iBACA,eACA,YACA,cACA,YACA,QACA,gBACA,kBACA,cACA,WACA,aACA,WACA,WACA,QACA,KACA,GAAG,SACU;AAEb,QAAO,YAAY;EACjB;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EAEA;EACA;EAEA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACD,CAAC;CAEF,MAAM,SAAS,cAAe,OAAO,QAAQ,WAAW,EAAE,KAAK,KAAK,GAAG,KAAM,CAAC,IAAI,CAAC;CAGnF,MAAM,cAAc,cACZ;EAAC,OAAO;EAA0B;GAAE;GAAO;GAAQ;EAAE;EAAM,EACjE;EAAC,OAAO;EAAY;EAAO;EAAQ;EAAM,CAC1C;AAED,QACE,oBAACC;EACM;EACG;EACR,oBAAoB;EACpB,YAAY,2BAA2B;EACvC,OAAO;EACP,GAAI;GACJ;EAEJ;AAEF,MAAM,cAAc"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
3
|
+
const require_components_IconSlot = require('./IconSlot.cjs');
|
|
4
|
+
const require_components_Text = require('./Text.cjs');
|
|
5
|
+
const require_components_HStack = require('./HStack.cjs');
|
|
6
|
+
const require_components_VStack = require('./VStack.cjs');
|
|
7
|
+
let react = require("react");
|
|
8
|
+
let react_native = require("react-native");
|
|
9
|
+
let generated_styles = require("../../generated/styles");
|
|
10
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
11
|
+
let lodash_es = require("lodash-es");
|
|
12
|
+
|
|
13
|
+
//#region src/components/Input.tsx
|
|
14
|
+
/**
|
|
15
|
+
* **📦 An input that allows users to enter text and collect data.**
|
|
16
|
+
*
|
|
17
|
+
* @description
|
|
18
|
+
* An input field is a component that takes text typed into it. It can also serve
|
|
19
|
+
* as a way to display a selection and trigger a dropdown menu. Inputs are interactive
|
|
20
|
+
* elements that users can click, tap, or otherwise engage with to collect data.
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```tsx
|
|
24
|
+
* import { Input } from '@yahoo/uds-mobile';
|
|
25
|
+
*
|
|
26
|
+
* <Input label="Name" placeholder="Enter your name" required />
|
|
27
|
+
* ```
|
|
28
|
+
*
|
|
29
|
+
* @usage
|
|
30
|
+
* - Forms: For collecting data like names, emails, passwords, etc.
|
|
31
|
+
* - Search Bars: Allowing users to enter search queries.
|
|
32
|
+
* - Filters/Settings: When users need to specify preferences.
|
|
33
|
+
* - Feedback/Comments: Letting users leave reviews or comments.
|
|
34
|
+
*
|
|
35
|
+
* @see The {@link https://uds.build/docs/components/input Input Docs} for more info
|
|
36
|
+
*/
|
|
37
|
+
const Input = (0, react.memo)(function Input$1({ label, size = "md", startIcon, endIcon, helpText, helperTextIcon, hasError, disabled, readOnly, required, width = "100%", defaultValue, value: controlledValue, onChangeText, onFocus, onBlur, placeholder, placeholderTextColor, ref, ...textInputProps }) {
|
|
38
|
+
const uid = `uds-input-${(0, react.useId)()}`;
|
|
39
|
+
const [internalValue, setInternalValue] = (0, react.useState)(defaultValue ?? "");
|
|
40
|
+
const [isFocused, setIsFocused] = (0, react.useState)(false);
|
|
41
|
+
const isControlled = controlledValue !== void 0;
|
|
42
|
+
const value = isControlled ? controlledValue : internalValue;
|
|
43
|
+
const valueState = value ? "filled" : "empty";
|
|
44
|
+
const handleChangeText = (0, react.useCallback)((text) => {
|
|
45
|
+
if (!isControlled) setInternalValue(text);
|
|
46
|
+
onChangeText?.(text);
|
|
47
|
+
}, [isControlled, onChangeText]);
|
|
48
|
+
const handleFocus = (0, react.useCallback)((e) => {
|
|
49
|
+
setIsFocused(true);
|
|
50
|
+
onFocus?.(e);
|
|
51
|
+
}, [onFocus]);
|
|
52
|
+
const handleBlur = (0, react.useCallback)((e) => {
|
|
53
|
+
setIsFocused(false);
|
|
54
|
+
onBlur?.(e);
|
|
55
|
+
}, [onBlur]);
|
|
56
|
+
generated_styles.inputStyles.useVariants({
|
|
57
|
+
size,
|
|
58
|
+
value: valueState,
|
|
59
|
+
disabled,
|
|
60
|
+
pressed: isFocused,
|
|
61
|
+
readonly: readOnly,
|
|
62
|
+
invalid: hasError
|
|
63
|
+
});
|
|
64
|
+
const computedPlaceholderColor = placeholderTextColor ?? generated_styles.inputStyles.inputPlaceholder.color;
|
|
65
|
+
const rootStyle = (0, react.useMemo)(() => [{
|
|
66
|
+
width,
|
|
67
|
+
opacity: disabled ? .5 : 1
|
|
68
|
+
}], [width, disabled]);
|
|
69
|
+
const inputWrapperStyle = (0, react.useMemo)(() => [generated_styles.inputStyles.inputWrapper, {
|
|
70
|
+
flexDirection: "row",
|
|
71
|
+
alignItems: "center"
|
|
72
|
+
}], [generated_styles.inputStyles.inputWrapper]);
|
|
73
|
+
const textInputStyle = (0, react.useMemo)(() => [generated_styles.inputStyles.input, {
|
|
74
|
+
flex: 1,
|
|
75
|
+
includeFontPadding: false,
|
|
76
|
+
textAlignVertical: "center",
|
|
77
|
+
paddingVertical: 0
|
|
78
|
+
}], [generated_styles.inputStyles.input]);
|
|
79
|
+
const labelContent = (0, react.useMemo)(() => {
|
|
80
|
+
if (!label) return null;
|
|
81
|
+
const content = (0, lodash_es.isFunction)(label) ? label() : label;
|
|
82
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_HStack.HStack, {
|
|
83
|
+
columnGap: "1",
|
|
84
|
+
alignItems: "flex-end",
|
|
85
|
+
spacingBottom: "2",
|
|
86
|
+
children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
|
|
87
|
+
style: generated_styles.inputStyles.label,
|
|
88
|
+
children: content
|
|
89
|
+
}), required && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
|
|
90
|
+
style: generated_styles.inputStyles.labelRequired,
|
|
91
|
+
children: "*"
|
|
92
|
+
})]
|
|
93
|
+
});
|
|
94
|
+
}, [
|
|
95
|
+
label,
|
|
96
|
+
required,
|
|
97
|
+
generated_styles.inputStyles.label,
|
|
98
|
+
generated_styles.inputStyles.labelRequired
|
|
99
|
+
]);
|
|
100
|
+
const startIconContent = (0, react.useMemo)(() => {
|
|
101
|
+
if (!startIcon) return null;
|
|
102
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
|
|
103
|
+
icon: startIcon,
|
|
104
|
+
variant: "outline",
|
|
105
|
+
style: generated_styles.inputStyles.startIcon
|
|
106
|
+
});
|
|
107
|
+
}, [startIcon, generated_styles.inputStyles.startIcon]);
|
|
108
|
+
const endIconContent = (0, react.useMemo)(() => {
|
|
109
|
+
if (!endIcon) return null;
|
|
110
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
|
|
111
|
+
icon: endIcon,
|
|
112
|
+
variant: "outline",
|
|
113
|
+
style: generated_styles.inputStyles.endIcon
|
|
114
|
+
});
|
|
115
|
+
}, [endIcon, generated_styles.inputStyles.endIcon]);
|
|
116
|
+
const helpTextContent = (0, react.useMemo)(() => {
|
|
117
|
+
if (!helpText) return null;
|
|
118
|
+
const content = (0, lodash_es.isFunction)(helpText) ? helpText() : helpText;
|
|
119
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_HStack.HStack, {
|
|
120
|
+
columnGap: "1",
|
|
121
|
+
alignItems: "center",
|
|
122
|
+
spacingTop: "2",
|
|
123
|
+
children: [helperTextIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
|
|
124
|
+
icon: helperTextIcon,
|
|
125
|
+
style: generated_styles.inputStyles.helperIcon
|
|
126
|
+
}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
|
|
127
|
+
style: generated_styles.inputStyles.helperText,
|
|
128
|
+
children: content
|
|
129
|
+
})]
|
|
130
|
+
});
|
|
131
|
+
}, [
|
|
132
|
+
helpText,
|
|
133
|
+
helperTextIcon,
|
|
134
|
+
generated_styles.inputStyles.helperIcon,
|
|
135
|
+
generated_styles.inputStyles.helperText
|
|
136
|
+
]);
|
|
137
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_VStack.VStack, {
|
|
138
|
+
style: rootStyle,
|
|
139
|
+
children: [
|
|
140
|
+
labelContent,
|
|
141
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_native.View, {
|
|
142
|
+
style: inputWrapperStyle,
|
|
143
|
+
accessible: true,
|
|
144
|
+
accessibilityRole: "none",
|
|
145
|
+
accessibilityLabel: typeof label === "string" ? label : void 0,
|
|
146
|
+
children: [
|
|
147
|
+
startIconContent,
|
|
148
|
+
/* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.TextInput, {
|
|
149
|
+
ref,
|
|
150
|
+
nativeID: uid,
|
|
151
|
+
value,
|
|
152
|
+
onChangeText: handleChangeText,
|
|
153
|
+
onFocus: handleFocus,
|
|
154
|
+
onBlur: handleBlur,
|
|
155
|
+
placeholder,
|
|
156
|
+
placeholderTextColor: computedPlaceholderColor,
|
|
157
|
+
editable: !disabled && !readOnly,
|
|
158
|
+
style: textInputStyle,
|
|
159
|
+
accessibilityLabel: typeof label === "string" ? label : void 0,
|
|
160
|
+
accessibilityHint: typeof helpText === "string" ? helpText : void 0,
|
|
161
|
+
accessibilityState: { disabled },
|
|
162
|
+
...textInputProps
|
|
163
|
+
}),
|
|
164
|
+
endIconContent
|
|
165
|
+
]
|
|
166
|
+
}),
|
|
167
|
+
helpTextContent
|
|
168
|
+
]
|
|
169
|
+
});
|
|
170
|
+
});
|
|
171
|
+
Input.displayName = "Input";
|
|
172
|
+
|
|
173
|
+
//#endregion
|
|
174
|
+
exports.Input = Input;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
|
|
2
|
+
import { UniversalInputProps } from "../uds/dist/tokens/types.cjs";
|
|
3
|
+
import { IconSlotType } from "./IconSlot.cjs";
|
|
4
|
+
import { SizeProps } from "../types.cjs";
|
|
5
|
+
import * as react16 from "react";
|
|
6
|
+
import { Ref } from "react";
|
|
7
|
+
import { TextInput, TextInputProps } from "react-native";
|
|
8
|
+
|
|
9
|
+
//#region src/components/Input.d.ts
|
|
10
|
+
interface InputProps extends Omit<UniversalInputProps<IconSlotType>, 'width'>, Omit<TextInputProps, 'style' | 'editable'>, Pick<SizeProps, 'width'> {
|
|
11
|
+
ref?: Ref<TextInput>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* **📦 An input that allows users to enter text and collect data.**
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* An input field is a component that takes text typed into it. It can also serve
|
|
18
|
+
* as a way to display a selection and trigger a dropdown menu. Inputs are interactive
|
|
19
|
+
* elements that users can click, tap, or otherwise engage with to collect data.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* import { Input } from '@yahoo/uds-mobile';
|
|
24
|
+
*
|
|
25
|
+
* <Input label="Name" placeholder="Enter your name" required />
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @usage
|
|
29
|
+
* - Forms: For collecting data like names, emails, passwords, etc.
|
|
30
|
+
* - Search Bars: Allowing users to enter search queries.
|
|
31
|
+
* - Filters/Settings: When users need to specify preferences.
|
|
32
|
+
* - Feedback/Comments: Letting users leave reviews or comments.
|
|
33
|
+
*
|
|
34
|
+
* @see The {@link https://uds.build/docs/components/input Input Docs} for more info
|
|
35
|
+
*/
|
|
36
|
+
declare const Input: react16.NamedExoticComponent<InputProps>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { Input, type InputProps };
|
|
39
|
+
//# sourceMappingURL=Input.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.d.cts","names":[],"sources":["../../src/components/Input.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;UAmBU,UAAA,SAEN,KAAK,oBAAoB,yBACzB,KAAK,uCACL,KAAK;QACD,IAAI;AAdmC;;;;;;;;;;;AAavC;;;;;;;;;;;;;cA+BF,OAAK,OAAA,CAAA,qBAAA"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
|
|
2
|
+
import { UniversalInputProps } from "../uds/dist/tokens/types.mjs";
|
|
3
|
+
import { IconSlotType } from "./IconSlot.mjs";
|
|
4
|
+
import { SizeProps } from "../types.mjs";
|
|
5
|
+
import * as react15 from "react";
|
|
6
|
+
import { Ref } from "react";
|
|
7
|
+
import { TextInput, TextInputProps } from "react-native";
|
|
8
|
+
|
|
9
|
+
//#region src/components/Input.d.ts
|
|
10
|
+
interface InputProps extends Omit<UniversalInputProps<IconSlotType>, 'width'>, Omit<TextInputProps, 'style' | 'editable'>, Pick<SizeProps, 'width'> {
|
|
11
|
+
ref?: Ref<TextInput>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* **📦 An input that allows users to enter text and collect data.**
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* An input field is a component that takes text typed into it. It can also serve
|
|
18
|
+
* as a way to display a selection and trigger a dropdown menu. Inputs are interactive
|
|
19
|
+
* elements that users can click, tap, or otherwise engage with to collect data.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* import { Input } from '@yahoo/uds-mobile';
|
|
24
|
+
*
|
|
25
|
+
* <Input label="Name" placeholder="Enter your name" required />
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @usage
|
|
29
|
+
* - Forms: For collecting data like names, emails, passwords, etc.
|
|
30
|
+
* - Search Bars: Allowing users to enter search queries.
|
|
31
|
+
* - Filters/Settings: When users need to specify preferences.
|
|
32
|
+
* - Feedback/Comments: Letting users leave reviews or comments.
|
|
33
|
+
*
|
|
34
|
+
* @see The {@link https://uds.build/docs/components/input Input Docs} for more info
|
|
35
|
+
*/
|
|
36
|
+
declare const Input: react15.NamedExoticComponent<InputProps>;
|
|
37
|
+
//#endregion
|
|
38
|
+
export { Input, type InputProps };
|
|
39
|
+
//# sourceMappingURL=Input.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.d.mts","names":[],"sources":["../../src/components/Input.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;UAmBU,UAAA,SAEN,KAAK,oBAAoB,yBACzB,KAAK,uCACL,KAAK;QACD,IAAI;AAdmC;;;;;;;;;;;AAavC;;;;;;;;;;;;;cA+BF,OAAK,OAAA,CAAA,qBAAA"}
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { IconSlot } from "./IconSlot.mjs";
|
|
3
|
+
import { Text as Text$1 } from "./Text.mjs";
|
|
4
|
+
import { HStack } from "./HStack.mjs";
|
|
5
|
+
import { VStack } from "./VStack.mjs";
|
|
6
|
+
import { memo, useCallback, useId, useMemo, useState } from "react";
|
|
7
|
+
import { TextInput, View } from "react-native";
|
|
8
|
+
import { inputStyles } from "../../generated/styles";
|
|
9
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
10
|
+
import { isFunction } from "lodash-es";
|
|
11
|
+
|
|
12
|
+
//#region src/components/Input.tsx
|
|
13
|
+
/**
|
|
14
|
+
* **📦 An input that allows users to enter text and collect data.**
|
|
15
|
+
*
|
|
16
|
+
* @description
|
|
17
|
+
* An input field is a component that takes text typed into it. It can also serve
|
|
18
|
+
* as a way to display a selection and trigger a dropdown menu. Inputs are interactive
|
|
19
|
+
* elements that users can click, tap, or otherwise engage with to collect data.
|
|
20
|
+
*
|
|
21
|
+
* @example
|
|
22
|
+
* ```tsx
|
|
23
|
+
* import { Input } from '@yahoo/uds-mobile';
|
|
24
|
+
*
|
|
25
|
+
* <Input label="Name" placeholder="Enter your name" required />
|
|
26
|
+
* ```
|
|
27
|
+
*
|
|
28
|
+
* @usage
|
|
29
|
+
* - Forms: For collecting data like names, emails, passwords, etc.
|
|
30
|
+
* - Search Bars: Allowing users to enter search queries.
|
|
31
|
+
* - Filters/Settings: When users need to specify preferences.
|
|
32
|
+
* - Feedback/Comments: Letting users leave reviews or comments.
|
|
33
|
+
*
|
|
34
|
+
* @see The {@link https://uds.build/docs/components/input Input Docs} for more info
|
|
35
|
+
*/
|
|
36
|
+
const Input = memo(function Input$1({ label, size = "md", startIcon, endIcon, helpText, helperTextIcon, hasError, disabled, readOnly, required, width = "100%", defaultValue, value: controlledValue, onChangeText, onFocus, onBlur, placeholder, placeholderTextColor, ref, ...textInputProps }) {
|
|
37
|
+
const uid = `uds-input-${useId()}`;
|
|
38
|
+
const [internalValue, setInternalValue] = useState(defaultValue ?? "");
|
|
39
|
+
const [isFocused, setIsFocused] = useState(false);
|
|
40
|
+
const isControlled = controlledValue !== void 0;
|
|
41
|
+
const value = isControlled ? controlledValue : internalValue;
|
|
42
|
+
const valueState = value ? "filled" : "empty";
|
|
43
|
+
const handleChangeText = useCallback((text) => {
|
|
44
|
+
if (!isControlled) setInternalValue(text);
|
|
45
|
+
onChangeText?.(text);
|
|
46
|
+
}, [isControlled, onChangeText]);
|
|
47
|
+
const handleFocus = useCallback((e) => {
|
|
48
|
+
setIsFocused(true);
|
|
49
|
+
onFocus?.(e);
|
|
50
|
+
}, [onFocus]);
|
|
51
|
+
const handleBlur = useCallback((e) => {
|
|
52
|
+
setIsFocused(false);
|
|
53
|
+
onBlur?.(e);
|
|
54
|
+
}, [onBlur]);
|
|
55
|
+
inputStyles.useVariants({
|
|
56
|
+
size,
|
|
57
|
+
value: valueState,
|
|
58
|
+
disabled,
|
|
59
|
+
pressed: isFocused,
|
|
60
|
+
readonly: readOnly,
|
|
61
|
+
invalid: hasError
|
|
62
|
+
});
|
|
63
|
+
const computedPlaceholderColor = placeholderTextColor ?? inputStyles.inputPlaceholder.color;
|
|
64
|
+
const rootStyle = useMemo(() => [{
|
|
65
|
+
width,
|
|
66
|
+
opacity: disabled ? .5 : 1
|
|
67
|
+
}], [width, disabled]);
|
|
68
|
+
const inputWrapperStyle = useMemo(() => [inputStyles.inputWrapper, {
|
|
69
|
+
flexDirection: "row",
|
|
70
|
+
alignItems: "center"
|
|
71
|
+
}], [inputStyles.inputWrapper]);
|
|
72
|
+
const textInputStyle = useMemo(() => [inputStyles.input, {
|
|
73
|
+
flex: 1,
|
|
74
|
+
includeFontPadding: false,
|
|
75
|
+
textAlignVertical: "center",
|
|
76
|
+
paddingVertical: 0
|
|
77
|
+
}], [inputStyles.input]);
|
|
78
|
+
const labelContent = useMemo(() => {
|
|
79
|
+
if (!label) return null;
|
|
80
|
+
const content = isFunction(label) ? label() : label;
|
|
81
|
+
return /* @__PURE__ */ jsxs(HStack, {
|
|
82
|
+
columnGap: "1",
|
|
83
|
+
alignItems: "flex-end",
|
|
84
|
+
spacingBottom: "2",
|
|
85
|
+
children: [/* @__PURE__ */ jsx(Text$1, {
|
|
86
|
+
style: inputStyles.label,
|
|
87
|
+
children: content
|
|
88
|
+
}), required && /* @__PURE__ */ jsx(Text$1, {
|
|
89
|
+
style: inputStyles.labelRequired,
|
|
90
|
+
children: "*"
|
|
91
|
+
})]
|
|
92
|
+
});
|
|
93
|
+
}, [
|
|
94
|
+
label,
|
|
95
|
+
required,
|
|
96
|
+
inputStyles.label,
|
|
97
|
+
inputStyles.labelRequired
|
|
98
|
+
]);
|
|
99
|
+
const startIconContent = useMemo(() => {
|
|
100
|
+
if (!startIcon) return null;
|
|
101
|
+
return /* @__PURE__ */ jsx(IconSlot, {
|
|
102
|
+
icon: startIcon,
|
|
103
|
+
variant: "outline",
|
|
104
|
+
style: inputStyles.startIcon
|
|
105
|
+
});
|
|
106
|
+
}, [startIcon, inputStyles.startIcon]);
|
|
107
|
+
const endIconContent = useMemo(() => {
|
|
108
|
+
if (!endIcon) return null;
|
|
109
|
+
return /* @__PURE__ */ jsx(IconSlot, {
|
|
110
|
+
icon: endIcon,
|
|
111
|
+
variant: "outline",
|
|
112
|
+
style: inputStyles.endIcon
|
|
113
|
+
});
|
|
114
|
+
}, [endIcon, inputStyles.endIcon]);
|
|
115
|
+
const helpTextContent = useMemo(() => {
|
|
116
|
+
if (!helpText) return null;
|
|
117
|
+
const content = isFunction(helpText) ? helpText() : helpText;
|
|
118
|
+
return /* @__PURE__ */ jsxs(HStack, {
|
|
119
|
+
columnGap: "1",
|
|
120
|
+
alignItems: "center",
|
|
121
|
+
spacingTop: "2",
|
|
122
|
+
children: [helperTextIcon && /* @__PURE__ */ jsx(IconSlot, {
|
|
123
|
+
icon: helperTextIcon,
|
|
124
|
+
style: inputStyles.helperIcon
|
|
125
|
+
}), /* @__PURE__ */ jsx(Text$1, {
|
|
126
|
+
style: inputStyles.helperText,
|
|
127
|
+
children: content
|
|
128
|
+
})]
|
|
129
|
+
});
|
|
130
|
+
}, [
|
|
131
|
+
helpText,
|
|
132
|
+
helperTextIcon,
|
|
133
|
+
inputStyles.helperIcon,
|
|
134
|
+
inputStyles.helperText
|
|
135
|
+
]);
|
|
136
|
+
return /* @__PURE__ */ jsxs(VStack, {
|
|
137
|
+
style: rootStyle,
|
|
138
|
+
children: [
|
|
139
|
+
labelContent,
|
|
140
|
+
/* @__PURE__ */ jsxs(View, {
|
|
141
|
+
style: inputWrapperStyle,
|
|
142
|
+
accessible: true,
|
|
143
|
+
accessibilityRole: "none",
|
|
144
|
+
accessibilityLabel: typeof label === "string" ? label : void 0,
|
|
145
|
+
children: [
|
|
146
|
+
startIconContent,
|
|
147
|
+
/* @__PURE__ */ jsx(TextInput, {
|
|
148
|
+
ref,
|
|
149
|
+
nativeID: uid,
|
|
150
|
+
value,
|
|
151
|
+
onChangeText: handleChangeText,
|
|
152
|
+
onFocus: handleFocus,
|
|
153
|
+
onBlur: handleBlur,
|
|
154
|
+
placeholder,
|
|
155
|
+
placeholderTextColor: computedPlaceholderColor,
|
|
156
|
+
editable: !disabled && !readOnly,
|
|
157
|
+
style: textInputStyle,
|
|
158
|
+
accessibilityLabel: typeof label === "string" ? label : void 0,
|
|
159
|
+
accessibilityHint: typeof helpText === "string" ? helpText : void 0,
|
|
160
|
+
accessibilityState: { disabled },
|
|
161
|
+
...textInputProps
|
|
162
|
+
}),
|
|
163
|
+
endIconContent
|
|
164
|
+
]
|
|
165
|
+
}),
|
|
166
|
+
helpTextContent
|
|
167
|
+
]
|
|
168
|
+
});
|
|
169
|
+
});
|
|
170
|
+
Input.displayName = "Input";
|
|
171
|
+
|
|
172
|
+
//#endregion
|
|
173
|
+
export { Input };
|
|
174
|
+
//# sourceMappingURL=Input.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Input.mjs","names":["Input","Text"],"sources":["../../src/components/Input.tsx"],"sourcesContent":["import type { UniversalInputProps } from '@yahoo/uds/tokens';\nimport { isFunction } from 'lodash-es';\nimport type { Ref } from 'react';\nimport { memo, useCallback, useId, useMemo, useState } from 'react';\nimport type { TextInputProps } from 'react-native';\nimport { TextInput, View } from 'react-native';\n\nimport { inputStyles } from '../../generated/styles';\nimport type { SizeProps } from '../types';\nimport { HStack } from './HStack';\nimport type { IconSlotType } from './IconSlot';\nimport { IconSlot } from './IconSlot';\nimport { Text } from './Text';\nimport { VStack } from './VStack';\n\n/* -------------------------------------------------------------------------- */\n/* Types */\n/* -------------------------------------------------------------------------- */\n\ninterface InputProps\n extends\n Omit<UniversalInputProps<IconSlotType>, 'width'>,\n Omit<TextInputProps, 'style' | 'editable'>,\n Pick<SizeProps, 'width'> {\n ref?: Ref<TextInput>;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Input Component */\n/* -------------------------------------------------------------------------- */\n\n/**\n * **📦 An input that allows users to enter text and collect data.**\n *\n * @description\n * An input field is a component that takes text typed into it. It can also serve\n * as a way to display a selection and trigger a dropdown menu. Inputs are interactive\n * elements that users can click, tap, or otherwise engage with to collect data.\n *\n * @example\n * ```tsx\n * import { Input } from '@yahoo/uds-mobile';\n *\n * <Input label=\"Name\" placeholder=\"Enter your name\" required />\n * ```\n *\n * @usage\n * - Forms: For collecting data like names, emails, passwords, etc.\n * - Search Bars: Allowing users to enter search queries.\n * - Filters/Settings: When users need to specify preferences.\n * - Feedback/Comments: Letting users leave reviews or comments.\n *\n * @see The {@link https://uds.build/docs/components/input Input Docs} for more info\n */\nconst Input = memo(function Input({\n // Input props\n label,\n size = 'md',\n startIcon,\n endIcon,\n helpText,\n helperTextIcon,\n hasError,\n disabled,\n readOnly,\n required,\n // Size props\n width = '100%',\n // TextInput props\n defaultValue,\n value: controlledValue,\n onChangeText,\n onFocus,\n onBlur,\n placeholder,\n placeholderTextColor,\n ref,\n ...textInputProps\n}: InputProps) {\n const generatedId = useId();\n const uid = `uds-input-${generatedId}`;\n\n /* --------------------------------- State ---------------------------------- */\n const [internalValue, setInternalValue] = useState(defaultValue ?? '');\n const [isFocused, setIsFocused] = useState(false);\n\n // Support both controlled and uncontrolled modes\n const isControlled = controlledValue !== undefined;\n const value = isControlled ? controlledValue : internalValue;\n const valueState = value ? 'filled' : 'empty';\n\n /* -------------------------------- Handlers -------------------------------- */\n const handleChangeText = useCallback(\n (text: string) => {\n if (!isControlled) {\n setInternalValue(text);\n }\n onChangeText?.(text);\n },\n [isControlled, onChangeText],\n );\n\n const handleFocus = useCallback<NonNullable<TextInputProps['onFocus']>>(\n (e) => {\n setIsFocused(true);\n onFocus?.(e);\n },\n [onFocus],\n );\n\n const handleBlur = useCallback<NonNullable<TextInputProps['onBlur']>>(\n (e) => {\n setIsFocused(false);\n onBlur?.(e);\n },\n [onBlur],\n );\n\n /* --------------------------------- Styles --------------------------------- */\n inputStyles.useVariants({\n size,\n value: valueState,\n disabled,\n pressed: isFocused,\n readonly: readOnly,\n invalid: hasError,\n });\n\n // Get placeholder color from theme styles\n const computedPlaceholderColor = placeholderTextColor ?? inputStyles.inputPlaceholder.color;\n\n const rootStyle = useMemo(() => [{ width, opacity: disabled ? 0.5 : 1 }], [width, disabled]);\n\n const inputWrapperStyle = useMemo(\n () => [\n inputStyles.inputWrapper,\n { flexDirection: 'row' as const, alignItems: 'center' as const },\n ],\n [inputStyles.inputWrapper],\n );\n\n // Android-specific fixes: TextInput on Android has rendering issues with text visibility\n // - includeFontPadding: false removes Android's extra font padding that can clip text\n // - textAlignVertical: 'center' ensures text is vertically centered in the input\n // - paddingVertical: 0 removes default padding that interferes with flex layout\n const textInputStyle = useMemo(\n () => [\n inputStyles.input,\n {\n flex: 1,\n includeFontPadding: false,\n textAlignVertical: 'center' as const,\n paddingVertical: 0,\n },\n ],\n [inputStyles.input],\n );\n\n /* ---------------------------- Render Helpers ------------------------------ */\n const labelContent = useMemo(() => {\n if (!label) {\n return null;\n }\n const content = isFunction(label) ? label() : label;\n return (\n <HStack columnGap=\"1\" alignItems=\"flex-end\" spacingBottom=\"2\">\n <Text style={inputStyles.label}>{content}</Text>\n {required && <Text style={inputStyles.labelRequired}>*</Text>}\n </HStack>\n );\n }, [label, required, inputStyles.label, inputStyles.labelRequired]);\n\n const startIconContent = useMemo(() => {\n if (!startIcon) {\n return null;\n }\n return <IconSlot icon={startIcon} variant=\"outline\" style={inputStyles.startIcon} />;\n }, [startIcon, inputStyles.startIcon]);\n\n const endIconContent = useMemo(() => {\n if (!endIcon) {\n return null;\n }\n return <IconSlot icon={endIcon} variant=\"outline\" style={inputStyles.endIcon} />;\n }, [endIcon, inputStyles.endIcon]);\n\n const helpTextContent = useMemo(() => {\n if (!helpText) {\n return null;\n }\n const content = isFunction(helpText) ? helpText() : helpText;\n return (\n <HStack columnGap=\"1\" alignItems=\"center\" spacingTop=\"2\">\n {helperTextIcon && <IconSlot icon={helperTextIcon} style={inputStyles.helperIcon} />}\n <Text style={inputStyles.helperText}>{content}</Text>\n </HStack>\n );\n }, [helpText, helperTextIcon, inputStyles.helperIcon, inputStyles.helperText]);\n\n /* --------------------------------- Render --------------------------------- */\n return (\n <VStack style={rootStyle}>\n {labelContent}\n\n <View\n style={inputWrapperStyle}\n accessible\n accessibilityRole=\"none\"\n accessibilityLabel={typeof label === 'string' ? label : undefined}\n >\n {startIconContent}\n\n <TextInput\n ref={ref}\n nativeID={uid}\n value={value}\n onChangeText={handleChangeText}\n onFocus={handleFocus}\n onBlur={handleBlur}\n placeholder={placeholder}\n placeholderTextColor={computedPlaceholderColor}\n editable={!disabled && !readOnly}\n style={textInputStyle}\n accessibilityLabel={typeof label === 'string' ? label : undefined}\n accessibilityHint={typeof helpText === 'string' ? helpText : undefined}\n accessibilityState={{ disabled }}\n {...textInputProps}\n />\n\n {endIconContent}\n </View>\n\n {helpTextContent}\n </VStack>\n );\n});\n\nInput.displayName = 'Input';\n\nexport { Input, type InputProps };\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAsDA,MAAM,QAAQ,KAAK,SAASA,QAAM,EAEhC,OACA,OAAO,MACP,WACA,SACA,UACA,gBACA,UACA,UACA,UACA,UAEA,QAAQ,QAER,cACA,OAAO,iBACP,cACA,SACA,QACA,aACA,sBACA,KACA,GAAG,kBACU;CAEb,MAAM,MAAM,aADQ,OAAO;CAI3B,MAAM,CAAC,eAAe,oBAAoB,SAAS,gBAAgB,GAAG;CACtE,MAAM,CAAC,WAAW,gBAAgB,SAAS,MAAM;CAGjD,MAAM,eAAe,oBAAoB;CACzC,MAAM,QAAQ,eAAe,kBAAkB;CAC/C,MAAM,aAAa,QAAQ,WAAW;CAGtC,MAAM,mBAAmB,aACtB,SAAiB;AAChB,MAAI,CAAC,aACH,kBAAiB,KAAK;AAExB,iBAAe,KAAK;IAEtB,CAAC,cAAc,aAAa,CAC7B;CAED,MAAM,cAAc,aACjB,MAAM;AACL,eAAa,KAAK;AAClB,YAAU,EAAE;IAEd,CAAC,QAAQ,CACV;CAED,MAAM,aAAa,aAChB,MAAM;AACL,eAAa,MAAM;AACnB,WAAS,EAAE;IAEb,CAAC,OAAO,CACT;AAGD,aAAY,YAAY;EACtB;EACA,OAAO;EACP;EACA,SAAS;EACT,UAAU;EACV,SAAS;EACV,CAAC;CAGF,MAAM,2BAA2B,wBAAwB,YAAY,iBAAiB;CAEtF,MAAM,YAAY,cAAc,CAAC;EAAE;EAAO,SAAS,WAAW,KAAM;EAAG,CAAC,EAAE,CAAC,OAAO,SAAS,CAAC;CAE5F,MAAM,oBAAoB,cAClB,CACJ,YAAY,cACZ;EAAE,eAAe;EAAgB,YAAY;EAAmB,CACjE,EACD,CAAC,YAAY,aAAa,CAC3B;CAMD,MAAM,iBAAiB,cACf,CACJ,YAAY,OACZ;EACE,MAAM;EACN,oBAAoB;EACpB,mBAAmB;EACnB,iBAAiB;EAClB,CACF,EACD,CAAC,YAAY,MAAM,CACpB;CAGD,MAAM,eAAe,cAAc;AACjC,MAAI,CAAC,MACH,QAAO;EAET,MAAM,UAAU,WAAW,MAAM,GAAG,OAAO,GAAG;AAC9C,SACE,qBAAC;GAAO,WAAU;GAAI,YAAW;GAAW,eAAc;cACxD,oBAACC;IAAK,OAAO,YAAY;cAAQ;KAAe,EAC/C,YAAY,oBAACA;IAAK,OAAO,YAAY;cAAe;KAAQ;IACtD;IAEV;EAAC;EAAO;EAAU,YAAY;EAAO,YAAY;EAAc,CAAC;CAEnE,MAAM,mBAAmB,cAAc;AACrC,MAAI,CAAC,UACH,QAAO;AAET,SAAO,oBAAC;GAAS,MAAM;GAAW,SAAQ;GAAU,OAAO,YAAY;IAAa;IACnF,CAAC,WAAW,YAAY,UAAU,CAAC;CAEtC,MAAM,iBAAiB,cAAc;AACnC,MAAI,CAAC,QACH,QAAO;AAET,SAAO,oBAAC;GAAS,MAAM;GAAS,SAAQ;GAAU,OAAO,YAAY;IAAW;IAC/E,CAAC,SAAS,YAAY,QAAQ,CAAC;CAElC,MAAM,kBAAkB,cAAc;AACpC,MAAI,CAAC,SACH,QAAO;EAET,MAAM,UAAU,WAAW,SAAS,GAAG,UAAU,GAAG;AACpD,SACE,qBAAC;GAAO,WAAU;GAAI,YAAW;GAAS,YAAW;cAClD,kBAAkB,oBAAC;IAAS,MAAM;IAAgB,OAAO,YAAY;KAAc,EACpF,oBAACA;IAAK,OAAO,YAAY;cAAa;KAAe;IAC9C;IAEV;EAAC;EAAU;EAAgB,YAAY;EAAY,YAAY;EAAW,CAAC;AAG9E,QACE,qBAAC;EAAO,OAAO;;GACZ;GAED,qBAAC;IACC,OAAO;IACP;IACA,mBAAkB;IAClB,oBAAoB,OAAO,UAAU,WAAW,QAAQ;;KAEvD;KAED,oBAAC;MACM;MACL,UAAU;MACH;MACP,cAAc;MACd,SAAS;MACT,QAAQ;MACK;MACb,sBAAsB;MACtB,UAAU,CAAC,YAAY,CAAC;MACxB,OAAO;MACP,oBAAoB,OAAO,UAAU,WAAW,QAAQ;MACxD,mBAAmB,OAAO,aAAa,WAAW,WAAW;MAC7D,oBAAoB,EAAE,UAAU;MAChC,GAAI;OACJ;KAED;;KACI;GAEN;;GACM;EAEX;AAEF,MAAM,cAAc"}
|