@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,187 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
|
|
3
|
+
const require_motion = require('../uds/dist/tokens/configs/motion.cjs');
|
|
4
|
+
const require_motion$1 = require('../motion.cjs');
|
|
5
|
+
const require_components_IconSlot = require('./IconSlot.cjs');
|
|
6
|
+
const require_components_Text = require('./Text.cjs');
|
|
7
|
+
const require_components_Pressable = require('./Pressable.cjs');
|
|
8
|
+
let react = require("react");
|
|
9
|
+
let react_native = require("react-native");
|
|
10
|
+
let generated_styles = require("../../generated/styles");
|
|
11
|
+
let react_jsx_runtime = require("react/jsx-runtime");
|
|
12
|
+
let react_native_reanimated = require("react-native-reanimated");
|
|
13
|
+
react_native_reanimated = require_rolldown_runtime.__toESM(react_native_reanimated);
|
|
14
|
+
let react_native_unistyles_reanimated = require("react-native-unistyles/reanimated");
|
|
15
|
+
|
|
16
|
+
//#region src/components/Button.tsx
|
|
17
|
+
/**
|
|
18
|
+
* Interpolates a boxShadow string by scaling the alpha of all colors.
|
|
19
|
+
* This allows smooth fade-in/out of shadows.
|
|
20
|
+
*/
|
|
21
|
+
function interpolateShadowAlpha(shadow, alpha) {
|
|
22
|
+
"worklet";
|
|
23
|
+
if (!shadow || alpha >= 1) return shadow;
|
|
24
|
+
if (alpha <= 0) return "";
|
|
25
|
+
return shadow.replace(/rgba\(([^,]+),\s*([^,]+),\s*([^,]+),\s*([^)]+)\)/g, (_, r, g, b, a) => {
|
|
26
|
+
return `rgba(${r}, ${g}, ${b}, ${(parseFloat(a) * alpha).toFixed(3)})`;
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Animated wrapper for icon/loading content.
|
|
31
|
+
* Matches web Button icon animation: scale 0.7→1, opacity 0→1, width 0→auto
|
|
32
|
+
* Uses staggered animation: opacity waits until halfway through width animation.
|
|
33
|
+
*/
|
|
34
|
+
function AnimatedIconSlot({ children, visible, iconSize, gap }) {
|
|
35
|
+
const progress = (0, react_native_reanimated.useDerivedValue)(() => (0, react_native_reanimated.withSpring)(visible ? 1 : 0, require_motion$1.BUTTON_SPRING_CONFIG), [visible]);
|
|
36
|
+
const animatedStyle = (0, react_native_reanimated.useAnimatedStyle)(() => {
|
|
37
|
+
const totalWidth = iconSize + gap;
|
|
38
|
+
return {
|
|
39
|
+
width: (0, react_native_reanimated.interpolate)(progress.value, [0, 1], [0, totalWidth]),
|
|
40
|
+
opacity: (0, react_native_reanimated.interpolate)(progress.value, [.5, 1], [0, 1], "clamp"),
|
|
41
|
+
transform: [{ scale: (0, react_native_reanimated.interpolate)(progress.value, [.5, 1], [.7, 1], "clamp") }],
|
|
42
|
+
overflow: "hidden"
|
|
43
|
+
};
|
|
44
|
+
});
|
|
45
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native_reanimated.default.View, {
|
|
46
|
+
style: animatedStyle,
|
|
47
|
+
children
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* **🖲️ A button element that can be used to trigger an action**
|
|
52
|
+
*
|
|
53
|
+
* @description
|
|
54
|
+
* A button is a fundamental component used to trigger an action or event.
|
|
55
|
+
* Buttons are interactive elements that users can click, tap, or otherwise
|
|
56
|
+
* engage with to submit forms, open dialogues, or perform any other interaction.
|
|
57
|
+
*
|
|
58
|
+
* Features animated scale effect on press and smooth icon transitions matching
|
|
59
|
+
* the web UDS Button behavior.
|
|
60
|
+
*
|
|
61
|
+
* @example
|
|
62
|
+
* ```tsx
|
|
63
|
+
* import { Button } from '@yahoo/uds-mobile';
|
|
64
|
+
*
|
|
65
|
+
* <Button onPress={() => console.log('pressed')}>Save</Button>
|
|
66
|
+
* <Button variant="secondary">Cancel</Button>
|
|
67
|
+
* <Button startIcon="Add" variant="brand">Add Item</Button>
|
|
68
|
+
* <Button loading>Saving...</Button>
|
|
69
|
+
* ```
|
|
70
|
+
*
|
|
71
|
+
* @see The {@link https://uds.build/docs/components/button Button Docs} for more info
|
|
72
|
+
*/
|
|
73
|
+
const Button = (0, react.memo)(function Button$1({ variant = "primary", size = "md", iconVariant = "outline", startIcon, endIcon, loading, disabled, width, children, style, accessibilityLabel, accessibilityHint, disableEffects = false, onPressIn, onPressOut, ref, ...props }) {
|
|
74
|
+
const shouldAnimate = !disableEffects;
|
|
75
|
+
const [pressed, setPressed] = (0, react.useState)(false);
|
|
76
|
+
generated_styles.buttonStyles.useVariants({
|
|
77
|
+
size,
|
|
78
|
+
variant,
|
|
79
|
+
disabled,
|
|
80
|
+
pressed
|
|
81
|
+
});
|
|
82
|
+
const buttonGap = generated_styles.buttonStyles.root.gap;
|
|
83
|
+
const iconSize = generated_styles.buttonStyles.icon.fontSize;
|
|
84
|
+
const animatedTheme = (0, react_native_unistyles_reanimated.useAnimatedTheme)();
|
|
85
|
+
const scale = (0, react_native_reanimated.useSharedValue)(require_motion.SCALE_EFFECTS.none);
|
|
86
|
+
const handlePressIn = (0, react.useCallback)((event) => {
|
|
87
|
+
setPressed(true);
|
|
88
|
+
if (shouldAnimate) scale.value = (0, react_native_reanimated.withSpring)(require_motion.SCALE_EFFECTS.down, require_motion$1.BUTTON_SPRING_CONFIG);
|
|
89
|
+
onPressIn?.(event);
|
|
90
|
+
}, [
|
|
91
|
+
shouldAnimate,
|
|
92
|
+
scale,
|
|
93
|
+
onPressIn
|
|
94
|
+
]);
|
|
95
|
+
const handlePressOut = (0, react.useCallback)((event) => {
|
|
96
|
+
setPressed(false);
|
|
97
|
+
if (shouldAnimate) scale.value = (0, react_native_reanimated.withSpring)(require_motion.SCALE_EFFECTS.none, require_motion$1.BUTTON_SPRING_CONFIG);
|
|
98
|
+
onPressOut?.(event);
|
|
99
|
+
}, [
|
|
100
|
+
shouldAnimate,
|
|
101
|
+
scale,
|
|
102
|
+
onPressOut
|
|
103
|
+
]);
|
|
104
|
+
const childrenNode = children && ((0, react.isValidElement)(children) ? children : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_Text.Text, {
|
|
105
|
+
numberOfLines: 1,
|
|
106
|
+
textAlign: "center",
|
|
107
|
+
style: generated_styles.buttonStyles.text,
|
|
108
|
+
children
|
|
109
|
+
}));
|
|
110
|
+
const a11yState = (0, react.useMemo)(() => ({
|
|
111
|
+
disabled,
|
|
112
|
+
busy: loading
|
|
113
|
+
}), [disabled, loading]);
|
|
114
|
+
const pressProgress = (0, react_native_reanimated.useDerivedValue)(() => (0, react_native_reanimated.withTiming)(pressed ? 1 : 0, {
|
|
115
|
+
duration: 220,
|
|
116
|
+
easing: react_native_reanimated.Easing.bezier(0, 0, .2, 1)
|
|
117
|
+
}), [pressed]);
|
|
118
|
+
const animatedStyles = (0, react_native_reanimated.useAnimatedStyle)(() => {
|
|
119
|
+
const shadowPressed = animatedTheme.value.components[`button/variant/${variant}/root/pressed`].boxShadow;
|
|
120
|
+
return {
|
|
121
|
+
transform: [{ scale: scale.value }],
|
|
122
|
+
boxShadow: interpolateShadowAlpha(shadowPressed, pressProgress.value)
|
|
123
|
+
};
|
|
124
|
+
});
|
|
125
|
+
const showLoading = !!loading;
|
|
126
|
+
const showStartIcon = !!startIcon && !loading;
|
|
127
|
+
const showEndIcon = !!endIcon && !loading;
|
|
128
|
+
const startContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedIconSlot, {
|
|
129
|
+
visible: showLoading || showStartIcon,
|
|
130
|
+
iconSize,
|
|
131
|
+
gap: buttonGap,
|
|
132
|
+
children: showLoading ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(react_native.ActivityIndicator, {
|
|
133
|
+
size: generated_styles.buttonStyles.icon.fontSize,
|
|
134
|
+
color: generated_styles.buttonStyles.icon.color
|
|
135
|
+
}) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
|
|
136
|
+
icon: startIcon,
|
|
137
|
+
variant: iconVariant,
|
|
138
|
+
style: generated_styles.buttonStyles.icon
|
|
139
|
+
})
|
|
140
|
+
});
|
|
141
|
+
const endContent = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(AnimatedIconSlot, {
|
|
142
|
+
visible: showEndIcon,
|
|
143
|
+
iconSize,
|
|
144
|
+
gap: buttonGap,
|
|
145
|
+
children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_components_IconSlot.IconSlot, {
|
|
146
|
+
icon: endIcon,
|
|
147
|
+
variant: iconVariant,
|
|
148
|
+
style: generated_styles.buttonStyles.icon
|
|
149
|
+
})
|
|
150
|
+
});
|
|
151
|
+
const rootStyles = (0, react.useMemo)(() => [
|
|
152
|
+
generated_styles.buttonStyles.root,
|
|
153
|
+
animatedStyles,
|
|
154
|
+
typeof style === "function" ? style({ pressed }) : style
|
|
155
|
+
], [
|
|
156
|
+
generated_styles.buttonStyles.root,
|
|
157
|
+
animatedStyles,
|
|
158
|
+
style,
|
|
159
|
+
pressed
|
|
160
|
+
]);
|
|
161
|
+
return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_components_Pressable.AnimatedPressable, {
|
|
162
|
+
ref,
|
|
163
|
+
disabled,
|
|
164
|
+
onPressIn: handlePressIn,
|
|
165
|
+
onPressOut: handlePressOut,
|
|
166
|
+
flexDirection: "row",
|
|
167
|
+
alignItems: "center",
|
|
168
|
+
justifyContent: "center",
|
|
169
|
+
overflow: "hidden",
|
|
170
|
+
accessibilityLabel: loading ? `${accessibilityLabel ?? ""}, loading` : accessibilityLabel,
|
|
171
|
+
accessibilityHint,
|
|
172
|
+
accessibilityRole: "button",
|
|
173
|
+
accessibilityState: a11yState,
|
|
174
|
+
alignContent: "center",
|
|
175
|
+
style: rootStyles,
|
|
176
|
+
...props,
|
|
177
|
+
children: [
|
|
178
|
+
startContent,
|
|
179
|
+
childrenNode,
|
|
180
|
+
endContent
|
|
181
|
+
]
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
Button.displayName = "Button";
|
|
185
|
+
|
|
186
|
+
//#endregion
|
|
187
|
+
exports.Button = Button;
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
import { IconVariant } from "../icons/dist/types.cjs";
|
|
3
|
+
import { ButtonSize, ButtonVariantFlat } from "../uds/dist/tokens/types.cjs";
|
|
4
|
+
import { IconSlotType } from "./IconSlot.cjs";
|
|
5
|
+
import { PressableProps as PressableProps$1 } from "./Pressable.cjs";
|
|
6
|
+
import * as react13 from "react";
|
|
7
|
+
import { Ref } from "react";
|
|
8
|
+
import { View } from "react-native";
|
|
9
|
+
|
|
10
|
+
//#region src/components/Button.d.ts
|
|
11
|
+
interface ButtonProps extends Omit<PressableProps$1, 'children' | 'disabled'> {
|
|
12
|
+
/** @default 'primary' */
|
|
13
|
+
variant?: ButtonVariantFlat;
|
|
14
|
+
/** @default 'md' */
|
|
15
|
+
size?: ButtonSize;
|
|
16
|
+
/** @default 'outline' */
|
|
17
|
+
iconVariant?: IconVariant;
|
|
18
|
+
startIcon?: IconSlotType;
|
|
19
|
+
endIcon?: IconSlotType;
|
|
20
|
+
loading?: boolean;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
children?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Disable motion effects (scale on press, icon animations)
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
disableEffects?: boolean;
|
|
28
|
+
ref?: Ref<View>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* **🖲️ A button element that can be used to trigger an action**
|
|
32
|
+
*
|
|
33
|
+
* @description
|
|
34
|
+
* A button is a fundamental component used to trigger an action or event.
|
|
35
|
+
* Buttons are interactive elements that users can click, tap, or otherwise
|
|
36
|
+
* engage with to submit forms, open dialogues, or perform any other interaction.
|
|
37
|
+
*
|
|
38
|
+
* Features animated scale effect on press and smooth icon transitions matching
|
|
39
|
+
* the web UDS Button behavior.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* import { Button } from '@yahoo/uds-mobile';
|
|
44
|
+
*
|
|
45
|
+
* <Button onPress={() => console.log('pressed')}>Save</Button>
|
|
46
|
+
* <Button variant="secondary">Cancel</Button>
|
|
47
|
+
* <Button startIcon="Add" variant="brand">Add Item</Button>
|
|
48
|
+
* <Button loading>Saving...</Button>
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @see The {@link https://uds.build/docs/components/button Button Docs} for more info
|
|
52
|
+
*/
|
|
53
|
+
declare const Button: react13.NamedExoticComponent<ButtonProps>;
|
|
54
|
+
//#endregion
|
|
55
|
+
export { Button, type ButtonProps };
|
|
56
|
+
//# sourceMappingURL=Button.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.cts","names":[],"sources":["../../src/components/Button.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;UA2GU,WAAA,SAAoB,KAAK;;YAEvB;;EAFF,IAAA,CAAA,EAID,UAJa;EAAa;EAEvB,WAAA,CAAA,EAII,WAJJ;EAEH,SAAA,CAAA,EAGK,YAHL;EAEO,OAAA,CAAA,EAEJ,YAFI;EACF,OAAA,CAAA,EAAA,OAAA;EACF,QAAA,CAAA,EAAA,OAAA;EAGC,QAAM,CAAA,EAAN,KAAA,CAAM,SAAA;EAMP;;;;EA8BN,cA4JJ,CAAA,EAAA,OA5JU;QA9BJ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;cA8BN,QAAM,OAAA,CAAA,qBAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
|
|
2
|
+
import { IconVariant } from "../icons/dist/types.mjs";
|
|
3
|
+
import { ButtonSize, ButtonVariantFlat } from "../uds/dist/tokens/types.mjs";
|
|
4
|
+
import { IconSlotType } from "./IconSlot.mjs";
|
|
5
|
+
import { PressableProps as PressableProps$1 } from "./Pressable.mjs";
|
|
6
|
+
import * as react17 from "react";
|
|
7
|
+
import { Ref } from "react";
|
|
8
|
+
import { View } from "react-native";
|
|
9
|
+
|
|
10
|
+
//#region src/components/Button.d.ts
|
|
11
|
+
interface ButtonProps extends Omit<PressableProps$1, 'children' | 'disabled'> {
|
|
12
|
+
/** @default 'primary' */
|
|
13
|
+
variant?: ButtonVariantFlat;
|
|
14
|
+
/** @default 'md' */
|
|
15
|
+
size?: ButtonSize;
|
|
16
|
+
/** @default 'outline' */
|
|
17
|
+
iconVariant?: IconVariant;
|
|
18
|
+
startIcon?: IconSlotType;
|
|
19
|
+
endIcon?: IconSlotType;
|
|
20
|
+
loading?: boolean;
|
|
21
|
+
disabled?: boolean;
|
|
22
|
+
children?: React.ReactNode;
|
|
23
|
+
/**
|
|
24
|
+
* Disable motion effects (scale on press, icon animations)
|
|
25
|
+
* @default false
|
|
26
|
+
*/
|
|
27
|
+
disableEffects?: boolean;
|
|
28
|
+
ref?: Ref<View>;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* **🖲️ A button element that can be used to trigger an action**
|
|
32
|
+
*
|
|
33
|
+
* @description
|
|
34
|
+
* A button is a fundamental component used to trigger an action or event.
|
|
35
|
+
* Buttons are interactive elements that users can click, tap, or otherwise
|
|
36
|
+
* engage with to submit forms, open dialogues, or perform any other interaction.
|
|
37
|
+
*
|
|
38
|
+
* Features animated scale effect on press and smooth icon transitions matching
|
|
39
|
+
* the web UDS Button behavior.
|
|
40
|
+
*
|
|
41
|
+
* @example
|
|
42
|
+
* ```tsx
|
|
43
|
+
* import { Button } from '@yahoo/uds-mobile';
|
|
44
|
+
*
|
|
45
|
+
* <Button onPress={() => console.log('pressed')}>Save</Button>
|
|
46
|
+
* <Button variant="secondary">Cancel</Button>
|
|
47
|
+
* <Button startIcon="Add" variant="brand">Add Item</Button>
|
|
48
|
+
* <Button loading>Saving...</Button>
|
|
49
|
+
* ```
|
|
50
|
+
*
|
|
51
|
+
* @see The {@link https://uds.build/docs/components/button Button Docs} for more info
|
|
52
|
+
*/
|
|
53
|
+
declare const Button: react17.NamedExoticComponent<ButtonProps>;
|
|
54
|
+
//#endregion
|
|
55
|
+
export { Button, type ButtonProps };
|
|
56
|
+
//# sourceMappingURL=Button.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.d.mts","names":[],"sources":["../../src/components/Button.tsx"],"sourcesContent":[],"mappings":";;;;;;;;;;UA2GU,WAAA,SAAoB,KAAK;;YAEvB;;EAFF,IAAA,CAAA,EAID,UAJa;EAAa;EAEvB,WAAA,CAAA,EAII,WAJJ;EAEH,SAAA,CAAA,EAGK,YAHL;EAEO,OAAA,CAAA,EAEJ,YAFI;EACF,OAAA,CAAA,EAAA,OAAA;EACF,QAAA,CAAA,EAAA,OAAA;EAGC,QAAM,CAAA,EAAN,KAAA,CAAM,SAAA;EAMP;;;;EA8BN,cA4JJ,CAAA,EAAA,OA5JU;QA9BJ,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;cA8BN,QAAM,OAAA,CAAA,qBAAA"}
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
/*! © 2026 Yahoo, Inc. UDS Mobile v0.0.0-development */
|
|
2
|
+
import { SCALE_EFFECTS } from "../uds/dist/tokens/configs/motion.mjs";
|
|
3
|
+
import { BUTTON_SPRING_CONFIG } from "../motion.mjs";
|
|
4
|
+
import { IconSlot } from "./IconSlot.mjs";
|
|
5
|
+
import { Text as Text$1 } from "./Text.mjs";
|
|
6
|
+
import { AnimatedPressable } from "./Pressable.mjs";
|
|
7
|
+
import { isValidElement, memo, useCallback, useMemo, useState } from "react";
|
|
8
|
+
import { ActivityIndicator } from "react-native";
|
|
9
|
+
import { buttonStyles } from "../../generated/styles";
|
|
10
|
+
import { jsx, jsxs } from "react/jsx-runtime";
|
|
11
|
+
import Animated, { Easing, interpolate, useAnimatedStyle, useDerivedValue, useSharedValue, withSpring, withTiming } from "react-native-reanimated";
|
|
12
|
+
import { useAnimatedTheme } from "react-native-unistyles/reanimated";
|
|
13
|
+
|
|
14
|
+
//#region src/components/Button.tsx
|
|
15
|
+
/**
|
|
16
|
+
* Interpolates a boxShadow string by scaling the alpha of all colors.
|
|
17
|
+
* This allows smooth fade-in/out of shadows.
|
|
18
|
+
*/
|
|
19
|
+
function interpolateShadowAlpha(shadow, alpha) {
|
|
20
|
+
"worklet";
|
|
21
|
+
if (!shadow || alpha >= 1) return shadow;
|
|
22
|
+
if (alpha <= 0) return "";
|
|
23
|
+
return shadow.replace(/rgba\(([^,]+),\s*([^,]+),\s*([^,]+),\s*([^)]+)\)/g, (_, r, g, b, a) => {
|
|
24
|
+
return `rgba(${r}, ${g}, ${b}, ${(parseFloat(a) * alpha).toFixed(3)})`;
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Animated wrapper for icon/loading content.
|
|
29
|
+
* Matches web Button icon animation: scale 0.7→1, opacity 0→1, width 0→auto
|
|
30
|
+
* Uses staggered animation: opacity waits until halfway through width animation.
|
|
31
|
+
*/
|
|
32
|
+
function AnimatedIconSlot({ children, visible, iconSize, gap }) {
|
|
33
|
+
const progress = useDerivedValue(() => withSpring(visible ? 1 : 0, BUTTON_SPRING_CONFIG), [visible]);
|
|
34
|
+
const animatedStyle = useAnimatedStyle(() => {
|
|
35
|
+
const totalWidth = iconSize + gap;
|
|
36
|
+
return {
|
|
37
|
+
width: interpolate(progress.value, [0, 1], [0, totalWidth]),
|
|
38
|
+
opacity: interpolate(progress.value, [.5, 1], [0, 1], "clamp"),
|
|
39
|
+
transform: [{ scale: interpolate(progress.value, [.5, 1], [.7, 1], "clamp") }],
|
|
40
|
+
overflow: "hidden"
|
|
41
|
+
};
|
|
42
|
+
});
|
|
43
|
+
return /* @__PURE__ */ jsx(Animated.View, {
|
|
44
|
+
style: animatedStyle,
|
|
45
|
+
children
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* **🖲️ A button element that can be used to trigger an action**
|
|
50
|
+
*
|
|
51
|
+
* @description
|
|
52
|
+
* A button is a fundamental component used to trigger an action or event.
|
|
53
|
+
* Buttons are interactive elements that users can click, tap, or otherwise
|
|
54
|
+
* engage with to submit forms, open dialogues, or perform any other interaction.
|
|
55
|
+
*
|
|
56
|
+
* Features animated scale effect on press and smooth icon transitions matching
|
|
57
|
+
* the web UDS Button behavior.
|
|
58
|
+
*
|
|
59
|
+
* @example
|
|
60
|
+
* ```tsx
|
|
61
|
+
* import { Button } from '@yahoo/uds-mobile';
|
|
62
|
+
*
|
|
63
|
+
* <Button onPress={() => console.log('pressed')}>Save</Button>
|
|
64
|
+
* <Button variant="secondary">Cancel</Button>
|
|
65
|
+
* <Button startIcon="Add" variant="brand">Add Item</Button>
|
|
66
|
+
* <Button loading>Saving...</Button>
|
|
67
|
+
* ```
|
|
68
|
+
*
|
|
69
|
+
* @see The {@link https://uds.build/docs/components/button Button Docs} for more info
|
|
70
|
+
*/
|
|
71
|
+
const Button = memo(function Button$1({ variant = "primary", size = "md", iconVariant = "outline", startIcon, endIcon, loading, disabled, width, children, style, accessibilityLabel, accessibilityHint, disableEffects = false, onPressIn, onPressOut, ref, ...props }) {
|
|
72
|
+
const shouldAnimate = !disableEffects;
|
|
73
|
+
const [pressed, setPressed] = useState(false);
|
|
74
|
+
buttonStyles.useVariants({
|
|
75
|
+
size,
|
|
76
|
+
variant,
|
|
77
|
+
disabled,
|
|
78
|
+
pressed
|
|
79
|
+
});
|
|
80
|
+
const buttonGap = buttonStyles.root.gap;
|
|
81
|
+
const iconSize = buttonStyles.icon.fontSize;
|
|
82
|
+
const animatedTheme = useAnimatedTheme();
|
|
83
|
+
const scale = useSharedValue(SCALE_EFFECTS.none);
|
|
84
|
+
const handlePressIn = useCallback((event) => {
|
|
85
|
+
setPressed(true);
|
|
86
|
+
if (shouldAnimate) scale.value = withSpring(SCALE_EFFECTS.down, BUTTON_SPRING_CONFIG);
|
|
87
|
+
onPressIn?.(event);
|
|
88
|
+
}, [
|
|
89
|
+
shouldAnimate,
|
|
90
|
+
scale,
|
|
91
|
+
onPressIn
|
|
92
|
+
]);
|
|
93
|
+
const handlePressOut = useCallback((event) => {
|
|
94
|
+
setPressed(false);
|
|
95
|
+
if (shouldAnimate) scale.value = withSpring(SCALE_EFFECTS.none, BUTTON_SPRING_CONFIG);
|
|
96
|
+
onPressOut?.(event);
|
|
97
|
+
}, [
|
|
98
|
+
shouldAnimate,
|
|
99
|
+
scale,
|
|
100
|
+
onPressOut
|
|
101
|
+
]);
|
|
102
|
+
const childrenNode = children && (isValidElement(children) ? children : /* @__PURE__ */ jsx(Text$1, {
|
|
103
|
+
numberOfLines: 1,
|
|
104
|
+
textAlign: "center",
|
|
105
|
+
style: buttonStyles.text,
|
|
106
|
+
children
|
|
107
|
+
}));
|
|
108
|
+
const a11yState = useMemo(() => ({
|
|
109
|
+
disabled,
|
|
110
|
+
busy: loading
|
|
111
|
+
}), [disabled, loading]);
|
|
112
|
+
const pressProgress = useDerivedValue(() => withTiming(pressed ? 1 : 0, {
|
|
113
|
+
duration: 220,
|
|
114
|
+
easing: Easing.bezier(0, 0, .2, 1)
|
|
115
|
+
}), [pressed]);
|
|
116
|
+
const animatedStyles = useAnimatedStyle(() => {
|
|
117
|
+
const shadowPressed = animatedTheme.value.components[`button/variant/${variant}/root/pressed`].boxShadow;
|
|
118
|
+
return {
|
|
119
|
+
transform: [{ scale: scale.value }],
|
|
120
|
+
boxShadow: interpolateShadowAlpha(shadowPressed, pressProgress.value)
|
|
121
|
+
};
|
|
122
|
+
});
|
|
123
|
+
const showLoading = !!loading;
|
|
124
|
+
const showStartIcon = !!startIcon && !loading;
|
|
125
|
+
const showEndIcon = !!endIcon && !loading;
|
|
126
|
+
const startContent = /* @__PURE__ */ jsx(AnimatedIconSlot, {
|
|
127
|
+
visible: showLoading || showStartIcon,
|
|
128
|
+
iconSize,
|
|
129
|
+
gap: buttonGap,
|
|
130
|
+
children: showLoading ? /* @__PURE__ */ jsx(ActivityIndicator, {
|
|
131
|
+
size: buttonStyles.icon.fontSize,
|
|
132
|
+
color: buttonStyles.icon.color
|
|
133
|
+
}) : /* @__PURE__ */ jsx(IconSlot, {
|
|
134
|
+
icon: startIcon,
|
|
135
|
+
variant: iconVariant,
|
|
136
|
+
style: buttonStyles.icon
|
|
137
|
+
})
|
|
138
|
+
});
|
|
139
|
+
const endContent = /* @__PURE__ */ jsx(AnimatedIconSlot, {
|
|
140
|
+
visible: showEndIcon,
|
|
141
|
+
iconSize,
|
|
142
|
+
gap: buttonGap,
|
|
143
|
+
children: /* @__PURE__ */ jsx(IconSlot, {
|
|
144
|
+
icon: endIcon,
|
|
145
|
+
variant: iconVariant,
|
|
146
|
+
style: buttonStyles.icon
|
|
147
|
+
})
|
|
148
|
+
});
|
|
149
|
+
const rootStyles = useMemo(() => [
|
|
150
|
+
buttonStyles.root,
|
|
151
|
+
animatedStyles,
|
|
152
|
+
typeof style === "function" ? style({ pressed }) : style
|
|
153
|
+
], [
|
|
154
|
+
buttonStyles.root,
|
|
155
|
+
animatedStyles,
|
|
156
|
+
style,
|
|
157
|
+
pressed
|
|
158
|
+
]);
|
|
159
|
+
return /* @__PURE__ */ jsxs(AnimatedPressable, {
|
|
160
|
+
ref,
|
|
161
|
+
disabled,
|
|
162
|
+
onPressIn: handlePressIn,
|
|
163
|
+
onPressOut: handlePressOut,
|
|
164
|
+
flexDirection: "row",
|
|
165
|
+
alignItems: "center",
|
|
166
|
+
justifyContent: "center",
|
|
167
|
+
overflow: "hidden",
|
|
168
|
+
accessibilityLabel: loading ? `${accessibilityLabel ?? ""}, loading` : accessibilityLabel,
|
|
169
|
+
accessibilityHint,
|
|
170
|
+
accessibilityRole: "button",
|
|
171
|
+
accessibilityState: a11yState,
|
|
172
|
+
alignContent: "center",
|
|
173
|
+
style: rootStyles,
|
|
174
|
+
...props,
|
|
175
|
+
children: [
|
|
176
|
+
startContent,
|
|
177
|
+
childrenNode,
|
|
178
|
+
endContent
|
|
179
|
+
]
|
|
180
|
+
});
|
|
181
|
+
});
|
|
182
|
+
Button.displayName = "Button";
|
|
183
|
+
|
|
184
|
+
//#endregion
|
|
185
|
+
export { Button };
|
|
186
|
+
//# sourceMappingURL=Button.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Button.mjs","names":["Button","Text"],"sources":["../../src/components/Button.tsx"],"sourcesContent":["import type { ButtonSize, ButtonVariantFlat, IconVariant } from '@yahoo/uds/tokens';\nimport type { Ref } from 'react';\nimport { isValidElement, memo, useCallback, useMemo, useState } from 'react';\nimport type { View } from 'react-native';\nimport { ActivityIndicator } from 'react-native';\nimport Animated, {\n Easing,\n interpolate,\n useAnimatedStyle,\n useDerivedValue,\n useSharedValue,\n withSpring,\n withTiming,\n} from 'react-native-reanimated';\nimport { useAnimatedTheme } from 'react-native-unistyles/reanimated';\n\nimport { buttonStyles } from '../../generated/styles';\nimport { BUTTON_SPRING_CONFIG, SCALE_EFFECTS } from '../motion';\nimport type { IconSlotType } from './IconSlot';\nimport { IconSlot } from './IconSlot';\nimport type { PressableProps } from './Pressable';\nimport { AnimatedPressable } from './Pressable';\nimport { Text } from './Text';\n\n/* -------------------------------------------------------------------------- */\n/* Animation Helpers */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Interpolates a boxShadow string by scaling the alpha of all colors.\n * This allows smooth fade-in/out of shadows.\n */\nfunction interpolateShadowAlpha(shadow: string, alpha: number): string {\n 'worklet';\n if (!shadow || alpha >= 1) {\n return shadow;\n }\n if (alpha <= 0) {\n return '';\n }\n\n return shadow.replace(/rgba\\(([^,]+),\\s*([^,]+),\\s*([^,]+),\\s*([^)]+)\\)/g, (_, r, g, b, a) => {\n const newAlpha = parseFloat(a) * alpha;\n return `rgba(${r}, ${g}, ${b}, ${newAlpha.toFixed(3)})`;\n });\n}\n\n/* -------------------------------------------------------------------------- */\n/* Animated Icon Slot */\n/* -------------------------------------------------------------------------- */\n\n/**\n * Animated wrapper for icon/loading content.\n * Matches web Button icon animation: scale 0.7→1, opacity 0→1, width 0→auto\n * Uses staggered animation: opacity waits until halfway through width animation.\n */\nfunction AnimatedIconSlot({\n children,\n visible,\n iconSize,\n gap,\n}: {\n children: React.ReactNode;\n visible: boolean;\n iconSize: number;\n gap: number;\n}) {\n // Use useDerivedValue instead of useEffect + useSharedValue\n // This is the idiomatic Reanimated pattern for deriving animated values from React state\n const progress = useDerivedValue(\n () => withSpring(visible ? 1 : 0, BUTTON_SPRING_CONFIG),\n [visible],\n );\n\n const animatedStyle = useAnimatedStyle(() => {\n // Total width includes icon + gap when visible\n const totalWidth = iconSize + gap;\n const width = interpolate(progress.value, [0, 1], [0, totalWidth]);\n\n // Staggered animation: opacity starts at 50% of width animation\n // On enter: width expands first, then icon fades in\n // On exit: icon fades out first, then width collapses\n const opacity = interpolate(progress.value, [0.5, 1], [0, 1], 'clamp');\n const scale = interpolate(progress.value, [0.5, 1], [0.7, 1], 'clamp');\n\n return {\n width,\n opacity,\n transform: [{ scale }],\n overflow: 'hidden' as const,\n };\n });\n\n return <Animated.View style={animatedStyle}>{children}</Animated.View>;\n}\n\n// function LoadingIcon({ size, variant }: { size: ButtonSize, variant: ButtonVariantFlat }) {\n// const { theme } = useUnistyles();\n// const themeKey = `buttonVariant${variantToCapitalMap[variant]}IconRest` as const;\n// const iconSize = theme.components.buttonSizeLgIconRest.fontSize;\n// return <ActivityIndicator size={iconSize} color={theme.colors.text.primary} />;\n// }\n\n/* -------------------------------------------------------------------------- */\n/* Button Props */\n/* -------------------------------------------------------------------------- */\n\ninterface ButtonProps extends Omit<PressableProps, 'children' | 'disabled'> {\n /** @default 'primary' */\n variant?: ButtonVariantFlat;\n /** @default 'md' */\n size?: ButtonSize;\n /** @default 'outline' */\n iconVariant?: IconVariant;\n startIcon?: IconSlotType;\n endIcon?: IconSlotType;\n loading?: boolean;\n disabled?: boolean;\n children?: React.ReactNode;\n /**\n * Disable motion effects (scale on press, icon animations)\n * @default false\n */\n disableEffects?: boolean;\n ref?: Ref<View>;\n}\n\n/* -------------------------------------------------------------------------- */\n/* Button Component */\n/* -------------------------------------------------------------------------- */\n\n/**\n * **🖲️ A button element that can be used to trigger an action**\n *\n * @description\n * A button is a fundamental component used to trigger an action or event.\n * Buttons are interactive elements that users can click, tap, or otherwise\n * engage with to submit forms, open dialogues, or perform any other interaction.\n *\n * Features animated scale effect on press and smooth icon transitions matching\n * the web UDS Button behavior.\n *\n * @example\n * ```tsx\n * import { Button } from '@yahoo/uds-mobile';\n *\n * <Button onPress={() => console.log('pressed')}>Save</Button>\n * <Button variant=\"secondary\">Cancel</Button>\n * <Button startIcon=\"Add\" variant=\"brand\">Add Item</Button>\n * <Button loading>Saving...</Button>\n * ```\n *\n * @see The {@link https://uds.build/docs/components/button Button Docs} for more info\n */\nconst Button = memo(function Button({\n variant = 'primary',\n size = 'md',\n iconVariant = 'outline',\n startIcon,\n endIcon,\n loading,\n disabled,\n width,\n children,\n style,\n accessibilityLabel,\n accessibilityHint,\n disableEffects = false,\n onPressIn,\n onPressOut,\n ref,\n ...props\n}: ButtonProps) {\n const shouldAnimate = !disableEffects;\n\n /* --------------------------------- State ---------------------------------- */\n const [pressed, setPressed] = useState(false);\n\n buttonStyles.useVariants({ size, variant, disabled, pressed });\n\n // Get gap and icon size from current variant styles\n const buttonGap = buttonStyles.root.gap;\n const iconSize = buttonStyles.icon.fontSize;\n\n // Get animated theme for boxShadow (useAnimatedVariantColor doesn't support non-color props)\n const animatedTheme = useAnimatedTheme();\n\n /* ------------------------------- Animation -------------------------------- */\n const scale = useSharedValue<number>(SCALE_EFFECTS.none);\n\n const handlePressIn = useCallback(\n (event: Parameters<NonNullable<PressableProps['onPressIn']>>[0]) => {\n setPressed(true);\n if (shouldAnimate) {\n scale.value = withSpring(SCALE_EFFECTS.down, BUTTON_SPRING_CONFIG);\n }\n onPressIn?.(event);\n },\n [shouldAnimate, scale, onPressIn],\n );\n\n const handlePressOut = useCallback(\n (event: Parameters<NonNullable<PressableProps['onPressOut']>>[0]) => {\n setPressed(false);\n if (shouldAnimate) {\n scale.value = withSpring(SCALE_EFFECTS.none, BUTTON_SPRING_CONFIG);\n }\n onPressOut?.(event);\n },\n [shouldAnimate, scale, onPressOut],\n );\n\n /* -------------------------------- Content --------------------------------- */\n const childrenNode =\n children &&\n (isValidElement(children) ? (\n children\n ) : (\n <Text numberOfLines={1} textAlign=\"center\" style={buttonStyles.text}>\n {children}\n </Text>\n ));\n\n const a11yState = useMemo(() => ({ disabled, busy: loading }), [disabled, loading]);\n\n /* --------------------------------- Styles --------------------------------- */\n // Animate pressed state for shadow (0 = rest, 1 = pressed)\n const pressProgress = useDerivedValue(\n () => withTiming(pressed ? 1 : 0, { duration: 220, easing: Easing.bezier(0, 0, 0.2, 1) }),\n [pressed],\n );\n\n // Animate using Unistyles' variant color system + boxShadow from theme\n const animatedStyles = useAnimatedStyle(() => {\n // Get boxShadow from theme using flattened path (no camelCase conversion needed!)\n const components = animatedTheme.value.components;\n const buttonVariantPath = `button/variant/${variant}/root/pressed` as const;\n const shadowPressed = components[buttonVariantPath].boxShadow;\n\n return {\n transform: [{ scale: scale.value }],\n // backgroundColor: withTiming(backgroundColor.value, {\n // duration: 220,\n // easing: Easing.bezier(0, 0, 0.2, 1),\n // }),\n // borderColor: withTiming(borderColor.value, {\n // duration: 220,\n // easing: Easing.bezier(0, 0, 0.2, 1),\n // }),\n // Animate shadow by interpolating its color alpha\n boxShadow: interpolateShadowAlpha(shadowPressed, pressProgress.value),\n };\n });\n\n // Determine what should be visible in start slot\n const showLoading = !!loading;\n const showStartIcon = !!startIcon && !loading;\n const showEndIcon = !!endIcon && !loading;\n\n // Start slot: either loading spinner or start icon\n const startContent = (\n <AnimatedIconSlot visible={showLoading || showStartIcon} iconSize={iconSize} gap={buttonGap}>\n {showLoading ? (\n <ActivityIndicator size={buttonStyles.icon.fontSize} color={buttonStyles.icon.color} />\n ) : (\n <IconSlot icon={startIcon} variant={iconVariant} style={buttonStyles.icon} />\n )}\n </AnimatedIconSlot>\n );\n\n // End slot: only end icon (no loading here)\n const endContent = (\n <AnimatedIconSlot visible={showEndIcon} iconSize={iconSize} gap={buttonGap}>\n <IconSlot icon={endIcon} variant={iconVariant} style={buttonStyles.icon} />\n </AnimatedIconSlot>\n );\n\n const rootStyles = useMemo(\n () => [\n buttonStyles.root,\n animatedStyles,\n typeof style === 'function' ? style({ pressed }) : style,\n ],\n [buttonStyles.root, animatedStyles, style, pressed],\n );\n\n /* --------------------------------- Render --------------------------------- */\n return (\n <AnimatedPressable\n ref={ref}\n disabled={disabled}\n onPressIn={handlePressIn}\n onPressOut={handlePressOut}\n flexDirection=\"row\"\n alignItems=\"center\"\n justifyContent=\"center\"\n overflow=\"hidden\"\n accessibilityLabel={loading ? `${accessibilityLabel ?? ''}, loading` : accessibilityLabel}\n accessibilityHint={accessibilityHint}\n accessibilityRole=\"button\"\n accessibilityState={a11yState}\n alignContent=\"center\"\n style={rootStyles}\n {...props}\n >\n {startContent}\n {childrenNode}\n {endContent}\n </AnimatedPressable>\n );\n});\n\nButton.displayName = 'Button';\n\nexport { Button, type ButtonProps };\n"],"mappings":";;;;;;;;;;;;;;;;;;AAgCA,SAAS,uBAAuB,QAAgB,OAAuB;AACrE;AACA,KAAI,CAAC,UAAU,SAAS,EACtB,QAAO;AAET,KAAI,SAAS,EACX,QAAO;AAGT,QAAO,OAAO,QAAQ,sDAAsD,GAAG,GAAG,GAAG,GAAG,MAAM;AAE5F,SAAO,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,KADZ,WAAW,EAAE,GAAG,OACS,QAAQ,EAAE,CAAC;GACrD;;;;;;;AAYJ,SAAS,iBAAiB,EACxB,UACA,SACA,UACA,OAMC;CAGD,MAAM,WAAW,sBACT,WAAW,UAAU,IAAI,GAAG,qBAAqB,EACvD,CAAC,QAAQ,CACV;CAED,MAAM,gBAAgB,uBAAuB;EAE3C,MAAM,aAAa,WAAW;AAS9B,SAAO;GACL,OATY,YAAY,SAAS,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,WAAW,CAAC;GAUhE,SALc,YAAY,SAAS,OAAO,CAAC,IAAK,EAAE,EAAE,CAAC,GAAG,EAAE,EAAE,QAAQ;GAMpE,WAAW,CAAC,EAAE,OALF,YAAY,SAAS,OAAO,CAAC,IAAK,EAAE,EAAE,CAAC,IAAK,EAAE,EAAE,QAAQ,EAK/C,CAAC;GACtB,UAAU;GACX;GACD;AAEF,QAAO,oBAAC,SAAS;EAAK,OAAO;EAAgB;GAAyB;;;;;;;;;;;;;;;;;;;;;;;;;AA6DxE,MAAM,SAAS,KAAK,SAASA,SAAO,EAClC,UAAU,WACV,OAAO,MACP,cAAc,WACd,WACA,SACA,SACA,UACA,OACA,UACA,OACA,oBACA,mBACA,iBAAiB,OACjB,WACA,YACA,KACA,GAAG,SACW;CACd,MAAM,gBAAgB,CAAC;CAGvB,MAAM,CAAC,SAAS,cAAc,SAAS,MAAM;AAE7C,cAAa,YAAY;EAAE;EAAM;EAAS;EAAU;EAAS,CAAC;CAG9D,MAAM,YAAY,aAAa,KAAK;CACpC,MAAM,WAAW,aAAa,KAAK;CAGnC,MAAM,gBAAgB,kBAAkB;CAGxC,MAAM,QAAQ,eAAuB,cAAc,KAAK;CAExD,MAAM,gBAAgB,aACnB,UAAmE;AAClE,aAAW,KAAK;AAChB,MAAI,cACF,OAAM,QAAQ,WAAW,cAAc,MAAM,qBAAqB;AAEpE,cAAY,MAAM;IAEpB;EAAC;EAAe;EAAO;EAAU,CAClC;CAED,MAAM,iBAAiB,aACpB,UAAoE;AACnE,aAAW,MAAM;AACjB,MAAI,cACF,OAAM,QAAQ,WAAW,cAAc,MAAM,qBAAqB;AAEpE,eAAa,MAAM;IAErB;EAAC;EAAe;EAAO;EAAW,CACnC;CAGD,MAAM,eACJ,aACC,eAAe,SAAS,GACvB,WAEA,oBAACC;EAAK,eAAe;EAAG,WAAU;EAAS,OAAO,aAAa;EAC5D;GACI;CAGX,MAAM,YAAY,eAAe;EAAE;EAAU,MAAM;EAAS,GAAG,CAAC,UAAU,QAAQ,CAAC;CAInF,MAAM,gBAAgB,sBACd,WAAW,UAAU,IAAI,GAAG;EAAE,UAAU;EAAK,QAAQ,OAAO,OAAO,GAAG,GAAG,IAAK,EAAE;EAAE,CAAC,EACzF,CAAC,QAAQ,CACV;CAGD,MAAM,iBAAiB,uBAAuB;EAI5C,MAAM,gBAFa,cAAc,MAAM,WACb,kBAAkB,QAAQ,gBACA;AAEpD,SAAO;GACL,WAAW,CAAC,EAAE,OAAO,MAAM,OAAO,CAAC;GAUnC,WAAW,uBAAuB,eAAe,cAAc,MAAM;GACtE;GACD;CAGF,MAAM,cAAc,CAAC,CAAC;CACtB,MAAM,gBAAgB,CAAC,CAAC,aAAa,CAAC;CACtC,MAAM,cAAc,CAAC,CAAC,WAAW,CAAC;CAGlC,MAAM,eACJ,oBAAC;EAAiB,SAAS,eAAe;EAAyB;EAAU,KAAK;YAC/E,cACC,oBAAC;GAAkB,MAAM,aAAa,KAAK;GAAU,OAAO,aAAa,KAAK;IAAS,GAEvF,oBAAC;GAAS,MAAM;GAAW,SAAS;GAAa,OAAO,aAAa;IAAQ;GAE9D;CAIrB,MAAM,aACJ,oBAAC;EAAiB,SAAS;EAAuB;EAAU,KAAK;YAC/D,oBAAC;GAAS,MAAM;GAAS,SAAS;GAAa,OAAO,aAAa;IAAQ;GAC1D;CAGrB,MAAM,aAAa,cACX;EACJ,aAAa;EACb;EACA,OAAO,UAAU,aAAa,MAAM,EAAE,SAAS,CAAC,GAAG;EACpD,EACD;EAAC,aAAa;EAAM;EAAgB;EAAO;EAAQ,CACpD;AAGD,QACE,qBAAC;EACM;EACK;EACV,WAAW;EACX,YAAY;EACZ,eAAc;EACd,YAAW;EACX,gBAAe;EACf,UAAS;EACT,oBAAoB,UAAU,GAAG,sBAAsB,GAAG,aAAa;EACpD;EACnB,mBAAkB;EAClB,oBAAoB;EACpB,cAAa;EACb,OAAO;EACP,GAAI;;GAEH;GACA;GACA;;GACiB;EAEtB;AAEF,OAAO,cAAc"}
|