@thewhileloop/whileui 1.2.3 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +264 -88
- package/dist/blocks/chat/chat.d.ts +3 -4
- package/dist/blocks/chat/chat.js +29 -17
- package/dist/blocks/chat/index.d.ts +0 -1
- package/dist/blocks/chat/index.js +0 -1
- package/dist/blocks/commerce/checkout-summary.d.ts +1 -2
- package/dist/blocks/commerce/checkout-summary.js +16 -4
- package/dist/blocks/commerce/feature-gate.d.ts +1 -2
- package/dist/blocks/commerce/feature-gate.js +14 -4
- package/dist/blocks/commerce/index.d.ts +0 -1
- package/dist/blocks/commerce/index.js +0 -1
- package/dist/blocks/commerce/metric-card.d.ts +10 -31
- package/dist/blocks/commerce/metric-card.js +7 -3
- package/dist/blocks/commerce/plan-toggle.d.ts +1 -2
- package/dist/blocks/commerce/plan-toggle.js +11 -9
- package/dist/blocks/commerce/pricing-card.d.ts +1 -2
- package/dist/blocks/commerce/pricing-card.js +23 -6
- package/dist/blocks/commerce/product-card.d.ts +1 -2
- package/dist/blocks/commerce/product-card.js +23 -9
- package/dist/blocks/commerce/subscription-card.d.ts +1 -2
- package/dist/blocks/commerce/subscription-card.js +6 -3
- package/dist/blocks/commerce/upgrade-banner.d.ts +1 -2
- package/dist/blocks/commerce/upgrade-banner.js +13 -3
- package/dist/blocks/commerce/usage-bar.d.ts +1 -2
- package/dist/blocks/commerce/usage-bar.js +4 -2
- package/dist/blocks/datepicker/date-range-picker-modal.d.ts +2 -3
- package/dist/blocks/datepicker/date-range-picker-modal.js +25 -7
- package/dist/blocks/datepicker/datepicker-inline.d.ts +1 -2
- package/dist/blocks/datepicker/datepicker-inline.js +9 -3
- package/dist/blocks/datepicker/datepicker-modal.d.ts +2 -3
- package/dist/blocks/datepicker/datepicker-modal.js +44 -18
- package/dist/blocks/datepicker/index.d.ts +0 -1
- package/dist/blocks/datepicker/index.js +0 -1
- package/dist/blocks/datepicker/use-calendar-theme.d.ts +0 -1
- package/dist/blocks/datepicker/use-calendar-theme.js +0 -1
- package/dist/blocks/layout/action-bar.d.ts +1 -2
- package/dist/blocks/layout/action-bar.js +0 -1
- package/dist/blocks/layout/app-shell.d.ts +1 -2
- package/dist/blocks/layout/app-shell.js +11 -5
- package/dist/blocks/layout/confirm-action-sheet.d.ts +1 -2
- package/dist/blocks/layout/confirm-action-sheet.js +18 -6
- package/dist/blocks/layout/content-skeleton.d.ts +1 -2
- package/dist/blocks/layout/content-skeleton.js +22 -9
- package/dist/blocks/layout/docked-input.d.ts +11 -0
- package/dist/blocks/layout/docked-input.js +27 -0
- package/dist/blocks/layout/empty-state.d.ts +1 -2
- package/dist/blocks/layout/empty-state.js +10 -5
- package/dist/blocks/layout/error-boundary.d.ts +1 -2
- package/dist/blocks/layout/error-boundary.js +0 -2
- package/dist/blocks/layout/error-state.d.ts +1 -2
- package/dist/blocks/layout/error-state.js +0 -2
- package/dist/blocks/layout/form-modal-screen.d.ts +1 -2
- package/dist/blocks/layout/form-modal-screen.js +24 -21
- package/dist/blocks/layout/index.d.ts +2 -2
- package/dist/blocks/layout/index.js +2 -2
- package/dist/blocks/layout/keyboard-aware-screen.d.ts +14 -0
- package/dist/blocks/layout/keyboard-aware-screen.js +12 -0
- package/dist/blocks/layout/loading-screen.d.ts +1 -2
- package/dist/blocks/layout/loading-screen.js +6 -8
- package/dist/blocks/layout/page-skeleton.d.ts +1 -2
- package/dist/blocks/layout/page-skeleton.js +38 -20
- package/dist/blocks/layout/pull-to-refresh-scroll-view.d.ts +8 -4
- package/dist/blocks/layout/pull-to-refresh-scroll-view.js +17 -4
- package/dist/blocks/layout/screen-skeleton.d.ts +1 -2
- package/dist/blocks/layout/screen-skeleton.js +0 -1
- package/dist/blocks/layout/sheet.d.ts +9 -9
- package/dist/blocks/layout/sheet.js +51 -21
- package/dist/blocks/layout/smart-input.d.ts +9 -3
- package/dist/blocks/layout/smart-input.js +136 -9
- package/dist/blocks/lists/index.d.ts +0 -2
- package/dist/blocks/lists/index.js +0 -2
- package/dist/blocks/lists/list-item.d.ts +1 -2
- package/dist/blocks/lists/list-item.js +20 -6
- package/dist/blocks/lists/notification-item.d.ts +1 -2
- package/dist/blocks/lists/notification-item.js +19 -6
- package/dist/blocks/lists/timeline-feed.d.ts +1 -2
- package/dist/blocks/lists/timeline-feed.js +4 -2
- package/dist/blocks/media/index.d.ts +0 -1
- package/dist/blocks/media/index.js +0 -1
- package/dist/blocks/media/smart-image.d.ts +39 -99
- package/dist/blocks/media/smart-image.js +24 -8
- package/dist/blocks/navigation/bottom-nav.d.ts +1 -2
- package/dist/blocks/navigation/bottom-nav.js +7 -4
- package/dist/blocks/navigation/drawer-menu.d.ts +1 -2
- package/dist/blocks/navigation/drawer-menu.js +117 -64
- package/dist/blocks/navigation/floating-bottom-nav.d.ts +1 -2
- package/dist/blocks/navigation/floating-bottom-nav.js +14 -5
- package/dist/blocks/navigation/header.d.ts +2 -3
- package/dist/blocks/navigation/header.js +13 -5
- package/dist/blocks/navigation/index.d.ts +0 -2
- package/dist/blocks/navigation/index.js +0 -2
- package/dist/blocks/navigation/tab-bar.d.ts +1 -2
- package/dist/blocks/navigation/tab-bar.js +22 -10
- package/dist/blocks/splash/index.d.ts +0 -1
- package/dist/blocks/splash/index.js +0 -1
- package/dist/blocks/splash/splash-screen.d.ts +3 -4
- package/dist/blocks/splash/splash-screen.js +15 -11
- package/dist/components/accordion/accordion.d.ts +4 -5
- package/dist/components/accordion/accordion.js +6 -7
- package/dist/components/accordion/index.d.ts +0 -1
- package/dist/components/accordion/index.js +0 -1
- package/dist/components/alert/alert.d.ts +23 -56
- package/dist/components/alert/alert.js +20 -9
- package/dist/components/alert/index.d.ts +0 -1
- package/dist/components/alert/index.js +0 -1
- package/dist/components/alert-dialog/alert-dialog.d.ts +9 -10
- package/dist/components/alert-dialog/alert-dialog.js +175 -54
- package/dist/components/alert-dialog/index.d.ts +0 -1
- package/dist/components/alert-dialog/index.js +0 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts +1 -2
- package/dist/components/aspect-ratio/aspect-ratio.js +0 -3
- package/dist/components/aspect-ratio/index.d.ts +0 -1
- package/dist/components/aspect-ratio/index.js +0 -1
- package/dist/components/avatar/avatar.d.ts +20 -48
- package/dist/components/avatar/avatar.js +8 -9
- package/dist/components/avatar/index.d.ts +0 -1
- package/dist/components/avatar/index.js +0 -1
- package/dist/components/badge/badge.d.ts +86 -215
- package/dist/components/badge/badge.js +21 -9
- package/dist/components/badge/index.d.ts +0 -1
- package/dist/components/badge/index.js +0 -1
- package/dist/components/button/button.d.ts +75 -193
- package/dist/components/button/button.js +62 -33
- package/dist/components/button/index.d.ts +0 -1
- package/dist/components/button/index.js +0 -1
- package/dist/components/card/card.d.ts +32 -74
- package/dist/components/card/card.js +29 -15
- package/dist/components/card/index.d.ts +0 -1
- package/dist/components/card/index.js +0 -1
- package/dist/components/checkbox/checkbox.d.ts +1 -2
- package/dist/components/checkbox/checkbox.js +15 -2
- package/dist/components/checkbox/index.d.ts +0 -1
- package/dist/components/checkbox/index.js +0 -1
- package/dist/components/collapsible/collapsible.d.ts +4 -4
- package/dist/components/collapsible/collapsible.js +8 -11
- package/dist/components/collapsible/index.d.ts +0 -1
- package/dist/components/collapsible/index.js +0 -1
- package/dist/components/container/container.d.ts +74 -0
- package/dist/components/container/container.js +43 -0
- package/dist/components/container/index.d.ts +1 -0
- package/dist/components/container/index.js +1 -0
- package/dist/components/context-menu/context-menu.d.ts +6 -7
- package/dist/components/context-menu/context-menu.js +42 -12
- package/dist/components/context-menu/index.d.ts +0 -1
- package/dist/components/context-menu/index.js +0 -1
- package/dist/components/data-row/data-row.d.ts +18 -39
- package/dist/components/data-row/data-row.js +36 -18
- package/dist/components/data-row/index.d.ts +0 -1
- package/dist/components/data-row/index.js +0 -1
- package/dist/components/dialog/dialog.d.ts +8 -9
- package/dist/components/dialog/dialog.js +48 -24
- package/dist/components/dialog/index.d.ts +0 -1
- package/dist/components/dialog/index.js +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts +6 -7
- package/dist/components/dropdown-menu/dropdown-menu.js +45 -11
- package/dist/components/dropdown-menu/index.d.ts +0 -1
- package/dist/components/dropdown-menu/index.js +0 -1
- package/dist/components/form-field/form-field.d.ts +31 -88
- package/dist/components/form-field/form-field.js +27 -14
- package/dist/components/form-field/index.d.ts +0 -1
- package/dist/components/form-field/index.js +0 -1
- package/dist/components/hover-card/hover-card.d.ts +4 -4
- package/dist/components/hover-card/hover-card.js +12 -3
- package/dist/components/hover-card/index.d.ts +0 -1
- package/dist/components/hover-card/index.js +0 -1
- package/dist/components/input/index.d.ts +0 -1
- package/dist/components/input/index.js +0 -1
- package/dist/components/input/input.d.ts +12 -32
- package/dist/components/input/input.js +18 -3
- package/dist/components/label/index.d.ts +0 -1
- package/dist/components/label/index.js +0 -1
- package/dist/components/label/label.d.ts +3 -4
- package/dist/components/label/label.js +0 -1
- package/dist/components/labeled-field/index.d.ts +0 -1
- package/dist/components/labeled-field/index.js +0 -1
- package/dist/components/labeled-field/labeled-field.d.ts +4 -4
- package/dist/components/labeled-field/labeled-field.js +10 -2
- package/dist/components/menubar/index.d.ts +0 -1
- package/dist/components/menubar/index.js +0 -1
- package/dist/components/menubar/menubar.d.ts +7 -8
- package/dist/components/menubar/menubar.js +48 -15
- package/dist/components/numeric-input/index.d.ts +0 -1
- package/dist/components/numeric-input/index.js +0 -1
- package/dist/components/numeric-input/numeric-input.d.ts +29 -83
- package/dist/components/numeric-input/numeric-input.js +93 -73
- package/dist/components/otp-input/index.d.ts +0 -1
- package/dist/components/otp-input/index.js +0 -1
- package/dist/components/otp-input/otp-input.d.ts +22 -67
- package/dist/components/otp-input/otp-input.js +13 -9
- package/dist/components/popover/index.d.ts +0 -1
- package/dist/components/popover/index.js +0 -1
- package/dist/components/popover/popover.d.ts +8 -5
- package/dist/components/popover/popover.js +21 -4
- package/dist/components/pressable/index.d.ts +0 -1
- package/dist/components/pressable/index.js +0 -1
- package/dist/components/pressable/pressable.d.ts +10 -4
- package/dist/components/pressable/pressable.js +47 -4
- package/dist/components/progress/index.d.ts +0 -1
- package/dist/components/progress/index.js +0 -1
- package/dist/components/progress/progress.d.ts +15 -40
- package/dist/components/progress/progress.js +5 -2
- package/dist/components/radio-group/index.d.ts +0 -1
- package/dist/components/radio-group/index.js +0 -1
- package/dist/components/radio-group/radio-group.d.ts +2 -3
- package/dist/components/radio-group/radio-group.js +16 -7
- package/dist/components/row/index.d.ts +0 -1
- package/dist/components/row/index.js +0 -1
- package/dist/components/row/row.d.ts +63 -164
- package/dist/components/row/row.js +0 -1
- package/dist/components/segmented-control/index.d.ts +0 -1
- package/dist/components/segmented-control/index.js +0 -1
- package/dist/components/segmented-control/segmented-control.d.ts +72 -245
- package/dist/components/segmented-control/segmented-control.js +57 -24
- package/dist/components/select/index.d.ts +0 -1
- package/dist/components/select/index.js +0 -1
- package/dist/components/select/select.d.ts +23 -27
- package/dist/components/select/select.js +54 -12
- package/dist/components/separator/index.d.ts +0 -1
- package/dist/components/separator/index.js +0 -1
- package/dist/components/separator/separator.d.ts +3 -4
- package/dist/components/separator/separator.js +0 -1
- package/dist/components/skeleton/index.d.ts +0 -1
- package/dist/components/skeleton/index.js +0 -1
- package/dist/components/skeleton/skeleton.d.ts +10 -31
- package/dist/components/skeleton/skeleton.js +7 -8
- package/dist/components/spinner/index.d.ts +0 -1
- package/dist/components/spinner/index.js +0 -1
- package/dist/components/spinner/spinner.d.ts +13 -38
- package/dist/components/spinner/spinner.js +4 -2
- package/dist/components/stack/index.d.ts +0 -1
- package/dist/components/stack/index.js +0 -1
- package/dist/components/stack/stack.d.ts +63 -164
- package/dist/components/stack/stack.js +0 -1
- package/dist/components/switch/index.d.ts +0 -1
- package/dist/components/switch/index.js +0 -1
- package/dist/components/switch/switch.d.ts +1 -2
- package/dist/components/switch/switch.js +21 -2
- package/dist/components/tabs/index.d.ts +0 -1
- package/dist/components/tabs/index.js +0 -1
- package/dist/components/tabs/tabs.d.ts +13 -34
- package/dist/components/tabs/tabs.js +42 -12
- package/dist/components/text/index.d.ts +0 -1
- package/dist/components/text/index.js +0 -1
- package/dist/components/text/text.d.ts +51 -132
- package/dist/components/text/text.js +0 -1
- package/dist/components/textarea/index.d.ts +0 -1
- package/dist/components/textarea/index.js +0 -1
- package/dist/components/textarea/textarea.d.ts +15 -40
- package/dist/components/textarea/textarea.js +17 -9
- package/dist/components/toast/index.d.ts +0 -1
- package/dist/components/toast/index.js +0 -1
- package/dist/components/toast/toast.d.ts +15 -40
- package/dist/components/toast/toast.js +40 -24
- package/dist/components/toggle/index.d.ts +0 -1
- package/dist/components/toggle/index.js +0 -1
- package/dist/components/toggle/toggle.d.ts +44 -141
- package/dist/components/toggle/toggle.js +32 -16
- package/dist/components/toggle-group/index.d.ts +0 -1
- package/dist/components/toggle-group/index.js +0 -1
- package/dist/components/toggle-group/toggle-group.d.ts +45 -142
- package/dist/components/toggle-group/toggle-group.js +36 -19
- package/dist/components/tooltip/index.d.ts +0 -1
- package/dist/components/tooltip/index.js +0 -1
- package/dist/components/tooltip/tooltip.d.ts +4 -4
- package/dist/components/tooltip/tooltip.js +20 -3
- package/dist/components/view/index.d.ts +0 -1
- package/dist/components/view/index.js +0 -1
- package/dist/components/view/view.d.ts +3 -4
- package/dist/components/view/view.js +0 -1
- package/dist/index.d.ts +9 -3
- package/dist/index.js +9 -7
- package/dist/lib/cn.d.ts +0 -1
- package/dist/lib/cn.js +0 -1
- package/dist/lib/compose-event-handlers.d.ts +15 -0
- package/dist/lib/compose-event-handlers.js +20 -0
- package/dist/lib/focus-ring.d.ts +25 -0
- package/dist/lib/focus-ring.js +25 -0
- package/dist/lib/font-context.d.ts +1 -1
- package/dist/lib/font-context.js +6 -4
- package/dist/lib/frosted-surface.d.ts +0 -1
- package/dist/lib/frosted-surface.js +31 -6
- package/dist/lib/interaction-tokens.d.ts +12 -1
- package/dist/lib/interaction-tokens.js +27 -13
- package/dist/lib/motion-policy.d.ts +25 -0
- package/dist/lib/motion-policy.js +97 -0
- package/dist/lib/overlay-insets.d.ts +17 -0
- package/dist/lib/overlay-insets.js +23 -0
- package/dist/lib/portal.d.ts +0 -1
- package/dist/lib/portal.js +0 -1
- package/dist/lib/react-native-classname.d.ts +0 -1
- package/dist/lib/react-native-classname.js +0 -1
- package/dist/lib/recipes.d.ts +30 -0
- package/dist/lib/recipes.js +138 -0
- package/dist/lib/ref-types.d.ts +3 -0
- package/dist/lib/ref-types.js +1 -0
- package/dist/lib/tap-only.d.ts +11 -0
- package/dist/lib/tap-only.js +24 -0
- package/dist/lib/theme-bridge.d.ts +4 -3
- package/dist/lib/theme-bridge.js +24 -12
- package/dist/lib/theme-colors.d.ts +2 -46
- package/dist/lib/theme-colors.js +25 -226
- package/dist/lib/theme-contract.d.ts +78 -0
- package/dist/lib/theme-contract.js +481 -0
- package/dist/lib/theme-derive.d.ts +4 -0
- package/dist/lib/theme-derive.js +80 -0
- package/dist/lib/theme-presets.d.ts +31 -0
- package/dist/lib/theme-presets.js +221 -0
- package/dist/lib/tv.d.ts +0 -1
- package/dist/lib/tv.js +0 -1
- package/dist/lib/visual-token-contract.d.ts +110 -0
- package/dist/lib/visual-token-contract.js +583 -0
- package/dist/lib/visual-tokens.d.ts +2 -38
- package/dist/lib/visual-tokens.js +22 -75
- package/dist/tokens.d.ts +4 -0
- package/dist/tokens.js +6 -0
- package/dist/vite.d.ts +0 -1
- package/dist/vite.js +0 -1
- package/package.json +40 -29
- package/dist/blocks/auth/forgot-password-form.d.ts +0 -10
- package/dist/blocks/auth/forgot-password-form.d.ts.map +0 -1
- package/dist/blocks/auth/forgot-password-form.js +0 -17
- package/dist/blocks/auth/forgot-password-form.js.map +0 -1
- package/dist/blocks/auth/index.d.ts +0 -8
- package/dist/blocks/auth/index.d.ts.map +0 -1
- package/dist/blocks/auth/index.js +0 -8
- package/dist/blocks/auth/index.js.map +0 -1
- package/dist/blocks/auth/reset-password-form.d.ts +0 -9
- package/dist/blocks/auth/reset-password-form.d.ts.map +0 -1
- package/dist/blocks/auth/reset-password-form.js +0 -16
- package/dist/blocks/auth/reset-password-form.js.map +0 -1
- package/dist/blocks/auth/sign-in-form.d.ts +0 -17
- package/dist/blocks/auth/sign-in-form.d.ts.map +0 -1
- package/dist/blocks/auth/sign-in-form.js +0 -19
- package/dist/blocks/auth/sign-in-form.js.map +0 -1
- package/dist/blocks/auth/sign-up-form.d.ts +0 -17
- package/dist/blocks/auth/sign-up-form.d.ts.map +0 -1
- package/dist/blocks/auth/sign-up-form.js +0 -21
- package/dist/blocks/auth/sign-up-form.js.map +0 -1
- package/dist/blocks/auth/social-connections.d.ts +0 -10
- package/dist/blocks/auth/social-connections.d.ts.map +0 -1
- package/dist/blocks/auth/social-connections.js +0 -8
- package/dist/blocks/auth/social-connections.js.map +0 -1
- package/dist/blocks/auth/user-menu.d.ts +0 -12
- package/dist/blocks/auth/user-menu.d.ts.map +0 -1
- package/dist/blocks/auth/user-menu.js +0 -10
- package/dist/blocks/auth/user-menu.js.map +0 -1
- package/dist/blocks/auth/verify-email-form.d.ts +0 -10
- package/dist/blocks/auth/verify-email-form.d.ts.map +0 -1
- package/dist/blocks/auth/verify-email-form.js +0 -17
- package/dist/blocks/auth/verify-email-form.js.map +0 -1
- package/dist/blocks/chat/chat.d.ts.map +0 -1
- package/dist/blocks/chat/chat.js.map +0 -1
- package/dist/blocks/chat/index.d.ts.map +0 -1
- package/dist/blocks/chat/index.js.map +0 -1
- package/dist/blocks/commerce/checkout-summary.d.ts.map +0 -1
- package/dist/blocks/commerce/checkout-summary.js.map +0 -1
- package/dist/blocks/commerce/feature-gate.d.ts.map +0 -1
- package/dist/blocks/commerce/feature-gate.js.map +0 -1
- package/dist/blocks/commerce/index.d.ts.map +0 -1
- package/dist/blocks/commerce/index.js.map +0 -1
- package/dist/blocks/commerce/metric-card.d.ts.map +0 -1
- package/dist/blocks/commerce/metric-card.js.map +0 -1
- package/dist/blocks/commerce/plan-toggle.d.ts.map +0 -1
- package/dist/blocks/commerce/plan-toggle.js.map +0 -1
- package/dist/blocks/commerce/pricing-card.d.ts.map +0 -1
- package/dist/blocks/commerce/pricing-card.js.map +0 -1
- package/dist/blocks/commerce/product-card.d.ts.map +0 -1
- package/dist/blocks/commerce/product-card.js.map +0 -1
- package/dist/blocks/commerce/subscription-card.d.ts.map +0 -1
- package/dist/blocks/commerce/subscription-card.js.map +0 -1
- package/dist/blocks/commerce/upgrade-banner.d.ts.map +0 -1
- package/dist/blocks/commerce/upgrade-banner.js.map +0 -1
- package/dist/blocks/commerce/usage-bar.d.ts.map +0 -1
- package/dist/blocks/commerce/usage-bar.js.map +0 -1
- package/dist/blocks/datepicker/date-range-picker-modal.d.ts.map +0 -1
- package/dist/blocks/datepicker/date-range-picker-modal.js.map +0 -1
- package/dist/blocks/datepicker/datepicker-inline.d.ts.map +0 -1
- package/dist/blocks/datepicker/datepicker-inline.js.map +0 -1
- package/dist/blocks/datepicker/datepicker-modal.d.ts.map +0 -1
- package/dist/blocks/datepicker/datepicker-modal.js.map +0 -1
- package/dist/blocks/datepicker/index.d.ts.map +0 -1
- package/dist/blocks/datepicker/index.js.map +0 -1
- package/dist/blocks/datepicker/use-calendar-theme.d.ts.map +0 -1
- package/dist/blocks/datepicker/use-calendar-theme.js.map +0 -1
- package/dist/blocks/layout/action-bar.d.ts.map +0 -1
- package/dist/blocks/layout/action-bar.js.map +0 -1
- package/dist/blocks/layout/app-shell.d.ts.map +0 -1
- package/dist/blocks/layout/app-shell.js.map +0 -1
- package/dist/blocks/layout/confirm-action-sheet.d.ts.map +0 -1
- package/dist/blocks/layout/confirm-action-sheet.js.map +0 -1
- package/dist/blocks/layout/content-skeleton.d.ts.map +0 -1
- package/dist/blocks/layout/content-skeleton.js.map +0 -1
- package/dist/blocks/layout/empty-state.d.ts.map +0 -1
- package/dist/blocks/layout/empty-state.js.map +0 -1
- package/dist/blocks/layout/error-boundary.d.ts.map +0 -1
- package/dist/blocks/layout/error-boundary.js.map +0 -1
- package/dist/blocks/layout/error-state.d.ts.map +0 -1
- package/dist/blocks/layout/error-state.js.map +0 -1
- package/dist/blocks/layout/form-modal-screen.d.ts.map +0 -1
- package/dist/blocks/layout/form-modal-screen.js.map +0 -1
- package/dist/blocks/layout/index.d.ts.map +0 -1
- package/dist/blocks/layout/index.js.map +0 -1
- package/dist/blocks/layout/loading-screen.d.ts.map +0 -1
- package/dist/blocks/layout/loading-screen.js.map +0 -1
- package/dist/blocks/layout/onboarding-screen.d.ts +0 -19
- package/dist/blocks/layout/onboarding-screen.d.ts.map +0 -1
- package/dist/blocks/layout/onboarding-screen.js +0 -35
- package/dist/blocks/layout/onboarding-screen.js.map +0 -1
- package/dist/blocks/layout/page-skeleton.d.ts.map +0 -1
- package/dist/blocks/layout/page-skeleton.js.map +0 -1
- package/dist/blocks/layout/pull-to-refresh-scroll-view.d.ts.map +0 -1
- package/dist/blocks/layout/pull-to-refresh-scroll-view.js.map +0 -1
- package/dist/blocks/layout/screen-skeleton.d.ts.map +0 -1
- package/dist/blocks/layout/screen-skeleton.js.map +0 -1
- package/dist/blocks/layout/sheet.d.ts.map +0 -1
- package/dist/blocks/layout/sheet.js.map +0 -1
- package/dist/blocks/layout/smart-image.d.ts +0 -9
- package/dist/blocks/layout/smart-image.d.ts.map +0 -1
- package/dist/blocks/layout/smart-image.js +0 -23
- package/dist/blocks/layout/smart-image.js.map +0 -1
- package/dist/blocks/layout/smart-input.d.ts.map +0 -1
- package/dist/blocks/layout/smart-input.js.map +0 -1
- package/dist/blocks/lists/index.d.ts.map +0 -1
- package/dist/blocks/lists/index.js.map +0 -1
- package/dist/blocks/lists/list-item.d.ts.map +0 -1
- package/dist/blocks/lists/list-item.js.map +0 -1
- package/dist/blocks/lists/notification-item.d.ts.map +0 -1
- package/dist/blocks/lists/notification-item.js.map +0 -1
- package/dist/blocks/lists/swipeable-item.d.ts +0 -17
- package/dist/blocks/lists/swipeable-item.d.ts.map +0 -1
- package/dist/blocks/lists/swipeable-item.js +0 -65
- package/dist/blocks/lists/swipeable-item.js.map +0 -1
- package/dist/blocks/lists/timeline-feed.d.ts.map +0 -1
- package/dist/blocks/lists/timeline-feed.js.map +0 -1
- package/dist/blocks/media/index.d.ts.map +0 -1
- package/dist/blocks/media/index.js.map +0 -1
- package/dist/blocks/media/smart-image.d.ts.map +0 -1
- package/dist/blocks/media/smart-image.js.map +0 -1
- package/dist/blocks/navigation/bottom-nav.d.ts.map +0 -1
- package/dist/blocks/navigation/bottom-nav.js.map +0 -1
- package/dist/blocks/navigation/drawer-menu.d.ts.map +0 -1
- package/dist/blocks/navigation/drawer-menu.js.map +0 -1
- package/dist/blocks/navigation/floating-bottom-nav.d.ts.map +0 -1
- package/dist/blocks/navigation/floating-bottom-nav.js.map +0 -1
- package/dist/blocks/navigation/header.d.ts.map +0 -1
- package/dist/blocks/navigation/header.js.map +0 -1
- package/dist/blocks/navigation/index.d.ts.map +0 -1
- package/dist/blocks/navigation/index.js.map +0 -1
- package/dist/blocks/navigation/navigation-sidebar.d.ts +0 -25
- package/dist/blocks/navigation/navigation-sidebar.d.ts.map +0 -1
- package/dist/blocks/navigation/navigation-sidebar.js +0 -18
- package/dist/blocks/navigation/navigation-sidebar.js.map +0 -1
- package/dist/blocks/navigation/tab-bar.d.ts.map +0 -1
- package/dist/blocks/navigation/tab-bar.js.map +0 -1
- package/dist/blocks/profile/account-card.d.ts +0 -11
- package/dist/blocks/profile/account-card.d.ts.map +0 -1
- package/dist/blocks/profile/account-card.js +0 -10
- package/dist/blocks/profile/account-card.js.map +0 -1
- package/dist/blocks/profile/index.d.ts +0 -5
- package/dist/blocks/profile/index.d.ts.map +0 -1
- package/dist/blocks/profile/index.js +0 -5
- package/dist/blocks/profile/index.js.map +0 -1
- package/dist/blocks/profile/profile-header.d.ts +0 -27
- package/dist/blocks/profile/profile-header.d.ts.map +0 -1
- package/dist/blocks/profile/profile-header.js +0 -11
- package/dist/blocks/profile/profile-header.js.map +0 -1
- package/dist/blocks/profile/settings-item.d.ts +0 -15
- package/dist/blocks/profile/settings-item.d.ts.map +0 -1
- package/dist/blocks/profile/settings-item.js +0 -11
- package/dist/blocks/profile/settings-item.js.map +0 -1
- package/dist/blocks/profile/settings-section.d.ts +0 -7
- package/dist/blocks/profile/settings-section.d.ts.map +0 -1
- package/dist/blocks/profile/settings-section.js +0 -9
- package/dist/blocks/profile/settings-section.js.map +0 -1
- package/dist/blocks/splash/index.d.ts.map +0 -1
- package/dist/blocks/splash/index.js.map +0 -1
- package/dist/blocks/splash/splash-screen.d.ts.map +0 -1
- package/dist/blocks/splash/splash-screen.js.map +0 -1
- package/dist/components/accordion/accordion.d.ts.map +0 -1
- package/dist/components/accordion/accordion.js.map +0 -1
- package/dist/components/accordion/index.d.ts.map +0 -1
- package/dist/components/accordion/index.js.map +0 -1
- package/dist/components/alert/alert.d.ts.map +0 -1
- package/dist/components/alert/alert.js.map +0 -1
- package/dist/components/alert/index.d.ts.map +0 -1
- package/dist/components/alert/index.js.map +0 -1
- package/dist/components/alert-dialog/alert-dialog.d.ts.map +0 -1
- package/dist/components/alert-dialog/alert-dialog.js.map +0 -1
- package/dist/components/alert-dialog/index.d.ts.map +0 -1
- package/dist/components/alert-dialog/index.js.map +0 -1
- package/dist/components/aspect-ratio/aspect-ratio.d.ts.map +0 -1
- package/dist/components/aspect-ratio/aspect-ratio.js.map +0 -1
- package/dist/components/aspect-ratio/index.d.ts.map +0 -1
- package/dist/components/aspect-ratio/index.js.map +0 -1
- package/dist/components/avatar/avatar.d.ts.map +0 -1
- package/dist/components/avatar/avatar.js.map +0 -1
- package/dist/components/avatar/index.d.ts.map +0 -1
- package/dist/components/avatar/index.js.map +0 -1
- package/dist/components/badge/badge.d.ts.map +0 -1
- package/dist/components/badge/badge.js.map +0 -1
- package/dist/components/badge/index.d.ts.map +0 -1
- package/dist/components/badge/index.js.map +0 -1
- package/dist/components/box/box.d.ts +0 -143
- package/dist/components/box/box.d.ts.map +0 -1
- package/dist/components/box/box.js +0 -38
- package/dist/components/box/box.js.map +0 -1
- package/dist/components/box/index.d.ts +0 -2
- package/dist/components/box/index.d.ts.map +0 -1
- package/dist/components/box/index.js +0 -2
- package/dist/components/box/index.js.map +0 -1
- package/dist/components/button/button.d.ts.map +0 -1
- package/dist/components/button/button.js.map +0 -1
- package/dist/components/button/index.d.ts.map +0 -1
- package/dist/components/button/index.js.map +0 -1
- package/dist/components/card/card.d.ts.map +0 -1
- package/dist/components/card/card.js.map +0 -1
- package/dist/components/card/index.d.ts.map +0 -1
- package/dist/components/card/index.js.map +0 -1
- package/dist/components/checkbox/checkbox.d.ts.map +0 -1
- package/dist/components/checkbox/checkbox.js.map +0 -1
- package/dist/components/checkbox/index.d.ts.map +0 -1
- package/dist/components/checkbox/index.js.map +0 -1
- package/dist/components/collapsible/collapsible.d.ts.map +0 -1
- package/dist/components/collapsible/collapsible.js.map +0 -1
- package/dist/components/collapsible/index.d.ts.map +0 -1
- package/dist/components/collapsible/index.js.map +0 -1
- package/dist/components/context-menu/context-menu.d.ts.map +0 -1
- package/dist/components/context-menu/context-menu.js.map +0 -1
- package/dist/components/context-menu/index.d.ts.map +0 -1
- package/dist/components/context-menu/index.js.map +0 -1
- package/dist/components/data-row/data-row.d.ts.map +0 -1
- package/dist/components/data-row/data-row.js.map +0 -1
- package/dist/components/data-row/index.d.ts.map +0 -1
- package/dist/components/data-row/index.js.map +0 -1
- package/dist/components/dialog/dialog.d.ts.map +0 -1
- package/dist/components/dialog/dialog.js.map +0 -1
- package/dist/components/dialog/index.d.ts.map +0 -1
- package/dist/components/dialog/index.js.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.d.ts.map +0 -1
- package/dist/components/dropdown-menu/dropdown-menu.js.map +0 -1
- package/dist/components/dropdown-menu/index.d.ts.map +0 -1
- package/dist/components/dropdown-menu/index.js.map +0 -1
- package/dist/components/form-field/form-field.d.ts.map +0 -1
- package/dist/components/form-field/form-field.js.map +0 -1
- package/dist/components/form-field/index.d.ts.map +0 -1
- package/dist/components/form-field/index.js.map +0 -1
- package/dist/components/hover-card/hover-card.d.ts.map +0 -1
- package/dist/components/hover-card/hover-card.js.map +0 -1
- package/dist/components/hover-card/index.d.ts.map +0 -1
- package/dist/components/hover-card/index.js.map +0 -1
- package/dist/components/input/index.d.ts.map +0 -1
- package/dist/components/input/index.js.map +0 -1
- package/dist/components/input/input.d.ts.map +0 -1
- package/dist/components/input/input.js.map +0 -1
- package/dist/components/label/index.d.ts.map +0 -1
- package/dist/components/label/index.js.map +0 -1
- package/dist/components/label/label.d.ts.map +0 -1
- package/dist/components/label/label.js.map +0 -1
- package/dist/components/labeled-field/index.d.ts.map +0 -1
- package/dist/components/labeled-field/index.js.map +0 -1
- package/dist/components/labeled-field/labeled-field.d.ts.map +0 -1
- package/dist/components/labeled-field/labeled-field.js.map +0 -1
- package/dist/components/layout/index.d.ts +0 -2
- package/dist/components/layout/index.d.ts.map +0 -1
- package/dist/components/layout/index.js +0 -2
- package/dist/components/layout/index.js.map +0 -1
- package/dist/components/layout/layout.d.ts +0 -395
- package/dist/components/layout/layout.d.ts.map +0 -1
- package/dist/components/layout/layout.js +0 -93
- package/dist/components/layout/layout.js.map +0 -1
- package/dist/components/menubar/index.d.ts.map +0 -1
- package/dist/components/menubar/index.js.map +0 -1
- package/dist/components/menubar/menubar.d.ts.map +0 -1
- package/dist/components/menubar/menubar.js.map +0 -1
- package/dist/components/numeric-input/index.d.ts.map +0 -1
- package/dist/components/numeric-input/index.js.map +0 -1
- package/dist/components/numeric-input/numeric-input.d.ts.map +0 -1
- package/dist/components/numeric-input/numeric-input.js.map +0 -1
- package/dist/components/otp-input/index.d.ts.map +0 -1
- package/dist/components/otp-input/index.js.map +0 -1
- package/dist/components/otp-input/otp-input.d.ts.map +0 -1
- package/dist/components/otp-input/otp-input.js.map +0 -1
- package/dist/components/popover/index.d.ts.map +0 -1
- package/dist/components/popover/index.js.map +0 -1
- package/dist/components/popover/popover.d.ts.map +0 -1
- package/dist/components/popover/popover.js.map +0 -1
- package/dist/components/pressable/index.d.ts.map +0 -1
- package/dist/components/pressable/index.js.map +0 -1
- package/dist/components/pressable/pressable.d.ts.map +0 -1
- package/dist/components/pressable/pressable.js.map +0 -1
- package/dist/components/progress/index.d.ts.map +0 -1
- package/dist/components/progress/index.js.map +0 -1
- package/dist/components/progress/progress.d.ts.map +0 -1
- package/dist/components/progress/progress.js.map +0 -1
- package/dist/components/radio-group/index.d.ts.map +0 -1
- package/dist/components/radio-group/index.js.map +0 -1
- package/dist/components/radio-group/radio-group.d.ts.map +0 -1
- package/dist/components/radio-group/radio-group.js.map +0 -1
- package/dist/components/row/index.d.ts.map +0 -1
- package/dist/components/row/index.js.map +0 -1
- package/dist/components/row/row.d.ts.map +0 -1
- package/dist/components/row/row.js.map +0 -1
- package/dist/components/segmented-control/index.d.ts.map +0 -1
- package/dist/components/segmented-control/index.js.map +0 -1
- package/dist/components/segmented-control/segmented-control.d.ts.map +0 -1
- package/dist/components/segmented-control/segmented-control.js.map +0 -1
- package/dist/components/select/index.d.ts.map +0 -1
- package/dist/components/select/index.js.map +0 -1
- package/dist/components/select/select.d.ts.map +0 -1
- package/dist/components/select/select.js.map +0 -1
- package/dist/components/separator/index.d.ts.map +0 -1
- package/dist/components/separator/index.js.map +0 -1
- package/dist/components/separator/separator.d.ts.map +0 -1
- package/dist/components/separator/separator.js.map +0 -1
- package/dist/components/skeleton/index.d.ts.map +0 -1
- package/dist/components/skeleton/index.js.map +0 -1
- package/dist/components/skeleton/skeleton.d.ts.map +0 -1
- package/dist/components/skeleton/skeleton.js.map +0 -1
- package/dist/components/spinner/index.d.ts.map +0 -1
- package/dist/components/spinner/index.js.map +0 -1
- package/dist/components/spinner/spinner.d.ts.map +0 -1
- package/dist/components/spinner/spinner.js.map +0 -1
- package/dist/components/stack/index.d.ts.map +0 -1
- package/dist/components/stack/index.js.map +0 -1
- package/dist/components/stack/stack.d.ts.map +0 -1
- package/dist/components/stack/stack.js.map +0 -1
- package/dist/components/switch/index.d.ts.map +0 -1
- package/dist/components/switch/index.js.map +0 -1
- package/dist/components/switch/switch.d.ts.map +0 -1
- package/dist/components/switch/switch.js.map +0 -1
- package/dist/components/tabs/index.d.ts.map +0 -1
- package/dist/components/tabs/index.js.map +0 -1
- package/dist/components/tabs/tabs.d.ts.map +0 -1
- package/dist/components/tabs/tabs.js.map +0 -1
- package/dist/components/text/index.d.ts.map +0 -1
- package/dist/components/text/index.js.map +0 -1
- package/dist/components/text/text.d.ts.map +0 -1
- package/dist/components/text/text.js.map +0 -1
- package/dist/components/textarea/index.d.ts.map +0 -1
- package/dist/components/textarea/index.js.map +0 -1
- package/dist/components/textarea/textarea.d.ts.map +0 -1
- package/dist/components/textarea/textarea.js.map +0 -1
- package/dist/components/toast/index.d.ts.map +0 -1
- package/dist/components/toast/index.js.map +0 -1
- package/dist/components/toast/toast.d.ts.map +0 -1
- package/dist/components/toast/toast.js.map +0 -1
- package/dist/components/toggle/index.d.ts.map +0 -1
- package/dist/components/toggle/index.js.map +0 -1
- package/dist/components/toggle/toggle.d.ts.map +0 -1
- package/dist/components/toggle/toggle.js.map +0 -1
- package/dist/components/toggle-group/index.d.ts.map +0 -1
- package/dist/components/toggle-group/index.js.map +0 -1
- package/dist/components/toggle-group/toggle-group.d.ts.map +0 -1
- package/dist/components/toggle-group/toggle-group.js.map +0 -1
- package/dist/components/tooltip/index.d.ts.map +0 -1
- package/dist/components/tooltip/index.js.map +0 -1
- package/dist/components/tooltip/tooltip.d.ts.map +0 -1
- package/dist/components/tooltip/tooltip.js.map +0 -1
- package/dist/components/view/index.d.ts.map +0 -1
- package/dist/components/view/index.js.map +0 -1
- package/dist/components/view/view.d.ts.map +0 -1
- package/dist/components/view/view.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lib/cn.d.ts.map +0 -1
- package/dist/lib/cn.js.map +0 -1
- package/dist/lib/font-context.d.ts.map +0 -1
- package/dist/lib/font-context.js.map +0 -1
- package/dist/lib/frosted-surface.d.ts.map +0 -1
- package/dist/lib/frosted-surface.js.map +0 -1
- package/dist/lib/index.d.ts +0 -6
- package/dist/lib/index.d.ts.map +0 -1
- package/dist/lib/index.js +0 -6
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/interaction-tokens.d.ts.map +0 -1
- package/dist/lib/interaction-tokens.js.map +0 -1
- package/dist/lib/portal.d.ts.map +0 -1
- package/dist/lib/portal.js.map +0 -1
- package/dist/lib/react-native-classname.d.ts.map +0 -1
- package/dist/lib/react-native-classname.js.map +0 -1
- package/dist/lib/theme-bridge.d.ts.map +0 -1
- package/dist/lib/theme-bridge.js.map +0 -1
- package/dist/lib/theme-colors.d.ts.map +0 -1
- package/dist/lib/theme-colors.js.map +0 -1
- package/dist/lib/tv.d.ts.map +0 -1
- package/dist/lib/tv.js.map +0 -1
- package/dist/lib/visual-tokens.d.ts.map +0 -1
- package/dist/lib/visual-tokens.js.map +0 -1
- package/dist/vite.d.ts.map +0 -1
- package/dist/vite.js.map +0 -1
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One focus treatment for every interactive component.
|
|
3
|
+
*
|
|
4
|
+
* Web needs this and native does not: React Native has no `:focus-visible`, and the
|
|
5
|
+
* platforms draw their own focus for hardware keyboards and TV remotes. So these classes
|
|
6
|
+
* are scoped with Uniwind's `web:` selector and compile to nothing elsewhere.
|
|
7
|
+
*
|
|
8
|
+
* `focus-visible`, not `focus`. `:focus` also fires on mouse press, which puts a ring on
|
|
9
|
+
* a button someone just clicked — visually noisy, and it trains people to ignore the ring
|
|
10
|
+
* that keyboard users actually depend on.
|
|
11
|
+
*
|
|
12
|
+
* WCAG 2.4.7 (Focus Visible, AA) requires an indicator. Several components here removed
|
|
13
|
+
* the browser default with `outline-none` and replaced it with nothing, which is the
|
|
14
|
+
* failure this exists to fix — the outline is only safe to remove if a ring takes over.
|
|
15
|
+
*
|
|
16
|
+
* The offset keeps the ring outside the control's own border so the two do not merge
|
|
17
|
+
* into one thick smudge, and `ring-offset-background` fills that gap with the surface
|
|
18
|
+
* colour rather than letting the ring sit on whatever is behind.
|
|
19
|
+
*/
|
|
20
|
+
export const focusRing = 'web:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring web:focus-visible:ring-offset-2 web:focus-visible:ring-offset-background';
|
|
21
|
+
/**
|
|
22
|
+
* For controls drawn flush against an edge or inside a dense row, where an offset ring
|
|
23
|
+
* would be clipped by the parent or collide with a neighbour.
|
|
24
|
+
*/
|
|
25
|
+
export const focusRingInset = 'web:outline-none web:focus-visible:ring-2 web:focus-visible:ring-ring';
|
|
@@ -17,6 +17,7 @@ export interface FontFamilyMap {
|
|
|
17
17
|
}
|
|
18
18
|
export interface ResolvedFont {
|
|
19
19
|
fontFamily: string;
|
|
20
|
+
paddingRight?: number;
|
|
20
21
|
}
|
|
21
22
|
export declare const FontProvider: import("react").Provider<FontFamilyMap | null>;
|
|
22
23
|
export interface ResolvedFontResult {
|
|
@@ -36,4 +37,3 @@ export interface ResolvedFontResult {
|
|
|
36
37
|
* ensures the style prop is the sole source of font info.
|
|
37
38
|
*/
|
|
38
39
|
export declare function useResolveFontFamily(className?: string): ResolvedFontResult | undefined;
|
|
39
|
-
//# sourceMappingURL=font-context.d.ts.map
|
package/dist/lib/font-context.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { createContext, useContext } from 'react';
|
|
2
|
+
import { Platform } from 'react-native';
|
|
2
3
|
const FontContext = createContext(null);
|
|
3
4
|
export const FontProvider = FontContext.Provider;
|
|
4
5
|
const FONT_WEIGHT_RE = /\bfont-(thin|extralight|light|normal|medium|semibold|bold|extrabold|black)\b/g;
|
|
@@ -15,18 +16,20 @@ export function useResolveFontFamily(className) {
|
|
|
15
16
|
const map = useContext(FontContext);
|
|
16
17
|
if (!map)
|
|
17
18
|
return undefined;
|
|
19
|
+
const isNative = Platform.OS !== 'web';
|
|
20
|
+
const paddingRight = isNative ? 4 : undefined;
|
|
18
21
|
if (!className)
|
|
19
22
|
return {
|
|
20
|
-
style: { fontFamily: map['font-normal'] },
|
|
23
|
+
style: { fontFamily: map['font-normal'], paddingRight },
|
|
21
24
|
className: '',
|
|
22
25
|
};
|
|
23
26
|
const classes = className.split(/\s+/);
|
|
24
|
-
let resolved = { fontFamily: map['font-normal'] };
|
|
27
|
+
let resolved = { fontFamily: map['font-normal'], paddingRight };
|
|
25
28
|
for (let i = classes.length - 1; i >= 0; i--) {
|
|
26
29
|
const cls = classes[i];
|
|
27
30
|
const mapped = map[cls];
|
|
28
31
|
if (mapped) {
|
|
29
|
-
resolved = { fontFamily: mapped };
|
|
32
|
+
resolved = { fontFamily: mapped, paddingRight };
|
|
30
33
|
break;
|
|
31
34
|
}
|
|
32
35
|
}
|
|
@@ -38,4 +41,3 @@ export function useResolveFontFamily(className) {
|
|
|
38
41
|
.trim(),
|
|
39
42
|
};
|
|
40
43
|
}
|
|
41
|
-
//# sourceMappingURL=font-context.js.map
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Platform, StyleSheet, View } from 'react-native';
|
|
3
3
|
import { useUniwind } from 'uniwind';
|
|
4
|
+
import { formatRgb, parse } from 'culori';
|
|
4
5
|
import { useThemeColors } from './theme-colors';
|
|
5
6
|
import { useVisualTokens } from './visual-tokens';
|
|
6
7
|
let cachedBlurViewComponent;
|
|
@@ -47,6 +48,26 @@ function resolveTintColor(colors, tintToken) {
|
|
|
47
48
|
return colors.surfaceTranslucent;
|
|
48
49
|
return colors.surfaceElevated;
|
|
49
50
|
}
|
|
51
|
+
function scaleColorAlpha(color, alphaScale) {
|
|
52
|
+
if (alphaScale === 1)
|
|
53
|
+
return color;
|
|
54
|
+
try {
|
|
55
|
+
const parsed = parse(color);
|
|
56
|
+
if (!parsed)
|
|
57
|
+
return color;
|
|
58
|
+
const currentAlpha = typeof parsed.alpha === 'number' ? parsed.alpha : 1;
|
|
59
|
+
if (currentAlpha >= 1)
|
|
60
|
+
return color;
|
|
61
|
+
const nextColor = {
|
|
62
|
+
...parsed,
|
|
63
|
+
alpha: Math.min(1, Math.max(0, currentAlpha * alphaScale)),
|
|
64
|
+
};
|
|
65
|
+
return formatRgb(nextColor) ?? color;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
return color;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
50
71
|
function resolveBlurIntensity(visualTokens, blurIntensity, preset) {
|
|
51
72
|
if (typeof blurIntensity === 'number' && Number.isFinite(blurIntensity)) {
|
|
52
73
|
return Math.max(0, Math.round(blurIntensity));
|
|
@@ -60,7 +81,7 @@ function resolveBlurIntensity(visualTokens, blurIntensity, preset) {
|
|
|
60
81
|
function getInsetAbsoluteFillStyle() {
|
|
61
82
|
const inset = Math.max(0, StyleSheet.hairlineWidth);
|
|
62
83
|
if (inset <= 0) {
|
|
63
|
-
return StyleSheet.
|
|
84
|
+
return StyleSheet.absoluteFill;
|
|
64
85
|
}
|
|
65
86
|
return {
|
|
66
87
|
position: 'absolute',
|
|
@@ -79,7 +100,7 @@ function FrostedOverlay({ intensity, tintColor, highlightColor, saturationPct, h
|
|
|
79
100
|
: undefined;
|
|
80
101
|
const showHighlight = highlightHeight > 0;
|
|
81
102
|
const blurFill = getInsetAbsoluteFillStyle();
|
|
82
|
-
const tintFill = StyleSheet.
|
|
103
|
+
const tintFill = StyleSheet.absoluteFill;
|
|
83
104
|
const highlightInset = Math.max(0, StyleSheet.hairlineWidth);
|
|
84
105
|
if (!BlurView && Platform.OS === 'web') {
|
|
85
106
|
const webStyle = {
|
|
@@ -128,7 +149,7 @@ function FrostedBackdropOverlay({ intensity, tintColor, saturationPct, androidEx
|
|
|
128
149
|
? { experimentalBlurMethod: 'dimezisBlurView' }
|
|
129
150
|
: undefined;
|
|
130
151
|
const blurFill = getInsetAbsoluteFillStyle();
|
|
131
|
-
const tintFill = StyleSheet.
|
|
152
|
+
const tintFill = StyleSheet.absoluteFill;
|
|
132
153
|
if (!BlurView && Platform.OS === 'web') {
|
|
133
154
|
const webStyle = {
|
|
134
155
|
backdropFilter: `blur(${intensity}px) saturate(${saturationPct}%)`,
|
|
@@ -153,6 +174,9 @@ export function useFrostedSurface({ frosted = false, blurIntensity, blurTintToke
|
|
|
153
174
|
}
|
|
154
175
|
const tintToken = blurTintToken ?? defaultTintToken;
|
|
155
176
|
const tintColor = resolveTintColor(colors, tintToken);
|
|
177
|
+
const resolvedTintColor = Platform.OS === 'android'
|
|
178
|
+
? scaleColorAlpha(tintColor, visualTokens.androidFrostedTintAlphaScale)
|
|
179
|
+
: tintColor;
|
|
156
180
|
const intensity = resolveBlurIntensity(visualTokens, blurIntensity, defaultBlurPreset);
|
|
157
181
|
const highlightColor = colors.surfaceHighlight;
|
|
158
182
|
const highlightHeight = visualTokens.frostedHighlightHeight;
|
|
@@ -160,7 +184,7 @@ export function useFrostedSurface({ frosted = false, blurIntensity, blurTintToke
|
|
|
160
184
|
const androidExperimentalBlurEnabled = visualTokens.androidExperimentalBlurEnabled;
|
|
161
185
|
return {
|
|
162
186
|
frosted: true,
|
|
163
|
-
overlay: (_jsx(FrostedOverlay, { intensity: intensity, tintColor:
|
|
187
|
+
overlay: (_jsx(FrostedOverlay, { intensity: intensity, tintColor: resolvedTintColor, highlightColor: highlightColor, highlightHeight: highlightHeight, saturationPct: saturationPct, androidExperimentalBlurEnabled: androidExperimentalBlurEnabled })),
|
|
164
188
|
surfaceStyle: {
|
|
165
189
|
backgroundColor: 'transparent',
|
|
166
190
|
borderColor: colors.surfaceBorder,
|
|
@@ -175,7 +199,8 @@ export function useFrostedBackdrop({ frosted = false, blurIntensity, tintColor,
|
|
|
175
199
|
const intensity = typeof blurIntensity === 'number' && Number.isFinite(blurIntensity)
|
|
176
200
|
? Math.max(0, Math.round(blurIntensity))
|
|
177
201
|
: visualTokens.frostedBackdropBlurIntensity;
|
|
178
|
-
const resolvedTintColor =
|
|
202
|
+
const resolvedTintColor = Platform.OS === 'android'
|
|
203
|
+
? scaleColorAlpha(tintColor ?? colors.overlay, visualTokens.androidFrostedTintAlphaScale)
|
|
204
|
+
: (tintColor ?? colors.overlay);
|
|
179
205
|
return (_jsx(FrostedBackdropOverlay, { intensity: intensity, tintColor: resolvedTintColor, saturationPct: visualTokens.blurSaturationPct, androidExperimentalBlurEnabled: visualTokens.androidExperimentalBlurEnabled }));
|
|
180
206
|
}
|
|
181
|
-
//# sourceMappingURL=frosted-surface.js.map
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { type PressableProps } from 'react-native';
|
|
2
|
+
/** Motion values used when a `--ui-motion-*` token is absent, and by the provider-less motion policy. */
|
|
3
|
+
export declare const MOTION_TOKEN_DEFAULTS: {
|
|
4
|
+
readonly motionFast: 140;
|
|
5
|
+
readonly motionNormal: 200;
|
|
6
|
+
readonly motionSlow: 280;
|
|
7
|
+
readonly motionSpringDamping: 20;
|
|
8
|
+
readonly motionSpringStiffness: 260;
|
|
9
|
+
readonly motionSpringMass: 0.8;
|
|
10
|
+
};
|
|
2
11
|
export interface InteractionTokens {
|
|
3
12
|
pressOpacity: number;
|
|
4
13
|
pressOpacityStrong: number;
|
|
@@ -9,6 +18,9 @@ export interface InteractionTokens {
|
|
|
9
18
|
motionFast: number;
|
|
10
19
|
motionNormal: number;
|
|
11
20
|
motionSlow: number;
|
|
21
|
+
motionSpringDamping: number;
|
|
22
|
+
motionSpringStiffness: number;
|
|
23
|
+
motionSpringMass: number;
|
|
12
24
|
drawerOpenDuration: number;
|
|
13
25
|
drawerCloseDuration: number;
|
|
14
26
|
}
|
|
@@ -23,4 +35,3 @@ export declare function useInteractionTokens(): InteractionTokens;
|
|
|
23
35
|
type PressableStyle = PressableProps['style'];
|
|
24
36
|
export declare function withInteractivePressableStyle(styleProp: PressableStyle | undefined, tokens: InteractionTokens, options?: InteractivePressableOptions): PressableStyle;
|
|
25
37
|
export {};
|
|
26
|
-
//# sourceMappingURL=interaction-tokens.d.ts.map
|
|
@@ -8,8 +8,17 @@ function parseNumber(value, fallback) {
|
|
|
8
8
|
function clampOpacity(value) {
|
|
9
9
|
return Math.max(0, Math.min(1, value));
|
|
10
10
|
}
|
|
11
|
+
/** Motion values used when a `--ui-motion-*` token is absent, and by the provider-less motion policy. */
|
|
12
|
+
export const MOTION_TOKEN_DEFAULTS = {
|
|
13
|
+
motionFast: 140,
|
|
14
|
+
motionNormal: 200,
|
|
15
|
+
motionSlow: 280,
|
|
16
|
+
motionSpringDamping: 20,
|
|
17
|
+
motionSpringStiffness: 260,
|
|
18
|
+
motionSpringMass: 0.8,
|
|
19
|
+
};
|
|
11
20
|
export function useInteractionTokens() {
|
|
12
|
-
const [pressOpacity, pressOpacityStrong, disabledOpacity, disabledOpacitySoft, disabledOpacitySubtle, inactiveOpacity, motionFast, motionNormal, motionSlow, drawerOpenDuration, drawerCloseDuration,] = useCSSVariable([
|
|
21
|
+
const [pressOpacity, pressOpacityStrong, disabledOpacity, disabledOpacitySoft, disabledOpacitySubtle, inactiveOpacity, motionFast, motionNormal, motionSlow, motionSpringDamping, motionSpringStiffness, motionSpringMass, drawerOpenDuration, drawerCloseDuration,] = useCSSVariable([
|
|
13
22
|
'--ui-press-opacity',
|
|
14
23
|
'--ui-press-opacity-strong',
|
|
15
24
|
'--ui-disabled-opacity',
|
|
@@ -19,21 +28,27 @@ export function useInteractionTokens() {
|
|
|
19
28
|
'--ui-motion-fast',
|
|
20
29
|
'--ui-motion-normal',
|
|
21
30
|
'--ui-motion-slow',
|
|
31
|
+
'--ui-motion-spring-damping',
|
|
32
|
+
'--ui-motion-spring-stiffness',
|
|
33
|
+
'--ui-motion-spring-mass',
|
|
22
34
|
'--ui-drawer-open-duration',
|
|
23
35
|
'--ui-drawer-close-duration',
|
|
24
36
|
]);
|
|
25
37
|
return {
|
|
26
|
-
pressOpacity: clampOpacity(parseNumber(pressOpacity, 0.
|
|
27
|
-
pressOpacityStrong: clampOpacity(parseNumber(pressOpacityStrong, 0.
|
|
28
|
-
disabledOpacity: clampOpacity(parseNumber(disabledOpacity, 0.
|
|
29
|
-
disabledOpacitySoft: clampOpacity(parseNumber(disabledOpacitySoft, 0.
|
|
30
|
-
disabledOpacitySubtle: clampOpacity(parseNumber(disabledOpacitySubtle, 0.
|
|
31
|
-
inactiveOpacity: clampOpacity(parseNumber(inactiveOpacity, 0.
|
|
32
|
-
motionFast: Math.max(0, Math.round(parseNumber(motionFast,
|
|
33
|
-
motionNormal: Math.max(0, Math.round(parseNumber(motionNormal,
|
|
34
|
-
motionSlow: Math.max(0, Math.round(parseNumber(motionSlow,
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
pressOpacity: clampOpacity(parseNumber(pressOpacity, 0.82)),
|
|
39
|
+
pressOpacityStrong: clampOpacity(parseNumber(pressOpacityStrong, 0.92)),
|
|
40
|
+
disabledOpacity: clampOpacity(parseNumber(disabledOpacity, 0.46)),
|
|
41
|
+
disabledOpacitySoft: clampOpacity(parseNumber(disabledOpacitySoft, 0.56)),
|
|
42
|
+
disabledOpacitySubtle: clampOpacity(parseNumber(disabledOpacitySubtle, 0.36)),
|
|
43
|
+
inactiveOpacity: clampOpacity(parseNumber(inactiveOpacity, 0.54)),
|
|
44
|
+
motionFast: Math.max(0, Math.round(parseNumber(motionFast, MOTION_TOKEN_DEFAULTS.motionFast))),
|
|
45
|
+
motionNormal: Math.max(0, Math.round(parseNumber(motionNormal, MOTION_TOKEN_DEFAULTS.motionNormal))),
|
|
46
|
+
motionSlow: Math.max(0, Math.round(parseNumber(motionSlow, MOTION_TOKEN_DEFAULTS.motionSlow))),
|
|
47
|
+
motionSpringDamping: Math.max(0, parseNumber(motionSpringDamping, MOTION_TOKEN_DEFAULTS.motionSpringDamping)),
|
|
48
|
+
motionSpringStiffness: Math.max(0, parseNumber(motionSpringStiffness, MOTION_TOKEN_DEFAULTS.motionSpringStiffness)),
|
|
49
|
+
motionSpringMass: Math.max(0.01, parseNumber(motionSpringMass, MOTION_TOKEN_DEFAULTS.motionSpringMass)),
|
|
50
|
+
drawerOpenDuration: Math.max(0, Math.round(parseNumber(drawerOpenDuration, 260))),
|
|
51
|
+
drawerCloseDuration: Math.max(0, Math.round(parseNumber(drawerCloseDuration, 180))),
|
|
37
52
|
};
|
|
38
53
|
}
|
|
39
54
|
function resolveDisabledOpacity(tokens, variant) {
|
|
@@ -67,4 +82,3 @@ export function withInteractivePressableStyle(styleProp, tokens, options = {}) {
|
|
|
67
82
|
];
|
|
68
83
|
};
|
|
69
84
|
}
|
|
70
|
-
//# sourceMappingURL=interaction-tokens.js.map
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import { ReduceMotion } from 'react-native-reanimated';
|
|
3
|
+
export type MotionMode = 'system' | 'reduced' | 'full' | 'disabled';
|
|
4
|
+
export type MotionDuration = 'fast' | 'normal' | 'slow';
|
|
5
|
+
export type MotionSpring = 'responsive';
|
|
6
|
+
export interface MotionSpringConfig {
|
|
7
|
+
damping: number;
|
|
8
|
+
stiffness: number;
|
|
9
|
+
mass: number;
|
|
10
|
+
reduceMotion: ReduceMotion;
|
|
11
|
+
}
|
|
12
|
+
export interface MotionPolicy {
|
|
13
|
+
mode: MotionMode;
|
|
14
|
+
reduceMotion: boolean;
|
|
15
|
+
animationsEnabled: boolean;
|
|
16
|
+
durations: Readonly<Record<MotionDuration, number>>;
|
|
17
|
+
springs: Readonly<Record<MotionSpring, Readonly<MotionSpringConfig>>>;
|
|
18
|
+
reanimatedReduceMotion: ReduceMotion;
|
|
19
|
+
}
|
|
20
|
+
export interface MotionProviderProps {
|
|
21
|
+
children: React.ReactNode;
|
|
22
|
+
mode?: MotionMode;
|
|
23
|
+
}
|
|
24
|
+
export declare function MotionProvider({ children, mode }: MotionProviderProps): React.JSX.Element;
|
|
25
|
+
export declare function useMotionPolicy(): MotionPolicy;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { createContext, useContext, useEffect, useMemo, useState } from 'react';
|
|
3
|
+
import { AccessibilityInfo } from 'react-native';
|
|
4
|
+
import { ReduceMotion, useReducedMotion } from 'react-native-reanimated';
|
|
5
|
+
import { MOTION_TOKEN_DEFAULTS, useInteractionTokens } from './interaction-tokens';
|
|
6
|
+
// Without a provider, components still render and Reanimated still follows the system
|
|
7
|
+
// setting. Only `--ui-motion-*` overrides and the non-Reanimated reduced-motion paths
|
|
8
|
+
// need `MotionProvider` at the root.
|
|
9
|
+
const DEFAULT_MOTION_POLICY = {
|
|
10
|
+
mode: 'system',
|
|
11
|
+
reduceMotion: false,
|
|
12
|
+
animationsEnabled: true,
|
|
13
|
+
durations: {
|
|
14
|
+
fast: MOTION_TOKEN_DEFAULTS.motionFast,
|
|
15
|
+
normal: MOTION_TOKEN_DEFAULTS.motionNormal,
|
|
16
|
+
slow: MOTION_TOKEN_DEFAULTS.motionSlow,
|
|
17
|
+
},
|
|
18
|
+
springs: {
|
|
19
|
+
responsive: {
|
|
20
|
+
damping: MOTION_TOKEN_DEFAULTS.motionSpringDamping,
|
|
21
|
+
stiffness: MOTION_TOKEN_DEFAULTS.motionSpringStiffness,
|
|
22
|
+
mass: MOTION_TOKEN_DEFAULTS.motionSpringMass,
|
|
23
|
+
reduceMotion: ReduceMotion.System,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
reanimatedReduceMotion: ReduceMotion.System,
|
|
27
|
+
};
|
|
28
|
+
const MotionPolicyContext = createContext(DEFAULT_MOTION_POLICY);
|
|
29
|
+
function useSystemReducedMotion(active) {
|
|
30
|
+
const initialValue = useReducedMotion();
|
|
31
|
+
const [enabled, setEnabled] = useState(initialValue);
|
|
32
|
+
useEffect(() => {
|
|
33
|
+
if (!active)
|
|
34
|
+
return;
|
|
35
|
+
let mounted = true;
|
|
36
|
+
void AccessibilityInfo.isReduceMotionEnabled()
|
|
37
|
+
.then((value) => {
|
|
38
|
+
if (mounted)
|
|
39
|
+
setEnabled(value);
|
|
40
|
+
})
|
|
41
|
+
.catch(() => {
|
|
42
|
+
// Keep Reanimated's startup snapshot if the native query is unavailable.
|
|
43
|
+
});
|
|
44
|
+
const subscription = AccessibilityInfo.addEventListener('reduceMotionChanged', setEnabled);
|
|
45
|
+
return () => {
|
|
46
|
+
mounted = false;
|
|
47
|
+
subscription.remove();
|
|
48
|
+
};
|
|
49
|
+
}, [active]);
|
|
50
|
+
return enabled;
|
|
51
|
+
}
|
|
52
|
+
export function MotionProvider({ children, mode = 'system' }) {
|
|
53
|
+
const interaction = useInteractionTokens();
|
|
54
|
+
const systemReducedMotion = useSystemReducedMotion(mode === 'system');
|
|
55
|
+
const relevantSystemValue = mode === 'system' ? systemReducedMotion : false;
|
|
56
|
+
const policy = useMemo(() => {
|
|
57
|
+
const reduceMotion = mode === 'reduced' || mode === 'disabled' || (mode === 'system' && relevantSystemValue);
|
|
58
|
+
const animationsEnabled = mode !== 'disabled';
|
|
59
|
+
const reanimatedReduceMotion = mode === 'system'
|
|
60
|
+
? ReduceMotion.System
|
|
61
|
+
: mode === 'full'
|
|
62
|
+
? ReduceMotion.Never
|
|
63
|
+
: ReduceMotion.Always;
|
|
64
|
+
return {
|
|
65
|
+
mode,
|
|
66
|
+
reduceMotion,
|
|
67
|
+
animationsEnabled,
|
|
68
|
+
durations: {
|
|
69
|
+
fast: animationsEnabled ? interaction.motionFast : 0,
|
|
70
|
+
normal: animationsEnabled ? interaction.motionNormal : 0,
|
|
71
|
+
slow: animationsEnabled ? interaction.motionSlow : 0,
|
|
72
|
+
},
|
|
73
|
+
springs: {
|
|
74
|
+
responsive: {
|
|
75
|
+
damping: interaction.motionSpringDamping,
|
|
76
|
+
stiffness: interaction.motionSpringStiffness,
|
|
77
|
+
mass: interaction.motionSpringMass,
|
|
78
|
+
reduceMotion: reanimatedReduceMotion,
|
|
79
|
+
},
|
|
80
|
+
},
|
|
81
|
+
reanimatedReduceMotion,
|
|
82
|
+
};
|
|
83
|
+
}, [
|
|
84
|
+
interaction.motionFast,
|
|
85
|
+
interaction.motionNormal,
|
|
86
|
+
interaction.motionSlow,
|
|
87
|
+
interaction.motionSpringDamping,
|
|
88
|
+
interaction.motionSpringMass,
|
|
89
|
+
interaction.motionSpringStiffness,
|
|
90
|
+
mode,
|
|
91
|
+
relevantSystemValue,
|
|
92
|
+
]);
|
|
93
|
+
return _jsx(MotionPolicyContext.Provider, { value: policy, children: children });
|
|
94
|
+
}
|
|
95
|
+
export function useMotionPolicy() {
|
|
96
|
+
return useContext(MotionPolicyContext);
|
|
97
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export interface OverlayInsets {
|
|
2
|
+
top: number;
|
|
3
|
+
bottom: number;
|
|
4
|
+
left: number;
|
|
5
|
+
right: number;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Collision padding for anything that floats: popovers, dropdowns, context menus.
|
|
9
|
+
*
|
|
10
|
+
* Without it these are only clamped to the viewport, so a trigger near an edge produces
|
|
11
|
+
* a panel sitting flush against it — touching the screen edge on web, and sliding under
|
|
12
|
+
* the notch or home indicator on a device. Both read as broken rather than deliberate.
|
|
13
|
+
*
|
|
14
|
+
* Safe area plus a margin, so the result clears the hardware and still leaves the panel
|
|
15
|
+
* looking placed rather than jammed. Callers can override per instance.
|
|
16
|
+
*/
|
|
17
|
+
export declare function useOverlayInsets(): OverlayInsets;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
2
|
+
import { useVisualTokens } from './visual-tokens';
|
|
3
|
+
/**
|
|
4
|
+
* Collision padding for anything that floats: popovers, dropdowns, context menus.
|
|
5
|
+
*
|
|
6
|
+
* Without it these are only clamped to the viewport, so a trigger near an edge produces
|
|
7
|
+
* a panel sitting flush against it — touching the screen edge on web, and sliding under
|
|
8
|
+
* the notch or home indicator on a device. Both read as broken rather than deliberate.
|
|
9
|
+
*
|
|
10
|
+
* Safe area plus a margin, so the result clears the hardware and still leaves the panel
|
|
11
|
+
* looking placed rather than jammed. Callers can override per instance.
|
|
12
|
+
*/
|
|
13
|
+
export function useOverlayInsets() {
|
|
14
|
+
const safeArea = useSafeAreaInsets();
|
|
15
|
+
const visual = useVisualTokens();
|
|
16
|
+
const margin = visual.surfacePaddingSm;
|
|
17
|
+
return {
|
|
18
|
+
top: safeArea.top + margin,
|
|
19
|
+
bottom: safeArea.bottom + margin,
|
|
20
|
+
left: safeArea.left + margin,
|
|
21
|
+
right: safeArea.right + margin,
|
|
22
|
+
};
|
|
23
|
+
}
|
package/dist/lib/portal.d.ts
CHANGED
package/dist/lib/portal.js
CHANGED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TextStyle, ViewStyle } from 'react-native';
|
|
2
|
+
import { type ThemeColors } from './theme-colors';
|
|
3
|
+
import { type VisualTokens } from './visual-tokens';
|
|
4
|
+
/**
|
|
5
|
+
* Shared style recipes.
|
|
6
|
+
* Components consume these instead of hardcoding radius/height/padding/font
|
|
7
|
+
* classes so a theme (color contract + visual token contract) can fully
|
|
8
|
+
* restyle the package.
|
|
9
|
+
*/
|
|
10
|
+
export type ControlSize = 'sm' | 'default' | 'lg' | 'icon';
|
|
11
|
+
export type SurfacePaddingSize = 'none' | 'sm' | 'default' | 'lg';
|
|
12
|
+
export type ShadowTier = 'none' | 'sm' | 'md' | 'lg';
|
|
13
|
+
export type TypographyRole = 'caption' | 'label' | 'body' | 'emphasis' | 'title' | 'headline';
|
|
14
|
+
export declare function controlRecipe(visual: VisualTokens, size?: ControlSize): ViewStyle;
|
|
15
|
+
export declare function fieldRecipe(visual: VisualTokens, size?: ControlSize): ViewStyle;
|
|
16
|
+
export interface SurfaceRecipeOptions {
|
|
17
|
+
padding?: SurfacePaddingSize;
|
|
18
|
+
radius?: 'sm' | 'md' | 'lg' | 'xl';
|
|
19
|
+
bordered?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function surfacePadding(visual: VisualTokens, padding?: SurfacePaddingSize): number;
|
|
22
|
+
export declare function surfaceRadius(visual: VisualTokens, radius?: 'sm' | 'md' | 'lg' | 'xl'): number;
|
|
23
|
+
export declare function surfaceRecipe(visual: VisualTokens, options?: SurfaceRecipeOptions): ViewStyle;
|
|
24
|
+
export declare function shadowStyle(visual: VisualTokens, colors: ThemeColors, tier: ShadowTier): ViewStyle;
|
|
25
|
+
export declare function typographyStyle(visual: VisualTokens, role: TypographyRole): TextStyle;
|
|
26
|
+
export declare function useControlRecipe(size?: ControlSize): ViewStyle;
|
|
27
|
+
export declare function useFieldRecipe(size?: ControlSize): ViewStyle;
|
|
28
|
+
export declare function useSurfaceRecipe(options?: SurfaceRecipeOptions): ViewStyle;
|
|
29
|
+
export declare function useShadowStyle(tier: ShadowTier): ViewStyle;
|
|
30
|
+
export declare function useTypography(role: TypographyRole): TextStyle;
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { useThemeColors } from './theme-colors';
|
|
2
|
+
import { useVisualTokens } from './visual-tokens';
|
|
3
|
+
export function controlRecipe(visual, size = 'default') {
|
|
4
|
+
if (size === 'sm') {
|
|
5
|
+
return {
|
|
6
|
+
minHeight: visual.controlHeightSm,
|
|
7
|
+
borderRadius: visual.radiusMd,
|
|
8
|
+
paddingHorizontal: visual.controlPaddingXSm,
|
|
9
|
+
paddingVertical: visual.controlPaddingYSm,
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
if (size === 'lg') {
|
|
13
|
+
return {
|
|
14
|
+
minHeight: visual.controlHeightLg,
|
|
15
|
+
borderRadius: visual.radiusXl,
|
|
16
|
+
paddingHorizontal: visual.controlPaddingXLg,
|
|
17
|
+
paddingVertical: visual.controlPaddingYLg,
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
if (size === 'icon') {
|
|
21
|
+
return {
|
|
22
|
+
minHeight: visual.controlHeightDefault,
|
|
23
|
+
minWidth: visual.controlHeightDefault,
|
|
24
|
+
width: visual.controlHeightDefault,
|
|
25
|
+
borderRadius: visual.radiusLg,
|
|
26
|
+
paddingHorizontal: 0,
|
|
27
|
+
paddingVertical: 0,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
return {
|
|
31
|
+
minHeight: visual.controlHeightDefault,
|
|
32
|
+
borderRadius: visual.radiusLg,
|
|
33
|
+
paddingHorizontal: visual.controlPaddingXDefault,
|
|
34
|
+
paddingVertical: visual.controlPaddingYDefault,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export function fieldRecipe(visual, size = 'default') {
|
|
38
|
+
const base = controlRecipe(visual, size);
|
|
39
|
+
return {
|
|
40
|
+
...base,
|
|
41
|
+
borderWidth: visual.borderWidthControl,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export function surfacePadding(visual, padding = 'default') {
|
|
45
|
+
if (padding === 'none')
|
|
46
|
+
return 0;
|
|
47
|
+
if (padding === 'sm')
|
|
48
|
+
return visual.surfacePaddingSm;
|
|
49
|
+
if (padding === 'lg')
|
|
50
|
+
return visual.surfacePaddingLg;
|
|
51
|
+
return visual.surfacePaddingDefault;
|
|
52
|
+
}
|
|
53
|
+
export function surfaceRadius(visual, radius = 'xl') {
|
|
54
|
+
if (radius === 'sm')
|
|
55
|
+
return visual.radiusSm;
|
|
56
|
+
if (radius === 'md')
|
|
57
|
+
return visual.radiusMd;
|
|
58
|
+
if (radius === 'lg')
|
|
59
|
+
return visual.radiusLg;
|
|
60
|
+
return visual.radiusXl;
|
|
61
|
+
}
|
|
62
|
+
export function surfaceRecipe(visual, options = {}) {
|
|
63
|
+
const { padding = 'default', radius = 'xl', bordered = true } = options;
|
|
64
|
+
return {
|
|
65
|
+
borderRadius: surfaceRadius(visual, radius),
|
|
66
|
+
padding: surfacePadding(visual, padding),
|
|
67
|
+
...(bordered ? { borderWidth: visual.borderWidthHairline } : null),
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export function shadowStyle(visual, colors, tier) {
|
|
71
|
+
if (tier === 'none')
|
|
72
|
+
return {};
|
|
73
|
+
const opacity = tier === 'sm'
|
|
74
|
+
? visual.shadowOpacitySm
|
|
75
|
+
: tier === 'md'
|
|
76
|
+
? visual.shadowOpacityMd
|
|
77
|
+
: visual.shadowOpacityLg;
|
|
78
|
+
const radius = tier === 'sm'
|
|
79
|
+
? visual.shadowRadiusSm
|
|
80
|
+
: tier === 'md'
|
|
81
|
+
? visual.shadowRadiusMd
|
|
82
|
+
: visual.shadowRadiusLg;
|
|
83
|
+
const offsetY = tier === 'sm'
|
|
84
|
+
? visual.shadowOffsetYSm
|
|
85
|
+
: tier === 'md'
|
|
86
|
+
? visual.shadowOffsetYMd
|
|
87
|
+
: visual.shadowOffsetYLg;
|
|
88
|
+
const elevation = tier === 'sm'
|
|
89
|
+
? visual.shadowElevationSm
|
|
90
|
+
: tier === 'md'
|
|
91
|
+
? visual.shadowElevationMd
|
|
92
|
+
: visual.shadowElevationLg;
|
|
93
|
+
if (opacity <= 0)
|
|
94
|
+
return {};
|
|
95
|
+
return {
|
|
96
|
+
shadowColor: colors.shadow,
|
|
97
|
+
shadowOpacity: opacity,
|
|
98
|
+
shadowRadius: radius,
|
|
99
|
+
shadowOffset: { width: 0, height: offsetY },
|
|
100
|
+
elevation,
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
// Component-owned text sizes. Font family/weight stays on className
|
|
104
|
+
// (font-medium etc.) so app font mappings keep working.
|
|
105
|
+
export function typographyStyle(visual, role) {
|
|
106
|
+
if (role === 'caption')
|
|
107
|
+
return {
|
|
108
|
+
fontSize: visual.fontSizeXs,
|
|
109
|
+
letterSpacing: visual.letterSpacingCaption,
|
|
110
|
+
};
|
|
111
|
+
if (role === 'label')
|
|
112
|
+
return { fontSize: visual.fontSizeSm, letterSpacing: visual.letterSpacingLabel };
|
|
113
|
+
if (role === 'emphasis')
|
|
114
|
+
return { fontSize: visual.fontSizeLg, letterSpacing: visual.letterSpacingBody };
|
|
115
|
+
if (role === 'title')
|
|
116
|
+
return { fontSize: visual.fontSizeXl, letterSpacing: visual.letterSpacingTitle };
|
|
117
|
+
if (role === 'headline')
|
|
118
|
+
return {
|
|
119
|
+
fontSize: visual.fontSize2xl,
|
|
120
|
+
letterSpacing: visual.letterSpacingHeadline,
|
|
121
|
+
};
|
|
122
|
+
return { fontSize: visual.fontSizeBase, letterSpacing: visual.letterSpacingBody };
|
|
123
|
+
}
|
|
124
|
+
export function useControlRecipe(size = 'default') {
|
|
125
|
+
return controlRecipe(useVisualTokens(), size);
|
|
126
|
+
}
|
|
127
|
+
export function useFieldRecipe(size = 'default') {
|
|
128
|
+
return fieldRecipe(useVisualTokens(), size);
|
|
129
|
+
}
|
|
130
|
+
export function useSurfaceRecipe(options = {}) {
|
|
131
|
+
return surfaceRecipe(useVisualTokens(), options);
|
|
132
|
+
}
|
|
133
|
+
export function useShadowStyle(tier) {
|
|
134
|
+
return shadowStyle(useVisualTokens(), useThemeColors(), tier);
|
|
135
|
+
}
|
|
136
|
+
export function useTypography(role) {
|
|
137
|
+
return typographyStyle(useVisualTokens(), role);
|
|
138
|
+
}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
/** A named public shape for ref-forwarding components under React Native's Strict API. */
|
|
3
|
+
export type ForwardRefComponent<TInstance, TProps> = React.ForwardRefExoticComponent<React.PropsWithoutRef<TProps> & React.RefAttributes<TInstance>>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { GestureResponderEvent } from 'react-native';
|
|
2
|
+
/**
|
|
3
|
+
* Press handlers that fire only for a tap, not for a drag that happens to start and
|
|
4
|
+
* end inside the same view. A `Pressable` keeps a press alive while the finger stays
|
|
5
|
+
* within its bounds, so on a full-screen backdrop every swipe was also a tap and
|
|
6
|
+
* dismissed the overlay. Ten points is the platform touch slop.
|
|
7
|
+
*/
|
|
8
|
+
export declare function useTapOnly(onTap: () => void, slop?: number): {
|
|
9
|
+
onPressIn: (event: GestureResponderEvent) => void;
|
|
10
|
+
onPress: (event: GestureResponderEvent) => void;
|
|
11
|
+
};
|