@hzblj/kara-components 0.20.0 → 0.21.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/CHANGELOG.md +46 -0
- package/lib/module/atoms/activity-indicator/activity-indicator.android.js +1 -1
- package/lib/module/atoms/activity-indicator/activity-indicator.android.js.map +1 -1
- package/lib/module/atoms/activity-indicator/activity-indicator.ios.js +1 -1
- package/lib/module/atoms/activity-indicator/activity-indicator.ios.js.map +1 -1
- package/lib/module/atoms/badge/badge.android.js +1 -1
- package/lib/module/atoms/badge/badge.android.js.map +1 -1
- package/lib/module/atoms/badge/badge.ios.js +1 -1
- package/lib/module/atoms/badge/badge.ios.js.map +1 -1
- package/lib/module/atoms/blur-view/blur-view.android.js +22 -1
- package/lib/module/atoms/blur-view/blur-view.android.js.map +1 -1
- package/lib/module/atoms/blur-view/blur-view.ios.js +20 -0
- package/lib/module/atoms/blur-view/blur-view.ios.js.map +1 -1
- package/lib/module/atoms/button/button.android.js +1 -1
- package/lib/module/atoms/button/button.android.js.map +1 -1
- package/lib/module/atoms/button/button.ios.js +1 -1
- package/lib/module/atoms/button/button.ios.js.map +1 -1
- package/lib/module/atoms/card/card.android.js +1 -1
- package/lib/module/atoms/card/card.android.js.map +1 -1
- package/lib/module/atoms/card/card.ios.js +1 -1
- package/lib/module/atoms/card/card.ios.js.map +1 -1
- package/lib/module/atoms/checkbox/checkbox.android.js +1 -1
- package/lib/module/atoms/checkbox/checkbox.android.js.map +1 -1
- package/lib/module/atoms/checkbox/checkbox.ios.js +1 -1
- package/lib/module/atoms/checkbox/checkbox.ios.js.map +1 -1
- package/lib/module/atoms/color-picker/color-picker.android.js +1 -1
- package/lib/module/atoms/color-picker/color-picker.android.js.map +1 -1
- package/lib/module/atoms/color-picker/color-picker.ios.js +1 -1
- package/lib/module/atoms/color-picker/color-picker.ios.js.map +1 -1
- package/lib/module/atoms/date-picker/date-picker.android.js +1 -1
- package/lib/module/atoms/date-picker/date-picker.android.js.map +1 -1
- package/lib/module/atoms/date-picker/date-picker.ios.js +1 -1
- package/lib/module/atoms/date-picker/date-picker.ios.js.map +1 -1
- package/lib/module/atoms/divider/divider.android.js +1 -1
- package/lib/module/atoms/divider/divider.android.js.map +1 -1
- package/lib/module/atoms/divider/divider.ios.js +1 -1
- package/lib/module/atoms/divider/divider.ios.js.map +1 -1
- package/lib/module/atoms/fab/fab.android.js +1 -1
- package/lib/module/atoms/fab/fab.android.js.map +1 -1
- package/lib/module/atoms/fab/fab.ios.js +1 -1
- package/lib/module/atoms/fab/fab.ios.js.map +1 -1
- package/lib/module/atoms/glyph/glyph-button.android.js.map +1 -0
- package/lib/module/atoms/glyph/glyph-button.ios.js.map +1 -0
- package/lib/module/atoms/glyph/glyph-button.types.js.map +1 -0
- package/lib/module/atoms/glyph/glyph.android.js.map +1 -0
- package/lib/module/atoms/glyph/glyph.ios.js.map +1 -0
- package/lib/module/atoms/glyph/glyph.types.js.map +1 -0
- package/lib/module/atoms/glyph/index.js.map +1 -0
- package/lib/module/atoms/glyph/rn-glyph.android.js.map +1 -0
- package/lib/module/atoms/glyph/rn-glyph.ios.js.map +1 -0
- package/lib/module/atoms/h-stack/h-stack.android.js +2 -2
- package/lib/module/atoms/h-stack/h-stack.android.js.map +1 -1
- package/lib/module/atoms/h-stack/h-stack.ios.js +2 -2
- package/lib/module/atoms/h-stack/h-stack.ios.js.map +1 -1
- package/lib/module/atoms/icon/icon.android.js +1 -1
- package/lib/module/atoms/icon/icon.android.js.map +1 -1
- package/lib/module/atoms/icon/icon.ios.js +1 -1
- package/lib/module/atoms/icon/icon.ios.js.map +1 -1
- package/lib/module/atoms/icon-button/icon-button.android.js +1 -1
- package/lib/module/atoms/icon-button/icon-button.android.js.map +1 -1
- package/lib/module/atoms/icon-button/icon-button.ios.js +1 -1
- package/lib/module/atoms/icon-button/icon-button.ios.js.map +1 -1
- package/lib/module/atoms/island/island.android.js +3 -1
- package/lib/module/atoms/island/island.android.js.map +1 -1
- package/lib/module/atoms/island/island.ios.js +3 -1
- package/lib/module/atoms/island/island.ios.js.map +1 -1
- package/lib/module/atoms/list/list.android.js +2 -2
- package/lib/module/atoms/list/list.android.js.map +1 -1
- package/lib/module/atoms/list/list.ios.js +1 -1
- package/lib/module/atoms/list/list.ios.js.map +1 -1
- package/lib/module/atoms/picker/picker.android.js +2 -2
- package/lib/module/atoms/picker/picker.android.js.map +1 -1
- package/lib/module/atoms/picker/picker.ios.js +1 -1
- package/lib/module/atoms/picker/picker.ios.js.map +1 -1
- package/lib/module/atoms/pressable/pressable.js +1 -1
- package/lib/module/atoms/pressable/pressable.js.map +1 -1
- package/lib/module/atoms/progress/progress.android.js +1 -1
- package/lib/module/atoms/progress/progress.android.js.map +1 -1
- package/lib/module/atoms/progress/progress.ios.js +1 -1
- package/lib/module/atoms/progress/progress.ios.js.map +1 -1
- package/lib/module/atoms/scroll-view/scroll-view.android.js +2 -2
- package/lib/module/atoms/scroll-view/scroll-view.android.js.map +1 -1
- package/lib/module/atoms/scroll-view/scroll-view.ios.js +1 -1
- package/lib/module/atoms/scroll-view/scroll-view.ios.js.map +1 -1
- package/lib/module/atoms/segmented-control/segmented-control.android.js +1 -1
- package/lib/module/atoms/segmented-control/segmented-control.android.js.map +1 -1
- package/lib/module/atoms/segmented-control/segmented-control.ios.js +1 -1
- package/lib/module/atoms/segmented-control/segmented-control.ios.js.map +1 -1
- package/lib/module/atoms/slider/slider.android.js +1 -1
- package/lib/module/atoms/slider/slider.android.js.map +1 -1
- package/lib/module/atoms/slider/slider.ios.js +1 -1
- package/lib/module/atoms/slider/slider.ios.js.map +1 -1
- package/lib/module/atoms/spacer/spacer.android.js +1 -1
- package/lib/module/atoms/spacer/spacer.android.js.map +1 -1
- package/lib/module/atoms/spacer/spacer.ios.js +1 -1
- package/lib/module/atoms/spacer/spacer.ios.js.map +1 -1
- package/lib/module/atoms/surface/surface.android.js +1 -1
- package/lib/module/atoms/surface/surface.android.js.map +1 -1
- package/lib/module/atoms/surface/surface.ios.js +1 -1
- package/lib/module/atoms/surface/surface.ios.js.map +1 -1
- package/lib/module/atoms/switch/switch.android.js +1 -1
- package/lib/module/atoms/switch/switch.android.js.map +1 -1
- package/lib/module/atoms/switch/switch.ios.js +1 -1
- package/lib/module/atoms/switch/switch.ios.js.map +1 -1
- package/lib/module/atoms/text/text.android.js +1 -1
- package/lib/module/atoms/text/text.android.js.map +1 -1
- package/lib/module/atoms/text/text.ios.js +1 -1
- package/lib/module/atoms/text/text.ios.js.map +1 -1
- package/lib/module/atoms/text-field/text-field.android.js +2 -2
- package/lib/module/atoms/text-field/text-field.android.js.map +1 -1
- package/lib/module/atoms/text-field/text-field.ios.js +1 -1
- package/lib/module/atoms/text-field/text-field.ios.js.map +1 -1
- package/lib/module/atoms/v-stack/v-stack.android.js +2 -2
- package/lib/module/atoms/v-stack/v-stack.android.js.map +1 -1
- package/lib/module/atoms/v-stack/v-stack.ios.js +2 -2
- package/lib/module/atoms/v-stack/v-stack.ios.js.map +1 -1
- package/lib/module/atoms/z-stack/z-stack.android.js +2 -2
- package/lib/module/atoms/z-stack/z-stack.android.js.map +1 -1
- package/lib/module/atoms/z-stack/z-stack.ios.js +2 -2
- package/lib/module/atoms/z-stack/z-stack.ios.js.map +1 -1
- package/lib/module/hooks/host-context.js.map +1 -0
- package/lib/module/hooks/use-refresh-state.js.map +1 -0
- package/lib/module/hooks/use-stack-modifiers.js.map +1 -0
- package/lib/module/molecules/collapsible/collapsible.android.js +2 -2
- package/lib/module/molecules/collapsible/collapsible.android.js.map +1 -1
- package/lib/module/molecules/collapsible/collapsible.ios.js +1 -1
- package/lib/module/molecules/collapsible/collapsible.ios.js.map +1 -1
- package/lib/module/molecules/labeled-content/labeled-content.js +1 -1
- package/lib/module/molecules/labeled-content/labeled-content.js.map +1 -1
- package/lib/module/molecules/list-item/list-item.js +1 -1
- package/lib/module/molecules/list-item/list-item.js.map +1 -1
- package/lib/module/molecules/navigation-bar/navigation-bar.constants.js +5 -0
- package/lib/module/molecules/navigation-bar/navigation-bar.constants.js.map +1 -0
- package/lib/module/molecules/navigation-bar/navigation-bar.ios.js +31 -4
- package/lib/module/molecules/navigation-bar/navigation-bar.ios.js.map +1 -1
- package/lib/module/molecules/pager/pager.android.js +1 -1
- package/lib/module/molecules/pager/pager.android.js.map +1 -1
- package/lib/module/molecules/pager/pager.ios.js +1 -1
- package/lib/module/molecules/pager/pager.ios.js.map +1 -1
- package/lib/module/molecules/radio-group/radio-group.android.js +1 -1
- package/lib/module/molecules/radio-group/radio-group.android.js.map +1 -1
- package/lib/module/molecules/radio-group/radio-group.ios.js +2 -2
- package/lib/module/molecules/radio-group/radio-group.ios.js.map +1 -1
- package/lib/module/molecules/rn-list-item/rn-list-item.js +1 -1
- package/lib/module/molecules/rn-list-item/rn-list-item.js.map +1 -1
- package/lib/module/molecules/rn-tooltip/rn-tooltip.android.js +1 -1
- package/lib/module/molecules/rn-tooltip/rn-tooltip.android.js.map +1 -1
- package/lib/module/molecules/search-bar/search-bar.js +1 -1
- package/lib/module/molecules/search-bar/search-bar.js.map +1 -1
- package/lib/module/molecules/stepper/stepper.android.js +2 -2
- package/lib/module/molecules/stepper/stepper.android.js.map +1 -1
- package/lib/module/molecules/stepper/stepper.ios.js +1 -1
- package/lib/module/molecules/stepper/stepper.ios.js.map +1 -1
- package/lib/module/molecules/tooltip/tooltip.android.js +1 -1
- package/lib/module/molecules/tooltip/tooltip.android.js.map +1 -1
- package/lib/module/molecules/tooltip/tooltip.ios.js +1 -1
- package/lib/module/molecules/tooltip/tooltip.ios.js.map +1 -1
- package/lib/module/organisms/action-sheet/action-sheet.android.js +1 -1
- package/lib/module/organisms/action-sheet/action-sheet.android.js.map +1 -1
- package/lib/module/organisms/action-sheet/action-sheet.ios.js +1 -1
- package/lib/module/organisms/action-sheet/action-sheet.ios.js.map +1 -1
- package/lib/module/organisms/alert/alert.android.js +1 -1
- package/lib/module/organisms/alert/alert.android.js.map +1 -1
- package/lib/module/organisms/alert/alert.ios.js +1 -1
- package/lib/module/organisms/alert/alert.ios.js.map +1 -1
- package/lib/module/organisms/context-menu/context-menu.android.js +2 -2
- package/lib/module/organisms/context-menu/context-menu.android.js.map +1 -1
- package/lib/module/organisms/fab-menu/fab-menu.android.js +2 -2
- package/lib/module/organisms/fab-menu/fab-menu.android.js.map +1 -1
- package/lib/module/organisms/fab-menu/fab-menu.ios.js +2 -2
- package/lib/module/organisms/fab-menu/fab-menu.ios.js.map +1 -1
- package/lib/module/organisms/form/form.android.js +1 -1
- package/lib/module/organisms/form/form.android.js.map +1 -1
- package/lib/module/organisms/form/form.ios.js +1 -1
- package/lib/module/organisms/form/form.ios.js.map +1 -1
- package/lib/module/organisms/header/header-color.js +8 -0
- package/lib/module/organisms/header/header-color.js.map +1 -0
- package/lib/module/organisms/header/header-inset.android.js +6 -0
- package/lib/module/organisms/header/header-inset.android.js.map +1 -0
- package/lib/module/organisms/header/header-inset.ios.js +19 -0
- package/lib/module/organisms/header/header-inset.ios.js.map +1 -0
- package/lib/module/organisms/header/header-options.android.js +180 -0
- package/lib/module/organisms/header/header-options.android.js.map +1 -0
- package/lib/module/organisms/header/header-options.ios.js +145 -0
- package/lib/module/organisms/header/header-options.ios.js.map +1 -0
- package/lib/module/organisms/header/header-options.types.js +4 -0
- package/lib/module/organisms/header/header-options.types.js.map +1 -0
- package/lib/module/organisms/header/header-search-accessory.android.js +5 -0
- package/lib/module/organisms/header/header-search-accessory.android.js.map +1 -0
- package/lib/module/organisms/header/header-search-accessory.ios.js +35 -0
- package/lib/module/organisms/header/header-search-accessory.ios.js.map +1 -0
- package/lib/module/organisms/header/header-search-accessory.types.js +4 -0
- package/lib/module/organisms/header/header-search-accessory.types.js.map +1 -0
- package/lib/module/organisms/header/header-search-input.android.js +80 -0
- package/lib/module/organisms/header/header-search-input.android.js.map +1 -0
- package/lib/module/organisms/header/header-search-input.ios.js +8 -0
- package/lib/module/organisms/header/header-search-input.ios.js.map +1 -0
- package/lib/module/organisms/header/header-search-input.types.js +4 -0
- package/lib/module/organisms/header/header-search-input.types.js.map +1 -0
- package/lib/module/organisms/header/header-search-scrim.js +62 -0
- package/lib/module/organisms/header/header-search-scrim.js.map +1 -0
- package/lib/module/organisms/header/header-title.js +230 -0
- package/lib/module/organisms/header/header-title.js.map +1 -0
- package/lib/module/organisms/header/header.types.js +4 -0
- package/lib/module/organisms/header/header.types.js.map +1 -0
- package/lib/module/organisms/header/hero-header-background.android.js +33 -0
- package/lib/module/organisms/header/hero-header-background.android.js.map +1 -0
- package/lib/module/organisms/header/hero-header-background.ios.js +40 -0
- package/lib/module/organisms/header/hero-header-background.ios.js.map +1 -0
- package/lib/module/organisms/header/hero-header-background.types.js +4 -0
- package/lib/module/organisms/header/hero-header-background.types.js.map +1 -0
- package/lib/module/organisms/header/index.js +13 -0
- package/lib/module/organisms/header/index.js.map +1 -0
- package/lib/module/organisms/header/native-subtitle.android.js +5 -0
- package/lib/module/organisms/header/native-subtitle.android.js.map +1 -0
- package/lib/module/organisms/header/native-subtitle.ios.js +22 -0
- package/lib/module/organisms/header/native-subtitle.ios.js.map +1 -0
- package/lib/module/organisms/header/native-subtitle.types.js +4 -0
- package/lib/module/organisms/header/native-subtitle.types.js.map +1 -0
- package/lib/module/organisms/header/sheet-grabber.android.js +5 -0
- package/lib/module/organisms/header/sheet-grabber.android.js.map +1 -0
- package/lib/module/organisms/header/sheet-grabber.ios.js +15 -0
- package/lib/module/organisms/header/sheet-grabber.ios.js.map +1 -0
- package/lib/module/organisms/header/sheet-grabber.types.js +4 -0
- package/lib/module/organisms/header/sheet-grabber.types.js.map +1 -0
- package/lib/module/organisms/header/use-header-bar-inset.android.js +4 -0
- package/lib/module/organisms/header/use-header-bar-inset.android.js.map +1 -0
- package/lib/module/organisms/header/use-header-bar-inset.ios.js +9 -0
- package/lib/module/organisms/header/use-header-bar-inset.ios.js.map +1 -0
- package/lib/module/organisms/header/use-header-bar-inset.types.js +2 -0
- package/lib/module/organisms/header/use-header-bar-inset.types.js.map +1 -0
- package/lib/module/organisms/header/use-header-scroll-to-top.js +51 -0
- package/lib/module/organisms/header/use-header-scroll-to-top.js.map +1 -0
- package/lib/module/organisms/header/use-header-search.js +135 -0
- package/lib/module/organisms/header/use-header-search.js.map +1 -0
- package/lib/module/organisms/header/use-header.js +74 -0
- package/lib/module/organisms/header/use-header.js.map +1 -0
- package/lib/module/organisms/header/use-hero-header.js +189 -0
- package/lib/module/organisms/header/use-hero-header.js.map +1 -0
- package/lib/module/organisms/header/use-stack-screen-options.js +77 -0
- package/lib/module/organisms/header/use-stack-screen-options.js.map +1 -0
- package/lib/module/organisms/menu/menu.android.js +2 -2
- package/lib/module/organisms/menu/menu.android.js.map +1 -1
- package/lib/module/organisms/menu/menu.ios.js +1 -1
- package/lib/module/organisms/menu/menu.ios.js.map +1 -1
- package/lib/module/organisms/sheet/use-sheet-header.js +3 -1
- package/lib/module/organisms/sheet/use-sheet-header.js.map +1 -1
- package/lib/module/organisms/snackbar/snackbar.js +1 -1
- package/lib/module/organisms/snackbar/snackbar.js.map +1 -1
- package/lib/module/organisms/swipe-actions/swipe-actions.android.js +1 -1
- package/lib/module/organisms/swipe-actions/swipe-actions.android.js.map +1 -1
- package/lib/module/organisms/swipe-actions/swipe-actions.ios.js +1 -1
- package/lib/module/organisms/swipe-actions/swipe-actions.ios.js.map +1 -1
- package/lib/module/templates/screen/screen.android.js +3 -3
- package/lib/module/templates/screen/screen.android.js.map +1 -1
- package/lib/module/templates/screen/screen.ios.js +3 -3
- package/lib/module/templates/screen/screen.ios.js.map +1 -1
- package/lib/module/utils/ripple-clip.js.map +1 -0
- package/lib/module/utils/tap-modifiers.js.map +1 -0
- package/lib/typescript/atoms/blur-view/blur-view.types.d.ts +8 -0
- package/lib/typescript/atoms/island/island.types.d.ts +17 -0
- package/lib/typescript/molecules/navigation-bar/navigation-bar.constants.d.ts +2 -0
- package/lib/typescript/molecules/navigation-bar/navigation-bar.types.d.ts +67 -4
- package/lib/typescript/organisms/header/header-color.d.ts +6 -0
- package/lib/typescript/organisms/header/header-inset.d.ts +1 -0
- package/lib/typescript/organisms/header/header-inset.ios.d.ts +2 -0
- package/lib/typescript/organisms/header/header-options.d.ts +1 -0
- package/lib/typescript/organisms/header/header-options.ios.d.ts +2 -0
- package/lib/typescript/organisms/header/header-options.types.d.ts +4 -0
- package/lib/typescript/organisms/header/header-search-accessory.d.ts +1 -0
- package/lib/typescript/organisms/header/header-search-accessory.ios.d.ts +6 -0
- package/lib/typescript/organisms/header/header-search-accessory.types.d.ts +9 -0
- package/lib/typescript/organisms/header/header-search-input.d.ts +1 -0
- package/lib/typescript/organisms/header/header-search-input.ios.d.ts +5 -0
- package/lib/typescript/organisms/header/header-search-input.types.d.ts +17 -0
- package/lib/typescript/organisms/header/header-search-scrim.d.ts +11 -0
- package/lib/typescript/organisms/header/header-title.d.ts +22 -0
- package/lib/typescript/organisms/header/header.types.d.ts +440 -0
- package/lib/typescript/organisms/header/hero-header-background.d.ts +1 -0
- package/lib/typescript/organisms/header/hero-header-background.ios.d.ts +7 -0
- package/lib/typescript/organisms/header/hero-header-background.types.d.ts +9 -0
- package/lib/typescript/organisms/header/index.d.ts +11 -0
- package/lib/typescript/organisms/header/native-subtitle.d.ts +1 -0
- package/lib/typescript/organisms/header/native-subtitle.ios.d.ts +4 -0
- package/lib/typescript/organisms/header/native-subtitle.types.d.ts +6 -0
- package/lib/typescript/organisms/header/sheet-grabber.d.ts +1 -0
- package/lib/typescript/organisms/header/sheet-grabber.ios.d.ts +7 -0
- package/lib/typescript/organisms/header/sheet-grabber.types.d.ts +6 -0
- package/lib/typescript/organisms/header/use-header-bar-inset.d.ts +1 -0
- package/lib/typescript/organisms/header/use-header-bar-inset.ios.d.ts +1 -0
- package/lib/typescript/organisms/header/use-header-bar-inset.types.d.ts +6 -0
- package/lib/typescript/organisms/header/use-header-scroll-to-top.d.ts +8 -0
- package/lib/typescript/organisms/header/use-header-search.d.ts +12 -0
- package/lib/typescript/organisms/header/use-header.d.ts +14 -0
- package/lib/typescript/organisms/header/use-hero-header.d.ts +10 -0
- package/lib/typescript/organisms/header/use-stack-screen-options.d.ts +17 -0
- package/lib/typescript/templates/screen/screen.types.d.ts +6 -2
- package/package.json +24 -5
- package/src/atoms/activity-indicator/activity-indicator.android.tsx +1 -1
- package/src/atoms/activity-indicator/activity-indicator.ios.tsx +1 -1
- package/src/atoms/badge/badge.android.tsx +1 -1
- package/src/atoms/badge/badge.ios.tsx +1 -1
- package/src/atoms/blur-view/blur-view.android.tsx +28 -1
- package/src/atoms/blur-view/blur-view.ios.tsx +25 -0
- package/src/atoms/blur-view/blur-view.types.ts +8 -0
- package/src/atoms/button/button.android.tsx +1 -1
- package/src/atoms/button/button.ios.tsx +1 -1
- package/src/atoms/card/card.android.tsx +1 -1
- package/src/atoms/card/card.ios.tsx +1 -1
- package/src/atoms/checkbox/checkbox.android.tsx +1 -1
- package/src/atoms/checkbox/checkbox.ios.tsx +1 -1
- package/src/atoms/color-picker/color-picker.android.tsx +1 -1
- package/src/atoms/color-picker/color-picker.ios.tsx +1 -1
- package/src/atoms/date-picker/date-picker.android.tsx +1 -1
- package/src/atoms/date-picker/date-picker.ios.tsx +1 -1
- package/src/atoms/divider/divider.android.tsx +1 -1
- package/src/atoms/divider/divider.ios.tsx +1 -1
- package/src/atoms/fab/fab.android.tsx +1 -1
- package/src/atoms/fab/fab.ios.tsx +1 -1
- package/src/atoms/h-stack/h-stack.android.tsx +2 -2
- package/src/atoms/h-stack/h-stack.ios.tsx +2 -2
- package/src/atoms/icon/icon.android.tsx +1 -1
- package/src/atoms/icon/icon.ios.tsx +1 -1
- package/src/atoms/icon-button/icon-button.android.tsx +1 -1
- package/src/atoms/icon-button/icon-button.ios.tsx +1 -1
- package/src/atoms/island/island.android.tsx +3 -1
- package/src/atoms/island/island.ios.tsx +10 -2
- package/src/atoms/island/island.types.ts +18 -0
- package/src/atoms/list/list.android.tsx +2 -2
- package/src/atoms/list/list.ios.tsx +1 -1
- package/src/atoms/picker/picker.android.tsx +2 -3
- package/src/atoms/picker/picker.ios.tsx +1 -1
- package/src/atoms/pressable/pressable.tsx +1 -1
- package/src/atoms/progress/progress.android.tsx +1 -1
- package/src/atoms/progress/progress.ios.tsx +1 -1
- package/src/atoms/scroll-view/scroll-view.android.tsx +2 -2
- package/src/atoms/scroll-view/scroll-view.ios.tsx +1 -1
- package/src/atoms/segmented-control/segmented-control.android.tsx +1 -1
- package/src/atoms/segmented-control/segmented-control.ios.tsx +1 -1
- package/src/atoms/slider/slider.android.tsx +1 -1
- package/src/atoms/slider/slider.ios.tsx +1 -1
- package/src/atoms/spacer/spacer.android.tsx +1 -1
- package/src/atoms/spacer/spacer.ios.tsx +1 -1
- package/src/atoms/surface/surface.android.tsx +1 -1
- package/src/atoms/surface/surface.ios.tsx +1 -1
- package/src/atoms/switch/switch.android.tsx +1 -1
- package/src/atoms/switch/switch.ios.tsx +1 -1
- package/src/atoms/text/text.android.tsx +1 -1
- package/src/atoms/text/text.ios.tsx +1 -1
- package/src/atoms/text-field/text-field.android.tsx +2 -2
- package/src/atoms/text-field/text-field.ios.tsx +1 -1
- package/src/atoms/v-stack/v-stack.android.tsx +2 -2
- package/src/atoms/v-stack/v-stack.ios.tsx +2 -2
- package/src/atoms/z-stack/z-stack.android.tsx +2 -2
- package/src/atoms/z-stack/z-stack.ios.tsx +2 -2
- package/src/molecules/collapsible/collapsible.android.tsx +2 -2
- package/src/molecules/collapsible/collapsible.ios.tsx +1 -1
- package/src/molecules/labeled-content/labeled-content.tsx +1 -1
- package/src/molecules/list-item/list-item.tsx +1 -2
- package/src/molecules/navigation-bar/navigation-bar.constants.ts +2 -0
- package/src/molecules/navigation-bar/navigation-bar.ios.tsx +35 -5
- package/src/molecules/navigation-bar/navigation-bar.types.ts +69 -5
- package/src/molecules/pager/pager.android.tsx +1 -1
- package/src/molecules/pager/pager.ios.tsx +1 -1
- package/src/molecules/radio-group/radio-group.android.tsx +1 -1
- package/src/molecules/radio-group/radio-group.ios.tsx +2 -2
- package/src/molecules/rn-list-item/rn-list-item.tsx +1 -1
- package/src/molecules/rn-tooltip/rn-tooltip.android.tsx +1 -1
- package/src/molecules/search-bar/search-bar.tsx +1 -1
- package/src/molecules/stepper/stepper.android.tsx +2 -2
- package/src/molecules/stepper/stepper.ios.tsx +1 -1
- package/src/molecules/tooltip/tooltip.android.tsx +1 -1
- package/src/molecules/tooltip/tooltip.ios.tsx +1 -1
- package/src/organisms/action-sheet/action-sheet.android.tsx +1 -1
- package/src/organisms/action-sheet/action-sheet.ios.tsx +1 -1
- package/src/organisms/alert/alert.android.tsx +1 -1
- package/src/organisms/alert/alert.ios.tsx +1 -1
- package/src/organisms/context-menu/context-menu.android.tsx +2 -2
- package/src/organisms/fab-menu/fab-menu.android.tsx +2 -2
- package/src/organisms/fab-menu/fab-menu.ios.tsx +2 -3
- package/src/organisms/form/form.android.tsx +1 -1
- package/src/organisms/form/form.ios.tsx +1 -1
- package/src/organisms/header/header-color.ts +7 -0
- package/src/organisms/header/header-inset.android.tsx +3 -0
- package/src/organisms/header/header-inset.ios.tsx +12 -0
- package/src/organisms/header/header-options.android.tsx +168 -0
- package/src/organisms/header/header-options.ios.tsx +138 -0
- package/src/organisms/header/header-options.types.ts +6 -0
- package/src/organisms/header/header-search-accessory.android.tsx +4 -0
- package/src/organisms/header/header-search-accessory.ios.tsx +42 -0
- package/src/organisms/header/header-search-accessory.types.ts +12 -0
- package/src/organisms/header/header-search-input.android.tsx +89 -0
- package/src/organisms/header/header-search-input.ios.tsx +7 -0
- package/src/organisms/header/header-search-input.types.ts +21 -0
- package/src/organisms/header/header-search-scrim.tsx +49 -0
- package/src/organisms/header/header-title.tsx +220 -0
- package/src/organisms/header/header.types.ts +416 -0
- package/src/organisms/header/hero-header-background.android.tsx +22 -0
- package/src/organisms/header/hero-header-background.ios.tsx +26 -0
- package/src/organisms/header/hero-header-background.types.ts +11 -0
- package/src/organisms/header/index.ts +11 -0
- package/src/organisms/header/native-subtitle.android.tsx +5 -0
- package/src/organisms/header/native-subtitle.ios.tsx +22 -0
- package/src/organisms/header/native-subtitle.types.ts +8 -0
- package/src/organisms/header/sheet-grabber.android.tsx +4 -0
- package/src/organisms/header/sheet-grabber.ios.tsx +12 -0
- package/src/organisms/header/sheet-grabber.types.ts +8 -0
- package/src/organisms/header/use-header-bar-inset.android.ts +1 -0
- package/src/organisms/header/use-header-bar-inset.ios.ts +7 -0
- package/src/organisms/header/use-header-bar-inset.types.ts +6 -0
- package/src/organisms/header/use-header-scroll-to-top.ts +48 -0
- package/src/organisms/header/use-header-search.tsx +138 -0
- package/src/organisms/header/use-header.ts +67 -0
- package/src/organisms/header/use-hero-header.tsx +222 -0
- package/src/organisms/header/use-stack-screen-options.ts +66 -0
- package/src/organisms/menu/menu.android.tsx +2 -2
- package/src/organisms/menu/menu.ios.tsx +1 -1
- package/src/organisms/sheet/use-sheet-header.tsx +4 -1
- package/src/organisms/snackbar/snackbar.tsx +1 -1
- package/src/organisms/swipe-actions/swipe-actions.android.tsx +1 -1
- package/src/organisms/swipe-actions/swipe-actions.ios.tsx +1 -1
- package/src/templates/screen/screen.android.tsx +8 -3
- package/src/templates/screen/screen.ios.tsx +8 -3
- package/src/templates/screen/screen.types.ts +7 -2
- package/lib/module/glyph/glyph-button.android.js.map +0 -1
- package/lib/module/glyph/glyph-button.ios.js.map +0 -1
- package/lib/module/glyph/glyph-button.types.js.map +0 -1
- package/lib/module/glyph/glyph.android.js.map +0 -1
- package/lib/module/glyph/glyph.ios.js.map +0 -1
- package/lib/module/glyph/glyph.types.js.map +0 -1
- package/lib/module/glyph/index.js.map +0 -1
- package/lib/module/glyph/rn-glyph.android.js.map +0 -1
- package/lib/module/glyph/rn-glyph.ios.js.map +0 -1
- package/lib/module/host-context.js.map +0 -1
- package/lib/module/ripple-clip.js.map +0 -1
- package/lib/module/tap-modifiers.js.map +0 -1
- package/lib/module/use-refresh-state.js.map +0 -1
- package/lib/module/use-stack-modifiers.js.map +0 -1
- /package/lib/module/{glyph → atoms/glyph}/glyph-button.android.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/glyph-button.ios.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/glyph-button.types.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/glyph.android.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/glyph.ios.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/glyph.types.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/index.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/rn-glyph.android.js +0 -0
- /package/lib/module/{glyph → atoms/glyph}/rn-glyph.ios.js +0 -0
- /package/lib/module/{host-context.js → hooks/host-context.js} +0 -0
- /package/lib/module/{use-refresh-state.js → hooks/use-refresh-state.js} +0 -0
- /package/lib/module/{use-stack-modifiers.js → hooks/use-stack-modifiers.js} +0 -0
- /package/lib/module/{ripple-clip.js → utils/ripple-clip.js} +0 -0
- /package/lib/module/{tap-modifiers.js → utils/tap-modifiers.js} +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.ios.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/glyph-button.types.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/glyph.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/glyph.ios.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/glyph.types.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/index.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/rn-glyph.d.ts +0 -0
- /package/lib/typescript/{glyph → atoms/glyph}/rn-glyph.ios.d.ts +0 -0
- /package/lib/typescript/{host-context.d.ts → hooks/host-context.d.ts} +0 -0
- /package/lib/typescript/{use-refresh-state.d.ts → hooks/use-refresh-state.d.ts} +0 -0
- /package/lib/typescript/{use-stack-modifiers.d.ts → hooks/use-stack-modifiers.d.ts} +0 -0
- /package/lib/typescript/{ripple-clip.d.ts → utils/ripple-clip.d.ts} +0 -0
- /package/lib/typescript/{tap-modifiers.d.ts → utils/tap-modifiers.d.ts} +0 -0
- /package/src/{glyph → atoms/glyph}/glyph-button.android.tsx +0 -0
- /package/src/{glyph → atoms/glyph}/glyph-button.ios.tsx +0 -0
- /package/src/{glyph → atoms/glyph}/glyph-button.types.ts +0 -0
- /package/src/{glyph → atoms/glyph}/glyph.android.tsx +0 -0
- /package/src/{glyph → atoms/glyph}/glyph.ios.tsx +0 -0
- /package/src/{glyph → atoms/glyph}/glyph.types.ts +0 -0
- /package/src/{glyph → atoms/glyph}/index.ts +0 -0
- /package/src/{glyph → atoms/glyph}/rn-glyph.android.tsx +0 -0
- /package/src/{glyph → atoms/glyph}/rn-glyph.ios.tsx +0 -0
- /package/src/{host-context.tsx → hooks/host-context.tsx} +0 -0
- /package/src/{use-refresh-state.ts → hooks/use-refresh-state.ts} +0 -0
- /package/src/{use-stack-modifiers.ts → hooks/use-stack-modifiers.ts} +0 -0
- /package/src/{ripple-clip.ts → utils/ripple-clip.ts} +0 -0
- /package/src/{tap-modifiers.ts → utils/tap-modifiers.ts} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useHeaderBarInset"],"sourceRoot":"../../../../src","sources":["organisms/header/use-header-bar-inset.android.ts"],"mappings":";;AAAA,OAAO,MAAMA,iBAAiB,GAAGA,CAAA,KAAM,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isScrollEdgeEffectAvailable } from '@hzblj/kara-native';
|
|
4
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
5
|
+
|
|
6
|
+
/** iOS 26's navigation bar is 54pt, the 44pt row of items plus room for its glass; before it the bar was the row. */
|
|
7
|
+
const BAR_HEIGHT = isScrollEdgeEffectAvailable() ? 54 : 44;
|
|
8
|
+
export const useHeaderBarInset = () => useSafeAreaInsets().top + BAR_HEIGHT;
|
|
9
|
+
//# sourceMappingURL=use-header-bar-inset.ios.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isScrollEdgeEffectAvailable","useSafeAreaInsets","BAR_HEIGHT","useHeaderBarInset","top"],"sourceRoot":"../../../../src","sources":["organisms/header/use-header-bar-inset.ios.ts"],"mappings":";;AAAA,SAAQA,2BAA2B,QAAO,oBAAoB;AAC9D,SAAQC,iBAAiB,QAAO,gCAAgC;;AAEhE;AACA,MAAMC,UAAU,GAAGF,2BAA2B,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE;AAE1D,OAAO,MAAMG,iBAAiB,GAAGA,CAAA,KAAMF,iBAAiB,CAAC,CAAC,CAACG,GAAG,GAAGF,UAAU","ignoreList":[]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":[],"sourceRoot":"../../../../src","sources":["organisms/header/use-header-bar-inset.types.ts"],"mappings":"","ignoreList":[]}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useMemo } from 'react';
|
|
4
|
+
import { Platform } from 'react-native';
|
|
5
|
+
import { useHeaderBarInset } from './use-header-bar-inset';
|
|
6
|
+
|
|
7
|
+
/** The row iOS gives a large title, which the top of a large-title screen includes. */
|
|
8
|
+
const LARGE_TITLE_HEIGHT = 52;
|
|
9
|
+
const scrollToOffset = (target, offset) => {
|
|
10
|
+
if ('scrollToOffset' in target) {
|
|
11
|
+
target.scrollToOffset({
|
|
12
|
+
animated: true,
|
|
13
|
+
offset
|
|
14
|
+
});
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if ('scrollTo' in target) {
|
|
18
|
+
target.scrollTo({
|
|
19
|
+
animated: true,
|
|
20
|
+
y: offset
|
|
21
|
+
});
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
target.getScrollResponder()?.scrollTo({
|
|
25
|
+
animated: true,
|
|
26
|
+
y: offset
|
|
27
|
+
});
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* A ref for React Navigation's or Expo Router's `useScrollToTop`: pressing the tab again scrolls the list back under a
|
|
32
|
+
* transparent header, with a large title expanded, where scrolling to 0 would leave the content under the bar and the
|
|
33
|
+
* title collapsed. `useScrollToTop(useHeaderScrollToTop(listRef, {largeTitle: true}))`.
|
|
34
|
+
*/
|
|
35
|
+
export const useHeaderScrollToTop = (ref, {
|
|
36
|
+
largeTitle = false,
|
|
37
|
+
topInset = 0
|
|
38
|
+
} = {}) => {
|
|
39
|
+
const barInset = useHeaderBarInset();
|
|
40
|
+
const offset = Platform.OS === 'ios' ? -(barInset + (largeTitle ? LARGE_TITLE_HEIGHT : 0) + topInset) : 0;
|
|
41
|
+
return useMemo(() => ({
|
|
42
|
+
current: {
|
|
43
|
+
scrollToTop: () => {
|
|
44
|
+
if (ref.current) {
|
|
45
|
+
scrollToOffset(ref.current, offset);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}), [offset, ref]);
|
|
50
|
+
};
|
|
51
|
+
//# sourceMappingURL=use-header-scroll-to-top.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useMemo","Platform","useHeaderBarInset","LARGE_TITLE_HEIGHT","scrollToOffset","target","offset","animated","scrollTo","y","getScrollResponder","useHeaderScrollToTop","ref","largeTitle","topInset","barInset","OS","current","scrollToTop"],"sourceRoot":"../../../../src","sources":["organisms/header/use-header-scroll-to-top.ts"],"mappings":";;AAAA,SAAwBA,OAAO,QAAO,OAAO;AAC7C,SAAQC,QAAQ,QAAO,cAAc;AAGrC,SAAQC,iBAAiB,QAAO,wBAAwB;;AAExD;AACA,MAAMC,kBAAkB,GAAG,EAAE;AAE7B,MAAMC,cAAc,GAAGA,CAACC,MAAwB,EAAEC,MAAc,KAAK;EACnE,IAAI,gBAAgB,IAAID,MAAM,EAAE;IAC9BA,MAAM,CAACD,cAAc,CAAC;MAACG,QAAQ,EAAE,IAAI;MAAED;IAAM,CAAC,CAAC;IAC/C;EACF;EAEA,IAAI,UAAU,IAAID,MAAM,EAAE;IACxBA,MAAM,CAACG,QAAQ,CAAC;MAACD,QAAQ,EAAE,IAAI;MAAEE,CAAC,EAAEH;IAAM,CAAC,CAAC;IAC5C;EACF;EAEAD,MAAM,CAACK,kBAAkB,CAAC,CAAC,EAAEF,QAAQ,CAAC;IAACD,QAAQ,EAAE,IAAI;IAAEE,CAAC,EAAEH;EAAM,CAAC,CAAC;AACpE,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMK,oBAAoB,GAAGA,CAClCC,GAAuC,EACvC;EAACC,UAAU,GAAG,KAAK;EAAEC,QAAQ,GAAG;AAA2B,CAAC,GAAG,CAAC,CAAC,KACxC;EACzB,MAAMC,QAAQ,GAAGb,iBAAiB,CAAC,CAAC;EACpC,MAAMI,MAAM,GAAGL,QAAQ,CAACe,EAAE,KAAK,KAAK,GAAG,EAAED,QAAQ,IAAIF,UAAU,GAAGV,kBAAkB,GAAG,CAAC,CAAC,GAAGW,QAAQ,CAAC,GAAG,CAAC;EAEzG,OAAOd,OAAO,CACZ,OAAO;IACLiB,OAAO,EAAE;MACPC,WAAW,EAAEA,CAAA,KAAM;QACjB,IAAIN,GAAG,CAACK,OAAO,EAAE;UACfb,cAAc,CAACQ,GAAG,CAACK,OAAO,EAAEX,MAAM,CAAC;QACrC;MACF;IACF;EACF,CAAC,CAAC,EACF,CAACA,MAAM,EAAEM,GAAG,CACd,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useAppTheme } from '@hzblj/kara-theme';
|
|
4
|
+
import { useCallback, useMemo, useRef, useState } from 'react';
|
|
5
|
+
import { Platform } from 'react-native';
|
|
6
|
+
import { headerColor } from "./header-color.js";
|
|
7
|
+
import { HeaderSearchAccessory } from './header-search-accessory';
|
|
8
|
+
import { HEADER_SEARCH_ROW_HEIGHT, HeaderSearchInput } from './header-search-input';
|
|
9
|
+
import { HeaderSearchScrim } from "./header-search-scrim.js";
|
|
10
|
+
|
|
11
|
+
/** `integratedButton` hides the title and items while the field is open and keeps it out of the bottom toolbar. */
|
|
12
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
13
|
+
const PLACEMENT_OPTIONS = {
|
|
14
|
+
integratedButton: {
|
|
15
|
+
allowToolbarIntegration: false,
|
|
16
|
+
hideNavigationBar: true
|
|
17
|
+
},
|
|
18
|
+
stacked: {
|
|
19
|
+
hideNavigationBar: false
|
|
20
|
+
}
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
/**
|
|
24
|
+
* A search field for a screen's header. iOS: UIKit's search bar stacked under the title, with the title and items kept
|
|
25
|
+
* and nothing dimmed by the system, so a list can filter live, or behind a search button in the bar's corner
|
|
26
|
+
* (`placement`); pass `searchBar` to `useHeader` as `search`. Android: Material's search field with its cancel button,
|
|
27
|
+
* as a row for the screen to put right under the top app bar (`searchInput`). Both report the `query`; `scrim` washes
|
|
28
|
+
* the content out while the field is focused and empty and, on iOS, carries the field's glyphs and voice.
|
|
29
|
+
*
|
|
30
|
+
* With `voice` the field has a microphone; the app runs the dictation and writes what it hears with `setText`. Typing
|
|
31
|
+
* over it, or ending the search, calls `voice.onCancel`.
|
|
32
|
+
*/
|
|
33
|
+
export const useHeaderSearch = ({
|
|
34
|
+
cancelIcon,
|
|
35
|
+
clearIcon,
|
|
36
|
+
enabled = true,
|
|
37
|
+
placeholder = 'Search',
|
|
38
|
+
placement = 'stacked',
|
|
39
|
+
voice
|
|
40
|
+
} = {}) => {
|
|
41
|
+
const theme = useAppTheme();
|
|
42
|
+
const [query, setQuery] = useState('');
|
|
43
|
+
const [focused, setFocused] = useState(false);
|
|
44
|
+
const searchBarRef = useRef(null);
|
|
45
|
+
const inputRef = useRef(null);
|
|
46
|
+
const lastSetText = useRef(null);
|
|
47
|
+
const voiceRef = useRef(voice);
|
|
48
|
+
voiceRef.current = voice;
|
|
49
|
+
const cancelVoice = useCallback(() => {
|
|
50
|
+
if (voiceRef.current?.listening) {
|
|
51
|
+
voiceRef.current.onCancel?.();
|
|
52
|
+
}
|
|
53
|
+
}, []);
|
|
54
|
+
const changeQuery = useCallback(text => {
|
|
55
|
+
if (text !== lastSetText.current) {
|
|
56
|
+
cancelVoice();
|
|
57
|
+
}
|
|
58
|
+
setQuery(text);
|
|
59
|
+
}, [cancelVoice]);
|
|
60
|
+
const reset = useCallback(() => {
|
|
61
|
+
cancelVoice();
|
|
62
|
+
lastSetText.current = null;
|
|
63
|
+
setQuery('');
|
|
64
|
+
setFocused(false);
|
|
65
|
+
}, [cancelVoice]);
|
|
66
|
+
const searchBar = useMemo(() => {
|
|
67
|
+
if (!enabled || Platform.OS !== 'ios') {
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
return {
|
|
71
|
+
...PLACEMENT_OPTIONS[placement],
|
|
72
|
+
autoCapitalize: 'none',
|
|
73
|
+
hideWhenScrolling: false,
|
|
74
|
+
obscureBackground: false,
|
|
75
|
+
onBlur: () => setFocused(false),
|
|
76
|
+
onCancelButtonPress: reset,
|
|
77
|
+
onChangeText: event => changeQuery(event.nativeEvent.text),
|
|
78
|
+
onFocus: () => setFocused(true),
|
|
79
|
+
placeholder,
|
|
80
|
+
placement,
|
|
81
|
+
ref: searchBarRef,
|
|
82
|
+
tintColor: headerColor(theme, 'content.primary')
|
|
83
|
+
};
|
|
84
|
+
}, [changeQuery, enabled, placeholder, placement, reset, theme]);
|
|
85
|
+
const searchInput = useMemo(() => {
|
|
86
|
+
if (!enabled || Platform.OS !== 'android') {
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
return /*#__PURE__*/_jsx(HeaderSearchInput, {
|
|
90
|
+
clearIcon: clearIcon,
|
|
91
|
+
onChangeText: changeQuery,
|
|
92
|
+
onFocusChange: setFocused,
|
|
93
|
+
placeholder: placeholder,
|
|
94
|
+
ref: inputRef,
|
|
95
|
+
voice: voice
|
|
96
|
+
});
|
|
97
|
+
}, [changeQuery, clearIcon, enabled, placeholder, voice]);
|
|
98
|
+
const clear = useCallback(() => {
|
|
99
|
+
reset();
|
|
100
|
+
searchBarRef.current?.cancelSearch();
|
|
101
|
+
inputRef.current?.clear();
|
|
102
|
+
inputRef.current?.blur();
|
|
103
|
+
}, [reset]);
|
|
104
|
+
const setText = useCallback(text => {
|
|
105
|
+
lastSetText.current = text;
|
|
106
|
+
setQuery(text);
|
|
107
|
+
searchBarRef.current?.setText(text);
|
|
108
|
+
inputRef.current?.setText(text);
|
|
109
|
+
}, []);
|
|
110
|
+
const dimmed = enabled && focused && query.trim().length === 0;
|
|
111
|
+
const scrim = useMemo(() => {
|
|
112
|
+
if (!enabled) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
return /*#__PURE__*/_jsxs(_Fragment, {
|
|
116
|
+
children: [dimmed ? /*#__PURE__*/_jsx(HeaderSearchScrim, {
|
|
117
|
+
onPress: clear,
|
|
118
|
+
topOffset: HEADER_SEARCH_ROW_HEIGHT
|
|
119
|
+
}) : null, /*#__PURE__*/_jsx(HeaderSearchAccessory, {
|
|
120
|
+
cancelIcon: cancelIcon,
|
|
121
|
+
clearIcon: clearIcon,
|
|
122
|
+
voice: voice
|
|
123
|
+
})]
|
|
124
|
+
});
|
|
125
|
+
}, [cancelIcon, clear, clearIcon, dimmed, enabled, voice]);
|
|
126
|
+
return {
|
|
127
|
+
clear,
|
|
128
|
+
query,
|
|
129
|
+
scrim,
|
|
130
|
+
searchBar,
|
|
131
|
+
searchInput,
|
|
132
|
+
setText
|
|
133
|
+
};
|
|
134
|
+
};
|
|
135
|
+
//# sourceMappingURL=use-header-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useAppTheme","useCallback","useMemo","useRef","useState","Platform","headerColor","HeaderSearchAccessory","HEADER_SEARCH_ROW_HEIGHT","HeaderSearchInput","HeaderSearchScrim","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","PLACEMENT_OPTIONS","integratedButton","allowToolbarIntegration","hideNavigationBar","stacked","useHeaderSearch","cancelIcon","clearIcon","enabled","placeholder","placement","voice","theme","query","setQuery","focused","setFocused","searchBarRef","inputRef","lastSetText","voiceRef","current","cancelVoice","listening","onCancel","changeQuery","text","reset","searchBar","OS","undefined","autoCapitalize","hideWhenScrolling","obscureBackground","onBlur","onCancelButtonPress","onChangeText","event","nativeEvent","onFocus","ref","tintColor","searchInput","onFocusChange","clear","cancelSearch","blur","setText","dimmed","trim","length","scrim","children","onPress","topOffset"],"sourceRoot":"../../../../src","sources":["organisms/header/use-header-search.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { useAppTheme } from '@hzblj/kara-theme';
|
|
4
|
+
import { useLayoutEffect, useMemo } from 'react';
|
|
5
|
+
import { toHeaderOptions } from './header-options';
|
|
6
|
+
import { useHeaderTitle } from "./header-title.js";
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* A screen's header as native-stack options, with what its list needs alongside: the title (centred, leading with a
|
|
10
|
+
* subtitle, revealed on scroll or large), the actions on both sides (the navigation bar's own items on iOS, Material
|
|
11
|
+
* buttons on Android) and a search field. Spread `options` into Expo Router's `<Stack.Screen options>` or a React
|
|
12
|
+
* Navigation screen's `options`. Memoize the action arrays: new arrays build new options on every render.
|
|
13
|
+
*/
|
|
14
|
+
export const useHeaderOptions = ({
|
|
15
|
+
backHidden,
|
|
16
|
+
largeTitle,
|
|
17
|
+
leadingActions,
|
|
18
|
+
search,
|
|
19
|
+
subtitle,
|
|
20
|
+
title,
|
|
21
|
+
titleHidden = false,
|
|
22
|
+
titleRevealProgress,
|
|
23
|
+
trailingActions
|
|
24
|
+
}) => {
|
|
25
|
+
const theme = useAppTheme();
|
|
26
|
+
const headerTitle = useHeaderTitle({
|
|
27
|
+
largeTitle,
|
|
28
|
+
subtitle,
|
|
29
|
+
title,
|
|
30
|
+
titleHidden,
|
|
31
|
+
titleRevealProgress
|
|
32
|
+
});
|
|
33
|
+
const actionOptions = useMemo(() => toHeaderOptions({
|
|
34
|
+
backHidden,
|
|
35
|
+
leadingActions,
|
|
36
|
+
trailingActions
|
|
37
|
+
}, theme), [backHidden, leadingActions, theme, trailingActions]);
|
|
38
|
+
return useMemo(() => {
|
|
39
|
+
const options = {};
|
|
40
|
+
Object.assign(options, headerTitle.options, actionOptions);
|
|
41
|
+
if (search) {
|
|
42
|
+
options.headerSearchBarOptions = search;
|
|
43
|
+
}
|
|
44
|
+
return {
|
|
45
|
+
contentInsetAdjustmentBehavior: 'automatic',
|
|
46
|
+
largeTitle: headerTitle.largeTitle,
|
|
47
|
+
onScroll: headerTitle.onScroll,
|
|
48
|
+
options
|
|
49
|
+
};
|
|
50
|
+
}, [actionOptions, headerTitle.largeTitle, headerTitle.onScroll, headerTitle.options, search]);
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
/**
|
|
54
|
+
* Sets the screen's header through its navigation object, from React Navigation's or Expo Router's `useNavigation()`,
|
|
55
|
+
* before the screen first paints, and returns what its list needs. What a screen has from the moment it is pushed
|
|
56
|
+
* belongs in its static `options` too: iOS morphs the bar items between screens only when they exist at the push.
|
|
57
|
+
*/
|
|
58
|
+
export const useHeader = (navigation, params) => {
|
|
59
|
+
const {
|
|
60
|
+
contentInsetAdjustmentBehavior,
|
|
61
|
+
largeTitle,
|
|
62
|
+
onScroll,
|
|
63
|
+
options
|
|
64
|
+
} = useHeaderOptions(params);
|
|
65
|
+
useLayoutEffect(() => {
|
|
66
|
+
navigation.setOptions(options);
|
|
67
|
+
}, [navigation, options]);
|
|
68
|
+
return useMemo(() => ({
|
|
69
|
+
contentInsetAdjustmentBehavior,
|
|
70
|
+
largeTitle,
|
|
71
|
+
onScroll
|
|
72
|
+
}), [contentInsetAdjustmentBehavior, largeTitle, onScroll]);
|
|
73
|
+
};
|
|
74
|
+
//# sourceMappingURL=use-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["useAppTheme","useLayoutEffect","useMemo","toHeaderOptions","useHeaderTitle","useHeaderOptions","backHidden","largeTitle","leadingActions","search","subtitle","title","titleHidden","titleRevealProgress","trailingActions","theme","headerTitle","actionOptions","options","Object","assign","headerSearchBarOptions","contentInsetAdjustmentBehavior","onScroll","useHeader","navigation","params","setOptions"],"sourceRoot":"../../../../src","sources":["organisms/header/use-header.ts"],"mappings":";;AAAA,SAAQA,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,eAAe,EAAEC,OAAO,QAAO,OAAO;AAG9C,SAAQC,eAAe,QAAO,kBAAkB;AAChD,SAAQC,cAAc,QAAO,mBAAgB;;AAE7C;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,gBAAgB,GAAGA,CAAC;EAC/BC,UAAU;EACVC,UAAU;EACVC,cAAc;EACdC,MAAM;EACNC,QAAQ;EACRC,KAAK;EACLC,WAAW,GAAG,KAAK;EACnBC,mBAAmB;EACnBC;AACY,CAAC,KAA0B;EACvC,MAAMC,KAAK,GAAGf,WAAW,CAAC,CAAC;EAC3B,MAAMgB,WAAW,GAAGZ,cAAc,CAAC;IAACG,UAAU;IAAEG,QAAQ;IAAEC,KAAK;IAAEC,WAAW;IAAEC;EAAmB,CAAC,CAAC;EAEnG,MAAMI,aAAa,GAAGf,OAAO,CAC3B,MAAMC,eAAe,CAAC;IAACG,UAAU;IAAEE,cAAc;IAAEM;EAAe,CAAC,EAAEC,KAAK,CAAC,EAC3E,CAACT,UAAU,EAAEE,cAAc,EAAEO,KAAK,EAAED,eAAe,CACrD,CAAC;EAED,OAAOZ,OAAO,CAAC,MAAM;IACnB,MAAMgB,OAAsB,GAAG,CAAC,CAAC;IAEjCC,MAAM,CAACC,MAAM,CAACF,OAAO,EAAEF,WAAW,CAACE,OAAO,EAAED,aAAa,CAAC;IAE1D,IAAIR,MAAM,EAAE;MACVS,OAAO,CAACG,sBAAsB,GAAGZ,MAAM;IACzC;IAEA,OAAO;MACLa,8BAA8B,EAAE,WAAW;MAC3Cf,UAAU,EAAES,WAAW,CAACT,UAAU;MAClCgB,QAAQ,EAAEP,WAAW,CAACO,QAAQ;MAC9BL;IACF,CAAC;EACH,CAAC,EAAE,CAACD,aAAa,EAAED,WAAW,CAACT,UAAU,EAAES,WAAW,CAACO,QAAQ,EAAEP,WAAW,CAACE,OAAO,EAAET,MAAM,CAAC,CAAC;AAChG,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMe,SAAS,GAAGA,CAACC,UAA4B,EAAEC,MAAoB,KAAoB;EAC9F,MAAM;IAACJ,8BAA8B;IAAEf,UAAU;IAAEgB,QAAQ;IAAEL;EAAO,CAAC,GAAGb,gBAAgB,CAACqB,MAAM,CAAC;EAEhGzB,eAAe,CAAC,MAAM;IACpBwB,UAAU,CAACE,UAAU,CAACT,OAAO,CAAC;EAChC,CAAC,EAAE,CAACO,UAAU,EAAEP,OAAO,CAAC,CAAC;EAEzB,OAAOhB,OAAO,CACZ,OAAO;IAACoB,8BAA8B;IAAEf,UAAU;IAAEgB;EAAQ,CAAC,CAAC,EAC9D,CAACD,8BAA8B,EAAEf,UAAU,EAAEgB,QAAQ,CACvD,CAAC;AACH,CAAC","ignoreList":[]}
|
|
@@ -0,0 +1,189 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isScrollEdgeEffectAvailable, isViewControllerBasedStatusBarAppearance } from '@hzblj/kara-native';
|
|
4
|
+
import { useAppTheme } from '@hzblj/kara-theme';
|
|
5
|
+
import { useCallback, useEffect, useLayoutEffect, useMemo, useState } from 'react';
|
|
6
|
+
import { Platform, StatusBar } from 'react-native';
|
|
7
|
+
import { Extrapolation, interpolate, useAnimatedReaction, useDerivedValue, useSharedValue } from 'react-native-reanimated';
|
|
8
|
+
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
9
|
+
import { scheduleOnRN } from 'react-native-worklets';
|
|
10
|
+
import { headerColor } from "./header-color.js";
|
|
11
|
+
import { useIsTitleRevealed } from "./header-title.js";
|
|
12
|
+
import { HeroHeaderBackground } from './hero-header-background';
|
|
13
|
+
import { useHeaderOptions } from "./use-header.js";
|
|
14
|
+
import { useHeaderBarInset } from './use-header-bar-inset';
|
|
15
|
+
import { HERO_HEADER_SCREEN_OPTIONS } from "./use-stack-screen-options.js";
|
|
16
|
+
|
|
17
|
+
/** The header fades in while 50 to 70 % of the hero's part under the bar scrolls away. */
|
|
18
|
+
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
19
|
+
const REVEAL_RANGE = [0.5, 0.7];
|
|
20
|
+
|
|
21
|
+
/** Material 3's top app bar. */
|
|
22
|
+
const ANDROID_BAR_HEIGHT = 64;
|
|
23
|
+
const useHeroBarHeight = () => {
|
|
24
|
+
const iosBarInset = useHeaderBarInset();
|
|
25
|
+
const {
|
|
26
|
+
top
|
|
27
|
+
} = useSafeAreaInsets();
|
|
28
|
+
return Platform.OS === 'ios' ? iosBarInset : top + ANDROID_BAR_HEIGHT;
|
|
29
|
+
};
|
|
30
|
+
const useIsOverHero = progress => {
|
|
31
|
+
const [overHero, setOverHero] = useState(() => progress.value === 0);
|
|
32
|
+
useAnimatedReaction(() => progress.value === 0, (isOver, wasOver) => {
|
|
33
|
+
if (isOver !== wasOver) {
|
|
34
|
+
scheduleOnRN(setOverHero, isOver);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return overHero;
|
|
38
|
+
};
|
|
39
|
+
const useIsScreenFocused = navigation => {
|
|
40
|
+
const [focused, setFocused] = useState(() => navigation.isFocused());
|
|
41
|
+
useEffect(() => {
|
|
42
|
+
const unsubscribeFocus = navigation.addListener('focus', () => setFocused(true));
|
|
43
|
+
const unsubscribeBlur = navigation.addListener('blur', () => setFocused(false));
|
|
44
|
+
return () => {
|
|
45
|
+
unsubscribeFocus();
|
|
46
|
+
unsubscribeBlur();
|
|
47
|
+
};
|
|
48
|
+
}, [navigation]);
|
|
49
|
+
return focused;
|
|
50
|
+
};
|
|
51
|
+
const BAR_STYLES = {
|
|
52
|
+
dark: 'dark-content',
|
|
53
|
+
light: 'light-content'
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* The status bar over the hero, for this screen only. With view-controller-based appearance (Info.plist) the native
|
|
58
|
+
* stack sets it per screen (`statusBarStyle`); otherwise, as in Expo apps and on Android, React Native's `StatusBar`
|
|
59
|
+
* applies it while the screen is focused and over the hero, and its stack restores the previous style once it is not.
|
|
60
|
+
*/
|
|
61
|
+
const useHeroStatusBar = (navigation, overHero, overHeroStyle) => {
|
|
62
|
+
const focused = useIsScreenFocused(navigation);
|
|
63
|
+
const perScreen = isViewControllerBasedStatusBarAppearance();
|
|
64
|
+
useEffect(() => {
|
|
65
|
+
if (perScreen) {
|
|
66
|
+
navigation.setOptions({
|
|
67
|
+
statusBarStyle: overHero ? overHeroStyle : 'auto'
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}, [navigation, overHero, overHeroStyle, perScreen]);
|
|
71
|
+
if (perScreen || !focused || !overHero) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
return /*#__PURE__*/_jsx(StatusBar, {
|
|
75
|
+
animated: true,
|
|
76
|
+
barStyle: BAR_STYLES[overHeroStyle]
|
|
77
|
+
});
|
|
78
|
+
};
|
|
79
|
+
const useRevealProgress = (barHeight, heroHeight, introProgress) => {
|
|
80
|
+
const scrollY = useSharedValue(0);
|
|
81
|
+
const heroUnderBar = heroHeight - barHeight;
|
|
82
|
+
const start = heroUnderBar * REVEAL_RANGE[0];
|
|
83
|
+
const end = heroUnderBar * REVEAL_RANGE[1];
|
|
84
|
+
const scrollProgress = useDerivedValue(() => {
|
|
85
|
+
if (end <= start) {
|
|
86
|
+
return 1;
|
|
87
|
+
}
|
|
88
|
+
return interpolate(scrollY.value, [start, end], [0, 1], Extrapolation.CLAMP);
|
|
89
|
+
});
|
|
90
|
+
const progress = useDerivedValue(() => Math.max(scrollProgress.value, introProgress?.value ?? 0));
|
|
91
|
+
const onScroll = useCallback(offsetY => {
|
|
92
|
+
'worklet';
|
|
93
|
+
|
|
94
|
+
scrollY.value = offsetY;
|
|
95
|
+
}, [scrollY]);
|
|
96
|
+
return {
|
|
97
|
+
onScroll,
|
|
98
|
+
progress,
|
|
99
|
+
scrollProgress
|
|
100
|
+
};
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A header over a full-bleed hero: the content runs under a transparent bar, and while 50 to 70 % of the hero's part
|
|
105
|
+
* under the bar scrolls away the header fades in — the title (and subtitle) in the bar, the bar's background
|
|
106
|
+
* (`background`: iOS 26's scroll edge effect switched on, the bar's material coming in below iOS 26, the top app bar's
|
|
107
|
+
* surface on Android), the items' tint and the status bar, light over the hero with `overHeroStyle` `light`. `revealedTrailingActions` join the
|
|
108
|
+
* bar once the title is shown. Give the screen `HERO_HEADER_SCREEN_OPTIONS` as static options, so its first frame has
|
|
109
|
+
* no large title, render `background` after the list and call `onScroll` with its offset.
|
|
110
|
+
*/
|
|
111
|
+
export const useHeroHeader = (navigation, {
|
|
112
|
+
backHidden,
|
|
113
|
+
heroHeight,
|
|
114
|
+
introProgress,
|
|
115
|
+
leadingActions,
|
|
116
|
+
overHeroStyle = 'light',
|
|
117
|
+
revealedTrailingActions,
|
|
118
|
+
subtitle,
|
|
119
|
+
title,
|
|
120
|
+
trailingActions
|
|
121
|
+
}) => {
|
|
122
|
+
const theme = useAppTheme();
|
|
123
|
+
const barHeight = useHeroBarHeight();
|
|
124
|
+
const {
|
|
125
|
+
onScroll,
|
|
126
|
+
progress,
|
|
127
|
+
scrollProgress
|
|
128
|
+
} = useRevealProgress(barHeight, heroHeight, introProgress);
|
|
129
|
+
const titleShown = useIsTitleRevealed(scrollProgress);
|
|
130
|
+
const overHero = useIsOverHero(progress);
|
|
131
|
+
const scrolledOverHero = useIsOverHero(scrollProgress);
|
|
132
|
+
const statusBar = useHeroStatusBar(navigation, overHero, overHeroStyle);
|
|
133
|
+
const visibleTrailingActions = useMemo(() => {
|
|
134
|
+
if (!titleShown || !revealedTrailingActions) {
|
|
135
|
+
return trailingActions;
|
|
136
|
+
}
|
|
137
|
+
const actions = [];
|
|
138
|
+
for (const action of revealedTrailingActions) {
|
|
139
|
+
actions.push(action);
|
|
140
|
+
}
|
|
141
|
+
for (const action of trailingActions ?? []) {
|
|
142
|
+
actions.push(action);
|
|
143
|
+
}
|
|
144
|
+
return actions;
|
|
145
|
+
}, [revealedTrailingActions, titleShown, trailingActions]);
|
|
146
|
+
const {
|
|
147
|
+
options
|
|
148
|
+
} = useHeaderOptions({
|
|
149
|
+
backHidden,
|
|
150
|
+
leadingActions,
|
|
151
|
+
subtitle,
|
|
152
|
+
title,
|
|
153
|
+
titleRevealProgress: scrollProgress,
|
|
154
|
+
trailingActions: visibleTrailingActions
|
|
155
|
+
});
|
|
156
|
+
useLayoutEffect(() => {
|
|
157
|
+
navigation.setOptions(HERO_HEADER_SCREEN_OPTIONS);
|
|
158
|
+
}, [navigation]);
|
|
159
|
+
useLayoutEffect(() => {
|
|
160
|
+
navigation.setOptions(options);
|
|
161
|
+
}, [navigation, options]);
|
|
162
|
+
useEffect(() => {
|
|
163
|
+
const light = overHero && overHeroStyle === 'light';
|
|
164
|
+
const appearance = {
|
|
165
|
+
headerTintColor: headerColor(theme, light ? 'content.on.accent' : 'content.primary')
|
|
166
|
+
};
|
|
167
|
+
if (isScrollEdgeEffectAvailable()) {
|
|
168
|
+
appearance.scrollEdgeEffects = {
|
|
169
|
+
top: scrolledOverHero ? 'hidden' : 'automatic'
|
|
170
|
+
};
|
|
171
|
+
}
|
|
172
|
+
navigation.setOptions(appearance);
|
|
173
|
+
}, [navigation, overHero, overHeroStyle, scrolledOverHero, theme]);
|
|
174
|
+
const background = useMemo(() => /*#__PURE__*/_jsxs(_Fragment, {
|
|
175
|
+
children: [/*#__PURE__*/_jsx(HeroHeaderBackground, {
|
|
176
|
+
height: barHeight,
|
|
177
|
+
progress: progress
|
|
178
|
+
}), statusBar]
|
|
179
|
+
}), [barHeight, progress, statusBar]);
|
|
180
|
+
return {
|
|
181
|
+
background,
|
|
182
|
+
contentInsetAdjustmentBehavior: 'never',
|
|
183
|
+
largeTitle: null,
|
|
184
|
+
onScroll,
|
|
185
|
+
progress,
|
|
186
|
+
scrollProgress
|
|
187
|
+
};
|
|
188
|
+
};
|
|
189
|
+
//# sourceMappingURL=use-hero-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isScrollEdgeEffectAvailable","isViewControllerBasedStatusBarAppearance","useAppTheme","useCallback","useEffect","useLayoutEffect","useMemo","useState","Platform","StatusBar","Extrapolation","interpolate","useAnimatedReaction","useDerivedValue","useSharedValue","useSafeAreaInsets","scheduleOnRN","headerColor","useIsTitleRevealed","HeroHeaderBackground","useHeaderOptions","useHeaderBarInset","HERO_HEADER_SCREEN_OPTIONS","jsx","_jsx","Fragment","_Fragment","jsxs","_jsxs","REVEAL_RANGE","ANDROID_BAR_HEIGHT","useHeroBarHeight","iosBarInset","top","OS","useIsOverHero","progress","overHero","setOverHero","value","isOver","wasOver","useIsScreenFocused","navigation","focused","setFocused","isFocused","unsubscribeFocus","addListener","unsubscribeBlur","BAR_STYLES","dark","light","useHeroStatusBar","overHeroStyle","perScreen","setOptions","statusBarStyle","animated","barStyle","useRevealProgress","barHeight","heroHeight","introProgress","scrollY","heroUnderBar","start","end","scrollProgress","CLAMP","Math","max","onScroll","offsetY","useHeroHeader","backHidden","leadingActions","revealedTrailingActions","subtitle","title","trailingActions","theme","titleShown","scrolledOverHero","statusBar","visibleTrailingActions","actions","action","push","options","titleRevealProgress","appearance","headerTintColor","scrollEdgeEffects","background","children","height","contentInsetAdjustmentBehavior","largeTitle"],"sourceRoot":"../../../../src","sources":["organisms/header/use-hero-header.tsx"],"mappings":"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","ignoreList":[]}
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
import { isScrollEdgeEffectAvailable } from '@hzblj/kara-native';
|
|
4
|
+
import { useAppTheme } from '@hzblj/kara-theme';
|
|
5
|
+
import { useMemo } from 'react';
|
|
6
|
+
import { Platform } from 'react-native';
|
|
7
|
+
import { headerColor } from "./header-color.js";
|
|
8
|
+
|
|
9
|
+
/** iOS 26 draws its own scroll edge effect under a transparent bar; older iOS needs the bar's blur instead. */
|
|
10
|
+
const HEADER_BLUR_EFFECT = Platform.OS === 'ios' && !isScrollEdgeEffectAvailable() ? 'systemChromeMaterial' : undefined;
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* A native stack's `screenOptions` in the active theme: the surface behind every screen, a minimal back button, the
|
|
14
|
+
* title and large title in the theme's `headline` and `headingM`, no hairline under the bar. iOS keeps the bar
|
|
15
|
+
* transparent so iOS 26 blurs what scrolls under it (older iOS gets the bar's material); Android gets a solid top app
|
|
16
|
+
* bar in the surface colour.
|
|
17
|
+
*/
|
|
18
|
+
export const useStackScreenOptions = () => {
|
|
19
|
+
const theme = useAppTheme();
|
|
20
|
+
return useMemo(() => {
|
|
21
|
+
const content = headerColor(theme, 'content.primary');
|
|
22
|
+
const surface = headerColor(theme, 'surface.base');
|
|
23
|
+
return {
|
|
24
|
+
contentStyle: {
|
|
25
|
+
backgroundColor: surface
|
|
26
|
+
},
|
|
27
|
+
headerBackButtonDisplayMode: 'minimal',
|
|
28
|
+
headerBlurEffect: HEADER_BLUR_EFFECT,
|
|
29
|
+
headerLargeTitleShadowVisible: false,
|
|
30
|
+
headerLargeTitleStyle: {
|
|
31
|
+
color: content,
|
|
32
|
+
fontFamily: theme.typography.headingM.fontFamily,
|
|
33
|
+
fontSize: theme.typography.headingM.fontSize
|
|
34
|
+
},
|
|
35
|
+
headerShadowVisible: false,
|
|
36
|
+
headerStyle: Platform.OS === 'android' ? {
|
|
37
|
+
backgroundColor: surface
|
|
38
|
+
} : undefined,
|
|
39
|
+
headerTintColor: content,
|
|
40
|
+
headerTitleStyle: {
|
|
41
|
+
color: content,
|
|
42
|
+
fontFamily: theme.typography.headline.fontFamily,
|
|
43
|
+
fontSize: theme.typography.headline.fontSize
|
|
44
|
+
},
|
|
45
|
+
headerTransparent: Platform.OS === 'ios'
|
|
46
|
+
};
|
|
47
|
+
}, [theme]);
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
/** A screen with a large title that collapses into the bar as its list scrolls. */
|
|
51
|
+
export const LARGE_TITLE_SCREEN_OPTIONS = {
|
|
52
|
+
headerLargeTitleEnabled: true,
|
|
53
|
+
headerShown: true
|
|
54
|
+
};
|
|
55
|
+
|
|
56
|
+
/** A screen without the stack's header, for one that draws its own or none. */
|
|
57
|
+
export const HIDDEN_HEADER_SCREEN_OPTIONS = {
|
|
58
|
+
headerShown: false
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* A screen whose content runs under a transparent bar, a full-bleed image above all, for `useHeroHeader`. Static, so the
|
|
63
|
+
* first frame already has no large title and no bar background over the image.
|
|
64
|
+
*/
|
|
65
|
+
export const HERO_HEADER_SCREEN_OPTIONS = {
|
|
66
|
+
headerBlurEffect: 'none',
|
|
67
|
+
headerLargeTitleEnabled: false,
|
|
68
|
+
headerShown: true,
|
|
69
|
+
headerStyle: {
|
|
70
|
+
backgroundColor: 'transparent'
|
|
71
|
+
},
|
|
72
|
+
headerTransparent: true,
|
|
73
|
+
scrollEdgeEffects: {
|
|
74
|
+
top: 'hidden'
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
//# sourceMappingURL=use-stack-screen-options.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"names":["isScrollEdgeEffectAvailable","useAppTheme","useMemo","Platform","headerColor","HEADER_BLUR_EFFECT","OS","undefined","useStackScreenOptions","theme","content","surface","contentStyle","backgroundColor","headerBackButtonDisplayMode","headerBlurEffect","headerLargeTitleShadowVisible","headerLargeTitleStyle","color","fontFamily","typography","headingM","fontSize","headerShadowVisible","headerStyle","headerTintColor","headerTitleStyle","headline","headerTransparent","LARGE_TITLE_SCREEN_OPTIONS","headerLargeTitleEnabled","headerShown","HIDDEN_HEADER_SCREEN_OPTIONS","HERO_HEADER_SCREEN_OPTIONS","scrollEdgeEffects","top"],"sourceRoot":"../../../../src","sources":["organisms/header/use-stack-screen-options.ts"],"mappings":";;AAAA,SAAQA,2BAA2B,QAAO,oBAAoB;AAC9D,SAAQC,WAAW,QAAO,mBAAmB;AAC7C,SAAQC,OAAO,QAAO,OAAO;AAC7B,SAAQC,QAAQ,QAAO,cAAc;AAGrC,SAAQC,WAAW,QAAO,mBAAgB;;AAE1C;AACA,MAAMC,kBAAkB,GACtBF,QAAQ,CAACG,EAAE,KAAK,KAAK,IAAI,CAACN,2BAA2B,CAAC,CAAC,GAAI,sBAAsB,GAAaO,SAAS;;AAEzG;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAA,KAA0B;EAC7D,MAAMC,KAAK,GAAGR,WAAW,CAAC,CAAC;EAE3B,OAAOC,OAAO,CAAC,MAAM;IACnB,MAAMQ,OAAO,GAAGN,WAAW,CAACK,KAAK,EAAE,iBAAiB,CAAC;IACrD,MAAME,OAAO,GAAGP,WAAW,CAACK,KAAK,EAAE,cAAc,CAAC;IAElD,OAAO;MACLG,YAAY,EAAE;QAACC,eAAe,EAAEF;MAAO,CAAC;MACxCG,2BAA2B,EAAE,SAAS;MACtCC,gBAAgB,EAAEV,kBAAkB;MACpCW,6BAA6B,EAAE,KAAK;MACpCC,qBAAqB,EAAE;QACrBC,KAAK,EAAER,OAAO;QACdS,UAAU,EAAEV,KAAK,CAACW,UAAU,CAACC,QAAQ,CAACF,UAAU;QAChDG,QAAQ,EAAEb,KAAK,CAACW,UAAU,CAACC,QAAQ,CAACC;MACtC,CAAC;MACDC,mBAAmB,EAAE,KAAK;MAC1BC,WAAW,EAAErB,QAAQ,CAACG,EAAE,KAAK,SAAS,GAAG;QAACO,eAAe,EAAEF;MAAO,CAAC,GAAGJ,SAAS;MAC/EkB,eAAe,EAAEf,OAAO;MACxBgB,gBAAgB,EAAE;QAChBR,KAAK,EAAER,OAAO;QACdS,UAAU,EAAEV,KAAK,CAACW,UAAU,CAACO,QAAQ,CAACR,UAAU;QAChDG,QAAQ,EAAEb,KAAK,CAACW,UAAU,CAACO,QAAQ,CAACL;MACtC,CAAC;MACDM,iBAAiB,EAAEzB,QAAQ,CAACG,EAAE,KAAK;IACrC,CAAC;EACH,CAAC,EAAE,CAACG,KAAK,CAAC,CAAC;AACb,CAAC;;AAED;AACA,OAAO,MAAMoB,0BAA8C,GAAG;EAACC,uBAAuB,EAAE,IAAI;EAAEC,WAAW,EAAE;AAAI,CAAC;;AAEhH;AACA,OAAO,MAAMC,4BAAgD,GAAG;EAACD,WAAW,EAAE;AAAK,CAAC;;AAEpF;AACA;AACA;AACA;AACA,OAAO,MAAME,0BAA8C,GAAG;EAC5DlB,gBAAgB,EAAE,MAAM;EACxBe,uBAAuB,EAAE,KAAK;EAC9BC,WAAW,EAAE,IAAI;EACjBP,WAAW,EAAE;IAACX,eAAe,EAAE;EAAa,CAAC;EAC7Ce,iBAAiB,EAAE,IAAI;EACvBM,iBAAiB,EAAE;IAACC,GAAG,EAAE;EAAQ;AACnC,CAAC","ignoreList":[]}
|
|
@@ -3,12 +3,12 @@
|
|
|
3
3
|
import { Text as ComposeText, DropdownMenu, DropdownMenuItem } from '@expo/ui/jetpack-compose';
|
|
4
4
|
import { useAppTheme } from '@hzblj/kara-theme';
|
|
5
5
|
import { useCallback, useState } from 'react';
|
|
6
|
+
import { Glyph } from "../../atoms/glyph/index.js";
|
|
6
7
|
import { HStack } from "../../atoms/h-stack/index.js";
|
|
7
8
|
import { Icon } from "../../atoms/icon/index.js";
|
|
8
9
|
import { IconButton } from "../../atoms/icon-button/index.js";
|
|
9
10
|
import { Text } from "../../atoms/text/index.js";
|
|
10
|
-
import {
|
|
11
|
-
import { useHostGuard } from "../../host-context.js";
|
|
11
|
+
import { useHostGuard } from "../../hooks/host-context.js";
|
|
12
12
|
import { isIconOnly, menuActionColor } from "./menu-parts.js";
|
|
13
13
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
14
14
|
const MenuItem = ({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["Text","ComposeText","DropdownMenu","DropdownMenuItem","useAppTheme","useCallback","useState","HStack","Icon","IconButton","
|
|
1
|
+
{"version":3,"names":["Text","ComposeText","DropdownMenu","DropdownMenuItem","useAppTheme","useCallback","useState","Glyph","HStack","Icon","IconButton","useHostGuard","isIconOnly","menuActionColor","jsx","_jsx","jsxs","_jsxs","MenuItem","action","onDismiss","theme","color","elementColors","leadingIconColor","textColor","enabled","disabled","onClick","onPress","children","colorString","style","typography","body","label","icon","LeadingIcon","name","size","triggerOf","props","open","accessibilityLabel","testID","align","spacing","Menu","expanded","setExpanded","dismiss","onDismissRequest","Trigger","Items","actions","map"],"sourceRoot":"../../../../src","sources":["organisms/menu/menu.android.tsx"],"mappings":"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","ignoreList":[]}
|