@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,796 @@
|
|
|
1
|
+
# Select
|
|
2
|
+
|
|
3
|
+
Displays a list of options for the user to pick from—triggered by a button.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Select } from '@/heroui';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Select>
|
|
15
|
+
<Select.Trigger>
|
|
16
|
+
<Select.Value />
|
|
17
|
+
<Select.TriggerIndicator />
|
|
18
|
+
</Select.Trigger>
|
|
19
|
+
<Select.Portal>
|
|
20
|
+
<Select.Overlay />
|
|
21
|
+
<Select.Content>
|
|
22
|
+
<Select.Close />
|
|
23
|
+
<Select.ListLabel>...</Select.ListLabel>
|
|
24
|
+
<Select.Item>
|
|
25
|
+
<Select.ItemLabel />
|
|
26
|
+
<Select.ItemDescription>...</Select.ItemDescription>
|
|
27
|
+
<Select.ItemIndicator />
|
|
28
|
+
</Select.Item>
|
|
29
|
+
</Select.Content>
|
|
30
|
+
</Select.Portal>
|
|
31
|
+
</Select>
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
- **Select**: Main container that manages open/close state, value selection and provides context to child components.
|
|
35
|
+
- **Select.Trigger**: Clickable element that toggles the select visibility. Wraps any child element with press handlers. Supports `variant` prop (`'default'` or `'unstyled'`).
|
|
36
|
+
- **Select.Value**: Displays the selected value or placeholder text. Automatically updates when selection changes. Styling changes based on selection state.
|
|
37
|
+
- **Select.TriggerIndicator**: Optional visual indicator showing open/close state. Renders an animated chevron icon by default that rotates when the select opens/closes.
|
|
38
|
+
- **Select.Portal**: Renders select content in a portal layer above other content. Ensures proper stacking and positioning.
|
|
39
|
+
- **Select.Overlay**: Optional background overlay. Can be transparent or semi-transparent to capture outside clicks.
|
|
40
|
+
- **Select.Content**: Container for select content with three presentation modes: popover (floating with positioning), bottom sheet modal, or dialog modal.
|
|
41
|
+
- **Select.Close**: Close button for the select. Can accept custom children or uses default close icon.
|
|
42
|
+
- **Select.ListLabel**: Label for the list of items with pre-styled typography.
|
|
43
|
+
- **Select.Item**: Selectable option item. Handles selection state and press events.
|
|
44
|
+
- **Select.ItemLabel**: Displays the label text for an item.
|
|
45
|
+
- **Select.ItemDescription**: Optional description text for items with muted styling.
|
|
46
|
+
- **Select.ItemIndicator**: Optional indicator shown for selected items. Renders a check icon by default.
|
|
47
|
+
|
|
48
|
+
## Usage
|
|
49
|
+
|
|
50
|
+
### Basic Usage
|
|
51
|
+
|
|
52
|
+
The Select component uses compound parts to create dropdown selection interfaces.
|
|
53
|
+
|
|
54
|
+
```tsx
|
|
55
|
+
<Select>
|
|
56
|
+
<Select.Trigger>...</Select.Trigger>
|
|
57
|
+
<Select.Portal>
|
|
58
|
+
<Select.Overlay />
|
|
59
|
+
<Select.Content presentation="popover">
|
|
60
|
+
<Select.Item value="1" label="Option 1" />
|
|
61
|
+
<Select.Item value="2" label="Option 2" />
|
|
62
|
+
</Select.Content>
|
|
63
|
+
</Select.Portal>
|
|
64
|
+
</Select>
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
### With Value Display
|
|
68
|
+
|
|
69
|
+
Display the selected value in the trigger using the Value component.
|
|
70
|
+
|
|
71
|
+
```tsx
|
|
72
|
+
<Select>
|
|
73
|
+
<Select.Trigger>
|
|
74
|
+
<Select.Value placeholder="Choose an option" />
|
|
75
|
+
<Select.TriggerIndicator />
|
|
76
|
+
</Select.Trigger>
|
|
77
|
+
<Select.Portal>
|
|
78
|
+
<Select.Overlay />
|
|
79
|
+
<Select.Content presentation="popover">
|
|
80
|
+
<Select.Item value="apple" label="Apple" />
|
|
81
|
+
<Select.Item value="orange" label="Orange" />
|
|
82
|
+
<Select.Item value="banana" label="Banana" />
|
|
83
|
+
</Select.Content>
|
|
84
|
+
</Select.Portal>
|
|
85
|
+
</Select>
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Popover Presentation
|
|
89
|
+
|
|
90
|
+
Use popover presentation for floating content with automatic positioning.
|
|
91
|
+
|
|
92
|
+
```tsx
|
|
93
|
+
<Select>
|
|
94
|
+
<Select.Trigger>...</Select.Trigger>
|
|
95
|
+
<Select.Portal>
|
|
96
|
+
<Select.Overlay />
|
|
97
|
+
<Select.Content presentation="popover" placement="bottom" align="center">
|
|
98
|
+
<Select.Item value="1" label="Item 1" />
|
|
99
|
+
<Select.Item value="2" label="Item 2" />
|
|
100
|
+
</Select.Content>
|
|
101
|
+
</Select.Portal>
|
|
102
|
+
</Select>
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Width Control
|
|
106
|
+
|
|
107
|
+
Control the width of the select content using the `width` prop. This only works with popover presentation.
|
|
108
|
+
|
|
109
|
+
```tsx
|
|
110
|
+
{
|
|
111
|
+
/* Fixed width in pixels */
|
|
112
|
+
}
|
|
113
|
+
<Select>
|
|
114
|
+
<Select.Trigger>...</Select.Trigger>
|
|
115
|
+
<Select.Portal>
|
|
116
|
+
<Select.Overlay />
|
|
117
|
+
<Select.Content presentation="popover" width={280}>
|
|
118
|
+
<Select.Item value="1" label="Item 1" />
|
|
119
|
+
</Select.Content>
|
|
120
|
+
</Select.Portal>
|
|
121
|
+
</Select>;
|
|
122
|
+
|
|
123
|
+
{
|
|
124
|
+
/* Match trigger width */
|
|
125
|
+
}
|
|
126
|
+
<Select>
|
|
127
|
+
<Select.Trigger>...</Select.Trigger>
|
|
128
|
+
<Select.Portal>
|
|
129
|
+
<Select.Overlay />
|
|
130
|
+
<Select.Content presentation="popover" width="trigger">
|
|
131
|
+
<Select.Item value="1" label="Item 1" />
|
|
132
|
+
</Select.Content>
|
|
133
|
+
</Select.Portal>
|
|
134
|
+
</Select>;
|
|
135
|
+
|
|
136
|
+
{
|
|
137
|
+
/* Full width (100%) */
|
|
138
|
+
}
|
|
139
|
+
<Select>
|
|
140
|
+
<Select.Trigger>...</Select.Trigger>
|
|
141
|
+
<Select.Portal>
|
|
142
|
+
<Select.Overlay />
|
|
143
|
+
<Select.Content presentation="popover" width="full">
|
|
144
|
+
<Select.Item value="1" label="Item 1" />
|
|
145
|
+
</Select.Content>
|
|
146
|
+
</Select.Portal>
|
|
147
|
+
</Select>;
|
|
148
|
+
|
|
149
|
+
{
|
|
150
|
+
/* Auto-size to content (default) */
|
|
151
|
+
}
|
|
152
|
+
<Select>
|
|
153
|
+
<Select.Trigger>...</Select.Trigger>
|
|
154
|
+
<Select.Portal>
|
|
155
|
+
<Select.Overlay />
|
|
156
|
+
<Select.Content presentation="popover" width="content-fit">
|
|
157
|
+
<Select.Item value="1" label="Item 1" />
|
|
158
|
+
</Select.Content>
|
|
159
|
+
</Select.Portal>
|
|
160
|
+
</Select>;
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### Bottom Sheet Presentation
|
|
164
|
+
|
|
165
|
+
Use bottom sheet for mobile-optimized selection experience.
|
|
166
|
+
|
|
167
|
+
```tsx
|
|
168
|
+
<Select presentation="bottom-sheet">
|
|
169
|
+
<Select.Trigger>...</Select.Trigger>
|
|
170
|
+
<Select.Portal>
|
|
171
|
+
<Select.Overlay />
|
|
172
|
+
<Select.Content presentation="bottom-sheet" snapPoints={['35%']}>
|
|
173
|
+
<Select.Item value="1" label="Item 1" />
|
|
174
|
+
<Select.Item value="2" label="Item 2" />
|
|
175
|
+
</Select.Content>
|
|
176
|
+
</Select.Portal>
|
|
177
|
+
</Select>
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Dialog Presentation
|
|
181
|
+
|
|
182
|
+
Use dialog presentation for centered modal-style selection.
|
|
183
|
+
|
|
184
|
+
```tsx
|
|
185
|
+
<Select presentation="dialog">
|
|
186
|
+
<Select.Trigger>...</Select.Trigger>
|
|
187
|
+
<Select.Portal>
|
|
188
|
+
<Select.Overlay />
|
|
189
|
+
<Select.Content presentation="dialog">
|
|
190
|
+
<Select.Close />
|
|
191
|
+
<Select.ListLabel>Choose an option</Select.ListLabel>
|
|
192
|
+
<Select.Item value="1" label="Item 1" />
|
|
193
|
+
<Select.Item value="2" label="Item 2" />
|
|
194
|
+
</Select.Content>
|
|
195
|
+
</Select.Portal>
|
|
196
|
+
</Select>
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
### Custom Item Content
|
|
200
|
+
|
|
201
|
+
Customize item appearance with custom content and indicators.
|
|
202
|
+
|
|
203
|
+
```tsx
|
|
204
|
+
<Select>
|
|
205
|
+
<Select.Trigger>...</Select.Trigger>
|
|
206
|
+
<Select.Portal>
|
|
207
|
+
<Select.Overlay />
|
|
208
|
+
<Select.Content presentation="popover">
|
|
209
|
+
<Select.Item value="us" label="United States">
|
|
210
|
+
<View className="flex-row items-center gap-3 flex-1">
|
|
211
|
+
<Text>🇺🇸</Text>
|
|
212
|
+
<Select.ItemLabel />
|
|
213
|
+
</View>
|
|
214
|
+
<Select.ItemIndicator />
|
|
215
|
+
</Select.Item>
|
|
216
|
+
<Select.Item value="uk" label="United Kingdom">
|
|
217
|
+
<View className="flex-row items-center gap-3 flex-1">
|
|
218
|
+
<Text>🇬🇧</Text>
|
|
219
|
+
<Select.ItemLabel />
|
|
220
|
+
</View>
|
|
221
|
+
<Select.ItemIndicator />
|
|
222
|
+
</Select.Item>
|
|
223
|
+
</Select.Content>
|
|
224
|
+
</Select.Portal>
|
|
225
|
+
</Select>
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
### With Render Function
|
|
229
|
+
|
|
230
|
+
Use a render function on `Select.Item` to access state and customize content based on selection.
|
|
231
|
+
|
|
232
|
+
```tsx
|
|
233
|
+
<Select>
|
|
234
|
+
<Select.Trigger>...</Select.Trigger>
|
|
235
|
+
<Select.Portal>
|
|
236
|
+
<Select.Overlay />
|
|
237
|
+
<Select.Content presentation="popover">
|
|
238
|
+
<Select.Item value="us" label="United States">
|
|
239
|
+
{({ isSelected, value, isDisabled }) => (
|
|
240
|
+
<>
|
|
241
|
+
<View className="flex-row items-center gap-3 flex-1">
|
|
242
|
+
<Text>🇺🇸</Text>
|
|
243
|
+
<Select.ItemLabel
|
|
244
|
+
className={
|
|
245
|
+
isSelected ? 'text-accent font-medium' : 'text-foreground'
|
|
246
|
+
}
|
|
247
|
+
/>
|
|
248
|
+
</View>
|
|
249
|
+
<Select.ItemIndicator />
|
|
250
|
+
</>
|
|
251
|
+
)}
|
|
252
|
+
</Select.Item>
|
|
253
|
+
<Select.Item value="uk" label="United Kingdom">
|
|
254
|
+
{({ isSelected }) => (
|
|
255
|
+
<>
|
|
256
|
+
<View className="flex-row items-center gap-3 flex-1">
|
|
257
|
+
<Text>🇬🇧</Text>
|
|
258
|
+
<Select.ItemLabel
|
|
259
|
+
className={
|
|
260
|
+
isSelected ? 'text-accent font-medium' : 'text-foreground'
|
|
261
|
+
}
|
|
262
|
+
/>
|
|
263
|
+
</View>
|
|
264
|
+
<Select.ItemIndicator />
|
|
265
|
+
</>
|
|
266
|
+
)}
|
|
267
|
+
</Select.Item>
|
|
268
|
+
</Select.Content>
|
|
269
|
+
</Select.Portal>
|
|
270
|
+
</Select>
|
|
271
|
+
```
|
|
272
|
+
|
|
273
|
+
### With Item Description
|
|
274
|
+
|
|
275
|
+
Add descriptions to items for additional context.
|
|
276
|
+
|
|
277
|
+
```tsx
|
|
278
|
+
<Select>
|
|
279
|
+
<Select.Trigger>...</Select.Trigger>
|
|
280
|
+
<Select.Portal>
|
|
281
|
+
<Select.Overlay />
|
|
282
|
+
<Select.Content presentation="popover">
|
|
283
|
+
<Select.Item value="basic" label="Basic">
|
|
284
|
+
<View className="flex-1">
|
|
285
|
+
<Select.ItemLabel />
|
|
286
|
+
<Select.ItemDescription>
|
|
287
|
+
Essential features for personal use
|
|
288
|
+
</Select.ItemDescription>
|
|
289
|
+
</View>
|
|
290
|
+
<Select.ItemIndicator />
|
|
291
|
+
</Select.Item>
|
|
292
|
+
</Select.Content>
|
|
293
|
+
</Select.Portal>
|
|
294
|
+
</Select>
|
|
295
|
+
```
|
|
296
|
+
|
|
297
|
+
### With Trigger Indicator
|
|
298
|
+
|
|
299
|
+
Add a visual indicator to show the open/close state of the select. The indicator rotates when the select opens/closes.
|
|
300
|
+
|
|
301
|
+
```tsx
|
|
302
|
+
<Select>
|
|
303
|
+
<Select.Trigger>
|
|
304
|
+
<Select.Value placeholder="Select one" />
|
|
305
|
+
<Select.TriggerIndicator />
|
|
306
|
+
</Select.Trigger>
|
|
307
|
+
<Select.Portal>
|
|
308
|
+
<Select.Overlay />
|
|
309
|
+
<Select.Content presentation="popover">
|
|
310
|
+
<Select.Item value="1" label="Option 1" />
|
|
311
|
+
<Select.Item value="2" label="Option 2" />
|
|
312
|
+
</Select.Content>
|
|
313
|
+
</Select.Portal>
|
|
314
|
+
</Select>
|
|
315
|
+
```
|
|
316
|
+
|
|
317
|
+
### Custom Trigger with Unstyled Variant
|
|
318
|
+
|
|
319
|
+
Use the `unstyled` variant when composing a custom trigger with other components like Button.
|
|
320
|
+
|
|
321
|
+
```tsx
|
|
322
|
+
<Select>
|
|
323
|
+
<Select.Trigger variant="unstyled" asChild>
|
|
324
|
+
<Button variant="secondary">
|
|
325
|
+
<Select.Value placeholder="Select..." />
|
|
326
|
+
<Select.TriggerIndicator />
|
|
327
|
+
</Button>
|
|
328
|
+
</Select.Trigger>
|
|
329
|
+
<Select.Portal>
|
|
330
|
+
<Select.Overlay />
|
|
331
|
+
<Select.Content presentation="popover">
|
|
332
|
+
<Select.Item value="1" label="Option 1" />
|
|
333
|
+
<Select.Item value="2" label="Option 2" />
|
|
334
|
+
</Select.Content>
|
|
335
|
+
</Select.Portal>
|
|
336
|
+
</Select>
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
### Controlled Mode
|
|
340
|
+
|
|
341
|
+
Control the select state programmatically.
|
|
342
|
+
|
|
343
|
+
```tsx
|
|
344
|
+
const [value, setValue] = useState();
|
|
345
|
+
const [isOpen, setIsOpen] = useState(false);
|
|
346
|
+
|
|
347
|
+
<Select
|
|
348
|
+
value={value}
|
|
349
|
+
onValueChange={setValue}
|
|
350
|
+
isOpen={isOpen}
|
|
351
|
+
onOpenChange={setIsOpen}
|
|
352
|
+
>
|
|
353
|
+
<Select.Trigger>
|
|
354
|
+
<Select.Value placeholder="Select..." />
|
|
355
|
+
<Select.TriggerIndicator />
|
|
356
|
+
</Select.Trigger>
|
|
357
|
+
<Select.Portal>
|
|
358
|
+
<Select.Overlay />
|
|
359
|
+
<Select.Content presentation="popover">
|
|
360
|
+
<Select.Item value="1" label="Option 1" />
|
|
361
|
+
<Select.Item value="2" label="Option 2" />
|
|
362
|
+
</Select.Content>
|
|
363
|
+
</Select.Portal>
|
|
364
|
+
</Select>;
|
|
365
|
+
```
|
|
366
|
+
|
|
367
|
+
## Example
|
|
368
|
+
|
|
369
|
+
```tsx
|
|
370
|
+
import { Select, Separator } from '@/heroui';
|
|
371
|
+
import React, { useState } from 'react';
|
|
372
|
+
|
|
373
|
+
type SelectOption = {
|
|
374
|
+
value: string;
|
|
375
|
+
label: string;
|
|
376
|
+
};
|
|
377
|
+
|
|
378
|
+
const US_STATES: SelectOption[] = [
|
|
379
|
+
{ value: 'CA', label: 'California' },
|
|
380
|
+
{ value: 'NY', label: 'New York' },
|
|
381
|
+
{ value: 'TX', label: 'Texas' },
|
|
382
|
+
{ value: 'FL', label: 'Florida' },
|
|
383
|
+
];
|
|
384
|
+
|
|
385
|
+
export default function SelectExample() {
|
|
386
|
+
const [value, setValue] = useState<SelectOption | undefined>();
|
|
387
|
+
|
|
388
|
+
return (
|
|
389
|
+
<Select value={value} onValueChange={setValue}>
|
|
390
|
+
<Select.Trigger>
|
|
391
|
+
<Select.Value placeholder="Select one" />
|
|
392
|
+
<Select.TriggerIndicator />
|
|
393
|
+
</Select.Trigger>
|
|
394
|
+
<Select.Portal>
|
|
395
|
+
<Select.Overlay />
|
|
396
|
+
<Select.Content presentation="popover" width="trigger">
|
|
397
|
+
<Select.ListLabel className="mb-2">Choose a state</Select.ListLabel>
|
|
398
|
+
{US_STATES.map((state, index) => (
|
|
399
|
+
<React.Fragment key={state.value}>
|
|
400
|
+
<Select.Item value={state.value} label={state.label} />
|
|
401
|
+
{index < US_STATES.length - 1 && <Separator />}
|
|
402
|
+
</React.Fragment>
|
|
403
|
+
))}
|
|
404
|
+
</Select.Content>
|
|
405
|
+
</Select.Portal>
|
|
406
|
+
</Select>
|
|
407
|
+
);
|
|
408
|
+
}
|
|
409
|
+
```
|
|
410
|
+
|
|
411
|
+
You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/select.tsx>).
|
|
412
|
+
|
|
413
|
+
## API Reference
|
|
414
|
+
|
|
415
|
+
### Select
|
|
416
|
+
|
|
417
|
+
| prop | type | default | description |
|
|
418
|
+
| --------------- | ------------------------------------------------- | ----------- | ---------------------------------------------------------------------- |
|
|
419
|
+
| `children` | `ReactNode` | - | The content of the select |
|
|
420
|
+
| `value` | `SelectOption \| SelectOption[]` | - | The selected value(s) (controlled mode) |
|
|
421
|
+
| `onValueChange` | `(value: SelectOption \| SelectOption[]) => void` | - | Callback when the value changes |
|
|
422
|
+
| `defaultValue` | `SelectOption \| SelectOption[]` | - | The default selected value(s) (uncontrolled mode) |
|
|
423
|
+
| `isOpen` | `boolean` | - | Whether the select is open (controlled mode) |
|
|
424
|
+
| `isDefaultOpen` | `boolean` | - | Whether the select is open when initially rendered (uncontrolled mode) |
|
|
425
|
+
| `onOpenChange` | `(isOpen: boolean) => void` | - | Callback when the select open state changes |
|
|
426
|
+
| `isDisabled` | `boolean` | `false` | Whether the select is disabled |
|
|
427
|
+
| `presentation` | `'popover' \| 'bottom-sheet' \| 'dialog'` | `'popover'` | Presentation mode for the select content |
|
|
428
|
+
| `animation` | `SelectRootAnimation` | - | Animation configuration |
|
|
429
|
+
| `asChild` | `boolean` | `false` | Whether to render as a child element |
|
|
430
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
431
|
+
|
|
432
|
+
#### SelectRootAnimation
|
|
433
|
+
|
|
434
|
+
Animation configuration for Select component. Can be:
|
|
435
|
+
|
|
436
|
+
- `false` or `"disabled"`: Disable only root animations
|
|
437
|
+
- `"disable-all"`: Disable all animations including children
|
|
438
|
+
- `true` or `undefined`: Use default animations
|
|
439
|
+
- `object`: Custom animation configuration
|
|
440
|
+
|
|
441
|
+
| prop | type | default | description |
|
|
442
|
+
| ---------------- | ------------------------------------------------ | ------- | ----------------------------------------------- |
|
|
443
|
+
| `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
|
|
444
|
+
| `entering.value` | `SpringAnimationConfig \| TimingAnimationConfig` | - | Animation configuration for when select opens |
|
|
445
|
+
| `exiting.value` | `SpringAnimationConfig \| TimingAnimationConfig` | - | Animation configuration for when select closes |
|
|
446
|
+
|
|
447
|
+
#### SpringAnimationConfig
|
|
448
|
+
|
|
449
|
+
| prop | type | default | description |
|
|
450
|
+
| -------- | ------------------ | ------- | ----------------------------------------- |
|
|
451
|
+
| `type` | `'spring'` | - | Animation type (must be `'spring'`) |
|
|
452
|
+
| `config` | `WithSpringConfig` | - | Reanimated spring animation configuration |
|
|
453
|
+
|
|
454
|
+
#### TimingAnimationConfig
|
|
455
|
+
|
|
456
|
+
| prop | type | default | description |
|
|
457
|
+
| -------- | ------------------ | ------- | ----------------------------------------- |
|
|
458
|
+
| `type` | `'timing'` | - | Animation type (must be `'timing'`) |
|
|
459
|
+
| `config` | `WithTimingConfig` | - | Reanimated timing animation configuration |
|
|
460
|
+
|
|
461
|
+
### Select.Trigger
|
|
462
|
+
|
|
463
|
+
| prop | type | default | description |
|
|
464
|
+
| ------------------- | ------------------------- | ----------- | ----------------------------------------------------------------------------------------------------------------- |
|
|
465
|
+
| `variant` | `'default' \| 'unstyled'` | `'default'` | The variant of the trigger. `'default'` applies pre-styled container styles, `'unstyled'` removes default styling |
|
|
466
|
+
| `children` | `ReactNode` | - | The trigger element content |
|
|
467
|
+
| `className` | `string` | - | Additional CSS classes for the trigger |
|
|
468
|
+
| `asChild` | `boolean` | `true` | Whether to render as a child element |
|
|
469
|
+
| `isDisabled` | `boolean` | - | Whether the trigger is disabled |
|
|
470
|
+
| `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported |
|
|
471
|
+
|
|
472
|
+
### Select.Value
|
|
473
|
+
|
|
474
|
+
| prop | type | default | description |
|
|
475
|
+
| -------------- | ----------- | ------- | -------------------------------------------------- |
|
|
476
|
+
| `placeholder` | `string` | - | Placeholder text when no value is selected |
|
|
477
|
+
| `className` | `string` | - | Additional CSS classes for the value |
|
|
478
|
+
| `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
|
|
479
|
+
|
|
480
|
+
**Note:** The value component automatically applies different text colors based on selection state:
|
|
481
|
+
|
|
482
|
+
- When a value is selected: `text-foreground`
|
|
483
|
+
- When no value is selected (placeholder): `text-field-placeholder`
|
|
484
|
+
|
|
485
|
+
### Select.TriggerIndicator
|
|
486
|
+
|
|
487
|
+
| prop | type | default | description |
|
|
488
|
+
| ----------------------- | --------------------------------- | ------- | ------------------------------------------------------------ |
|
|
489
|
+
| `children` | `ReactNode` | - | Custom indicator content. Defaults to animated chevron icon |
|
|
490
|
+
| `className` | `string` | - | Additional CSS classes for the trigger indicator |
|
|
491
|
+
| `style` | `ViewStyle` | - | Custom styles for the trigger indicator |
|
|
492
|
+
| `iconProps` | `SelectTriggerIndicatorIconProps` | - | Chevron icon configuration |
|
|
493
|
+
| `animation` | `SelectTriggerIndicatorAnimation` | - | Animation configuration |
|
|
494
|
+
| `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
|
|
495
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
496
|
+
|
|
497
|
+
**Note:** The following style properties are occupied by animations and cannot be set via className:
|
|
498
|
+
|
|
499
|
+
- `transform` (specifically `rotate`) - Animated for open/close rotation transitions
|
|
500
|
+
|
|
501
|
+
To customize this property, use the `animation` prop. To completely disable animated styles and use your own via className or style prop, set `isAnimatedStyleActive={false}`.
|
|
502
|
+
|
|
503
|
+
#### SelectTriggerIndicatorIconProps
|
|
504
|
+
|
|
505
|
+
| prop | type | default | description |
|
|
506
|
+
| ------- | -------- | ------- | ------------------------------------------------------ |
|
|
507
|
+
| `size` | `number` | `16` | Size of the icon |
|
|
508
|
+
| `color` | `string` | - | Color of the icon (defaults to foreground theme color) |
|
|
509
|
+
|
|
510
|
+
#### SelectTriggerIndicatorAnimation
|
|
511
|
+
|
|
512
|
+
Animation configuration for Select.TriggerIndicator component. Can be:
|
|
513
|
+
|
|
514
|
+
- `false` or `"disabled"`: Disable all animations
|
|
515
|
+
- `true` or `undefined`: Use default animations (rotation from 0° to -180°)
|
|
516
|
+
- `object`: Custom animation configuration
|
|
517
|
+
|
|
518
|
+
| prop | type | default | description |
|
|
519
|
+
| ----------------------- | ----------------------- | -------------------------------------------- | ----------------------------------------------- |
|
|
520
|
+
| `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
|
|
521
|
+
| `rotation.value` | `[number, number]` | `[0, -180]` | Rotation values [closed, open] in degrees |
|
|
522
|
+
| `rotation.springConfig` | `WithSpringConfig` | `{ damping: 140, stiffness: 1000, mass: 4 }` | Spring animation configuration for rotation |
|
|
523
|
+
|
|
524
|
+
### Select.Portal
|
|
525
|
+
|
|
526
|
+
| prop | type | default | description |
|
|
527
|
+
| -------------------------- | ----------- | ------- | ----------------------------------------------------------------------------------------------------------------------------- |
|
|
528
|
+
| `children` | `ReactNode` | - | The portal content (required) |
|
|
529
|
+
| `disableFullWindowOverlay` | `boolean` | `false` | When true on iOS, uses View instead of FullWindowOverlay. Enables element inspector; overlay won't appear above native modals |
|
|
530
|
+
| `className` | `string` | - | Additional CSS classes for the portal container |
|
|
531
|
+
| `hostName` | `string` | - | Optional name of the host element for the portal |
|
|
532
|
+
| `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
|
|
533
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
534
|
+
|
|
535
|
+
### Select.Overlay
|
|
536
|
+
|
|
537
|
+
| prop | type | default | description |
|
|
538
|
+
| ----------------------- | ------------------------ | ------- | ------------------------------------------------------------ |
|
|
539
|
+
| `className` | `string` | - | Additional CSS classes for the overlay |
|
|
540
|
+
| `animation` | `SelectOverlayAnimation` | - | Animation configuration |
|
|
541
|
+
| `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
|
|
542
|
+
| `closeOnPress` | `boolean` | `true` | Whether to close the select when overlay is pressed |
|
|
543
|
+
| `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
|
|
544
|
+
| `asChild` | `boolean` | `false` | Whether to render as a child element |
|
|
545
|
+
| `...Animated.ViewProps` | `Animated.ViewProps` | - | All Reanimated Animated.View props are supported |
|
|
546
|
+
|
|
547
|
+
#### SelectOverlayAnimation
|
|
548
|
+
|
|
549
|
+
Animation configuration for Select.Overlay component. Can be:
|
|
550
|
+
|
|
551
|
+
- `false` or `"disabled"`: Disable all animations
|
|
552
|
+
- `true` or `undefined`: Use default animations (progress-based opacity for bottom-sheet/dialog, Keyframe animations for popover)
|
|
553
|
+
- `object`: Custom animation configuration
|
|
554
|
+
|
|
555
|
+
| prop | type | default | description |
|
|
556
|
+
| --------------- | -------------------------- | ----------- | ---------------------------------------------------------------------------- |
|
|
557
|
+
| `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
|
|
558
|
+
| `opacity.value` | `[number, number, number]` | `[0, 1, 0]` | Opacity values [idle, open, close] (for bottom-sheet/dialog presentation) |
|
|
559
|
+
| `entering` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for entering transition (for popover presentation) |
|
|
560
|
+
| `exiting` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for exiting transition (for popover presentation) |
|
|
561
|
+
|
|
562
|
+
### Select.Content (Popover Presentation)
|
|
563
|
+
|
|
564
|
+
| prop | type | default | description |
|
|
565
|
+
| ----------------------- | ------------------------------------------------ | --------------- | ------------------------------------------------------ |
|
|
566
|
+
| `children` | `ReactNode` | - | The select content |
|
|
567
|
+
| `width` | `number \| 'trigger' \| 'content-fit' \| 'full'` | `'content-fit'` | Width sizing strategy for the content |
|
|
568
|
+
| `presentation` | `'popover'` | `'popover'` | Presentation mode for the select |
|
|
569
|
+
| `placement` | `'top' \| 'bottom' \| 'left' \| 'right'` | `'bottom'` | Placement of the content relative to trigger |
|
|
570
|
+
| `align` | `'start' \| 'center' \| 'end'` | `'center'` | Alignment along the placement axis |
|
|
571
|
+
| `avoidCollisions` | `boolean` | `true` | Whether to flip placement when close to viewport edges |
|
|
572
|
+
| `offset` | `number` | `8` | Distance from trigger element in pixels |
|
|
573
|
+
| `alignOffset` | `number` | `0` | Offset along the alignment axis in pixels |
|
|
574
|
+
| `className` | `string` | - | Additional CSS classes for the content container |
|
|
575
|
+
| `animation` | `SelectContentPopoverAnimation` | - | Animation configuration |
|
|
576
|
+
| `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
|
|
577
|
+
| `insets` | `Insets` | - | Screen edge insets to respect when positioning |
|
|
578
|
+
| `asChild` | `boolean` | `false` | Whether to render as a child element |
|
|
579
|
+
| `...Animated.ViewProps` | `Animated.ViewProps` | - | All Reanimated Animated.View props are supported |
|
|
580
|
+
|
|
581
|
+
#### SelectContentPopoverAnimation
|
|
582
|
+
|
|
583
|
+
Animation configuration for Select.Content component (popover presentation). Can be:
|
|
584
|
+
|
|
585
|
+
- `false` or `"disabled"`: Disable all animations
|
|
586
|
+
- `true` or `undefined`: Use default Keyframe animations (translateY/translateX, scale, opacity based on placement)
|
|
587
|
+
- `object`: Custom animation configuration with `entering` and/or `exiting` Keyframe animations
|
|
588
|
+
|
|
589
|
+
| prop | type | default | description |
|
|
590
|
+
| ---------- | ----------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
|
|
591
|
+
| `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
|
|
592
|
+
| `entering` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for entering transition (default: Keyframe with translateY/translateX, scale, opacity based on placement, 200ms) |
|
|
593
|
+
| `exiting` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for exiting transition (default: Keyframe mirroring entering animation, 150ms) |
|
|
594
|
+
|
|
595
|
+
### Select.Content (Bottom Sheet Presentation)
|
|
596
|
+
|
|
597
|
+
| prop | type | default | description |
|
|
598
|
+
| --------------------------- | ------------------ | ------- | ------------------------------------------------ |
|
|
599
|
+
| `children` | `ReactNode` | - | The bottom sheet content |
|
|
600
|
+
| `presentation` | `'bottom-sheet'` | - | Presentation mode for the select |
|
|
601
|
+
| `contentContainerClassName` | `string` | - | Additional CSS classes for the content container |
|
|
602
|
+
| `...BottomSheetProps` | `BottomSheetProps` | - | All @gorhom/bottom-sheet props are supported |
|
|
603
|
+
|
|
604
|
+
### Select.Content (Dialog Presentation)
|
|
605
|
+
|
|
606
|
+
| prop | type | default | description |
|
|
607
|
+
| -------------- | -------------------------------------------------------- | ------- | --------------------------------------------------- |
|
|
608
|
+
| `children` | `ReactNode` | - | The dialog content |
|
|
609
|
+
| `presentation` | `'dialog'` | - | Presentation mode for the select |
|
|
610
|
+
| `classNames` | `{ wrapper?: string; content?: string }` | - | Additional CSS classes for wrapper and content |
|
|
611
|
+
| `styles` | `Partial<Record<DialogContentFallbackSlots, ViewStyle>>` | - | Styles for different parts of the dialog content |
|
|
612
|
+
| `animation` | `SelectContentAnimation` | - | Animation configuration |
|
|
613
|
+
| `isSwipeable` | `boolean` | `true` | Whether the dialog content can be swiped to dismiss |
|
|
614
|
+
| `forceMount` | `boolean` | - | Whether to force mount the component in the DOM |
|
|
615
|
+
| `asChild` | `boolean` | `false` | Whether to render as a child element |
|
|
616
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
617
|
+
|
|
618
|
+
#### `styles`
|
|
619
|
+
|
|
620
|
+
| prop | type | description |
|
|
621
|
+
| --------- | ----------- | -------------------------------- |
|
|
622
|
+
| `wrapper` | `ViewStyle` | Styles for the wrapper container |
|
|
623
|
+
| `content` | `ViewStyle` | Styles for the dialog content |
|
|
624
|
+
|
|
625
|
+
#### SelectContentAnimation
|
|
626
|
+
|
|
627
|
+
Animation configuration for Select.Content component (dialog presentation). Can be:
|
|
628
|
+
|
|
629
|
+
- `false` or `"disabled"`: Disable all animations
|
|
630
|
+
- `true` or `undefined`: Use default Keyframe animations (scale and opacity transitions)
|
|
631
|
+
- `object`: Custom animation configuration with `entering` and/or `exiting` Keyframe animations
|
|
632
|
+
|
|
633
|
+
| prop | type | default | description |
|
|
634
|
+
| ---------- | ----------------------- | ------- | -------------------------------------------------------------------------------------------------------- |
|
|
635
|
+
| `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
|
|
636
|
+
| `entering` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for entering transition (default: Keyframe with scale and opacity, 200ms) |
|
|
637
|
+
| `exiting` | `EntryOrExitLayoutType` | - | Custom Keyframe animation for exiting transition (default: Keyframe mirroring entering animation, 150ms) |
|
|
638
|
+
|
|
639
|
+
### Select.Close
|
|
640
|
+
|
|
641
|
+
Select.Close extends [CloseButton](../close-button/close-button.md) and automatically handles select dismissal when pressed.
|
|
642
|
+
|
|
643
|
+
### Select.ListLabel
|
|
644
|
+
|
|
645
|
+
| prop | type | default | description |
|
|
646
|
+
| -------------- | ----------- | ------- | -------------------------------------------------- |
|
|
647
|
+
| `children` | `ReactNode` | - | The label text content |
|
|
648
|
+
| `className` | `string` | - | Additional CSS classes for the list label |
|
|
649
|
+
| `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
|
|
650
|
+
|
|
651
|
+
### Select.Item
|
|
652
|
+
|
|
653
|
+
| prop | type | default | description |
|
|
654
|
+
| ------------------- | ------------------------------------------------------------ | ------- | -------------------------------------------------------------------------- |
|
|
655
|
+
| `children` | `ReactNode \| ((props: SelectItemRenderProps) => ReactNode)` | - | Custom item content. Defaults to label and indicator, or a render function |
|
|
656
|
+
| `value` | `any` | - | The value associated with this item (required) |
|
|
657
|
+
| `label` | `string` | - | The label text for this item (required) |
|
|
658
|
+
| `isDisabled` | `boolean` | `false` | Whether this item is disabled |
|
|
659
|
+
| `className` | `string` | - | Additional CSS classes for the item |
|
|
660
|
+
| `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported |
|
|
661
|
+
|
|
662
|
+
#### SelectItemRenderProps
|
|
663
|
+
|
|
664
|
+
When using a render function for `children`, the following props are provided:
|
|
665
|
+
|
|
666
|
+
| property | type | description |
|
|
667
|
+
| ------------ | --------- | --------------------------------------- |
|
|
668
|
+
| `isSelected` | `boolean` | Whether this item is currently selected |
|
|
669
|
+
| `value` | `string` | The value of the item |
|
|
670
|
+
| `isDisabled` | `boolean` | Whether the item is disabled |
|
|
671
|
+
|
|
672
|
+
### Select.ItemLabel
|
|
673
|
+
|
|
674
|
+
| prop | type | default | description |
|
|
675
|
+
| -------------- | ----------- | ------- | -------------------------------------------------- |
|
|
676
|
+
| `className` | `string` | - | Additional CSS classes for the item label |
|
|
677
|
+
| `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
|
|
678
|
+
|
|
679
|
+
### Select.ItemDescription
|
|
680
|
+
|
|
681
|
+
| prop | type | default | description |
|
|
682
|
+
| -------------- | ----------- | ------- | -------------------------------------------------- |
|
|
683
|
+
| `children` | `ReactNode` | - | The description text content |
|
|
684
|
+
| `className` | `string` | - | Additional CSS classes for the item description |
|
|
685
|
+
| `...TextProps` | `TextProps` | - | All standard React Native Text props are supported |
|
|
686
|
+
|
|
687
|
+
### Select.ItemIndicator
|
|
688
|
+
|
|
689
|
+
| prop | type | default | description |
|
|
690
|
+
| -------------- | ------------------------------ | ------- | -------------------------------------------------- |
|
|
691
|
+
| `children` | `ReactNode` | - | Custom indicator content. Defaults to check icon |
|
|
692
|
+
| `className` | `string` | - | Additional CSS classes for the item indicator |
|
|
693
|
+
| `iconProps` | `SelectItemIndicatorIconProps` | - | Check icon configuration |
|
|
694
|
+
| `...ViewProps` | `ViewProps` | - | All standard React Native View props are supported |
|
|
695
|
+
|
|
696
|
+
#### SelectItemIndicatorIconProps
|
|
697
|
+
|
|
698
|
+
| prop | type | default | description |
|
|
699
|
+
| ------- | -------- | ---------------- | ----------------- |
|
|
700
|
+
| `size` | `number` | `16` | Size of the icon |
|
|
701
|
+
| `color` | `string` | `--colors-muted` | Color of the icon |
|
|
702
|
+
|
|
703
|
+
## Hooks
|
|
704
|
+
|
|
705
|
+
### useSelect
|
|
706
|
+
|
|
707
|
+
Hook to access the Select root context. Returns the select state and control functions.
|
|
708
|
+
|
|
709
|
+
```tsx
|
|
710
|
+
import { useSelect } from '@/heroui';
|
|
711
|
+
|
|
712
|
+
const {
|
|
713
|
+
isOpen,
|
|
714
|
+
onOpenChange,
|
|
715
|
+
isDefaultOpen,
|
|
716
|
+
isDisabled,
|
|
717
|
+
presentation,
|
|
718
|
+
triggerPosition,
|
|
719
|
+
setTriggerPosition,
|
|
720
|
+
contentLayout,
|
|
721
|
+
setContentLayout,
|
|
722
|
+
nativeID,
|
|
723
|
+
value,
|
|
724
|
+
onValueChange,
|
|
725
|
+
} = useSelect();
|
|
726
|
+
```
|
|
727
|
+
|
|
728
|
+
#### Return Value
|
|
729
|
+
|
|
730
|
+
| property | type | description |
|
|
731
|
+
| -------------------- | -------------------------------------------------- | --------------------------------------------------------- |
|
|
732
|
+
| `isOpen` | `boolean` | Whether the select is currently open |
|
|
733
|
+
| `onOpenChange` | `(open: boolean) => void` | Callback to change the open state |
|
|
734
|
+
| `isDefaultOpen` | `boolean \| undefined` | Whether the select is open by default (uncontrolled mode) |
|
|
735
|
+
| `isDisabled` | `boolean \| undefined` | Whether the select is disabled |
|
|
736
|
+
| `presentation` | `'popover' \| 'bottom-sheet' \| 'dialog'` | Presentation mode for the select content |
|
|
737
|
+
| `triggerPosition` | `LayoutPosition \| null` | Position of the trigger element relative to viewport |
|
|
738
|
+
| `setTriggerPosition` | `(position: LayoutPosition \| null) => void` | Updates the trigger element's position |
|
|
739
|
+
| `contentLayout` | `LayoutRectangle \| null` | Layout measurements of the select content |
|
|
740
|
+
| `setContentLayout` | `(layout: LayoutRectangle \| null) => void` | Updates the content layout measurements |
|
|
741
|
+
| `nativeID` | `string` | Unique identifier for the select instance |
|
|
742
|
+
| `value` | `SelectOption \| SelectOption[]` | Currently selected option |
|
|
743
|
+
| `onValueChange` | `(option: SelectOption \| SelectOption[]) => void` | Callback fired when the selected value changes |
|
|
744
|
+
|
|
745
|
+
**Note:** This hook must be used within a `Select` component. It will throw an error if called outside of the select context.
|
|
746
|
+
|
|
747
|
+
### useSelectAnimation
|
|
748
|
+
|
|
749
|
+
Hook to access the Select animation state values within custom components or compound components.
|
|
750
|
+
|
|
751
|
+
```tsx
|
|
752
|
+
import { useSelectAnimation } from '@/heroui';
|
|
753
|
+
|
|
754
|
+
const { selectState, progress, isDragging, isGestureReleaseAnimationRunning } =
|
|
755
|
+
useSelectAnimation();
|
|
756
|
+
```
|
|
757
|
+
|
|
758
|
+
#### Return Value
|
|
759
|
+
|
|
760
|
+
| property | type | description |
|
|
761
|
+
| ---------------------------------- | ---------------------- | ---------------------------------------------------------- |
|
|
762
|
+
| `progress` | `SharedValue<number>` | Progress value for animations (0=idle, 1=open, 2=close) |
|
|
763
|
+
| `isDragging` | `SharedValue<boolean>` | Whether the select content is currently being dragged |
|
|
764
|
+
| `isGestureReleaseAnimationRunning` | `SharedValue<boolean>` | Whether the gesture release animation is currently running |
|
|
765
|
+
|
|
766
|
+
**Note:** This hook must be used within a `Select` component. It will throw an error if called outside of the select animation context.
|
|
767
|
+
|
|
768
|
+
#### SelectOption
|
|
769
|
+
|
|
770
|
+
| property | type | description |
|
|
771
|
+
| -------- | -------- | ---------------------------- |
|
|
772
|
+
| `value` | `string` | The value of the option |
|
|
773
|
+
| `label` | `string` | The label text of the option |
|
|
774
|
+
|
|
775
|
+
### useSelectItem
|
|
776
|
+
|
|
777
|
+
Hook to access the Select Item context. Returns the item's value and label.
|
|
778
|
+
|
|
779
|
+
```tsx
|
|
780
|
+
import { useSelectItem } from '@/heroui';
|
|
781
|
+
|
|
782
|
+
const { itemValue, label } = useSelectItem();
|
|
783
|
+
```
|
|
784
|
+
|
|
785
|
+
#### Return Value
|
|
786
|
+
|
|
787
|
+
| property | type | description |
|
|
788
|
+
| ----------- | -------- | ---------------------------------- |
|
|
789
|
+
| `itemValue` | `string` | The value of the current item |
|
|
790
|
+
| `label` | `string` | The label text of the current item |
|
|
791
|
+
|
|
792
|
+
## Special Notes
|
|
793
|
+
|
|
794
|
+
### Element Inspector (iOS)
|
|
795
|
+
|
|
796
|
+
Select uses FullWindowOverlay on iOS. To enable the React Native element inspector during development, set `disableFullWindowOverlay={true}` on `Select.Portal`. Tradeoff: the select dropdown will not appear above native modals when disabled.
|