@coze-arch/cli 0.0.10 → 0.0.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/__templates__/expo/AGENTS.md +3 -3
- package/lib/__templates__/expo/README.md +3 -3
- package/lib/__templates__/expo/client/components/Provider.tsx +4 -1
- package/lib/__templates__/expo/client/components/Screen.tsx +4 -1
- package/lib/__templates__/expo/client/eslint.config.mjs +2 -0
- package/lib/__templates__/expo/client/global.css +1 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/accordion.animation.ts +178 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/accordion.constants.ts +62 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/accordion.md +437 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/accordion.styles.ts +95 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/accordion.tsx +340 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/accordion.types.ts +267 -0
- package/lib/__templates__/expo/client/heroui/components/accordion/index.ts +17 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.constants.ts +13 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.hooks.ts +28 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.md +263 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.styles.ts +65 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.tsx +181 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.types.ts +99 -0
- package/lib/__templates__/expo/client/heroui/components/alert/alert.utils.tsx +25 -0
- package/lib/__templates__/expo/client/heroui/components/alert/default-icon.tsx +28 -0
- package/lib/__templates__/expo/client/heroui/components/alert/index.ts +15 -0
- package/lib/__templates__/expo/client/heroui/components/alert/success-icon.tsx +28 -0
- package/lib/__templates__/expo/client/heroui/components/alert/warning-icon.tsx +28 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.animation.ts +123 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.constants.ts +19 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.context.ts +11 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.md +386 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.styles.ts +145 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.tsx +307 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/avatar.types.ts +239 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/index.ts +13 -0
- package/lib/__templates__/expo/client/heroui/components/avatar/person-icon.tsx +23 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.animation.ts +42 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.constants.ts +13 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.md +349 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.styles.ts +66 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.tsx +351 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/bottom-sheet.types.ts +150 -0
- package/lib/__templates__/expo/client/heroui/components/bottom-sheet/index.ts +16 -0
- package/lib/__templates__/expo/client/heroui/components/button/button.constants.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/button/button.md +381 -0
- package/lib/__templates__/expo/client/heroui/components/button/button.styles.ts +89 -0
- package/lib/__templates__/expo/client/heroui/components/button/button.tsx +284 -0
- package/lib/__templates__/expo/client/heroui/components/button/button.types.ts +175 -0
- package/lib/__templates__/expo/client/heroui/components/button/button.utils.ts +34 -0
- package/lib/__templates__/expo/client/heroui/components/button/index.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/card/card.constants.ts +11 -0
- package/lib/__templates__/expo/client/heroui/components/card/card.md +186 -0
- package/lib/__templates__/expo/client/heroui/components/card/card.styles.ts +35 -0
- package/lib/__templates__/expo/client/heroui/components/card/card.tsx +153 -0
- package/lib/__templates__/expo/client/heroui/components/card/card.types.ts +77 -0
- package/lib/__templates__/expo/client/heroui/components/card/index.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.animation.ts +202 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.md +311 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.styles.ts +105 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.tsx +251 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/checkbox.types.ts +216 -0
- package/lib/__templates__/expo/client/heroui/components/checkbox/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/chip/chip.animation.ts +18 -0
- package/lib/__templates__/expo/client/heroui/components/chip/chip.constants.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/chip/chip.md +190 -0
- package/lib/__templates__/expo/client/heroui/components/chip/chip.styles.ts +234 -0
- package/lib/__templates__/expo/client/heroui/components/chip/chip.tsx +125 -0
- package/lib/__templates__/expo/client/heroui/components/chip/chip.types.ts +69 -0
- package/lib/__templates__/expo/client/heroui/components/chip/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/close-button/close-button.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/close-button/close-button.md +109 -0
- package/lib/__templates__/expo/client/heroui/components/close-button/close-button.styles.ts +13 -0
- package/lib/__templates__/expo/client/heroui/components/close-button/close-button.tsx +57 -0
- package/lib/__templates__/expo/client/heroui/components/close-button/close-button.types.ts +30 -0
- package/lib/__templates__/expo/client/heroui/components/close-button/index.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.animation.ts +18 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.constants.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.context.ts +14 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.md +241 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.styles.ts +15 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.tsx +245 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/control-field.types.ts +67 -0
- package/lib/__templates__/expo/client/heroui/components/control-field/index.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/description/description.animation.ts +53 -0
- package/lib/__templates__/expo/client/heroui/components/description/description.constants.ts +30 -0
- package/lib/__templates__/expo/client/heroui/components/description/description.md +129 -0
- package/lib/__templates__/expo/client/heroui/components/description/description.styles.ts +25 -0
- package/lib/__templates__/expo/client/heroui/components/description/description.tsx +81 -0
- package/lib/__templates__/expo/client/heroui/components/description/description.types.ts +77 -0
- package/lib/__templates__/expo/client/heroui/components/description/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/dialog.animation.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/dialog.constants.ts +13 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/dialog.md +288 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/dialog.styles.ts +77 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/dialog.tsx +379 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/dialog.types.ts +199 -0
- package/lib/__templates__/expo/client/heroui/components/dialog/index.ts +12 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/field-error.animation.ts +50 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/field-error.constants.ts +31 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/field-error.md +204 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/field-error.styles.ts +23 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/field-error.tsx +91 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/field-error.types.ts +79 -0
- package/lib/__templates__/expo/client/heroui/components/field-error/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/input/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/input/input.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/input/input.md +193 -0
- package/lib/__templates__/expo/client/heroui/components/input/input.styles.ts +51 -0
- package/lib/__templates__/expo/client/heroui/components/input/input.tsx +96 -0
- package/lib/__templates__/expo/client/heroui/components/input/input.types.ts +44 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/index.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/input-group.animation.ts +14 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/input-group.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/input-group.md +197 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/input-group.styles.ts +31 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/input-group.tsx +239 -0
- package/lib/__templates__/expo/client/heroui/components/input-group/input-group.types.ts +98 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/index.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.animation.ts +199 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.constants.ts +12 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.md +376 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.styles.ts +68 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.tsx +414 -0
- package/lib/__templates__/expo/client/heroui/components/input-otp/input-otp.types.ts +275 -0
- package/lib/__templates__/expo/client/heroui/components/label/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/label/label.animation.ts +18 -0
- package/lib/__templates__/expo/client/heroui/components/label/label.constants.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/label/label.md +187 -0
- package/lib/__templates__/expo/client/heroui/components/label/label.styles.ts +44 -0
- package/lib/__templates__/expo/client/heroui/components/label/label.tsx +172 -0
- package/lib/__templates__/expo/client/heroui/components/label/label.types.ts +86 -0
- package/lib/__templates__/expo/client/heroui/components/list-group/index.ts +17 -0
- package/lib/__templates__/expo/client/heroui/components/list-group/list-group.constants.ts +17 -0
- package/lib/__templates__/expo/client/heroui/components/list-group/list-group.md +387 -0
- package/lib/__templates__/expo/client/heroui/components/list-group/list-group.styles.ts +40 -0
- package/lib/__templates__/expo/client/heroui/components/list-group/list-group.tsx +206 -0
- package/lib/__templates__/expo/client/heroui/components/list-group/list-group.types.ts +132 -0
- package/lib/__templates__/expo/client/heroui/components/menu/index.ts +38 -0
- package/lib/__templates__/expo/client/heroui/components/menu/menu.animation.ts +121 -0
- package/lib/__templates__/expo/client/heroui/components/menu/menu.constants.ts +37 -0
- package/lib/__templates__/expo/client/heroui/components/menu/menu.md +620 -0
- package/lib/__templates__/expo/client/heroui/components/menu/menu.styles.ts +107 -0
- package/lib/__templates__/expo/client/heroui/components/menu/menu.tsx +664 -0
- package/lib/__templates__/expo/client/heroui/components/menu/menu.types.ts +394 -0
- package/lib/__templates__/expo/client/heroui/components/popover/arrow-svg.tsx +180 -0
- package/lib/__templates__/expo/client/heroui/components/popover/index.ts +18 -0
- package/lib/__templates__/expo/client/heroui/components/popover/popover.animation.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/popover/popover.constants.ts +34 -0
- package/lib/__templates__/expo/client/heroui/components/popover/popover.md +508 -0
- package/lib/__templates__/expo/client/heroui/components/popover/popover.styles.ts +98 -0
- package/lib/__templates__/expo/client/heroui/components/popover/popover.tsx +624 -0
- package/lib/__templates__/expo/client/heroui/components/popover/popover.types.ts +290 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.animation.ts +450 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.constants.ts +12 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.md +328 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.styles.ts +84 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.tsx +330 -0
- package/lib/__templates__/expo/client/heroui/components/pressable-feedback/pressable-feedback.types.ts +386 -0
- package/lib/__templates__/expo/client/heroui/components/radio/index.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/radio/radio.animation.ts +92 -0
- package/lib/__templates__/expo/client/heroui/components/radio/radio.constants.ts +11 -0
- package/lib/__templates__/expo/client/heroui/components/radio/radio.md +339 -0
- package/lib/__templates__/expo/client/heroui/components/radio/radio.styles.ts +80 -0
- package/lib/__templates__/expo/client/heroui/components/radio/radio.tsx +217 -0
- package/lib/__templates__/expo/client/heroui/components/radio/radio.types.ts +106 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/index.ts +9 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.animation.ts +20 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.constants.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.context.ts +14 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.md +273 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.styles.ts +15 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.tsx +220 -0
- package/lib/__templates__/expo/client/heroui/components/radio-group/radio-group.types.ts +64 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/index.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.animation.ts +132 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.constants.ts +21 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.md +206 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.styles.ts +52 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.tsx +262 -0
- package/lib/__templates__/expo/client/heroui/components/scroll-shadow/scroll-shadow.types.ts +121 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/index.ts +17 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-field.animation.ts +18 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-field.constants.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-field.md +231 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-field.styles.ts +35 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-field.tsx +253 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-field.types.ts +160 -0
- package/lib/__templates__/expo/client/heroui/components/search-field/search-icon.tsx +37 -0
- package/lib/__templates__/expo/client/heroui/components/select/index.ts +28 -0
- package/lib/__templates__/expo/client/heroui/components/select/select.animation.ts +92 -0
- package/lib/__templates__/expo/client/heroui/components/select/select.constants.ts +53 -0
- package/lib/__templates__/expo/client/heroui/components/select/select.md +796 -0
- package/lib/__templates__/expo/client/heroui/components/select/select.styles.ts +149 -0
- package/lib/__templates__/expo/client/heroui/components/select/select.tsx +828 -0
- package/lib/__templates__/expo/client/heroui/components/select/select.types.ts +438 -0
- package/lib/__templates__/expo/client/heroui/components/separator/index.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/separator/separator.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/separator/separator.md +106 -0
- package/lib/__templates__/expo/client/heroui/components/separator/separator.styles.ts +50 -0
- package/lib/__templates__/expo/client/heroui/components/separator/separator.tsx +62 -0
- package/lib/__templates__/expo/client/heroui/components/separator/separator.types.ts +40 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/index.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/linear-gradient.tsx +45 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.animation.ts +351 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.constants.ts +39 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.md +208 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.styles.ts +49 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.tsx +183 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton/skeleton.types.ts +191 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton-group/index.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.constants.ts +7 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.md +247 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.styles.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.tsx +94 -0
- package/lib/__templates__/expo/client/heroui/components/skeleton-group/skeleton-group.types.ts +28 -0
- package/lib/__templates__/expo/client/heroui/components/slider/index.ts +23 -0
- package/lib/__templates__/expo/client/heroui/components/slider/slider.animation.ts +87 -0
- package/lib/__templates__/expo/client/heroui/components/slider/slider.constants.ts +24 -0
- package/lib/__templates__/expo/client/heroui/components/slider/slider.md +348 -0
- package/lib/__templates__/expo/client/heroui/components/slider/slider.styles.ts +85 -0
- package/lib/__templates__/expo/client/heroui/components/slider/slider.tsx +413 -0
- package/lib/__templates__/expo/client/heroui/components/slider/slider.types.ts +120 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/index.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner-icon.tsx +49 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner.animation.ts +150 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner.constants.ts +36 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner.md +199 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner.styles.ts +44 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner.tsx +198 -0
- package/lib/__templates__/expo/client/heroui/components/spinner/spinner.types.ts +158 -0
- package/lib/__templates__/expo/client/heroui/components/surface/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/surface/surface.animation.ts +18 -0
- package/lib/__templates__/expo/client/heroui/components/surface/surface.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/surface/surface.md +136 -0
- package/lib/__templates__/expo/client/heroui/components/surface/surface.styles.ts +28 -0
- package/lib/__templates__/expo/client/heroui/components/surface/surface.tsx +66 -0
- package/lib/__templates__/expo/client/heroui/components/surface/surface.types.ts +46 -0
- package/lib/__templates__/expo/client/heroui/components/switch/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/switch/switch.animation.ts +243 -0
- package/lib/__templates__/expo/client/heroui/components/switch/switch.constants.ts +26 -0
- package/lib/__templates__/expo/client/heroui/components/switch/switch.md +334 -0
- package/lib/__templates__/expo/client/heroui/components/switch/switch.styles.ts +83 -0
- package/lib/__templates__/expo/client/heroui/components/switch/switch.tsx +280 -0
- package/lib/__templates__/expo/client/heroui/components/switch/switch.types.ts +208 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/index.ts +8 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.animation.ts +246 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.constants.ts +17 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.context.ts +28 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.md +565 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.styles.ts +168 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.tsx +445 -0
- package/lib/__templates__/expo/client/heroui/components/tabs/tabs.types.ts +341 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/index.ts +15 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.animation.ts +17 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.constants.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.md +404 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.styles.ts +74 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.tsx +325 -0
- package/lib/__templates__/expo/client/heroui/components/tag-group/tag-group.types.ts +125 -0
- package/lib/__templates__/expo/client/heroui/components/text-area/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/text-area/text-area.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/text-area/text-area.md +133 -0
- package/lib/__templates__/expo/client/heroui/components/text-area/text-area.styles.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/text-area/text-area.tsx +44 -0
- package/lib/__templates__/expo/client/heroui/components/text-area/text-area.types.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/text-field.animation.ts +20 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/text-field.constants.ts +6 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/text-field.md +256 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/text-field.styles.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/text-field.tsx +82 -0
- package/lib/__templates__/expo/client/heroui/components/text-field/text-field.types.ts +56 -0
- package/lib/__templates__/expo/client/heroui/components/toast/index.ts +4 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.animation.ts +381 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.constants.ts +10 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.hooks.ts +73 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.md +420 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.styles.ts +89 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.tsx +472 -0
- package/lib/__templates__/expo/client/heroui/components/toast/toast.types.ts +320 -0
- package/lib/__templates__/expo/client/heroui/docs.md +47 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/hooks/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/hooks/use-is-on-surface.ts +8 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/hooks/use-theme-color.ts +137 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/utils/cn.ts +12 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/utils/color-kit/index.ts +2395 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/utils/color-kit/types.ts +212 -0
- package/lib/__templates__/expo/client/heroui/helpers/external/utils/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/animated-check-icon.tsx +78 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/bottom-sheet-content-container.tsx +97 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/bottom-sheet-content.tsx +158 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/check-icon.tsx +28 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/chevron-down-icon.tsx +28 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/chevron-right-icon.tsx +29 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/close-icon.tsx +29 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/full-window-overlay.tsx +48 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/hero-text.tsx +71 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/components/index.ts +9 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/animation-settings-context.ts +19 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/bottom-sheet-is-dragging-context.ts +11 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/form-field-context.ts +36 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/contexts/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/index.ts +14 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-augmented-ref.ts +32 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-bottom-sheet-aware-handlers.ts +94 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-bottom-sheet-gesture-handlers.ts +52 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-combined-animation-disabled-state.ts +49 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-controllable-state.ts +124 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-dev-info.ts +38 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-keyboard-status.ts +22 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-bottom-sheet-content-animation.ts +67 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-dialog-content-animation.ts +296 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-overlay-animation.ts +91 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-popover-content-animation.ts +199 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-popup-root-animation.ts +26 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-relative-position.ts +353 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/hooks/use-resolved-style-property.ts +118 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/types/animation.ts +131 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/types/bottom-sheet.ts +99 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/types/index.ts +5 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/types/misc.ts +10 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/types/primitives.ts +146 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/types/theme.ts +18 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/animation.ts +266 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/children-to-string.ts +117 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/combine-styles.ts +17 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/create-context.ts +60 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/ease-gradient/create-interpolation.ts +35 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/ease-gradient/index.ts +97 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/get-element-by-display-name.ts +15 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/get-element-with-default.ts +17 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/has-prop.ts +18 -0
- package/lib/__templates__/expo/client/heroui/helpers/internal/utils/index.ts +8 -0
- package/lib/__templates__/expo/client/heroui/index.tsx +51 -0
- package/lib/__templates__/expo/client/heroui/primitives/README.md +27 -0
- package/lib/__templates__/expo/client/heroui/primitives/accordion/accordion.tsx +270 -0
- package/lib/__templates__/expo/client/heroui/primitives/accordion/accordion.types.ts +117 -0
- package/lib/__templates__/expo/client/heroui/primitives/accordion/accordion.utils.ts +12 -0
- package/lib/__templates__/expo/client/heroui/primitives/accordion/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/activity-indicator/activity-indicator.tsx +50 -0
- package/lib/__templates__/expo/client/heroui/primitives/activity-indicator/activity-indicator.types.ts +24 -0
- package/lib/__templates__/expo/client/heroui/primitives/activity-indicator/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/alert/alert.tsx +124 -0
- package/lib/__templates__/expo/client/heroui/primitives/alert/alert.types.ts +87 -0
- package/lib/__templates__/expo/client/heroui/primitives/alert/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/avatar/avatar.tsx +171 -0
- package/lib/__templates__/expo/client/heroui/primitives/avatar/avatar.types.ts +62 -0
- package/lib/__templates__/expo/client/heroui/primitives/avatar/avatar.utils.ts +102 -0
- package/lib/__templates__/expo/client/heroui/primitives/avatar/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/bottom-sheet/bottom-sheet.tsx +235 -0
- package/lib/__templates__/expo/client/heroui/primitives/bottom-sheet/bottom-sheet.types.ts +127 -0
- package/lib/__templates__/expo/client/heroui/primitives/bottom-sheet/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/checkbox/checkbox.tsx +119 -0
- package/lib/__templates__/expo/client/heroui/primitives/checkbox/checkbox.types.ts +37 -0
- package/lib/__templates__/expo/client/heroui/primitives/checkbox/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/dialog/dialog.tsx +274 -0
- package/lib/__templates__/expo/client/heroui/primitives/dialog/dialog.types.ts +129 -0
- package/lib/__templates__/expo/client/heroui/primitives/dialog/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/input-otp/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/primitives/input-otp/input-otp.tsx +431 -0
- package/lib/__templates__/expo/client/heroui/primitives/input-otp/input-otp.types.ts +169 -0
- package/lib/__templates__/expo/client/heroui/primitives/input-otp/input-otp.utils.ts +31 -0
- package/lib/__templates__/expo/client/heroui/primitives/label/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/label/label.tsx +24 -0
- package/lib/__templates__/expo/client/heroui/primitives/label/label.types.ts +39 -0
- package/lib/__templates__/expo/client/heroui/primitives/menu/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/menu/menu.tsx +765 -0
- package/lib/__templates__/expo/client/heroui/primitives/menu/menu.types.ts +401 -0
- package/lib/__templates__/expo/client/heroui/primitives/popover/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/popover/popover.tsx +382 -0
- package/lib/__templates__/expo/client/heroui/primitives/popover/popover.types.ts +201 -0
- package/lib/__templates__/expo/client/heroui/primitives/portal/index.ts +1 -0
- package/lib/__templates__/expo/client/heroui/primitives/portal/portal.tsx +126 -0
- package/lib/__templates__/expo/client/heroui/primitives/radio/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/radio/radio.tsx +133 -0
- package/lib/__templates__/expo/client/heroui/primitives/radio/radio.types.ts +47 -0
- package/lib/__templates__/expo/client/heroui/primitives/radio-group/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/radio-group/radio-group.tsx +114 -0
- package/lib/__templates__/expo/client/heroui/primitives/radio-group/radio-group.types.ts +65 -0
- package/lib/__templates__/expo/client/heroui/primitives/select/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/select/select.tsx +705 -0
- package/lib/__templates__/expo/client/heroui/primitives/select/select.types.ts +409 -0
- package/lib/__templates__/expo/client/heroui/primitives/select/select.utils.ts +35 -0
- package/lib/__templates__/expo/client/heroui/primitives/slider/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/primitives/slider/slider.tsx +464 -0
- package/lib/__templates__/expo/client/heroui/primitives/slider/slider.types.ts +208 -0
- package/lib/__templates__/expo/client/heroui/primitives/slider/slider.utils.ts +93 -0
- package/lib/__templates__/expo/client/heroui/primitives/slot/index.ts +1 -0
- package/lib/__templates__/expo/client/heroui/primitives/slot/slot.tsx +122 -0
- package/lib/__templates__/expo/client/heroui/primitives/slot/types.ts +19 -0
- package/lib/__templates__/expo/client/heroui/primitives/slot/utils.ts +96 -0
- package/lib/__templates__/expo/client/heroui/primitives/switch/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/switch/switch.tsx +61 -0
- package/lib/__templates__/expo/client/heroui/primitives/switch/switch.types.ts +55 -0
- package/lib/__templates__/expo/client/heroui/primitives/tabs/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/tabs/tabs.tsx +202 -0
- package/lib/__templates__/expo/client/heroui/primitives/tabs/tabs.types.ts +77 -0
- package/lib/__templates__/expo/client/heroui/primitives/tag-group/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/tag-group/tag-group.tsx +324 -0
- package/lib/__templates__/expo/client/heroui/primitives/tag-group/tag-group.types.ts +119 -0
- package/lib/__templates__/expo/client/heroui/primitives/toast/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/primitives/toast/toast.tsx +138 -0
- package/lib/__templates__/expo/client/heroui/primitives/toast/toast.types.ts +86 -0
- package/lib/__templates__/expo/client/heroui/providers/animation-settings/index.ts +8 -0
- package/lib/__templates__/expo/client/heroui/providers/animation-settings/provider.tsx +47 -0
- package/lib/__templates__/expo/client/heroui/providers/animation-settings/types.ts +27 -0
- package/lib/__templates__/expo/client/heroui/providers/hero-ui-native/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/providers/hero-ui-native/provider.tsx +67 -0
- package/lib/__templates__/expo/client/heroui/providers/hero-ui-native/types.ts +114 -0
- package/lib/__templates__/expo/client/heroui/providers/hero-ui-native-raw/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/providers/hero-ui-native-raw/provider.tsx +50 -0
- package/lib/__templates__/expo/client/heroui/providers/hero-ui-native-raw/types.ts +39 -0
- package/lib/__templates__/expo/client/heroui/providers/text-component/index.ts +2 -0
- package/lib/__templates__/expo/client/heroui/providers/text-component/provider.tsx +9 -0
- package/lib/__templates__/expo/client/heroui/providers/text-component/types.ts +52 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/index.ts +3 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/insets-container.tsx +87 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/provider.tsx +431 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/reducer.ts +34 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/toast-config.context.ts +27 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/toast-item-renderer.tsx +45 -0
- package/lib/__templates__/expo/client/heroui/providers/toast/types.ts +373 -0
- package/lib/__templates__/expo/client/heroui/styles/index.css +3 -0
- package/lib/__templates__/expo/client/heroui/styles/theme.css +112 -0
- package/lib/__templates__/expo/client/heroui/styles/utilities.css +8 -0
- package/lib/__templates__/expo/client/heroui/styles/variables.css +146 -0
- package/lib/__templates__/expo/client/package.json +4 -1
- package/lib/__templates__/expo/package.json +1 -1
- package/lib/__templates__/expo/pnpm-lock.yaml +68 -0
- package/lib/__templates__/nextjs/AGENTS.md +6 -4
- package/lib/__templates__/nextjs/eslint.config.mjs +9 -0
- package/lib/__templates__/taro/.coze +2 -0
- package/lib/__templates__/taro/.cozeproj/scripts/pack.sh +1 -2
- package/lib/__templates__/taro/config/index.ts +1 -1
- package/lib/__templates__/taro/package.json +1 -0
- package/lib/__templates__/taro/project.config.json +1 -1
- package/lib/cli.js +246 -252
- package/package.json +3 -2
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
import type { ViewStyle } from 'react-native';
|
|
2
|
+
import {
|
|
3
|
+
useAnimatedStyle,
|
|
4
|
+
useSharedValue,
|
|
5
|
+
withSpring,
|
|
6
|
+
withTiming,
|
|
7
|
+
} from 'react-native-reanimated';
|
|
8
|
+
import { useThemeColor } from '../../helpers/external/hooks';
|
|
9
|
+
import { useAnimationSettings } from '../../helpers/internal/contexts';
|
|
10
|
+
import {
|
|
11
|
+
useCombinedAnimationDisabledState,
|
|
12
|
+
useResolvedStyleProperty,
|
|
13
|
+
} from '../../helpers/internal/hooks';
|
|
14
|
+
import {
|
|
15
|
+
createContext,
|
|
16
|
+
getAnimationState,
|
|
17
|
+
getAnimationValueMergedConfig,
|
|
18
|
+
getAnimationValueProperty,
|
|
19
|
+
getIsAnimationDisabledValue,
|
|
20
|
+
getRootAnimationState,
|
|
21
|
+
} from '../../helpers/internal/utils';
|
|
22
|
+
import { useControlField } from '../control-field/control-field.context';
|
|
23
|
+
import {
|
|
24
|
+
DEFAULT_SPRING_CONFIG,
|
|
25
|
+
DEFAULT_THUMB_LEFT,
|
|
26
|
+
DEFAULT_THUMB_WIDTH,
|
|
27
|
+
DEFAULT_TIMING_CONFIG,
|
|
28
|
+
} from './switch.constants';
|
|
29
|
+
import type {
|
|
30
|
+
SwitchAnimationContextValue,
|
|
31
|
+
SwitchRootAnimation,
|
|
32
|
+
SwitchThumbAnimation,
|
|
33
|
+
} from './switch.types';
|
|
34
|
+
|
|
35
|
+
const [SwitchAnimationProvider, useSwitchAnimation] =
|
|
36
|
+
createContext<SwitchAnimationContextValue>({
|
|
37
|
+
name: 'SwitchAnimationContext',
|
|
38
|
+
});
|
|
39
|
+
|
|
40
|
+
export { SwitchAnimationProvider, useSwitchAnimation };
|
|
41
|
+
|
|
42
|
+
// --------------------------------------------------
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Animation hook for Switch root component
|
|
46
|
+
* Handles scale and background color animations and provides context for child components
|
|
47
|
+
*/
|
|
48
|
+
export function useSwitchRootAnimation(options: {
|
|
49
|
+
animation: SwitchRootAnimation | undefined;
|
|
50
|
+
isSelected: boolean | undefined;
|
|
51
|
+
}) {
|
|
52
|
+
const { animation, isSelected } = options;
|
|
53
|
+
|
|
54
|
+
const [themeColorAccent, themeColorDefault] = useThemeColor([
|
|
55
|
+
'accent',
|
|
56
|
+
'default',
|
|
57
|
+
]);
|
|
58
|
+
|
|
59
|
+
const controlFieldContext = useControlField();
|
|
60
|
+
|
|
61
|
+
const isSwitchPressed = useSharedValue(false);
|
|
62
|
+
const contentContainerWidth = useSharedValue(0);
|
|
63
|
+
|
|
64
|
+
const { animationConfig, isAnimationDisabled } =
|
|
65
|
+
getRootAnimationState(animation);
|
|
66
|
+
|
|
67
|
+
const isAllAnimationsDisabled = useCombinedAnimationDisabledState(animation);
|
|
68
|
+
|
|
69
|
+
const isAnimationDisabledValue = getIsAnimationDisabledValue({
|
|
70
|
+
isAnimationDisabled,
|
|
71
|
+
isAllAnimationsDisabled,
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
// Scale animation
|
|
75
|
+
const scaleValue = getAnimationValueProperty({
|
|
76
|
+
animationValue: animationConfig?.scale,
|
|
77
|
+
property: 'value',
|
|
78
|
+
defaultValue: [1, 0.96] as [number, number],
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
const scaleTimingConfig = getAnimationValueMergedConfig({
|
|
82
|
+
animationValue: animationConfig?.scale,
|
|
83
|
+
property: 'timingConfig',
|
|
84
|
+
defaultValue: { duration: 150 },
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
// Background color animation
|
|
88
|
+
const backgroundColorValue = getAnimationValueProperty({
|
|
89
|
+
animationValue: animationConfig?.backgroundColor,
|
|
90
|
+
property: 'value',
|
|
91
|
+
defaultValue: [themeColorDefault, themeColorAccent] as [string, string],
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const backgroundColorTimingConfig = getAnimationValueMergedConfig({
|
|
95
|
+
animationValue: animationConfig?.backgroundColor,
|
|
96
|
+
property: 'timingConfig',
|
|
97
|
+
defaultValue: DEFAULT_TIMING_CONFIG,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const rContainerStyle = useAnimatedStyle(() => {
|
|
101
|
+
if (isAnimationDisabledValue) {
|
|
102
|
+
return {
|
|
103
|
+
backgroundColor: isSelected
|
|
104
|
+
? backgroundColorValue[1]
|
|
105
|
+
: backgroundColorValue[0],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const pressed =
|
|
110
|
+
isSwitchPressed.get() || (controlFieldContext?.isPressed.get() ?? false);
|
|
111
|
+
|
|
112
|
+
return {
|
|
113
|
+
backgroundColor: withTiming(
|
|
114
|
+
isSelected ? backgroundColorValue[1] : backgroundColorValue[0],
|
|
115
|
+
backgroundColorTimingConfig
|
|
116
|
+
),
|
|
117
|
+
transform: [
|
|
118
|
+
{
|
|
119
|
+
scale: withTiming(
|
|
120
|
+
pressed ? scaleValue[1] : scaleValue[0],
|
|
121
|
+
scaleTimingConfig
|
|
122
|
+
),
|
|
123
|
+
},
|
|
124
|
+
],
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
return {
|
|
129
|
+
rContainerStyle,
|
|
130
|
+
isSwitchPressed,
|
|
131
|
+
contentContainerWidth,
|
|
132
|
+
isAllAnimationsDisabled,
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// --------------------------------------------------
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Animation hook for Switch thumb component
|
|
140
|
+
* Handles thumb position (left) and background color animations
|
|
141
|
+
*/
|
|
142
|
+
export function useSwitchThumbAnimation(options: {
|
|
143
|
+
animation: SwitchThumbAnimation | undefined;
|
|
144
|
+
style: ViewStyle | undefined;
|
|
145
|
+
className: string;
|
|
146
|
+
isSelected: boolean | undefined;
|
|
147
|
+
}) {
|
|
148
|
+
const { animation, style, className, isSelected } = options;
|
|
149
|
+
|
|
150
|
+
const themeColorAccentForeground = useThemeColor('accent-foreground');
|
|
151
|
+
|
|
152
|
+
const [width, left] = useResolvedStyleProperty({
|
|
153
|
+
className,
|
|
154
|
+
style,
|
|
155
|
+
propertyNames: ['width', 'left'] as const,
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
const computedWidth = typeof width === 'number' ? width : DEFAULT_THUMB_WIDTH;
|
|
159
|
+
const computedLeft = typeof left === 'number' ? left : DEFAULT_THUMB_LEFT;
|
|
160
|
+
|
|
161
|
+
// Read from global animation context (always available in compound parts)
|
|
162
|
+
const { isAllAnimationsDisabled } = useAnimationSettings();
|
|
163
|
+
|
|
164
|
+
const { contentContainerWidth } = useSwitchAnimation();
|
|
165
|
+
|
|
166
|
+
const { animationConfig, isAnimationDisabled } = getAnimationState(animation);
|
|
167
|
+
|
|
168
|
+
const isAnimationDisabledValue = getIsAnimationDisabledValue({
|
|
169
|
+
isAnimationDisabled,
|
|
170
|
+
isAllAnimationsDisabled,
|
|
171
|
+
});
|
|
172
|
+
|
|
173
|
+
// Left position animation
|
|
174
|
+
const leftValue = getAnimationValueProperty({
|
|
175
|
+
animationValue: animationConfig?.left,
|
|
176
|
+
property: 'value',
|
|
177
|
+
defaultValue: computedLeft,
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
const leftSpringConfig = getAnimationValueMergedConfig({
|
|
181
|
+
animationValue: animationConfig?.left,
|
|
182
|
+
property: 'springConfig',
|
|
183
|
+
defaultValue: DEFAULT_SPRING_CONFIG,
|
|
184
|
+
});
|
|
185
|
+
|
|
186
|
+
// Background color animation
|
|
187
|
+
const backgroundColorValue = getAnimationValueProperty({
|
|
188
|
+
animationValue: animationConfig?.backgroundColor,
|
|
189
|
+
property: 'value',
|
|
190
|
+
defaultValue: ['white', themeColorAccentForeground] as [string, string],
|
|
191
|
+
});
|
|
192
|
+
|
|
193
|
+
const backgroundColorTimingConfig = getAnimationValueMergedConfig({
|
|
194
|
+
animationValue: animationConfig?.backgroundColor,
|
|
195
|
+
property: 'timingConfig',
|
|
196
|
+
defaultValue: DEFAULT_TIMING_CONFIG,
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
const rContainerStyle = useAnimatedStyle(() => {
|
|
200
|
+
const isMounted = contentContainerWidth.get() > 0;
|
|
201
|
+
|
|
202
|
+
// This is done to prevent the thumb from moving from the default position to the right
|
|
203
|
+
// when the component is mounted with `isSelected` set to `true`,
|
|
204
|
+
// and the user hasn't touched the switch yet.
|
|
205
|
+
if (!isMounted) {
|
|
206
|
+
if (isSelected) {
|
|
207
|
+
return {
|
|
208
|
+
right: leftValue,
|
|
209
|
+
backgroundColor: backgroundColorValue[1],
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
left: leftValue,
|
|
214
|
+
backgroundColor: backgroundColorValue[0],
|
|
215
|
+
};
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
const targetLeft = isSelected
|
|
219
|
+
? contentContainerWidth.get() - computedWidth - leftValue
|
|
220
|
+
: leftValue;
|
|
221
|
+
|
|
222
|
+
if (isAnimationDisabledValue) {
|
|
223
|
+
return {
|
|
224
|
+
left: targetLeft,
|
|
225
|
+
backgroundColor: isSelected
|
|
226
|
+
? backgroundColorValue[1]
|
|
227
|
+
: backgroundColorValue[0],
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
return {
|
|
232
|
+
left: withSpring(targetLeft, leftSpringConfig),
|
|
233
|
+
backgroundColor: withTiming(
|
|
234
|
+
isSelected ? backgroundColorValue[1] : backgroundColorValue[0],
|
|
235
|
+
backgroundColorTimingConfig
|
|
236
|
+
),
|
|
237
|
+
};
|
|
238
|
+
});
|
|
239
|
+
|
|
240
|
+
return {
|
|
241
|
+
rContainerStyle,
|
|
242
|
+
};
|
|
243
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Easing } from 'react-native-reanimated';
|
|
2
|
+
|
|
3
|
+
export const DISPLAY_NAME = {
|
|
4
|
+
SWITCH_ROOT: 'HeroUINative.Switch.Root',
|
|
5
|
+
SWITCH_THUMB: 'HeroUINative.Switch.Thumb',
|
|
6
|
+
SWITCH_START_CONTENT: 'HeroUINative.Switch.StartContent',
|
|
7
|
+
SWITCH_END_CONTENT: 'HeroUINative.Switch.EndContent',
|
|
8
|
+
} as const;
|
|
9
|
+
|
|
10
|
+
export const ANIMATION_DURATION = 175;
|
|
11
|
+
export const ANIMATION_EASING = Easing.bezier(0.25, 0.1, 0.25, 1);
|
|
12
|
+
|
|
13
|
+
export const DEFAULT_TIMING_CONFIG = {
|
|
14
|
+
duration: ANIMATION_DURATION,
|
|
15
|
+
easing: ANIMATION_EASING,
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
export const DEFAULT_SPRING_CONFIG = {
|
|
19
|
+
damping: 120,
|
|
20
|
+
stiffness: 1600,
|
|
21
|
+
mass: 2,
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const DEFAULT_THUMB_WIDTH = 28;
|
|
25
|
+
|
|
26
|
+
export const DEFAULT_THUMB_LEFT = 2;
|
|
@@ -0,0 +1,334 @@
|
|
|
1
|
+
# Switch
|
|
2
|
+
|
|
3
|
+
A toggle control that allows users to switch between on and off states.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Switch } from '@/heroui';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Switch>
|
|
15
|
+
<Switch.Thumb>...</Switch.Thumb>
|
|
16
|
+
<Switch.StartContent>...</Switch.StartContent>
|
|
17
|
+
<Switch.EndContent>...</Switch.EndContent>
|
|
18
|
+
</Switch>
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
- **Switch**: Main container that handles toggle state and user interaction. Renders default thumb if no children provided. Animates scale (on press) and background color based on selection state. Acts as a pressable area for toggling.
|
|
22
|
+
- **Switch.Thumb**: Optional sliding thumb element that moves between positions. Uses spring animation for smooth transitions. Can contain custom content like icons or be customized with different styles and animations.
|
|
23
|
+
- **Switch.StartContent**: Optional content displayed on the left side of the switch. Typically used for icons or text that appear when switch is off. Positioned absolutely within the switch container.
|
|
24
|
+
- **Switch.EndContent**: Optional content displayed on the right side of the switch. Typically used for icons or text that appear when switch is on. Positioned absolutely within the switch container.
|
|
25
|
+
|
|
26
|
+
## Usage
|
|
27
|
+
|
|
28
|
+
### Basic Usage
|
|
29
|
+
|
|
30
|
+
The Switch component renders with default thumb if no children provided.
|
|
31
|
+
|
|
32
|
+
```tsx
|
|
33
|
+
<Switch isSelected={isSelected} onSelectedChange={setIsSelected} />
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
### With Custom Thumb
|
|
37
|
+
|
|
38
|
+
Replace the default thumb with custom content using the Thumb component.
|
|
39
|
+
|
|
40
|
+
```tsx
|
|
41
|
+
<Switch isSelected={isSelected} onSelectedChange={setIsSelected}>
|
|
42
|
+
<Switch.Thumb>...</Switch.Thumb>
|
|
43
|
+
</Switch>
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### With Start and End Content
|
|
47
|
+
|
|
48
|
+
Add icons or text that appear on each side of the switch.
|
|
49
|
+
|
|
50
|
+
```tsx
|
|
51
|
+
<Switch isSelected={isSelected} onSelectedChange={setIsSelected}>
|
|
52
|
+
<Switch.Thumb />
|
|
53
|
+
<Switch.StartContent>...</Switch.StartContent>
|
|
54
|
+
<Switch.EndContent>...</Switch.EndContent>
|
|
55
|
+
</Switch>
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### With Render Function
|
|
59
|
+
|
|
60
|
+
Use render functions for dynamic content based on switch state.
|
|
61
|
+
|
|
62
|
+
```tsx
|
|
63
|
+
<Switch isSelected={isSelected} onSelectedChange={setIsSelected}>
|
|
64
|
+
{({ isSelected, isDisabled }) => (
|
|
65
|
+
<>
|
|
66
|
+
<Switch.Thumb>
|
|
67
|
+
{({ isSelected }) => (isSelected ? <CheckIcon /> : <XIcon />)}
|
|
68
|
+
</Switch.Thumb>
|
|
69
|
+
</>
|
|
70
|
+
)}
|
|
71
|
+
</Switch>
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### With Custom Animations
|
|
75
|
+
|
|
76
|
+
Customize animations for the switch root and thumb components.
|
|
77
|
+
|
|
78
|
+
```tsx
|
|
79
|
+
<Switch
|
|
80
|
+
animation={{
|
|
81
|
+
scale: {
|
|
82
|
+
value: [1, 0.9],
|
|
83
|
+
timingConfig: { duration: 200 },
|
|
84
|
+
},
|
|
85
|
+
backgroundColor: {
|
|
86
|
+
value: ['#172554', '#eab308'],
|
|
87
|
+
},
|
|
88
|
+
}}
|
|
89
|
+
>
|
|
90
|
+
<Switch.Thumb
|
|
91
|
+
animation={{
|
|
92
|
+
left: {
|
|
93
|
+
value: 4,
|
|
94
|
+
springConfig: {
|
|
95
|
+
damping: 30,
|
|
96
|
+
stiffness: 300,
|
|
97
|
+
mass: 1,
|
|
98
|
+
},
|
|
99
|
+
},
|
|
100
|
+
backgroundColor: {
|
|
101
|
+
value: ['#dbeafe', '#854d0e'],
|
|
102
|
+
},
|
|
103
|
+
}}
|
|
104
|
+
/>
|
|
105
|
+
</Switch>
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Disable Animations
|
|
109
|
+
|
|
110
|
+
Disable animations entirely or only for specific components.
|
|
111
|
+
|
|
112
|
+
```tsx
|
|
113
|
+
{
|
|
114
|
+
/* Disable all animations including children */
|
|
115
|
+
}
|
|
116
|
+
<Switch animation="disable-all">
|
|
117
|
+
<Switch.Thumb />
|
|
118
|
+
</Switch>;
|
|
119
|
+
|
|
120
|
+
{
|
|
121
|
+
/* Disable only root animations, thumb can still animate */
|
|
122
|
+
}
|
|
123
|
+
<Switch>
|
|
124
|
+
<Switch.Thumb animation={false} />
|
|
125
|
+
</Switch>;
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Example
|
|
129
|
+
|
|
130
|
+
```tsx
|
|
131
|
+
import { Switch } from '@/heroui';
|
|
132
|
+
import { Ionicons } from '@expo/vector-icons';
|
|
133
|
+
import React from 'react';
|
|
134
|
+
import { View } from 'react-native';
|
|
135
|
+
import Animated, { ZoomIn } from 'react-native-reanimated';
|
|
136
|
+
|
|
137
|
+
export default function SwitchExample() {
|
|
138
|
+
const [darkMode, setDarkMode] = React.useState(false);
|
|
139
|
+
|
|
140
|
+
return (
|
|
141
|
+
<View className="flex-row gap-4">
|
|
142
|
+
<Switch
|
|
143
|
+
isSelected={darkMode}
|
|
144
|
+
onSelectedChange={setDarkMode}
|
|
145
|
+
className="w-[56px] h-[32px]"
|
|
146
|
+
animation={{
|
|
147
|
+
backgroundColor: {
|
|
148
|
+
value: ['#172554', '#eab308'],
|
|
149
|
+
},
|
|
150
|
+
}}
|
|
151
|
+
>
|
|
152
|
+
<Switch.Thumb
|
|
153
|
+
className="size-[22px]"
|
|
154
|
+
animation={{
|
|
155
|
+
left: {
|
|
156
|
+
value: 4,
|
|
157
|
+
springConfig: {
|
|
158
|
+
damping: 30,
|
|
159
|
+
stiffness: 300,
|
|
160
|
+
mass: 1,
|
|
161
|
+
},
|
|
162
|
+
},
|
|
163
|
+
}}
|
|
164
|
+
/>
|
|
165
|
+
<Switch.StartContent className="left-2">
|
|
166
|
+
{darkMode && (
|
|
167
|
+
<Animated.View key="sun" entering={ZoomIn.springify()}>
|
|
168
|
+
<Ionicons name="sunny" size={16} color="#854d0e" />
|
|
169
|
+
</Animated.View>
|
|
170
|
+
)}
|
|
171
|
+
</Switch.StartContent>
|
|
172
|
+
<Switch.EndContent className="right-2">
|
|
173
|
+
{!darkMode && (
|
|
174
|
+
<Animated.View key="moon" entering={ZoomIn.springify()}>
|
|
175
|
+
<Ionicons name="moon" size={16} color="#dbeafe" />
|
|
176
|
+
</Animated.View>
|
|
177
|
+
)}
|
|
178
|
+
</Switch.EndContent>
|
|
179
|
+
</Switch>
|
|
180
|
+
</View>
|
|
181
|
+
);
|
|
182
|
+
}
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/switch.tsx>).
|
|
186
|
+
|
|
187
|
+
## API Reference
|
|
188
|
+
|
|
189
|
+
### Switch
|
|
190
|
+
|
|
191
|
+
| prop | type | default | description |
|
|
192
|
+
| --------------------------- | -------------------------------------------------------------------- | ----------- | ------------------------------------------------------------ |
|
|
193
|
+
| `children` | `React.ReactNode \| ((props: SwitchRenderProps) => React.ReactNode)` | `undefined` | Content to render inside the switch, or a render function |
|
|
194
|
+
| `isSelected` | `boolean` | `undefined` | Whether the switch is currently selected |
|
|
195
|
+
| `isDisabled` | `boolean` | `false` | Whether the switch is disabled and cannot be interacted with |
|
|
196
|
+
| `className` | `string` | `undefined` | Custom class name for the switch |
|
|
197
|
+
| `animation` | `SwitchRootAnimation` | - | Animation configuration |
|
|
198
|
+
| `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
|
|
199
|
+
| `onSelectedChange` | `(isSelected: boolean) => void` | - | Callback fired when the switch selection state changes |
|
|
200
|
+
| `...AnimatedPressableProps` | `AnimatedProps<PressableProps>` | - | All React Native Reanimated Pressable props are supported |
|
|
201
|
+
|
|
202
|
+
#### SwitchRenderProps
|
|
203
|
+
|
|
204
|
+
| prop | type | description |
|
|
205
|
+
| ------------ | --------- | ------------------------------ |
|
|
206
|
+
| `isSelected` | `boolean` | Whether the switch is selected |
|
|
207
|
+
| `isDisabled` | `boolean` | Whether the switch is disabled |
|
|
208
|
+
|
|
209
|
+
#### SwitchRootAnimation
|
|
210
|
+
|
|
211
|
+
Animation configuration for Switch component. Can be:
|
|
212
|
+
|
|
213
|
+
- `false` or `"disabled"`: Disable only root animations
|
|
214
|
+
- `"disable-all"`: Disable all animations including children
|
|
215
|
+
- `true` or `undefined`: Use default animations
|
|
216
|
+
- `object`: Custom animation configuration
|
|
217
|
+
|
|
218
|
+
| prop | type | default | description |
|
|
219
|
+
| ------------------------------ | ---------------------------------------- | -------------------------------------------------------------- | ----------------------------------------------- |
|
|
220
|
+
| `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
|
|
221
|
+
| `scale.value` | `[number, number]` | `[1, 0.96]` | Scale values [unpressed, pressed] |
|
|
222
|
+
| `scale.timingConfig` | `WithTimingConfig` | `{ duration: 150 }` | Animation timing configuration |
|
|
223
|
+
| `backgroundColor.value` | `[string, string]` | Uses theme colors | Background color values [unselected, selected] |
|
|
224
|
+
| `backgroundColor.timingConfig` | `WithTimingConfig` | `{ duration: 175, easing: Easing.bezier(0.25, 0.1, 0.25, 1) }` | Animation timing configuration |
|
|
225
|
+
|
|
226
|
+
### Switch.Thumb
|
|
227
|
+
|
|
228
|
+
| prop | type | default | description |
|
|
229
|
+
| ----------------------- | -------------------------------------------------------------------- | ----------- | ------------------------------------------------------------ |
|
|
230
|
+
| `children` | `React.ReactNode \| ((props: SwitchRenderProps) => React.ReactNode)` | `undefined` | Content to render inside the thumb, or a render function |
|
|
231
|
+
| `className` | `string` | `undefined` | Custom class name for the thumb element |
|
|
232
|
+
| `animation` | `SwitchThumbAnimation` | - | Animation configuration |
|
|
233
|
+
| `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
|
|
234
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
235
|
+
|
|
236
|
+
#### SwitchThumbAnimation
|
|
237
|
+
|
|
238
|
+
Animation configuration for Switch.Thumb component. Can be:
|
|
239
|
+
|
|
240
|
+
- `false` or `"disabled"`: Disable all animations
|
|
241
|
+
- `true` or `undefined`: Use default animations
|
|
242
|
+
- `object`: Custom animation configuration
|
|
243
|
+
|
|
244
|
+
| prop | type | default | description |
|
|
245
|
+
| ------------------------------ | ----------------------- | -------------------------------------------------------------- | ----------------------------------------------------------------------- |
|
|
246
|
+
| `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
|
|
247
|
+
| `left.value` | `number` | `2` | Offset value from the edges (left when unselected, right when selected) |
|
|
248
|
+
| `left.springConfig` | `WithSpringConfig` | `{ damping: 120, stiffness: 1600, mass: 2 }` | Spring animation configuration for thumb position |
|
|
249
|
+
| `backgroundColor.value` | `[string, string]` | `['white', theme accent-foreground color]` | Background color values [unselected, selected] |
|
|
250
|
+
| `backgroundColor.timingConfig` | `WithTimingConfig` | `{ duration: 175, easing: Easing.bezier(0.25, 0.1, 0.25, 1) }` | Animation timing configuration |
|
|
251
|
+
|
|
252
|
+
### Switch.StartContent
|
|
253
|
+
|
|
254
|
+
| prop | type | default | description |
|
|
255
|
+
| -------------- | ----------------- | ----------- | -------------------------------------------------- |
|
|
256
|
+
| `children` | `React.ReactNode` | `undefined` | Content to render inside the switch content |
|
|
257
|
+
| `className` | `string` | `undefined` | Custom class name for the content element |
|
|
258
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
259
|
+
|
|
260
|
+
### Switch.EndContent
|
|
261
|
+
|
|
262
|
+
| prop | type | default | description |
|
|
263
|
+
| -------------- | ----------------- | ----------- | -------------------------------------------------- |
|
|
264
|
+
| `children` | `React.ReactNode` | `undefined` | Content to render inside the switch content |
|
|
265
|
+
| `className` | `string` | `undefined` | Custom class name for the content element |
|
|
266
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
267
|
+
|
|
268
|
+
## Hooks
|
|
269
|
+
|
|
270
|
+
### useSwitch
|
|
271
|
+
|
|
272
|
+
A hook that provides access to the Switch context. This is useful when building custom switch components or when you need to access switch state in child components.
|
|
273
|
+
|
|
274
|
+
**Returns:**
|
|
275
|
+
|
|
276
|
+
| Property | Type | Description |
|
|
277
|
+
| ------------ | --------- | ------------------------------ |
|
|
278
|
+
| `isSelected` | `boolean` | Whether the switch is selected |
|
|
279
|
+
| `isDisabled` | `boolean` | Whether the switch is disabled |
|
|
280
|
+
|
|
281
|
+
**Example:**
|
|
282
|
+
|
|
283
|
+
```tsx
|
|
284
|
+
import { useSwitch } from '@/heroui';
|
|
285
|
+
|
|
286
|
+
function CustomSwitchContent() {
|
|
287
|
+
const { isSelected, isDisabled } = useSwitch();
|
|
288
|
+
|
|
289
|
+
return (
|
|
290
|
+
<View>
|
|
291
|
+
<Text>Status: {isSelected ? 'On' : 'Off'}</Text>
|
|
292
|
+
{isDisabled && <Text>Disabled</Text>}
|
|
293
|
+
</View>
|
|
294
|
+
);
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
// Usage
|
|
298
|
+
<Switch>
|
|
299
|
+
<CustomSwitchContent />
|
|
300
|
+
<Switch.Thumb />
|
|
301
|
+
</Switch>;
|
|
302
|
+
```
|
|
303
|
+
|
|
304
|
+
## Special Notes
|
|
305
|
+
|
|
306
|
+
### Border Styling
|
|
307
|
+
|
|
308
|
+
If you need to apply a border to the switch root, use the `outline` style properties instead of `border`. This ensures the border doesn't affect the internal layout calculations for the thumb position:
|
|
309
|
+
|
|
310
|
+
```tsx
|
|
311
|
+
<Switch className="outline outline-accent">
|
|
312
|
+
<Switch.Thumb />
|
|
313
|
+
</Switch>
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
Using `outline` keeps the border visual without impacting the switch's internal width calculations, ensuring the thumb animates correctly.
|
|
317
|
+
|
|
318
|
+
### Integration with ControlField
|
|
319
|
+
|
|
320
|
+
The Switch component integrates seamlessly with ControlField for press state sharing:
|
|
321
|
+
|
|
322
|
+
```tsx
|
|
323
|
+
import { Description, ControlField, Label } from '@/heroui';
|
|
324
|
+
|
|
325
|
+
<ControlField isSelected={isSelected} onSelectedChange={setIsSelected}>
|
|
326
|
+
<View className="flex-1">
|
|
327
|
+
<Label>Enable notifications</Label>
|
|
328
|
+
<Description>Receive push notifications</Description>
|
|
329
|
+
</View>
|
|
330
|
+
<ControlField.Indicator />
|
|
331
|
+
</ControlField>;
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
When wrapped in ControlField, the Switch will automatically respond to press events on the entire ControlField container, creating a larger touch target and better user experience.
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { StyleSheet } from 'react-native';
|
|
2
|
+
import { tv } from 'tailwind-variants';
|
|
3
|
+
import { combineStyles } from '../../helpers/internal/utils';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Root style definition
|
|
7
|
+
*
|
|
8
|
+
* @note ANIMATED PROPERTIES (cannot be set via className):
|
|
9
|
+
* The following properties are animated and cannot be overridden using Tailwind classes:
|
|
10
|
+
* - `backgroundColor` - Animated for selection transitions (unselected: default, selected: accent)
|
|
11
|
+
* - `transform` (specifically `scale`) - Animated for press feedback transitions (unpressed: 1, pressed: 0.96)
|
|
12
|
+
*
|
|
13
|
+
* To customize these properties, use the `animation` prop on `Switch`:
|
|
14
|
+
* ```tsx
|
|
15
|
+
* <Switch
|
|
16
|
+
* animation={{
|
|
17
|
+
* backgroundColor: { value: ['#e5e5e5', '#007AFF'], timingConfig: { duration: 175 } },
|
|
18
|
+
* scale: { value: [1, 0.96], timingConfig: { duration: 150 } }
|
|
19
|
+
* }}
|
|
20
|
+
* />
|
|
21
|
+
* ```
|
|
22
|
+
*
|
|
23
|
+
* To completely disable animated styles and apply your own via className or style prop,
|
|
24
|
+
* set `isAnimatedStyleActive={false}` on `Switch`.
|
|
25
|
+
*/
|
|
26
|
+
const root = tv({
|
|
27
|
+
base: 'w-[48px] h-[24px] rounded-full justify-center overflow-hidden',
|
|
28
|
+
variants: {
|
|
29
|
+
isDisabled: {
|
|
30
|
+
true: 'opacity-disabled pointer-events-none',
|
|
31
|
+
false: '',
|
|
32
|
+
},
|
|
33
|
+
},
|
|
34
|
+
defaultVariants: {
|
|
35
|
+
isDisabled: false,
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Thumb style definition
|
|
41
|
+
*
|
|
42
|
+
* @note ANIMATED PROPERTIES (cannot be set via className):
|
|
43
|
+
* The following properties are animated and cannot be overridden using Tailwind classes:
|
|
44
|
+
* - `left` - Animated for thumb position transitions (unselected: left edge offset, selected: right edge offset)
|
|
45
|
+
* - `backgroundColor` - Animated for selection transitions (unselected: white, selected: accent-foreground)
|
|
46
|
+
*
|
|
47
|
+
* To customize these properties, use the `animation` prop on `Switch.Thumb`:
|
|
48
|
+
* ```tsx
|
|
49
|
+
* <Switch.Thumb
|
|
50
|
+
* animation={{
|
|
51
|
+
* left: { value: 2, springConfig: { damping: 120, stiffness: 1600, mass: 2 } },
|
|
52
|
+
* backgroundColor: { value: ['white', '#ffffff'], timingConfig: { duration: 175 } }
|
|
53
|
+
* }}
|
|
54
|
+
* />
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* To completely disable animated styles and apply your own via className or style prop,
|
|
58
|
+
* set `isAnimatedStyleActive={false}` on `Switch.Thumb`.
|
|
59
|
+
*/
|
|
60
|
+
const thumb = tv({
|
|
61
|
+
base: 'absolute left-[2px] items-center justify-center w-[28px] h-[20px] rounded-full shadow-field overflow-hidden',
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
const startContent = tv({
|
|
65
|
+
base: 'absolute left-[2px]',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
const endContent = tv({
|
|
69
|
+
base: 'absolute right-[2px]',
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
export const switchClassNames = combineStyles({
|
|
73
|
+
root,
|
|
74
|
+
thumb,
|
|
75
|
+
startContent,
|
|
76
|
+
endContent,
|
|
77
|
+
});
|
|
78
|
+
|
|
79
|
+
export const switchStyleSheet = StyleSheet.create({
|
|
80
|
+
borderCurve: {
|
|
81
|
+
borderCurve: 'continuous',
|
|
82
|
+
},
|
|
83
|
+
});
|