@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,311 @@
|
|
|
1
|
+
# Checkbox
|
|
2
|
+
|
|
3
|
+
A selectable control that allows users to toggle between checked and unchecked states.
|
|
4
|
+
|
|
5
|
+
## Import
|
|
6
|
+
|
|
7
|
+
```tsx
|
|
8
|
+
import { Checkbox } from '@/heroui';
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Anatomy
|
|
12
|
+
|
|
13
|
+
```tsx
|
|
14
|
+
<Checkbox>
|
|
15
|
+
<Checkbox.Indicator>...</Checkbox.Indicator>
|
|
16
|
+
</Checkbox>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
- **Checkbox**: Main container that handles selection state and user interaction. Renders default indicator with animated checkmark if no children provided. Automatically detects surface context for proper styling. Features press scale animation that can be customized or disabled. Supports render function children to access state (`isSelected`, `isInvalid`, `isDisabled`).
|
|
20
|
+
- **Checkbox.Indicator**: Optional checkmark container with default slide, scale, opacity, and border radius animations when selected. Renders animated check icon with SVG path drawing animation if no children provided. All animations can be individually customized or disabled. Supports render function children to access state.
|
|
21
|
+
|
|
22
|
+
## Usage
|
|
23
|
+
|
|
24
|
+
### Basic Usage
|
|
25
|
+
|
|
26
|
+
The Checkbox component renders with a default animated indicator if no children are provided. It automatically detects whether it's on a surface background for proper styling.
|
|
27
|
+
|
|
28
|
+
```tsx
|
|
29
|
+
<Checkbox isSelected={isSelected} onSelectedChange={setIsSelected} />
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
### With Custom Indicator
|
|
33
|
+
|
|
34
|
+
Use a render function in the Indicator to show/hide custom icons based on state.
|
|
35
|
+
|
|
36
|
+
```tsx
|
|
37
|
+
<Checkbox isSelected={isSelected} onSelectedChange={setIsSelected}>
|
|
38
|
+
<Checkbox.Indicator>
|
|
39
|
+
{({ isSelected }) => (isSelected ? <CheckIcon /> : null)}
|
|
40
|
+
</Checkbox.Indicator>
|
|
41
|
+
</Checkbox>
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Invalid State
|
|
45
|
+
|
|
46
|
+
Show validation errors with the `isInvalid` prop, which applies danger color styling.
|
|
47
|
+
|
|
48
|
+
```tsx
|
|
49
|
+
<Checkbox
|
|
50
|
+
isSelected={isSelected}
|
|
51
|
+
onSelectedChange={setIsSelected}
|
|
52
|
+
isInvalid={hasError}
|
|
53
|
+
/>
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Custom Animations
|
|
57
|
+
|
|
58
|
+
Customize or disable animations for both the root checkbox and indicator.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
{
|
|
62
|
+
/* Disable all animations (root and indicator) */
|
|
63
|
+
}
|
|
64
|
+
<Checkbox
|
|
65
|
+
animation="disable-all"
|
|
66
|
+
isSelected={isSelected}
|
|
67
|
+
onSelectedChange={setIsSelected}
|
|
68
|
+
>
|
|
69
|
+
<Checkbox.Indicator />
|
|
70
|
+
</Checkbox>;
|
|
71
|
+
|
|
72
|
+
{
|
|
73
|
+
/* Disable only root animation */
|
|
74
|
+
}
|
|
75
|
+
<Checkbox
|
|
76
|
+
animation="disabled"
|
|
77
|
+
isSelected={isSelected}
|
|
78
|
+
onSelectedChange={setIsSelected}
|
|
79
|
+
>
|
|
80
|
+
<Checkbox.Indicator />
|
|
81
|
+
</Checkbox>;
|
|
82
|
+
|
|
83
|
+
{
|
|
84
|
+
/* Disable only indicator animation */
|
|
85
|
+
}
|
|
86
|
+
<Checkbox isSelected={isSelected} onSelectedChange={setIsSelected}>
|
|
87
|
+
<Checkbox.Indicator animation="disabled" />
|
|
88
|
+
</Checkbox>;
|
|
89
|
+
|
|
90
|
+
{
|
|
91
|
+
/* Custom animation configuration */
|
|
92
|
+
}
|
|
93
|
+
<Checkbox
|
|
94
|
+
animation={{ scale: { value: [1, 0.9], timingConfig: { duration: 200 } } }}
|
|
95
|
+
isSelected={isSelected}
|
|
96
|
+
onSelectedChange={setIsSelected}
|
|
97
|
+
>
|
|
98
|
+
<Checkbox.Indicator
|
|
99
|
+
animation={{
|
|
100
|
+
scale: { value: [0.5, 1] },
|
|
101
|
+
opacity: { value: [0, 1] },
|
|
102
|
+
translateX: { value: [-8, 0] },
|
|
103
|
+
borderRadius: { value: [12, 0] },
|
|
104
|
+
}}
|
|
105
|
+
/>
|
|
106
|
+
</Checkbox>;
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Example
|
|
110
|
+
|
|
111
|
+
```tsx
|
|
112
|
+
import {
|
|
113
|
+
Checkbox,
|
|
114
|
+
Description,
|
|
115
|
+
ControlField,
|
|
116
|
+
Label,
|
|
117
|
+
Separator,
|
|
118
|
+
Surface,
|
|
119
|
+
} from '@/heroui';
|
|
120
|
+
import React from 'react';
|
|
121
|
+
import { View, Text } from 'react-native';
|
|
122
|
+
|
|
123
|
+
interface CheckboxFieldProps {
|
|
124
|
+
isSelected: boolean;
|
|
125
|
+
onSelectedChange: (value: boolean) => void;
|
|
126
|
+
title: string;
|
|
127
|
+
description: string;
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
const CheckboxField: React.FC<CheckboxFieldProps> = ({
|
|
131
|
+
isSelected,
|
|
132
|
+
onSelectedChange,
|
|
133
|
+
title,
|
|
134
|
+
description,
|
|
135
|
+
}) => {
|
|
136
|
+
return (
|
|
137
|
+
<ControlField isSelected={isSelected} onSelectedChange={onSelectedChange}>
|
|
138
|
+
<ControlField.Indicator>
|
|
139
|
+
<Checkbox className="mt-0.5" />
|
|
140
|
+
</ControlField.Indicator>
|
|
141
|
+
<View className="flex-1">
|
|
142
|
+
<Label className="text-lg">{title}</Label>
|
|
143
|
+
<Description className="text-base">{description}</Description>
|
|
144
|
+
</View>
|
|
145
|
+
</ControlField>
|
|
146
|
+
);
|
|
147
|
+
};
|
|
148
|
+
|
|
149
|
+
export default function BasicUsage() {
|
|
150
|
+
const [fields, setFields] = React.useState({
|
|
151
|
+
newsletter: true,
|
|
152
|
+
marketing: false,
|
|
153
|
+
terms: false,
|
|
154
|
+
});
|
|
155
|
+
|
|
156
|
+
const fieldConfigs: Record<
|
|
157
|
+
keyof typeof fields,
|
|
158
|
+
{ title: string; description: string }
|
|
159
|
+
> = {
|
|
160
|
+
newsletter: {
|
|
161
|
+
title: 'Subscribe to newsletter',
|
|
162
|
+
description: 'Get weekly updates about new features and tips',
|
|
163
|
+
},
|
|
164
|
+
marketing: {
|
|
165
|
+
title: 'Marketing communications',
|
|
166
|
+
description: 'Receive promotional emails and special offers',
|
|
167
|
+
},
|
|
168
|
+
terms: {
|
|
169
|
+
title: 'Accept terms and conditions',
|
|
170
|
+
description: 'Agree to our Terms of Service and Privacy Policy',
|
|
171
|
+
},
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
const handleFieldChange = (key: keyof typeof fields) => (value: boolean) => {
|
|
175
|
+
setFields((prev) => ({ ...prev, [key]: value }));
|
|
176
|
+
};
|
|
177
|
+
|
|
178
|
+
const fieldKeys = Object.keys(fields) as Array<keyof typeof fields>;
|
|
179
|
+
|
|
180
|
+
return (
|
|
181
|
+
<View className="flex-1 items-center justify-center px-5">
|
|
182
|
+
<Surface className="py-5 w-full">
|
|
183
|
+
{fieldKeys.map((key, index) => (
|
|
184
|
+
<React.Fragment key={key}>
|
|
185
|
+
{index > 0 && <Separator className="my-4" />}
|
|
186
|
+
<CheckboxField
|
|
187
|
+
isSelected={fields[key]}
|
|
188
|
+
onSelectedChange={handleFieldChange(key)}
|
|
189
|
+
title={fieldConfigs[key].title}
|
|
190
|
+
description={fieldConfigs[key].description}
|
|
191
|
+
/>
|
|
192
|
+
</React.Fragment>
|
|
193
|
+
))}
|
|
194
|
+
</Surface>
|
|
195
|
+
</View>
|
|
196
|
+
);
|
|
197
|
+
}
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
You can find more examples in the [GitHub repository](<https://github.com/heroui-inc/heroui-native/blob/rc/example/src/app/(home)/components/checkbox.tsx>).
|
|
201
|
+
|
|
202
|
+
## API Reference
|
|
203
|
+
|
|
204
|
+
### Checkbox
|
|
205
|
+
|
|
206
|
+
| prop | type | default | description |
|
|
207
|
+
| ----------------------- | ---------------------------------------------------------------------- | ----------- | ------------------------------------------------------------------------- |
|
|
208
|
+
| `children` | `React.ReactNode \| ((props: CheckboxRenderProps) => React.ReactNode)` | `undefined` | Child elements or render function to customize the checkbox |
|
|
209
|
+
| `isSelected` | `boolean` | `undefined` | Whether the checkbox is currently selected |
|
|
210
|
+
| `onSelectedChange` | `(isSelected: boolean) => void` | `undefined` | Callback fired when the checkbox selection state changes |
|
|
211
|
+
| `isDisabled` | `boolean` | `false` | Whether the checkbox is disabled and cannot be interacted with |
|
|
212
|
+
| `isInvalid` | `boolean` | `false` | Whether the checkbox is invalid (shows danger color) |
|
|
213
|
+
| `variant` | `'primary' \| 'secondary'` | `'primary'` | Variant style for the checkbox |
|
|
214
|
+
| `hitSlop` | `number` | `6` | Hit slop for the pressable area |
|
|
215
|
+
| `animation` | `CheckboxRootAnimation` | - | Animation configuration |
|
|
216
|
+
| `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
|
|
217
|
+
| `className` | `string` | `undefined` | Additional CSS classes to apply |
|
|
218
|
+
| `...PressableProps` | `PressableProps` | - | All standard React Native Pressable props are supported (except disabled) |
|
|
219
|
+
|
|
220
|
+
#### CheckboxRenderProps
|
|
221
|
+
|
|
222
|
+
| prop | type | description |
|
|
223
|
+
| ------------ | --------- | -------------------------------- |
|
|
224
|
+
| `isSelected` | `boolean` | Whether the checkbox is selected |
|
|
225
|
+
| `isInvalid` | `boolean` | Whether the checkbox is invalid |
|
|
226
|
+
| `isDisabled` | `boolean` | Whether the checkbox is disabled |
|
|
227
|
+
|
|
228
|
+
#### CheckboxRootAnimation
|
|
229
|
+
|
|
230
|
+
Animation configuration for checkbox root component. Can be:
|
|
231
|
+
|
|
232
|
+
- `false` or `"disabled"`: Disable only root animations
|
|
233
|
+
- `"disable-all"`: Disable all animations including children
|
|
234
|
+
- `true` or `undefined`: Use default animations
|
|
235
|
+
- `object`: Custom animation configuration
|
|
236
|
+
|
|
237
|
+
| prop | type | default | description |
|
|
238
|
+
| -------------------- | ---------------------------------------- | ------------------- | ----------------------------------------------- |
|
|
239
|
+
| `state` | `'disabled' \| 'disable-all' \| boolean` | - | Disable animations while customizing properties |
|
|
240
|
+
| `scale.value` | `[number, number]` | `[1, 0.96]` | Scale values [unpressed, pressed] |
|
|
241
|
+
| `scale.timingConfig` | `WithTimingConfig` | `{ duration: 150 }` | Animation timing configuration |
|
|
242
|
+
|
|
243
|
+
### Checkbox.Indicator
|
|
244
|
+
|
|
245
|
+
| prop | type | default | description |
|
|
246
|
+
| ----------------------- | ---------------------------------------------------------------------- | ----------- | ------------------------------------------------------------ |
|
|
247
|
+
| `children` | `React.ReactNode \| ((props: CheckboxRenderProps) => React.ReactNode)` | `undefined` | Content or render function for the checkbox indicator |
|
|
248
|
+
| `className` | `string` | `undefined` | Additional CSS classes for the indicator |
|
|
249
|
+
| `iconProps` | `CheckboxIndicatorIconProps` | `undefined` | Custom props for the default animated check icon |
|
|
250
|
+
| `animation` | `CheckboxIndicatorAnimation` | - | Animation configuration |
|
|
251
|
+
| `isAnimatedStyleActive` | `boolean` | `true` | Whether animated styles (react-native-reanimated) are active |
|
|
252
|
+
| `...AnimatedViewProps` | `AnimatedProps<ViewProps>` | - | All standard React Native Animated View props are supported |
|
|
253
|
+
|
|
254
|
+
#### CheckboxIndicatorIconProps
|
|
255
|
+
|
|
256
|
+
Props for customizing the default animated check icon.
|
|
257
|
+
|
|
258
|
+
| prop | type | description |
|
|
259
|
+
| --------------- | -------- | ------------------------------------------------ |
|
|
260
|
+
| `size` | `number` | Icon size |
|
|
261
|
+
| `strokeWidth` | `number` | Icon stroke width |
|
|
262
|
+
| `color` | `string` | Icon color (defaults to theme accent-foreground) |
|
|
263
|
+
| `enterDuration` | `number` | Duration of enter animation (check appearing) |
|
|
264
|
+
| `exitDuration` | `number` | Duration of exit animation (check disappearing) |
|
|
265
|
+
|
|
266
|
+
#### CheckboxIndicatorAnimation
|
|
267
|
+
|
|
268
|
+
Animation configuration for checkbox indicator component. Can be:
|
|
269
|
+
|
|
270
|
+
- `false` or `"disabled"`: Disable all animations
|
|
271
|
+
- `true` or `undefined`: Use default animations
|
|
272
|
+
- `object`: Custom animation configuration
|
|
273
|
+
|
|
274
|
+
| prop | type | default | description |
|
|
275
|
+
| --------------------------- | ----------------------- | ------------------- | ----------------------------------------------- |
|
|
276
|
+
| `state` | `'disabled' \| boolean` | - | Disable animations while customizing properties |
|
|
277
|
+
| `opacity.value` | `[number, number]` | `[0, 1]` | Opacity values [unselected, selected] |
|
|
278
|
+
| `opacity.timingConfig` | `WithTimingConfig` | `{ duration: 100 }` | Animation timing configuration |
|
|
279
|
+
| `borderRadius.value` | `[number, number]` | `[8, 0]` | Border radius values [unselected, selected] |
|
|
280
|
+
| `borderRadius.timingConfig` | `WithTimingConfig` | `{ duration: 50 }` | Animation timing configuration |
|
|
281
|
+
| `translateX.value` | `[number, number]` | `[-4, 0]` | TranslateX values [unselected, selected] |
|
|
282
|
+
| `translateX.timingConfig` | `WithTimingConfig` | `{ duration: 100 }` | Animation timing configuration |
|
|
283
|
+
| `scale.value` | `[number, number]` | `[0.8, 1]` | Scale values [unselected, selected] |
|
|
284
|
+
| `scale.timingConfig` | `WithTimingConfig` | `{ duration: 100 }` | Animation timing configuration |
|
|
285
|
+
|
|
286
|
+
## Hooks
|
|
287
|
+
|
|
288
|
+
### useCheckbox
|
|
289
|
+
|
|
290
|
+
Hook to access checkbox context values within custom components or compound components.
|
|
291
|
+
|
|
292
|
+
```tsx
|
|
293
|
+
import { useCheckbox } from '@/heroui';
|
|
294
|
+
|
|
295
|
+
const CustomIndicator = () => {
|
|
296
|
+
const { isSelected, isInvalid, isDisabled } = useCheckbox();
|
|
297
|
+
// ... your implementation
|
|
298
|
+
};
|
|
299
|
+
```
|
|
300
|
+
|
|
301
|
+
**Returns:** `UseCheckboxReturn`
|
|
302
|
+
|
|
303
|
+
| property | type | description |
|
|
304
|
+
| ------------------ | ---------------------------------------------- | -------------------------------------------------------------- |
|
|
305
|
+
| `isSelected` | `boolean \| undefined` | Whether the checkbox is currently selected |
|
|
306
|
+
| `onSelectedChange` | `((isSelected: boolean) => void) \| undefined` | Callback function to change the checkbox selection state |
|
|
307
|
+
| `isDisabled` | `boolean` | Whether the checkbox is disabled and cannot be interacted with |
|
|
308
|
+
| `isInvalid` | `boolean` | Whether the checkbox is invalid (shows danger color) |
|
|
309
|
+
| `nativeID` | `string \| undefined` | Native ID for the checkbox element |
|
|
310
|
+
|
|
311
|
+
**Note:** This hook must be used within a `Checkbox` component. It will throw an error if called outside of the checkbox context.
|
|
@@ -0,0 +1,105 @@
|
|
|
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 property is animated and cannot be overridden using Tailwind classes:
|
|
10
|
+
* - `transform` (specifically `scale`) - Animated for press feedback transitions (unpressed: 1, pressed: 0.96)
|
|
11
|
+
*
|
|
12
|
+
* To customize this property, use the `animation` prop on `Checkbox`:
|
|
13
|
+
* ```tsx
|
|
14
|
+
* <Checkbox
|
|
15
|
+
* animation={{
|
|
16
|
+
* scale: { value: [1, 0.96], timingConfig: { duration: 150 } }
|
|
17
|
+
* }}
|
|
18
|
+
* />
|
|
19
|
+
* ```
|
|
20
|
+
*
|
|
21
|
+
* To completely disable animated styles and apply your own via className or style prop,
|
|
22
|
+
* set `isAnimatedStyleActive={false}` on `Checkbox`.
|
|
23
|
+
*/
|
|
24
|
+
const root = tv({
|
|
25
|
+
base: 'size-6 rounded-lg overflow-hidden',
|
|
26
|
+
variants: {
|
|
27
|
+
variant: {
|
|
28
|
+
primary: 'bg-field shadow-field',
|
|
29
|
+
secondary: 'bg-default',
|
|
30
|
+
},
|
|
31
|
+
isSelected: {
|
|
32
|
+
true: '',
|
|
33
|
+
false: '',
|
|
34
|
+
},
|
|
35
|
+
isDisabled: {
|
|
36
|
+
true: 'opacity-disabled pointer-events-none',
|
|
37
|
+
false: '',
|
|
38
|
+
},
|
|
39
|
+
isInvalid: {
|
|
40
|
+
true: 'border border-danger',
|
|
41
|
+
false: 'border-0',
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
compoundVariants: [
|
|
45
|
+
{
|
|
46
|
+
isSelected: false,
|
|
47
|
+
isInvalid: true,
|
|
48
|
+
className: 'bg-transparent',
|
|
49
|
+
},
|
|
50
|
+
],
|
|
51
|
+
defaultVariants: {
|
|
52
|
+
variant: 'primary',
|
|
53
|
+
isSelected: false,
|
|
54
|
+
isDisabled: false,
|
|
55
|
+
isInvalid: false,
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Indicator style definition
|
|
61
|
+
*
|
|
62
|
+
* @note ANIMATED PROPERTIES (cannot be set via className):
|
|
63
|
+
* The following properties are animated and cannot be overridden using Tailwind classes:
|
|
64
|
+
* - `opacity` - Animated for selection transitions (unselected: 0, selected: 1)
|
|
65
|
+
* - `borderRadius` - Animated for selection transitions (unselected: 8, selected: 0)
|
|
66
|
+
* - `transform` (specifically `translateX` and `scale`) - Animated for selection transitions (translateX: unselected: -4, selected: 0; scale: unselected: 0.8, selected: 1)
|
|
67
|
+
*
|
|
68
|
+
* To customize these properties, use the `animation` prop on `Checkbox.Indicator`:
|
|
69
|
+
* ```tsx
|
|
70
|
+
* <Checkbox.Indicator
|
|
71
|
+
* animation={{
|
|
72
|
+
* opacity: { value: [0, 1], timingConfig: { duration: 100 } },
|
|
73
|
+
* borderRadius: { value: [8, 0], timingConfig: { duration: 50 } },
|
|
74
|
+
* translateX: { value: [-4, 0], timingConfig: { duration: 100 } },
|
|
75
|
+
* scale: { value: [0.8, 1], timingConfig: { duration: 100 } }
|
|
76
|
+
* }}
|
|
77
|
+
* />
|
|
78
|
+
* ```
|
|
79
|
+
*
|
|
80
|
+
* To completely disable animated styles and apply your own via className or style prop,
|
|
81
|
+
* set `isAnimatedStyleActive={false}` on `Checkbox.Indicator`.
|
|
82
|
+
*/
|
|
83
|
+
const indicator = tv({
|
|
84
|
+
base: 'absolute inset-0 items-center justify-center',
|
|
85
|
+
variants: {
|
|
86
|
+
isInvalid: {
|
|
87
|
+
true: 'bg-danger',
|
|
88
|
+
false: 'bg-accent',
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
defaultVariants: {
|
|
92
|
+
isInvalid: false,
|
|
93
|
+
},
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
export const checkboxClassNames = combineStyles({
|
|
97
|
+
root,
|
|
98
|
+
indicator,
|
|
99
|
+
});
|
|
100
|
+
|
|
101
|
+
export const checkboxStyleSheet = StyleSheet.create({
|
|
102
|
+
root: {
|
|
103
|
+
borderCurve: 'continuous',
|
|
104
|
+
},
|
|
105
|
+
});
|
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
import { forwardRef, useCallback, useMemo } from 'react';
|
|
2
|
+
import { View, type GestureResponderEvent } from 'react-native';
|
|
3
|
+
import Animated from 'react-native-reanimated';
|
|
4
|
+
import { useIsOnSurface, useThemeColor } from '../../helpers/external/hooks';
|
|
5
|
+
import {
|
|
6
|
+
AnimatedCheckIcon,
|
|
7
|
+
CheckIcon,
|
|
8
|
+
} from '../../helpers/internal/components';
|
|
9
|
+
import { AnimationSettingsProvider } from '../../helpers/internal/contexts';
|
|
10
|
+
import * as CheckboxPrimitives from '../../primitives/checkbox';
|
|
11
|
+
import * as CheckboxPrimitivesTypes from '../../primitives/checkbox/checkbox.types';
|
|
12
|
+
import {
|
|
13
|
+
CheckboxAnimationProvider,
|
|
14
|
+
useCheckboxIndicatorAnimation,
|
|
15
|
+
useCheckboxRootAnimation,
|
|
16
|
+
} from './checkbox.animation';
|
|
17
|
+
import { DEFAULT_HIT_SLOP, DISPLAY_NAME } from './checkbox.constants';
|
|
18
|
+
import { checkboxClassNames, checkboxStyleSheet } from './checkbox.styles';
|
|
19
|
+
import type {
|
|
20
|
+
CheckboxIndicatorProps,
|
|
21
|
+
CheckboxProps,
|
|
22
|
+
CheckboxRenderProps,
|
|
23
|
+
} from './checkbox.types';
|
|
24
|
+
|
|
25
|
+
const AnimatedRootView = Animated.createAnimatedComponent(
|
|
26
|
+
CheckboxPrimitives.Root
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
const AnimatedIndicatorView = Animated.createAnimatedComponent(
|
|
30
|
+
CheckboxPrimitives.Indicator
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
const useCheckbox = CheckboxPrimitives.useCheckboxContext;
|
|
34
|
+
|
|
35
|
+
// --------------------------------------------------
|
|
36
|
+
|
|
37
|
+
const CheckboxRoot = forwardRef<CheckboxPrimitivesTypes.RootRef, CheckboxProps>(
|
|
38
|
+
(props, ref) => {
|
|
39
|
+
const {
|
|
40
|
+
children,
|
|
41
|
+
isSelected,
|
|
42
|
+
onSelectedChange,
|
|
43
|
+
isDisabled = false,
|
|
44
|
+
isInvalid = false,
|
|
45
|
+
variant,
|
|
46
|
+
hitSlop = DEFAULT_HIT_SLOP,
|
|
47
|
+
className,
|
|
48
|
+
style,
|
|
49
|
+
onPressIn,
|
|
50
|
+
onPressOut,
|
|
51
|
+
animation,
|
|
52
|
+
isAnimatedStyleActive = true,
|
|
53
|
+
...restProps
|
|
54
|
+
} = props;
|
|
55
|
+
|
|
56
|
+
const isOnSurfaceAutoDetected = useIsOnSurface();
|
|
57
|
+
const finalVariant =
|
|
58
|
+
variant !== undefined
|
|
59
|
+
? variant
|
|
60
|
+
: isOnSurfaceAutoDetected
|
|
61
|
+
? 'secondary'
|
|
62
|
+
: 'primary';
|
|
63
|
+
|
|
64
|
+
const rootClassName = checkboxClassNames.root({
|
|
65
|
+
variant: finalVariant,
|
|
66
|
+
isSelected,
|
|
67
|
+
isDisabled,
|
|
68
|
+
isInvalid,
|
|
69
|
+
className,
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const { rContainerStyle, isCheckboxPressed, isAllAnimationsDisabled } =
|
|
73
|
+
useCheckboxRootAnimation({
|
|
74
|
+
animation,
|
|
75
|
+
});
|
|
76
|
+
|
|
77
|
+
const rootStyle = isAnimatedStyleActive
|
|
78
|
+
? [rContainerStyle, checkboxStyleSheet.root, style]
|
|
79
|
+
: [checkboxStyleSheet.root, style];
|
|
80
|
+
|
|
81
|
+
const animationContextValue = useMemo(
|
|
82
|
+
() => ({
|
|
83
|
+
isCheckboxPressed,
|
|
84
|
+
}),
|
|
85
|
+
[isCheckboxPressed]
|
|
86
|
+
);
|
|
87
|
+
|
|
88
|
+
const animationSettingsContextValue = useMemo(
|
|
89
|
+
() => ({
|
|
90
|
+
isAllAnimationsDisabled,
|
|
91
|
+
}),
|
|
92
|
+
[isAllAnimationsDisabled]
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
const handlePressIn = useCallback(
|
|
96
|
+
(event: GestureResponderEvent) => {
|
|
97
|
+
isCheckboxPressed.set(true);
|
|
98
|
+
onPressIn?.(event);
|
|
99
|
+
},
|
|
100
|
+
[isCheckboxPressed, onPressIn]
|
|
101
|
+
);
|
|
102
|
+
|
|
103
|
+
const handlePressOut = useCallback(
|
|
104
|
+
(event: GestureResponderEvent) => {
|
|
105
|
+
isCheckboxPressed.set(false);
|
|
106
|
+
onPressOut?.(event);
|
|
107
|
+
},
|
|
108
|
+
[isCheckboxPressed, onPressOut]
|
|
109
|
+
);
|
|
110
|
+
|
|
111
|
+
const renderProps: CheckboxRenderProps = {
|
|
112
|
+
isSelected,
|
|
113
|
+
isInvalid,
|
|
114
|
+
isDisabled,
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
const content =
|
|
118
|
+
typeof children === 'function'
|
|
119
|
+
? children(renderProps)
|
|
120
|
+
: (children ?? <CheckboxIndicator />);
|
|
121
|
+
|
|
122
|
+
return (
|
|
123
|
+
<AnimationSettingsProvider value={animationSettingsContextValue}>
|
|
124
|
+
<CheckboxAnimationProvider value={animationContextValue}>
|
|
125
|
+
<AnimatedRootView
|
|
126
|
+
ref={ref}
|
|
127
|
+
className={rootClassName}
|
|
128
|
+
isSelected={isSelected}
|
|
129
|
+
onSelectedChange={onSelectedChange}
|
|
130
|
+
isDisabled={isDisabled}
|
|
131
|
+
isInvalid={isInvalid}
|
|
132
|
+
hitSlop={hitSlop}
|
|
133
|
+
onPressIn={handlePressIn}
|
|
134
|
+
onPressOut={handlePressOut}
|
|
135
|
+
style={rootStyle}
|
|
136
|
+
{...restProps}
|
|
137
|
+
>
|
|
138
|
+
{content}
|
|
139
|
+
</AnimatedRootView>
|
|
140
|
+
</CheckboxAnimationProvider>
|
|
141
|
+
</AnimationSettingsProvider>
|
|
142
|
+
);
|
|
143
|
+
}
|
|
144
|
+
);
|
|
145
|
+
|
|
146
|
+
// --------------------------------------------------
|
|
147
|
+
|
|
148
|
+
const CheckboxIndicator = forwardRef<
|
|
149
|
+
CheckboxPrimitivesTypes.IndicatorRef,
|
|
150
|
+
CheckboxIndicatorProps
|
|
151
|
+
>((props, ref) => {
|
|
152
|
+
const {
|
|
153
|
+
children,
|
|
154
|
+
iconProps,
|
|
155
|
+
className,
|
|
156
|
+
style,
|
|
157
|
+
animation,
|
|
158
|
+
isAnimatedStyleActive = true,
|
|
159
|
+
...restProps
|
|
160
|
+
} = props;
|
|
161
|
+
|
|
162
|
+
const { isSelected, isDisabled, isInvalid } = useCheckbox();
|
|
163
|
+
|
|
164
|
+
const themeColorAccentForeground = useThemeColor('accent-foreground');
|
|
165
|
+
|
|
166
|
+
const iconSize = iconProps?.size;
|
|
167
|
+
const iconStrokeWidth = iconProps?.strokeWidth;
|
|
168
|
+
const iconColor = iconProps?.color ?? themeColorAccentForeground;
|
|
169
|
+
const iconEnterDuration = iconProps?.enterDuration;
|
|
170
|
+
const iconExitDuration = iconProps?.exitDuration;
|
|
171
|
+
|
|
172
|
+
const indicatorClassName = checkboxClassNames.indicator({
|
|
173
|
+
isInvalid,
|
|
174
|
+
className,
|
|
175
|
+
});
|
|
176
|
+
|
|
177
|
+
const { rContainerStyle, isAnimationDisabled } =
|
|
178
|
+
useCheckboxIndicatorAnimation({
|
|
179
|
+
animation,
|
|
180
|
+
isSelected,
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
const indicatorStyle = isAnimatedStyleActive
|
|
184
|
+
? [rContainerStyle, style]
|
|
185
|
+
: style;
|
|
186
|
+
|
|
187
|
+
const renderProps: CheckboxRenderProps = {
|
|
188
|
+
isSelected,
|
|
189
|
+
isInvalid: isInvalid ?? false,
|
|
190
|
+
isDisabled: isDisabled ?? false,
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
const content =
|
|
194
|
+
typeof children === 'function'
|
|
195
|
+
? children(renderProps)
|
|
196
|
+
: (children ??
|
|
197
|
+
(isAnimationDisabled ? (
|
|
198
|
+
<View className="translate-y-px">
|
|
199
|
+
<CheckIcon size={iconSize} color={iconColor} />
|
|
200
|
+
</View>
|
|
201
|
+
) : (
|
|
202
|
+
<AnimatedCheckIcon
|
|
203
|
+
size={iconSize}
|
|
204
|
+
strokeWidth={iconStrokeWidth}
|
|
205
|
+
color={iconColor}
|
|
206
|
+
isSelected={isSelected}
|
|
207
|
+
enterDuration={iconEnterDuration}
|
|
208
|
+
exitDuration={iconExitDuration}
|
|
209
|
+
/>
|
|
210
|
+
)));
|
|
211
|
+
|
|
212
|
+
return (
|
|
213
|
+
<AnimatedIndicatorView
|
|
214
|
+
ref={ref}
|
|
215
|
+
className={indicatorClassName}
|
|
216
|
+
style={indicatorStyle}
|
|
217
|
+
{...restProps}
|
|
218
|
+
>
|
|
219
|
+
{content}
|
|
220
|
+
</AnimatedIndicatorView>
|
|
221
|
+
);
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// --------------------------------------------------
|
|
225
|
+
|
|
226
|
+
CheckboxRoot.displayName = DISPLAY_NAME.CHECKBOX_ROOT;
|
|
227
|
+
CheckboxIndicator.displayName = DISPLAY_NAME.CHECKBOX_INDICATOR;
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Compound Checkbox component with sub-components
|
|
231
|
+
*
|
|
232
|
+
* @component Checkbox - Main container that handles selection state and user interaction.
|
|
233
|
+
* Renders default indicator with checkmark if no children provided.
|
|
234
|
+
* Animates background and border color based on selection state.
|
|
235
|
+
*
|
|
236
|
+
* @component Checkbox.Indicator - Optional checkmark container that scales in when selected.
|
|
237
|
+
* Renders default check icon if no children provided. Handles enter/exit animations
|
|
238
|
+
* and can be replaced with custom indicators.
|
|
239
|
+
*
|
|
240
|
+
* Props flow from Checkbox to sub-components via context (isSelected).
|
|
241
|
+
* The checkbox supports controlled and uncontrolled modes through isSelected/onSelectedChange.
|
|
242
|
+
*
|
|
243
|
+
* @see Full documentation: https://v3.heroui.com/docs/native/components/checkbox
|
|
244
|
+
*/
|
|
245
|
+
const CompoundCheckbox = Object.assign(CheckboxRoot, {
|
|
246
|
+
/** @optional Custom indicator with scale animations */
|
|
247
|
+
Indicator: CheckboxIndicator,
|
|
248
|
+
});
|
|
249
|
+
|
|
250
|
+
export { useCheckbox };
|
|
251
|
+
export default CompoundCheckbox;
|