@lmb-it/kitsconcerto-native 0.1.242 → 0.1.244
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/animations/index.cjs +25 -15
- package/animations/index.cjs.map +1 -1
- package/animations/index.js +25 -15
- package/animations/index.js.map +1 -1
- package/apps/mobile/src/Core/AutoComplete/index.cjs +105 -64
- package/apps/mobile/src/Core/AutoComplete/index.cjs.map +1 -1
- package/apps/mobile/src/Core/AutoComplete/index.js +106 -65
- package/apps/mobile/src/Core/AutoComplete/index.js.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.cjs +2 -0
- package/apps/mobile/src/Core/Dropdown/index.cjs.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.js +2 -0
- package/apps/mobile/src/Core/Dropdown/index.js.map +1 -1
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.cjs +2 -0
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.cjs.map +1 -1
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.js +2 -0
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.js.map +1 -1
- package/apps/mobile/src/Factory/ResponsiveElement.cjs +2 -0
- package/apps/mobile/src/Factory/ResponsiveElement.cjs.map +1 -1
- package/apps/mobile/src/Factory/ResponsiveElement.js +2 -0
- package/apps/mobile/src/Factory/ResponsiveElement.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/cssVarMap.cjs +16 -0
- package/apps/mobile/src/Factory/helpers/cssVarMap.cjs.map +1 -1
- package/apps/mobile/src/Factory/helpers/cssVarMap.js +16 -0
- package/apps/mobile/src/Factory/helpers/cssVarMap.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/style.cjs +17 -1
- package/apps/mobile/src/Factory/helpers/style.cjs.map +1 -1
- package/apps/mobile/src/Factory/helpers/style.js +17 -1
- package/apps/mobile/src/Factory/helpers/style.js.map +1 -1
- package/apps/mobile/src/Factory/useSeparator.cjs +1 -0
- package/apps/mobile/src/Factory/useSeparator.cjs.map +1 -1
- package/apps/mobile/src/Factory/useSeparator.js +1 -0
- package/apps/mobile/src/Factory/useSeparator.js.map +1 -1
- package/components/Accordion/accordion.cjs +2 -0
- package/components/Accordion/accordion.cjs.map +1 -1
- package/components/Accordion/accordion.js +2 -0
- package/components/Accordion/accordion.js.map +1 -1
- package/components/Badge/index.cjs +2 -0
- package/components/Badge/index.cjs.map +1 -1
- package/components/Badge/index.js +2 -0
- package/components/Badge/index.js.map +1 -1
- package/components/BottomTabBar/index.cjs +2 -0
- package/components/BottomTabBar/index.cjs.map +1 -1
- package/components/BottomTabBar/index.js +2 -0
- package/components/BottomTabBar/index.js.map +1 -1
- package/components/Button/Button.cjs +2 -0
- package/components/Button/Button.cjs.map +1 -1
- package/components/Button/Button.js +2 -0
- package/components/Button/Button.js.map +1 -1
- package/components/MessageComposer/index.cjs +2 -0
- package/components/MessageComposer/index.cjs.map +1 -1
- package/components/MessageComposer/index.js +2 -0
- package/components/MessageComposer/index.js.map +1 -1
- package/components/SegmentedControl/index.cjs +2 -0
- package/components/SegmentedControl/index.cjs.map +1 -1
- package/components/SegmentedControl/index.js +2 -0
- package/components/SegmentedControl/index.js.map +1 -1
- package/components/SkeletonText/index.cjs +2 -0
- package/components/SkeletonText/index.cjs.map +1 -1
- package/components/SkeletonText/index.js +2 -0
- package/components/SkeletonText/index.js.map +1 -1
- package/components/Tabs/index.cjs +48 -6
- package/components/Tabs/index.cjs.map +1 -1
- package/components/Tabs/index.js +48 -6
- package/components/Tabs/index.js.map +1 -1
- package/components/overlay/ConfirmDialog/index.cjs +146 -89
- package/components/overlay/ConfirmDialog/index.cjs.map +1 -1
- package/components/overlay/ConfirmDialog/index.js +147 -90
- package/components/overlay/ConfirmDialog/index.js.map +1 -1
- package/components/overlay/Dialog/index.cjs +90 -64
- package/components/overlay/Dialog/index.cjs.map +1 -1
- package/components/overlay/Dialog/index.js +91 -65
- package/components/overlay/Dialog/index.js.map +1 -1
- package/components/overlay/Toast/index.cjs +19 -18
- package/components/overlay/Toast/index.cjs.map +1 -1
- package/components/overlay/Toast/index.js +22 -21
- package/components/overlay/Toast/index.js.map +1 -1
- package/contexts/Locale/index.cjs +2 -0
- package/contexts/Locale/index.cjs.map +1 -1
- package/contexts/Locale/index.js +2 -0
- package/contexts/Locale/index.js.map +1 -1
- package/contexts/Main/index.cjs +2 -0
- package/contexts/Main/index.cjs.map +1 -1
- package/contexts/Main/index.js +2 -0
- package/contexts/Main/index.js.map +1 -1
- package/contexts/Theme/KitsThemeProvider.cjs +2 -0
- package/contexts/Theme/KitsThemeProvider.cjs.map +1 -1
- package/contexts/Theme/KitsThemeProvider.js +2 -0
- package/contexts/Theme/KitsThemeProvider.js.map +1 -1
- package/contexts/Theme/index.cjs +1 -0
- package/contexts/Theme/index.cjs.map +1 -1
- package/contexts/Theme/index.js +1 -0
- package/contexts/Theme/index.js.map +1 -1
- package/contexts/Theme/resolvers.cjs +4 -0
- package/contexts/Theme/resolvers.cjs.map +1 -1
- package/contexts/Theme/resolvers.js +4 -0
- package/contexts/Theme/resolvers.js.map +1 -1
- package/data/DataView/Pagination/index.cjs +2 -0
- package/data/DataView/Pagination/index.cjs.map +1 -1
- package/data/DataView/Pagination/index.js +2 -0
- package/data/DataView/Pagination/index.js.map +1 -1
- package/data/TreeView/index.cjs +2 -0
- package/data/TreeView/index.cjs.map +1 -1
- package/data/TreeView/index.js +2 -0
- package/data/TreeView/index.js.map +1 -1
- package/form/controls/Checkbox/checkbox.cjs +2 -0
- package/form/controls/Checkbox/checkbox.cjs.map +1 -1
- package/form/controls/Checkbox/checkbox.js +2 -0
- package/form/controls/Checkbox/checkbox.js.map +1 -1
- package/form/controls/RadioButton/radiobutton.cjs +2 -0
- package/form/controls/RadioButton/radiobutton.cjs.map +1 -1
- package/form/controls/RadioButton/radiobutton.js +2 -0
- package/form/controls/RadioButton/radiobutton.js.map +1 -1
- package/form/controls/SelectButton/index.cjs +2 -0
- package/form/controls/SelectButton/index.cjs.map +1 -1
- package/form/controls/SelectButton/index.js +2 -0
- package/form/controls/SelectButton/index.js.map +1 -1
- package/form/controls/TriStateCheckbox/index.cjs +2 -0
- package/form/controls/TriStateCheckbox/index.cjs.map +1 -1
- package/form/controls/TriStateCheckbox/index.js +2 -0
- package/form/controls/TriStateCheckbox/index.js.map +1 -1
- package/form/file-pickers/MainUploader/index.cjs +1 -0
- package/form/file-pickers/MainUploader/index.cjs.map +1 -1
- package/form/file-pickers/MainUploader/index.js +1 -0
- package/form/file-pickers/MainUploader/index.js.map +1 -1
- package/form/helpers/ErrorMessage/errormessage.cjs +2 -0
- package/form/helpers/ErrorMessage/errormessage.cjs.map +1 -1
- package/form/helpers/ErrorMessage/errormessage.js +2 -0
- package/form/helpers/ErrorMessage/errormessage.js.map +1 -1
- package/form/helpers/FormContainer/index.cjs +2 -0
- package/form/helpers/FormContainer/index.cjs.map +1 -1
- package/form/helpers/FormContainer/index.js +2 -0
- package/form/helpers/FormContainer/index.js.map +1 -1
- package/form/helpers/Label/label.cjs +2 -0
- package/form/helpers/Label/label.cjs.map +1 -1
- package/form/helpers/Label/label.js +2 -0
- package/form/helpers/Label/label.js.map +1 -1
- package/form/inputs/InputMask/index.cjs +2 -0
- package/form/inputs/InputMask/index.cjs.map +1 -1
- package/form/inputs/InputMask/index.js +2 -0
- package/form/inputs/InputMask/index.js.map +1 -1
- package/form/inputs/InputNumber/index.cjs +2 -0
- package/form/inputs/InputNumber/index.cjs.map +1 -1
- package/form/inputs/InputNumber/index.js +2 -0
- package/form/inputs/InputNumber/index.js.map +1 -1
- package/form/inputs/InputPassword/index.cjs +2 -0
- package/form/inputs/InputPassword/index.cjs.map +1 -1
- package/form/inputs/InputPassword/index.js +2 -0
- package/form/inputs/InputPassword/index.js.map +1 -1
- package/form/inputs/InputSwitch/index.cjs +2 -0
- package/form/inputs/InputSwitch/index.cjs.map +1 -1
- package/form/inputs/InputSwitch/index.js +2 -0
- package/form/inputs/InputSwitch/index.js.map +1 -1
- package/form/inputs/InputText/index.cjs +2 -0
- package/form/inputs/InputText/index.cjs.map +1 -1
- package/form/inputs/InputText/index.js +2 -0
- package/form/inputs/InputText/index.js.map +1 -1
- package/form/inputs/InputTextarea/index.cjs +2 -0
- package/form/inputs/InputTextarea/index.cjs.map +1 -1
- package/form/inputs/InputTextarea/index.js +2 -0
- package/form/inputs/InputTextarea/index.js.map +1 -1
- package/form/inputs/PhoneInput/index.cjs +2 -0
- package/form/inputs/PhoneInput/index.cjs.map +1 -1
- package/form/inputs/PhoneInput/index.js +2 -0
- package/form/inputs/PhoneInput/index.js.map +1 -1
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.cjs +1 -0
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.cjs.map +1 -1
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.js +1 -0
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.js.map +1 -1
- package/form/selects/AutoComplete/index.cjs +2 -0
- package/form/selects/AutoComplete/index.cjs.map +1 -1
- package/form/selects/AutoComplete/index.js +2 -0
- package/form/selects/AutoComplete/index.js.map +1 -1
- package/form/selects/Dropdown/index.cjs +2 -0
- package/form/selects/Dropdown/index.cjs.map +1 -1
- package/form/selects/Dropdown/index.js +2 -0
- package/form/selects/Dropdown/index.js.map +1 -1
- package/form/selects/ListBox/index.cjs +2 -0
- package/form/selects/ListBox/index.cjs.map +1 -1
- package/form/selects/ListBox/index.js +2 -0
- package/form/selects/ListBox/index.js.map +1 -1
- package/form/selects/MultiSelect/index.cjs +2 -0
- package/form/selects/MultiSelect/index.cjs.map +1 -1
- package/form/selects/MultiSelect/index.js +2 -0
- package/form/selects/MultiSelect/index.js.map +1 -1
- package/form/selects/TreeSelect/index.cjs +2 -0
- package/form/selects/TreeSelect/index.cjs.map +1 -1
- package/form/selects/TreeSelect/index.js +2 -0
- package/form/selects/TreeSelect/index.js.map +1 -1
- package/form-renderer/components/layout/FieldWrapper.cjs +2 -0
- package/form-renderer/components/layout/FieldWrapper.cjs.map +1 -1
- package/form-renderer/components/layout/FieldWrapper.js +2 -0
- package/form-renderer/components/layout/FieldWrapper.js.map +1 -1
- package/hooks/shadowPresets.cjs +1 -0
- package/hooks/shadowPresets.cjs.map +1 -1
- package/hooks/shadowPresets.js +1 -0
- package/hooks/shadowPresets.js.map +1 -1
- package/hooks/useFocusStyles.cjs +2 -0
- package/hooks/useFocusStyles.cjs.map +1 -1
- package/hooks/useFocusStyles.js +2 -0
- package/hooks/useFocusStyles.js.map +1 -1
- package/index.cjs +5 -0
- package/index.cjs.map +1 -1
- package/index.d.ts +51 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/layout/Center/index.cjs +2 -0
- package/layout/Center/index.cjs.map +1 -1
- package/layout/Center/index.js +2 -0
- package/layout/Center/index.js.map +1 -1
- package/layout/Container/container.cjs +2 -0
- package/layout/Container/container.cjs.map +1 -1
- package/layout/Container/container.js +2 -0
- package/layout/Container/container.js.map +1 -1
- package/layout/Flex/index.cjs +2 -0
- package/layout/Flex/index.cjs.map +1 -1
- package/layout/Flex/index.js +2 -0
- package/layout/Flex/index.js.map +1 -1
- package/layout/HStack/index.cjs +2 -0
- package/layout/HStack/index.cjs.map +1 -1
- package/layout/HStack/index.js +2 -0
- package/layout/HStack/index.js.map +1 -1
- package/layout/List/index.cjs +2 -0
- package/layout/List/index.cjs.map +1 -1
- package/layout/List/index.js +2 -0
- package/layout/List/index.js.map +1 -1
- package/layout/ListItem/index.cjs +2 -0
- package/layout/ListItem/index.cjs.map +1 -1
- package/layout/ListItem/index.js +2 -0
- package/layout/ListItem/index.js.map +1 -1
- package/layout/ScrollView/index.cjs +2 -0
- package/layout/ScrollView/index.cjs.map +1 -1
- package/layout/ScrollView/index.js +2 -0
- package/layout/ScrollView/index.js.map +1 -1
- package/layout/VStack/index.cjs +2 -0
- package/layout/VStack/index.cjs.map +1 -1
- package/layout/VStack/index.js +2 -0
- package/layout/VStack/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/types/src/Theme/alphaColors.cjs +24 -0
- package/packages/types/src/Theme/alphaColors.cjs.map +1 -0
- package/packages/types/src/Theme/alphaColors.js +19 -0
- package/packages/types/src/Theme/alphaColors.js.map +1 -0
- package/packages/types/src/Theme/defaultTheme.cjs +1 -1
- package/packages/types/src/Theme/defaultTheme.cjs.map +1 -1
- package/packages/types/src/Theme/defaultTheme.js +1 -1
- package/packages/types/src/Theme/defaultTheme.js.map +1 -1
- package/packages/types/src/Theme/resolvers.cjs +6 -0
- package/packages/types/src/Theme/resolvers.cjs.map +1 -1
- package/packages/types/src/Theme/resolvers.js +6 -0
- package/packages/types/src/Theme/resolvers.js.map +1 -1
- package/primitives/Box/index.cjs +2 -0
- package/primitives/Box/index.cjs.map +1 -1
- package/primitives/Box/index.js +2 -0
- package/primitives/Box/index.js.map +1 -1
- package/primitives/Card/index.cjs +2 -0
- package/primitives/Card/index.cjs.map +1 -1
- package/primitives/Card/index.js +2 -0
- package/primitives/Card/index.js.map +1 -1
- package/primitives/Divider/index.cjs +2 -0
- package/primitives/Divider/index.cjs.map +1 -1
- package/primitives/Divider/index.js +2 -0
- package/primitives/Divider/index.js.map +1 -1
- package/primitives/Heading/index.cjs +2 -0
- package/primitives/Heading/index.cjs.map +1 -1
- package/primitives/Heading/index.js +2 -0
- package/primitives/Heading/index.js.map +1 -1
- package/primitives/Icon/index.cjs +1 -0
- package/primitives/Icon/index.cjs.map +1 -1
- package/primitives/Icon/index.js +1 -0
- package/primitives/Icon/index.js.map +1 -1
- package/primitives/Image/index.cjs +2 -0
- package/primitives/Image/index.cjs.map +1 -1
- package/primitives/Image/index.js +2 -0
- package/primitives/Image/index.js.map +1 -1
- package/primitives/Skeleton/index.cjs +2 -0
- package/primitives/Skeleton/index.cjs.map +1 -1
- package/primitives/Skeleton/index.js +2 -0
- package/primitives/Skeleton/index.js.map +1 -1
- package/primitives/Svg/index.cjs +2 -0
- package/primitives/Svg/index.cjs.map +1 -1
- package/primitives/Svg/index.js +2 -0
- package/primitives/Svg/index.js.map +1 -1
- package/primitives/Text/index.cjs +2 -0
- package/primitives/Text/index.cjs.map +1 -1
- package/primitives/Text/index.js +2 -0
- package/primitives/Text/index.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/overlay/Dialog/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {Modal, Pressable, ScrollView, StyleSheet, View, useWindowDimensions} from \"react-native\";\nimport Animated, {FadeIn, SlideInDown, ZoomIn} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Icon, Text} from \"../../../_compat\";\nimport type {IKitsDialogControlled} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {useSeverityColors} from \"../../../hooks/useSeverityColors\";\nimport {useResolvedStyle} from \"../../../hooks\";\nimport {overlayAnimations as anim} from \"../../../animations\";\n\nexport default function KitsDialogControlled({state, onHide}: IKitsDialogControlled) {\n const {\n children,\n content: contentProp,\n onClose,\n asyncClose,\n type,\n icon,\n style,\n contentStyle,\n headerStyle,\n maskStyle,\n position = 'center',\n responsive = true,\n hideHeader,\n headerRender,\n footerRender,\n footerStyle,\n canClose,\n bodyStyle,\n closeIcon,\n // Native default true preserves historical tap-to-dismiss; web's\n // PrimeReact default is false — pass explicitly in shared code.\n dismissableMask = true,\n breakpoints,\n ...rest\n } = state;\n const {resolveToken, theme} = useKitsTheme();\n const severityColors = useSeverityColors(type || 'secondary');\n const colors = type ? severityColors : null;\n const insets = useSafeAreaInsets();\n const isSheet = position === 'bottom';\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const borderColor = colors?.border ?? resolveToken('border');\n const subtextColor = resolveToken('gray.500');\n const grabberColor = resolveToken('gray.300');\n const brandLogo = type === 'brand' ? theme.config.logo : null;\n\n const resolvedStyle = useResolvedStyle(style || {});\n const resolvedContentStyle = useResolvedStyle(contentStyle || {});\n const resolvedHeaderStyle = useResolvedStyle(headerStyle || {});\n const resolvedMaskStyle = useResolvedStyle(maskStyle || {});\n const resolvedFooterStyle = useResolvedStyle(footerStyle || {});\n const resolvedBodyStyle = useResolvedStyle(bodyStyle || {});\n\n const {width: screenWidth} = useWindowDimensions();\n // Consumer `breakpoints` ({'960px': '75vw'}) mirrors the web prop: the\n // smallest max-width threshold >= the screen width wins; vw/% both map\n // to a percentage of the window width. Falls back to the responsive\n // default (50% tablets/desktop, 95% phones <=641px).\n const breakpointWidth = (() => {\n if (!breakpoints) return null;\n const matches = Object.entries(breakpoints)\n .map(([k, v]) => [parseFloat(k), v] as const)\n .filter(([px]) => !Number.isNaN(px) && screenWidth <= px)\n .sort(([a], [b]) => a - b);\n const value = matches[0]?.[1];\n if (value == null) return null;\n const num = parseFloat(value);\n return Number.isNaN(num) ? null : `${num}%`;\n })();\n const responsiveWidth = breakpointWidth ?? (screenWidth > 641 ? '50%' : '95%');\n const hasExplicitWidth = (resolvedStyle as any).width != null;\n\n const hide = async () => {\n // canClose gate — intercepts every close path (backdrop Pressable,\n // built-in X Pressable, RN Modal onRequestClose). When blocked,\n // onClose is suppressed and the dialog stays open.\n if (canClose === false || (typeof canClose === 'function' && !canClose())) {\n return;\n }\n if (asyncClose && typeof onClose === \"function\") {\n await onClose();\n } else {\n onClose?.();\n }\n onHide();\n };\n\n if (!state.visible) return null;\n\n const content = typeof children === \"function\" ? children(hide) : children;\n // Content-mode override (mirrors web): consumer node replaces the whole\n // header / body / footer template inside the panel.\n const contentMode = contentProp != null\n ? (typeof contentProp === \"function\" ? contentProp({hide}) : contentProp)\n : null;\n\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n <Animated.View entering={FadeIn.duration(anim.scrim.enterDuration)} style={[isSheet ? styles.sheetOverlay : styles.overlay, resolvedMaskStyle as any]}>\n <Pressable style={StyleSheet.absoluteFill} onPress={dismissableMask ? hide : undefined}/>\n <Animated.View\n entering={isSheet\n ? SlideInDown.springify().damping(anim.sheet.enter.damping).stiffness(anim.sheet.enter.stiffness)\n : ZoomIn.springify().damping(anim.dialog.enter.damping).stiffness(anim.dialog.enter.stiffness)}\n style={[\n styles.panel,\n isSheet && styles.sheetPanel,\n {backgroundColor: surfaceColor, borderColor},\n // Explicit `breakpoints` win even when responsive=false (web parity)\n !isSheet && !hasExplicitWidth && (breakpoints != null || responsive) ? {width: responsiveWidth} : null,\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {contentMode != null ? contentMode : <>\n {/* Grabber (bottom-sheet) */}\n {isSheet && <View style={[styles.grabber, {backgroundColor: grabberColor}]}/>}\n\n {/* Severity accent strip */}\n {colors && !isSheet && (\n <View style={{height: 4, backgroundColor: colors.solid, borderTopLeftRadius: 16, borderTopRightRadius: 16}}/>\n )}\n\n {/* Custom header (headerRender) — fully replaces the built-in header\n View when provided. Wins over the default header even if `header`\n is also set. */}\n {!hideHeader && headerRender != null && headerRender({close: () => { void hide(); }})}\n\n {/* Header (default) — rendered when no headerRender and `header` is set. */}\n {!hideHeader && headerRender == null && rest.header != null && (\n <View style={[styles.header, {borderBottomColor: borderColor}, resolvedHeaderStyle as any]}>\n {/* Inline severity icon */}\n {(icon || brandLogo) && colors && (\n <View style={{\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: colors.iconBg,\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 12,\n }}>\n {brandLogo ? brandLogo : typeof icon === 'string' ? (\n <Icon name={icon as never} size={'lg'} color={colors.iconFg}/>\n ) : icon}\n </View>\n )}\n <Text style={{fontSize: 18, fontWeight: \"700\", color: textColor, flex: 1}}>\n {rest.header as React.ReactNode}\n </Text>\n <Pressable onPress={hide} hitSlop={8}>\n {closeIcon ?? <Text style={{fontSize: 18, color: subtextColor}}>✕</Text>}\n </Pressable>\n </View>\n )}\n\n {/* Body — bodyStyle is applied AFTER the built-in maxHeight: 400,\n so consumers can lift the cap (`maxHeight: 600`) or unlock flex\n sizing (`minHeight: 0`) without losing the default behavior when\n bodyStyle is unset. */}\n <ScrollView\n style={[styles.body, resolvedBodyStyle as any]}\n contentContainerStyle={styles.bodyContent}\n showsVerticalScrollIndicator={false}\n >\n {content}\n </ScrollView>\n\n {/* Footer — footerRender takes precedence over `footer`. footerStyle\n is merged AFTER the built-in flex defaults so consumers can override\n alignment (e.g. justifyContent: 'space-between' for left-delete /\n right-actions layouts) without losing the borderTop / padding. */}\n {(footerRender != null || rest.footer != null) && (\n <View style={[\n styles.footer,\n {borderTopColor: borderColor},\n isSheet && {paddingBottom: 12 + insets.bottom},\n resolvedFooterStyle as any,\n ]}>\n {footerRender\n ? footerRender({close: () => { void hide(); }})\n : (rest.footer as React.ReactNode)}\n </View>\n )}\n </>}\n </Animated.View>\n </Animated.View>\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n backgroundColor: \"rgba(0,0,0,0.45)\",\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: 24,\n },\n sheetOverlay: {\n flex: 1,\n backgroundColor: \"rgba(0,0,0,0.45)\",\n justifyContent: \"flex-end\",\n },\n sheetPanel: {\n width: \"100%\",\n maxWidth: \"100%\",\n maxHeight: \"90%\",\n borderWidth: 0,\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n paddingTop: 10,\n },\n grabber: {\n width: 40,\n height: 5,\n borderRadius: 999,\n alignSelf: \"center\",\n marginBottom: 6,\n },\n panel: {\n borderRadius: 16,\n borderWidth: 1,\n minWidth: 250,\n maxWidth: \"90%\",\n maxHeight: \"80%\",\n overflow: \"hidden\",\n elevation: 12,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 6},\n shadowOpacity: 0.2,\n shadowRadius: 12,\n },\n header: {\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingHorizontal: 20,\n paddingVertical: 16,\n borderBottomWidth: 1,\n },\n body: {\n maxHeight: 400,\n },\n bodyContent: {\n padding: 20,\n },\n footer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderTopWidth: 1,\n gap: 8,\n },\n});\n"],"names":["anim"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/overlay/Dialog/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {Modal, Pressable, ScrollView, StyleSheet, View, useWindowDimensions} from \"react-native\";\nimport Animated, {Easing, FadeIn, FadeOut, runOnJS, SlideInDown, SlideOutDown, ZoomIn, ZoomOut} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Icon, Text} from \"../../../_compat\";\nimport type {IKitsDialogControlled} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {useSeverityColors} from \"../../../hooks/useSeverityColors\";\nimport {useResolvedStyle} from \"../../../hooks\";\nimport {overlayAnimations as anim} from \"../../../animations\";\n\n/**\n * Keeps the RN Modal mounted through the exit animation. `visible` drives the\n * inner scrim + panel entering/exiting; the Modal itself stays mounted until\n * the panel's exit animation reports finished, then unmounts.\n *\n * Re-entrancy: a new `visible=true` during an exit re-renders the inner (which\n * re-enters), and the still-pending exit callback is ignored because\n * `visibleRef` is already back to `true` — so the Modal is never torn down\n * mid-reopen.\n */\nfunction useOverlayPresence(visible: boolean) {\n const [mounted, setMounted] = React.useState(visible);\n const visibleRef = React.useRef(visible);\n React.useEffect(() => {\n visibleRef.current = visible;\n if (visible) setMounted(true);\n }, [visible]);\n // Runs on the JS thread (dispatched via runOnJS from the exit worklet).\n const handleExitFinished = React.useCallback(() => {\n if (!visibleRef.current) setMounted(false);\n }, []);\n return {mounted, handleExitFinished};\n}\n\nexport default function KitsDialogControlled({state, onHide}: IKitsDialogControlled) {\n const {\n children,\n content: contentProp,\n onClose,\n asyncClose,\n type,\n icon,\n style,\n contentStyle,\n headerStyle,\n maskStyle,\n position = 'center',\n responsive = true,\n hideHeader,\n headerRender,\n footerRender,\n footerStyle,\n canClose,\n bodyStyle,\n closeIcon,\n // Native default true preserves historical tap-to-dismiss; web's\n // PrimeReact default is false — pass explicitly in shared code.\n dismissableMask = true,\n breakpoints,\n ...rest\n } = state;\n const {resolveToken, theme} = useKitsTheme();\n const severityColors = useSeverityColors(type || 'secondary');\n const colors = type ? severityColors : null;\n const insets = useSafeAreaInsets();\n const isSheet = position === 'bottom';\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const borderColor = colors?.border ?? resolveToken('border');\n const subtextColor = resolveToken('gray.500');\n const grabberColor = resolveToken('gray.300');\n // Scrim via the literal alpha overlay token → rgba(0,0,0,0.4) in both modes.\n const scrimColor = resolveToken('black-alpha-40');\n const brandLogo = type === 'brand' ? theme.config.logo : null;\n\n const resolvedStyle = useResolvedStyle(style || {});\n const resolvedContentStyle = useResolvedStyle(contentStyle || {});\n const resolvedHeaderStyle = useResolvedStyle(headerStyle || {});\n const resolvedMaskStyle = useResolvedStyle(maskStyle || {});\n const resolvedFooterStyle = useResolvedStyle(footerStyle || {});\n const resolvedBodyStyle = useResolvedStyle(bodyStyle || {});\n\n const {width: screenWidth} = useWindowDimensions();\n // Consumer `breakpoints` ({'960px': '75vw'}) mirrors the web prop: the\n // smallest max-width threshold >= the screen width wins; vw/% both map\n // to a percentage of the window width. Falls back to the responsive\n // default (50% tablets/desktop, 95% phones <=641px).\n const breakpointWidth = (() => {\n if (!breakpoints) return null;\n const matches = Object.entries(breakpoints)\n .map(([k, v]) => [parseFloat(k), v] as const)\n .filter(([px]) => !Number.isNaN(px) && screenWidth <= px)\n .sort(([a], [b]) => a - b);\n const value = matches[0]?.[1];\n if (value == null) return null;\n const num = parseFloat(value);\n return Number.isNaN(num) ? null : `${num}%`;\n })();\n const responsiveWidth = breakpointWidth ?? (screenWidth > 641 ? '50%' : '95%');\n const hasExplicitWidth = (resolvedStyle as any).width != null;\n\n const hide = async () => {\n // canClose gate — intercepts every close path (backdrop Pressable,\n // built-in X Pressable, RN Modal onRequestClose). When blocked,\n // onClose is suppressed and the dialog stays open.\n if (canClose === false || (typeof canClose === 'function' && !canClose())) {\n return;\n }\n if (asyncClose && typeof onClose === \"function\") {\n await onClose();\n } else {\n onClose?.();\n }\n onHide();\n };\n\n const {mounted, handleExitFinished} = useOverlayPresence(!!state.visible);\n if (!mounted) return null;\n\n const content = typeof children === \"function\" ? children(hide) : children;\n // Content-mode override (mirrors web): consumer node replaces the whole\n // header / body / footer template inside the panel.\n const contentMode = contentProp != null\n ? (typeof contentProp === \"function\" ? contentProp({hide}) : contentProp)\n : null;\n\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {state.visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n exiting={FadeOut.duration(anim.scrim.exitDuration)}\n style={[isSheet ? styles.sheetOverlay : styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={dismissableMask ? hide : undefined}/>\n <Animated.View\n entering={isSheet\n ? SlideInDown.springify().damping(anim.sheet.enter.damping).stiffness(anim.sheet.enter.stiffness).mass(anim.sheet.enter.mass ?? 1)\n : ZoomIn.springify().damping(anim.dialog.enter.damping).stiffness(anim.dialog.enter.stiffness).mass(anim.dialog.enter.mass ?? 1)}\n exiting={(isSheet\n ? SlideOutDown.duration(anim.sheet.exitDuration).easing(Easing.in(Easing.ease))\n : ZoomOut.duration(anim.dialog.exitDuration).easing(Easing.in(Easing.ease))\n ).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n isSheet && styles.sheetPanel,\n {backgroundColor: surfaceColor, borderColor},\n // Explicit `breakpoints` win even when responsive=false (web parity)\n !isSheet && !hasExplicitWidth && (breakpoints != null || responsive) ? {width: responsiveWidth} : null,\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {contentMode != null ? contentMode : <>\n {/* Grabber (bottom-sheet) */}\n {isSheet && <View style={[styles.grabber, {backgroundColor: grabberColor}]}/>}\n\n {/* Severity accent strip */}\n {colors && !isSheet && (\n <View style={{height: 4, backgroundColor: colors.solid, borderTopLeftRadius: 20, borderTopRightRadius: 20}}/>\n )}\n\n {/* Custom header (headerRender) — fully replaces the built-in header\n View when provided. Wins over the default header even if `header`\n is also set. */}\n {!hideHeader && headerRender != null && headerRender({close: () => { void hide(); }})}\n\n {/* Header (default) — rendered when no headerRender and `header` is set. */}\n {!hideHeader && headerRender == null && rest.header != null && (\n <View style={[styles.header, {borderBottomColor: borderColor}, resolvedHeaderStyle as any]}>\n {/* Inline severity icon */}\n {(icon || brandLogo) && colors && (\n <View style={{\n width: 36,\n height: 36,\n borderRadius: 18,\n backgroundColor: colors.iconBg,\n alignItems: 'center',\n justifyContent: 'center',\n marginRight: 12,\n }}>\n {brandLogo ? brandLogo : typeof icon === 'string' ? (\n <Icon name={icon as never} size={'lg'} color={colors.iconFg}/>\n ) : icon}\n </View>\n )}\n <Text style={{fontSize: 18, fontWeight: \"700\", color: textColor, flex: 1}}>\n {rest.header as React.ReactNode}\n </Text>\n <Pressable onPress={hide} hitSlop={8}>\n {closeIcon ?? <Text style={{fontSize: 18, color: subtextColor}}>✕</Text>}\n </Pressable>\n </View>\n )}\n\n {/* Body — bodyStyle is applied AFTER the built-in maxHeight: 400,\n so consumers can lift the cap (`maxHeight: 600`) or unlock flex\n sizing (`minHeight: 0`) without losing the default behavior when\n bodyStyle is unset. */}\n <ScrollView\n style={[styles.body, resolvedBodyStyle as any]}\n contentContainerStyle={styles.bodyContent}\n showsVerticalScrollIndicator={false}\n >\n {content}\n </ScrollView>\n\n {/* Footer — footerRender takes precedence over `footer`. footerStyle\n is merged AFTER the built-in flex defaults so consumers can override\n alignment (e.g. justifyContent: 'space-between' for left-delete /\n right-actions layouts) without losing the borderTop / padding. */}\n {(footerRender != null || rest.footer != null) && (\n <View style={[\n styles.footer,\n {borderTopColor: borderColor},\n isSheet && {paddingBottom: 12 + insets.bottom},\n resolvedFooterStyle as any,\n ]}>\n {footerRender\n ? footerRender({close: () => { void hide(); }})\n : (rest.footer as React.ReactNode)}\n </View>\n )}\n </>}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n}\n\nconst styles = StyleSheet.create({\n overlay: {\n flex: 1,\n justifyContent: \"center\",\n alignItems: \"center\",\n padding: 24,\n },\n sheetOverlay: {\n flex: 1,\n justifyContent: \"flex-end\",\n },\n sheetPanel: {\n width: \"100%\",\n maxWidth: \"100%\",\n maxHeight: \"90%\",\n borderWidth: 0,\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 0,\n paddingTop: 10,\n },\n grabber: {\n width: 40,\n height: 5,\n borderRadius: 999,\n alignSelf: \"center\",\n marginBottom: 6,\n },\n panel: {\n // 20 == radii.xl (no numeric radii resolver on native — see report).\n borderRadius: 20,\n borderWidth: 1,\n minWidth: 250,\n maxWidth: \"90%\",\n maxHeight: \"80%\",\n overflow: \"hidden\",\n // Subtle elevation: low opacity, wide blur, minimal offset.\n elevation: 6,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 2},\n shadowOpacity: 0.15,\n shadowRadius: 20,\n },\n header: {\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingHorizontal: 20,\n paddingVertical: 16,\n borderBottomWidth: 1,\n },\n body: {\n maxHeight: 400,\n },\n bodyContent: {\n padding: 20,\n },\n footer: {\n flexDirection: \"row\",\n justifyContent: \"flex-end\",\n paddingHorizontal: 20,\n paddingVertical: 12,\n borderTopWidth: 1,\n gap: 8,\n },\n});\n"],"names":["anim"],"mappings":"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"}
|
|
@@ -23,15 +23,12 @@ const KitsToast = ({ ref }) => {
|
|
|
23
23
|
const timersRef = React.useRef(/* @__PURE__ */ new Map());
|
|
24
24
|
const { resolveToken } = KitsThemeProvider_native.useKitsTheme();
|
|
25
25
|
const insets = reactNativeSafeAreaContext.useSafeAreaInsets();
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
const
|
|
30
|
-
return ()
|
|
31
|
-
|
|
32
|
-
hideSub.remove();
|
|
33
|
-
};
|
|
34
|
-
}, []);
|
|
26
|
+
const keyboard = Animated.useAnimatedKeyboard();
|
|
27
|
+
const keyboardOffsetStyle = Animated.useAnimatedStyle(() => {
|
|
28
|
+
if (reactNative.Platform.OS === "android") return { transform: [{ translateY: 0 }] };
|
|
29
|
+
const h = keyboard.height.value;
|
|
30
|
+
return { transform: [{ translateY: h > 0 ? -(h + index.overlayAnimations.toast.keyboardGap) : 0 }] };
|
|
31
|
+
});
|
|
35
32
|
const severityColors = {
|
|
36
33
|
success: resolveToken("green.500"),
|
|
37
34
|
info: resolveToken("blue.500"),
|
|
@@ -102,31 +99,31 @@ const KitsToast = ({ ref }) => {
|
|
|
102
99
|
};
|
|
103
100
|
const isTop = (position) => position.startsWith("top");
|
|
104
101
|
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: reactNative.StyleSheet.absoluteFill, pointerEvents: "box-none", children: toasts.map((item) => {
|
|
105
|
-
const top =
|
|
102
|
+
const top = isTop(item.position);
|
|
106
103
|
const align = getAlignment(item.position);
|
|
107
|
-
const entering = top ? Animated.
|
|
108
|
-
const exiting = top ? Animated.
|
|
104
|
+
const entering = (top ? Animated.FadeInUp : Animated.FadeInDown).springify().damping(index.overlayAnimations.toast.enter.damping).stiffness(index.overlayAnimations.toast.enter.stiffness).mass(index.overlayAnimations.toast.enter.mass);
|
|
105
|
+
const exiting = (top ? Animated.FadeOutUp : Animated.FadeOutDown).duration(index.overlayAnimations.toast.exitDuration);
|
|
109
106
|
const s = SIZE_CONFIG[item.size] ?? SIZE_CONFIG.md;
|
|
110
107
|
const accentColor = severityColors[item.severity] ?? severityColors.info;
|
|
111
108
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
112
109
|
Animated.View,
|
|
113
110
|
{
|
|
114
|
-
entering,
|
|
115
|
-
exiting,
|
|
116
|
-
layout: Animated.Layout.duration(index.overlayAnimations.toast.layoutDuration),
|
|
117
111
|
style: [
|
|
118
112
|
styles.toastWrapper,
|
|
119
113
|
{
|
|
120
114
|
alignItems: align,
|
|
121
115
|
...top ? { top: insets.top + 8 } : { bottom: insets.bottom + 8 }
|
|
122
|
-
}
|
|
116
|
+
},
|
|
117
|
+
// Bottom toasts lift with the keyboard; top toasts never move.
|
|
118
|
+
top ? null : keyboardOffsetStyle
|
|
123
119
|
],
|
|
124
120
|
pointerEvents: "box-none",
|
|
125
121
|
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
126
122
|
Animated.View,
|
|
127
123
|
{
|
|
128
|
-
entering
|
|
129
|
-
exiting
|
|
124
|
+
entering,
|
|
125
|
+
exiting,
|
|
126
|
+
layout: Animated.Layout.duration(index.overlayAnimations.toast.layoutDuration),
|
|
130
127
|
style: [
|
|
131
128
|
styles.toast,
|
|
132
129
|
{
|
|
@@ -173,6 +170,10 @@ const styles = reactNative.StyleSheet.create({
|
|
|
173
170
|
},
|
|
174
171
|
toast: {
|
|
175
172
|
flexDirection: "row",
|
|
173
|
+
// Fill the wrapper (already inset 16pt each side) but never exceed 560pt;
|
|
174
|
+
// the wrapper's alignItems keeps -left/-center/-right placement intact.
|
|
175
|
+
width: "100%",
|
|
176
|
+
maxWidth: 560,
|
|
176
177
|
borderRadius: 10,
|
|
177
178
|
borderWidth: 1,
|
|
178
179
|
marginBottom: 8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../src/components/overlay/Toast/index.native.tsx"],"sourcesContent":["import React, {\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport {Keyboard, Pressable, StyleSheet, ActivityIndicator, View} from \"react-native\";\nimport Animated, {\n FadeIn,\n FadeOut,\n SlideInUp,\n SlideInDown,\n SlideOutUp,\n SlideOutDown,\n Layout,\n} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Text} from \"../../../_compat\";\nimport type {\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n ToastSeverity,\n ToastSize,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {overlayAnimations as anim} from \"../../../animations\";\n\ninterface ToastItem {\n id: number;\n severity: ToastSeverity;\n summary: string;\n body?: string;\n position: ToastPosition;\n size: ToastSize;\n sticky?: boolean;\n onPress?: () => void;\n}\n\nlet toastIdCounter = 0;\nconst LIFE = 3000;\n\nconst SIZE_CONFIG: Record<ToastSize, { paddingV: number; paddingH: number; summarySize: number; bodySize: number; accentWidth: number; closeSize: number; minW: number }> = {\n sm: {paddingV: 8, paddingH: 10, summarySize: 12, bodySize: 10, accentWidth: 3, closeSize: 14, minW: 200},\n md: {paddingV: 12, paddingH: 14, summarySize: 14, bodySize: 12, accentWidth: 4, closeSize: 16, minW: 280},\n lg: {paddingV: 16, paddingH: 18, summarySize: 16, bodySize: 14, accentWidth: 5, closeSize: 18, minW: 320},\n};\n\nconst KitsToast = ({ref}: { ref?: Ref<IKitsToastRef> }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timersRef = useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n const {resolveToken} = useKitsTheme();\n const insets = useSafeAreaInsets();\n const [keyboardVisible, setKeyboardVisible] = useState(false);\n\n useEffect(() => {\n const showSub = Keyboard.addListener(\"keyboardDidShow\", () => setKeyboardVisible(true));\n const hideSub = Keyboard.addListener(\"keyboardDidHide\", () => setKeyboardVisible(false));\n return () => {\n showSub.remove();\n hideSub.remove();\n };\n }, []);\n\n const severityColors: Record<string, string> = {\n success: resolveToken('green.500'),\n info: resolveToken('blue.500'),\n warn: resolveToken('yellow.500'),\n error: resolveToken('red.500'),\n loading: resolveToken('blue.500'),\n brand: resolveToken('primary'),\n };\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const borderColor = resolveToken('border');\n\n const removeToast = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const toast: IToastFunction = useCallback((\n severity: ToastSeverity,\n summary: string,\n body: string = \"\",\n position: ToastPosition = \"bottom-center\",\n isUpdate: boolean = false,\n size: ToastSize = \"md\",\n onPress?: () => void,\n ) => {\n const id = ++toastIdCounter;\n const item: ToastItem = {id, severity, summary, body, position, size, sticky: severity === \"loading\", onPress};\n\n // isUpdate mirrors web's toastRef.replace: swap the most recent toast\n // at this position instead of stacking a new one.\n setToasts(prev => {\n if (!isUpdate) return [...prev, item];\n const lastAtPos = [...prev].reverse().find(t => t.position === position);\n if (!lastAtPos) return [...prev, item];\n const timer = timersRef.current.get(lastAtPos.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(lastAtPos.id);\n }\n return prev.map(t => (t.id === lastAtPos.id ? item : t));\n });\n\n if (!item.sticky) {\n const timer = setTimeout(() => removeToast(id), LIFE);\n timersRef.current.set(id, timer);\n }\n }, [removeToast]) as IToastFunction;\n\n const dismiss = useCallback((position?: ToastPosition) => {\n setToasts(prev => {\n const toRemove = position ? prev.filter(t => t.position === position) : prev;\n toRemove.forEach(t => {\n const timer = timersRef.current.get(t.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(t.id);\n }\n });\n return position ? prev.filter(t => t.position !== position) : [];\n });\n }, []);\n\n const dismissAll = useCallback(() => {\n timersRef.current.forEach(t => clearTimeout(t));\n timersRef.current.clear();\n setToasts([]);\n }, []);\n\n useImperativeHandle(ref, () => ({toast, dismiss, dismissAll}));\n\n useEffect(() => {\n return () => {\n timersRef.current.forEach(t => clearTimeout(t));\n };\n }, []);\n\n if (toasts.length === 0) return null;\n\n const getAlignment = (position: ToastPosition): 'flex-start' | 'center' | 'flex-end' => {\n if (position.endsWith('-left')) return 'flex-start';\n if (position.endsWith('-right')) return 'flex-end';\n return 'center';\n };\n\n const isTop = (position: ToastPosition) => position.startsWith('top');\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n {toasts.map(item => {\n // When keyboard is visible, force bottom toasts to render at top\n const top = keyboardVisible ? true : isTop(item.position);\n const align = getAlignment(item.position);\n const entering = top ? SlideInUp.duration(anim.toast.slideInDuration) : SlideInDown.duration(anim.toast.slideInDuration);\n const exiting = top ? SlideOutUp.duration(anim.toast.slideOutDuration) : SlideOutDown.duration(anim.toast.slideOutDuration);\n const s = SIZE_CONFIG[item.size] ?? SIZE_CONFIG.md;\n const accentColor = severityColors[item.severity] ?? severityColors.info;\n\n return (\n <Animated.View\n key={item.id}\n entering={entering}\n exiting={exiting}\n layout={Layout.duration(anim.toast.layoutDuration)}\n style={[\n styles.toastWrapper,\n {\n alignItems: align,\n ...(top\n ? {top: insets.top + 8}\n : {bottom: insets.bottom + 8}),\n },\n ]}\n pointerEvents=\"box-none\"\n >\n <Animated.View\n entering={FadeIn.duration(anim.toast.itemEnterDuration)}\n exiting={FadeOut.duration(anim.toast.itemExitDuration)}\n style={[\n styles.toast,\n {\n backgroundColor: surfaceColor,\n borderColor,\n minWidth: s.minW,\n },\n ]}\n >\n <Pressable\n style={styles.pressArea}\n disabled={!item.onPress}\n onPress={() => {\n item.onPress?.();\n removeToast(item.id);\n }}\n >\n <View style={[styles.accentBar, {backgroundColor: accentColor, width: s.accentWidth}]}/>\n <View style={[styles.content, {paddingVertical: s.paddingV, paddingHorizontal: s.paddingH, gap: s.paddingH * 0.7}]}>\n {item.severity === \"loading\" && (\n <ActivityIndicator size=\"small\" color={accentColor}/>\n )}\n <View style={styles.textContainer}>\n <Text style={{fontWeight: \"600\", fontSize: s.summarySize, color: textColor}}>\n {item.summary}\n </Text>\n {!!item.body && (\n <Text style={{fontSize: s.bodySize, marginTop: 2, color: textColor, opacity: 0.7}}>\n {item.body}\n </Text>\n )}\n </View>\n <Pressable onPress={() => removeToast(item.id)} hitSlop={8}>\n <Text style={{fontSize: s.closeSize, fontWeight: \"bold\", color: textColor, opacity: 0.4}}>\n ✕\n </Text>\n </Pressable>\n </View>\n </Pressable>\n </Animated.View>\n </Animated.View>\n );\n })}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n toastWrapper: {\n position: \"absolute\",\n left: 16,\n right: 16,\n zIndex: 9999,\n },\n toast: {\n flexDirection: \"row\",\n borderRadius: 10,\n borderWidth: 1,\n marginBottom: 8,\n overflow: \"hidden\",\n elevation: 6,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 3},\n shadowOpacity: 0.15,\n shadowRadius: 6,\n },\n accentBar: {},\n pressArea: {\n flex: 1,\n flexDirection: \"row\",\n },\n content: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n textContainer: {\n flex: 1,\n },\n});\n\nexport default KitsToast;\n"],"names":["useState","useRef","useKitsTheme","useSafeAreaInsets","useEffect","Keyboard","useCallback","useImperativeHandle","jsx","View","StyleSheet","SlideInUp","anim","SlideInDown","SlideOutUp","SlideOutDown","Layout","FadeIn","FadeOut","jsxs","Pressable","ActivityIndicator","Text"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/components/overlay/Toast/index.native.tsx"],"sourcesContent":["import React, {\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport {Platform, Pressable, StyleSheet, ActivityIndicator, View} from \"react-native\";\nimport Animated, {\n FadeInUp,\n FadeInDown,\n FadeOutUp,\n FadeOutDown,\n Layout,\n useAnimatedKeyboard,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Text} from \"../../../_compat\";\nimport type {\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n ToastSeverity,\n ToastSize,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {overlayAnimations as anim} from \"../../../animations\";\n\ninterface ToastItem {\n id: number;\n severity: ToastSeverity;\n summary: string;\n body?: string;\n position: ToastPosition;\n size: ToastSize;\n sticky?: boolean;\n onPress?: () => void;\n}\n\nlet toastIdCounter = 0;\nconst LIFE = 3000;\n\nconst SIZE_CONFIG: Record<ToastSize, { paddingV: number; paddingH: number; summarySize: number; bodySize: number; accentWidth: number; closeSize: number; minW: number }> = {\n sm: {paddingV: 8, paddingH: 10, summarySize: 12, bodySize: 10, accentWidth: 3, closeSize: 14, minW: 200},\n md: {paddingV: 12, paddingH: 14, summarySize: 14, bodySize: 12, accentWidth: 4, closeSize: 16, minW: 280},\n lg: {paddingV: 16, paddingH: 18, summarySize: 16, bodySize: 14, accentWidth: 5, closeSize: 18, minW: 320},\n};\n\nconst KitsToast = ({ref}: { ref?: Ref<IKitsToastRef> }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timersRef = useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n const {resolveToken} = useKitsTheme();\n const insets = useSafeAreaInsets();\n\n // Keyboard avoidance for BOTTOM-positioned toasts, driven on the UI thread so\n // the lift tracks the keyboard's own curve instead of snapping on a JS event.\n const keyboard = useAnimatedKeyboard();\n const keyboardOffsetStyle = useAnimatedStyle(() => {\n // Android ships `windowSoftInputMode=\"adjustResize\"`: the window (and with\n // it this absoluteFill host) is already resized to sit above the keyboard,\n // so the toast clears it for free. Adding the keyboard height here would\n // double-compensate and launch the toast into the middle of the screen.\n if (Platform.OS === \"android\") return {transform: [{translateY: 0}]};\n const h = keyboard.height.value;\n return {transform: [{translateY: h > 0 ? -(h + anim.toast.keyboardGap) : 0}]};\n });\n\n const severityColors: Record<string, string> = {\n success: resolveToken('green.500'),\n info: resolveToken('blue.500'),\n warn: resolveToken('yellow.500'),\n error: resolveToken('red.500'),\n loading: resolveToken('blue.500'),\n brand: resolveToken('primary'),\n };\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const borderColor = resolveToken('border');\n\n const removeToast = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const toast: IToastFunction = useCallback((\n severity: ToastSeverity,\n summary: string,\n body: string = \"\",\n position: ToastPosition = \"bottom-center\",\n isUpdate: boolean = false,\n size: ToastSize = \"md\",\n onPress?: () => void,\n ) => {\n const id = ++toastIdCounter;\n const item: ToastItem = {id, severity, summary, body, position, size, sticky: severity === \"loading\", onPress};\n\n // isUpdate mirrors web's toastRef.replace: swap the most recent toast\n // at this position instead of stacking a new one.\n setToasts(prev => {\n if (!isUpdate) return [...prev, item];\n const lastAtPos = [...prev].reverse().find(t => t.position === position);\n if (!lastAtPos) return [...prev, item];\n const timer = timersRef.current.get(lastAtPos.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(lastAtPos.id);\n }\n return prev.map(t => (t.id === lastAtPos.id ? item : t));\n });\n\n if (!item.sticky) {\n const timer = setTimeout(() => removeToast(id), LIFE);\n timersRef.current.set(id, timer);\n }\n }, [removeToast]) as IToastFunction;\n\n const dismiss = useCallback((position?: ToastPosition) => {\n setToasts(prev => {\n const toRemove = position ? prev.filter(t => t.position === position) : prev;\n toRemove.forEach(t => {\n const timer = timersRef.current.get(t.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(t.id);\n }\n });\n return position ? prev.filter(t => t.position !== position) : [];\n });\n }, []);\n\n const dismissAll = useCallback(() => {\n timersRef.current.forEach(t => clearTimeout(t));\n timersRef.current.clear();\n setToasts([]);\n }, []);\n\n useImperativeHandle(ref, () => ({toast, dismiss, dismissAll}));\n\n useEffect(() => {\n return () => {\n timersRef.current.forEach(t => clearTimeout(t));\n };\n }, []);\n\n if (toasts.length === 0) return null;\n\n const getAlignment = (position: ToastPosition): 'flex-start' | 'center' | 'flex-end' => {\n if (position.endsWith('-left')) return 'flex-start';\n if (position.endsWith('-right')) return 'flex-end';\n return 'center';\n };\n\n const isTop = (position: ToastPosition) => position.startsWith('top');\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n {toasts.map(item => {\n const top = isTop(item.position);\n const align = getAlignment(item.position);\n // One builder owns the whole entrance: FadeInUp/FadeInDown animate\n // opacity AND translateY together, direction matched to placement\n // (top toasts drop in from above, bottom toasts rise from below).\n const entering = (top ? FadeInUp : FadeInDown)\n .springify()\n .damping(anim.toast.enter.damping)\n .stiffness(anim.toast.enter.stiffness)\n .mass(anim.toast.enter.mass ?? 1);\n const exiting = (top ? FadeOutUp : FadeOutDown).duration(anim.toast.exitDuration);\n const s = SIZE_CONFIG[item.size] ?? SIZE_CONFIG.md;\n const accentColor = severityColors[item.severity] ?? severityColors.info;\n\n return (\n <Animated.View\n key={item.id}\n style={[\n styles.toastWrapper,\n {\n alignItems: align,\n ...(top\n ? {top: insets.top + 8}\n : {bottom: insets.bottom + 8}),\n },\n // Bottom toasts lift with the keyboard; top toasts never move.\n top ? null : keyboardOffsetStyle,\n ]}\n pointerEvents=\"box-none\"\n >\n <Animated.View\n entering={entering}\n exiting={exiting}\n layout={Layout.duration(anim.toast.layoutDuration)}\n style={[\n styles.toast,\n {\n backgroundColor: surfaceColor,\n borderColor,\n minWidth: s.minW,\n },\n ]}\n >\n <Pressable\n style={styles.pressArea}\n disabled={!item.onPress}\n onPress={() => {\n item.onPress?.();\n removeToast(item.id);\n }}\n >\n <View style={[styles.accentBar, {backgroundColor: accentColor, width: s.accentWidth}]}/>\n <View style={[styles.content, {paddingVertical: s.paddingV, paddingHorizontal: s.paddingH, gap: s.paddingH * 0.7}]}>\n {item.severity === \"loading\" && (\n <ActivityIndicator size=\"small\" color={accentColor}/>\n )}\n <View style={styles.textContainer}>\n <Text style={{fontWeight: \"600\", fontSize: s.summarySize, color: textColor}}>\n {item.summary}\n </Text>\n {!!item.body && (\n <Text style={{fontSize: s.bodySize, marginTop: 2, color: textColor, opacity: 0.7}}>\n {item.body}\n </Text>\n )}\n </View>\n <Pressable onPress={() => removeToast(item.id)} hitSlop={8}>\n <Text style={{fontSize: s.closeSize, fontWeight: \"bold\", color: textColor, opacity: 0.4}}>\n ✕\n </Text>\n </Pressable>\n </View>\n </Pressable>\n </Animated.View>\n </Animated.View>\n );\n })}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n toastWrapper: {\n position: \"absolute\",\n left: 16,\n right: 16,\n zIndex: 9999,\n },\n toast: {\n flexDirection: \"row\",\n // Fill the wrapper (already inset 16pt each side) but never exceed 560pt;\n // the wrapper's alignItems keeps -left/-center/-right placement intact.\n width: \"100%\",\n maxWidth: 560,\n borderRadius: 10,\n borderWidth: 1,\n marginBottom: 8,\n overflow: \"hidden\",\n elevation: 6,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 3},\n shadowOpacity: 0.15,\n shadowRadius: 6,\n },\n accentBar: {},\n pressArea: {\n flex: 1,\n flexDirection: \"row\",\n },\n content: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n textContainer: {\n flex: 1,\n },\n});\n\nexport default KitsToast;\n"],"names":["useState","useRef","useKitsTheme","useSafeAreaInsets","useAnimatedKeyboard","useAnimatedStyle","Platform","anim","useCallback","useImperativeHandle","useEffect","jsx","View","StyleSheet","FadeInUp","FadeInDown","FadeOutUp","FadeOutDown","Layout","jsxs","Pressable","ActivityIndicator","Text"],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx, jsxs } from 'react/jsx-runtime';
|
|
2
|
-
import { useState, useRef,
|
|
3
|
-
import {
|
|
4
|
-
import Animated, {
|
|
2
|
+
import { useState, useRef, useCallback, useImperativeHandle, useEffect } from 'react';
|
|
3
|
+
import { Platform, View, StyleSheet, Pressable, ActivityIndicator } from 'react-native';
|
|
4
|
+
import Animated, { useAnimatedKeyboard, useAnimatedStyle, FadeInUp, FadeInDown, FadeOutUp, FadeOutDown, Layout } from 'react-native-reanimated';
|
|
5
5
|
import { useSafeAreaInsets } from 'react-native-safe-area-context';
|
|
6
6
|
import { overlayAnimations } from '../../../animations/index.js';
|
|
7
7
|
import { useKitsTheme } from '../../../contexts/Theme/KitsThemeProvider.js';
|
|
@@ -19,15 +19,12 @@ const KitsToast = ({ ref }) => {
|
|
|
19
19
|
const timersRef = useRef(/* @__PURE__ */ new Map());
|
|
20
20
|
const { resolveToken } = useKitsTheme();
|
|
21
21
|
const insets = useSafeAreaInsets();
|
|
22
|
-
const
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
return ()
|
|
27
|
-
|
|
28
|
-
hideSub.remove();
|
|
29
|
-
};
|
|
30
|
-
}, []);
|
|
22
|
+
const keyboard = useAnimatedKeyboard();
|
|
23
|
+
const keyboardOffsetStyle = useAnimatedStyle(() => {
|
|
24
|
+
if (Platform.OS === "android") return { transform: [{ translateY: 0 }] };
|
|
25
|
+
const h = keyboard.height.value;
|
|
26
|
+
return { transform: [{ translateY: h > 0 ? -(h + overlayAnimations.toast.keyboardGap) : 0 }] };
|
|
27
|
+
});
|
|
31
28
|
const severityColors = {
|
|
32
29
|
success: resolveToken("green.500"),
|
|
33
30
|
info: resolveToken("blue.500"),
|
|
@@ -98,31 +95,31 @@ const KitsToast = ({ ref }) => {
|
|
|
98
95
|
};
|
|
99
96
|
const isTop = (position) => position.startsWith("top");
|
|
100
97
|
return /* @__PURE__ */ jsx(View, { style: StyleSheet.absoluteFill, pointerEvents: "box-none", children: toasts.map((item) => {
|
|
101
|
-
const top =
|
|
98
|
+
const top = isTop(item.position);
|
|
102
99
|
const align = getAlignment(item.position);
|
|
103
|
-
const entering = top ?
|
|
104
|
-
const exiting = top ?
|
|
100
|
+
const entering = (top ? FadeInUp : FadeInDown).springify().damping(overlayAnimations.toast.enter.damping).stiffness(overlayAnimations.toast.enter.stiffness).mass(overlayAnimations.toast.enter.mass);
|
|
101
|
+
const exiting = (top ? FadeOutUp : FadeOutDown).duration(overlayAnimations.toast.exitDuration);
|
|
105
102
|
const s = SIZE_CONFIG[item.size] ?? SIZE_CONFIG.md;
|
|
106
103
|
const accentColor = severityColors[item.severity] ?? severityColors.info;
|
|
107
104
|
return /* @__PURE__ */ jsx(
|
|
108
105
|
Animated.View,
|
|
109
106
|
{
|
|
110
|
-
entering,
|
|
111
|
-
exiting,
|
|
112
|
-
layout: Layout.duration(overlayAnimations.toast.layoutDuration),
|
|
113
107
|
style: [
|
|
114
108
|
styles.toastWrapper,
|
|
115
109
|
{
|
|
116
110
|
alignItems: align,
|
|
117
111
|
...top ? { top: insets.top + 8 } : { bottom: insets.bottom + 8 }
|
|
118
|
-
}
|
|
112
|
+
},
|
|
113
|
+
// Bottom toasts lift with the keyboard; top toasts never move.
|
|
114
|
+
top ? null : keyboardOffsetStyle
|
|
119
115
|
],
|
|
120
116
|
pointerEvents: "box-none",
|
|
121
117
|
children: /* @__PURE__ */ jsx(
|
|
122
118
|
Animated.View,
|
|
123
119
|
{
|
|
124
|
-
entering
|
|
125
|
-
exiting
|
|
120
|
+
entering,
|
|
121
|
+
exiting,
|
|
122
|
+
layout: Layout.duration(overlayAnimations.toast.layoutDuration),
|
|
126
123
|
style: [
|
|
127
124
|
styles.toast,
|
|
128
125
|
{
|
|
@@ -169,6 +166,10 @@ const styles = StyleSheet.create({
|
|
|
169
166
|
},
|
|
170
167
|
toast: {
|
|
171
168
|
flexDirection: "row",
|
|
169
|
+
// Fill the wrapper (already inset 16pt each side) but never exceed 560pt;
|
|
170
|
+
// the wrapper's alignItems keeps -left/-center/-right placement intact.
|
|
171
|
+
width: "100%",
|
|
172
|
+
maxWidth: 560,
|
|
172
173
|
borderRadius: 10,
|
|
173
174
|
borderWidth: 1,
|
|
174
175
|
marginBottom: 8,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/components/overlay/Toast/index.native.tsx"],"sourcesContent":["import React, {\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport {Keyboard, Pressable, StyleSheet, ActivityIndicator, View} from \"react-native\";\nimport Animated, {\n FadeIn,\n FadeOut,\n SlideInUp,\n SlideInDown,\n SlideOutUp,\n SlideOutDown,\n Layout,\n} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Text} from \"../../../_compat\";\nimport type {\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n ToastSeverity,\n ToastSize,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {overlayAnimations as anim} from \"../../../animations\";\n\ninterface ToastItem {\n id: number;\n severity: ToastSeverity;\n summary: string;\n body?: string;\n position: ToastPosition;\n size: ToastSize;\n sticky?: boolean;\n onPress?: () => void;\n}\n\nlet toastIdCounter = 0;\nconst LIFE = 3000;\n\nconst SIZE_CONFIG: Record<ToastSize, { paddingV: number; paddingH: number; summarySize: number; bodySize: number; accentWidth: number; closeSize: number; minW: number }> = {\n sm: {paddingV: 8, paddingH: 10, summarySize: 12, bodySize: 10, accentWidth: 3, closeSize: 14, minW: 200},\n md: {paddingV: 12, paddingH: 14, summarySize: 14, bodySize: 12, accentWidth: 4, closeSize: 16, minW: 280},\n lg: {paddingV: 16, paddingH: 18, summarySize: 16, bodySize: 14, accentWidth: 5, closeSize: 18, minW: 320},\n};\n\nconst KitsToast = ({ref}: { ref?: Ref<IKitsToastRef> }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timersRef = useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n const {resolveToken} = useKitsTheme();\n const insets = useSafeAreaInsets();\n const [keyboardVisible, setKeyboardVisible] = useState(false);\n\n useEffect(() => {\n const showSub = Keyboard.addListener(\"keyboardDidShow\", () => setKeyboardVisible(true));\n const hideSub = Keyboard.addListener(\"keyboardDidHide\", () => setKeyboardVisible(false));\n return () => {\n showSub.remove();\n hideSub.remove();\n };\n }, []);\n\n const severityColors: Record<string, string> = {\n success: resolveToken('green.500'),\n info: resolveToken('blue.500'),\n warn: resolveToken('yellow.500'),\n error: resolveToken('red.500'),\n loading: resolveToken('blue.500'),\n brand: resolveToken('primary'),\n };\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const borderColor = resolveToken('border');\n\n const removeToast = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const toast: IToastFunction = useCallback((\n severity: ToastSeverity,\n summary: string,\n body: string = \"\",\n position: ToastPosition = \"bottom-center\",\n isUpdate: boolean = false,\n size: ToastSize = \"md\",\n onPress?: () => void,\n ) => {\n const id = ++toastIdCounter;\n const item: ToastItem = {id, severity, summary, body, position, size, sticky: severity === \"loading\", onPress};\n\n // isUpdate mirrors web's toastRef.replace: swap the most recent toast\n // at this position instead of stacking a new one.\n setToasts(prev => {\n if (!isUpdate) return [...prev, item];\n const lastAtPos = [...prev].reverse().find(t => t.position === position);\n if (!lastAtPos) return [...prev, item];\n const timer = timersRef.current.get(lastAtPos.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(lastAtPos.id);\n }\n return prev.map(t => (t.id === lastAtPos.id ? item : t));\n });\n\n if (!item.sticky) {\n const timer = setTimeout(() => removeToast(id), LIFE);\n timersRef.current.set(id, timer);\n }\n }, [removeToast]) as IToastFunction;\n\n const dismiss = useCallback((position?: ToastPosition) => {\n setToasts(prev => {\n const toRemove = position ? prev.filter(t => t.position === position) : prev;\n toRemove.forEach(t => {\n const timer = timersRef.current.get(t.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(t.id);\n }\n });\n return position ? prev.filter(t => t.position !== position) : [];\n });\n }, []);\n\n const dismissAll = useCallback(() => {\n timersRef.current.forEach(t => clearTimeout(t));\n timersRef.current.clear();\n setToasts([]);\n }, []);\n\n useImperativeHandle(ref, () => ({toast, dismiss, dismissAll}));\n\n useEffect(() => {\n return () => {\n timersRef.current.forEach(t => clearTimeout(t));\n };\n }, []);\n\n if (toasts.length === 0) return null;\n\n const getAlignment = (position: ToastPosition): 'flex-start' | 'center' | 'flex-end' => {\n if (position.endsWith('-left')) return 'flex-start';\n if (position.endsWith('-right')) return 'flex-end';\n return 'center';\n };\n\n const isTop = (position: ToastPosition) => position.startsWith('top');\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n {toasts.map(item => {\n // When keyboard is visible, force bottom toasts to render at top\n const top = keyboardVisible ? true : isTop(item.position);\n const align = getAlignment(item.position);\n const entering = top ? SlideInUp.duration(anim.toast.slideInDuration) : SlideInDown.duration(anim.toast.slideInDuration);\n const exiting = top ? SlideOutUp.duration(anim.toast.slideOutDuration) : SlideOutDown.duration(anim.toast.slideOutDuration);\n const s = SIZE_CONFIG[item.size] ?? SIZE_CONFIG.md;\n const accentColor = severityColors[item.severity] ?? severityColors.info;\n\n return (\n <Animated.View\n key={item.id}\n entering={entering}\n exiting={exiting}\n layout={Layout.duration(anim.toast.layoutDuration)}\n style={[\n styles.toastWrapper,\n {\n alignItems: align,\n ...(top\n ? {top: insets.top + 8}\n : {bottom: insets.bottom + 8}),\n },\n ]}\n pointerEvents=\"box-none\"\n >\n <Animated.View\n entering={FadeIn.duration(anim.toast.itemEnterDuration)}\n exiting={FadeOut.duration(anim.toast.itemExitDuration)}\n style={[\n styles.toast,\n {\n backgroundColor: surfaceColor,\n borderColor,\n minWidth: s.minW,\n },\n ]}\n >\n <Pressable\n style={styles.pressArea}\n disabled={!item.onPress}\n onPress={() => {\n item.onPress?.();\n removeToast(item.id);\n }}\n >\n <View style={[styles.accentBar, {backgroundColor: accentColor, width: s.accentWidth}]}/>\n <View style={[styles.content, {paddingVertical: s.paddingV, paddingHorizontal: s.paddingH, gap: s.paddingH * 0.7}]}>\n {item.severity === \"loading\" && (\n <ActivityIndicator size=\"small\" color={accentColor}/>\n )}\n <View style={styles.textContainer}>\n <Text style={{fontWeight: \"600\", fontSize: s.summarySize, color: textColor}}>\n {item.summary}\n </Text>\n {!!item.body && (\n <Text style={{fontSize: s.bodySize, marginTop: 2, color: textColor, opacity: 0.7}}>\n {item.body}\n </Text>\n )}\n </View>\n <Pressable onPress={() => removeToast(item.id)} hitSlop={8}>\n <Text style={{fontSize: s.closeSize, fontWeight: \"bold\", color: textColor, opacity: 0.4}}>\n ✕\n </Text>\n </Pressable>\n </View>\n </Pressable>\n </Animated.View>\n </Animated.View>\n );\n })}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n toastWrapper: {\n position: \"absolute\",\n left: 16,\n right: 16,\n zIndex: 9999,\n },\n toast: {\n flexDirection: \"row\",\n borderRadius: 10,\n borderWidth: 1,\n marginBottom: 8,\n overflow: \"hidden\",\n elevation: 6,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 3},\n shadowOpacity: 0.15,\n shadowRadius: 6,\n },\n accentBar: {},\n pressArea: {\n flex: 1,\n flexDirection: \"row\",\n },\n content: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n textContainer: {\n flex: 1,\n },\n});\n\nexport default KitsToast;\n"],"names":["anim"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/components/overlay/Toast/index.native.tsx"],"sourcesContent":["import React, {\n type Ref,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport {Platform, Pressable, StyleSheet, ActivityIndicator, View} from \"react-native\";\nimport Animated, {\n FadeInUp,\n FadeInDown,\n FadeOutUp,\n FadeOutDown,\n Layout,\n useAnimatedKeyboard,\n useAnimatedStyle,\n} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Text} from \"../../../_compat\";\nimport type {\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n ToastSeverity,\n ToastSize,\n} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {overlayAnimations as anim} from \"../../../animations\";\n\ninterface ToastItem {\n id: number;\n severity: ToastSeverity;\n summary: string;\n body?: string;\n position: ToastPosition;\n size: ToastSize;\n sticky?: boolean;\n onPress?: () => void;\n}\n\nlet toastIdCounter = 0;\nconst LIFE = 3000;\n\nconst SIZE_CONFIG: Record<ToastSize, { paddingV: number; paddingH: number; summarySize: number; bodySize: number; accentWidth: number; closeSize: number; minW: number }> = {\n sm: {paddingV: 8, paddingH: 10, summarySize: 12, bodySize: 10, accentWidth: 3, closeSize: 14, minW: 200},\n md: {paddingV: 12, paddingH: 14, summarySize: 14, bodySize: 12, accentWidth: 4, closeSize: 16, minW: 280},\n lg: {paddingV: 16, paddingH: 18, summarySize: 16, bodySize: 14, accentWidth: 5, closeSize: 18, minW: 320},\n};\n\nconst KitsToast = ({ref}: { ref?: Ref<IKitsToastRef> }) => {\n const [toasts, setToasts] = useState<ToastItem[]>([]);\n const timersRef = useRef<Map<number, ReturnType<typeof setTimeout>>>(new Map());\n const {resolveToken} = useKitsTheme();\n const insets = useSafeAreaInsets();\n\n // Keyboard avoidance for BOTTOM-positioned toasts, driven on the UI thread so\n // the lift tracks the keyboard's own curve instead of snapping on a JS event.\n const keyboard = useAnimatedKeyboard();\n const keyboardOffsetStyle = useAnimatedStyle(() => {\n // Android ships `windowSoftInputMode=\"adjustResize\"`: the window (and with\n // it this absoluteFill host) is already resized to sit above the keyboard,\n // so the toast clears it for free. Adding the keyboard height here would\n // double-compensate and launch the toast into the middle of the screen.\n if (Platform.OS === \"android\") return {transform: [{translateY: 0}]};\n const h = keyboard.height.value;\n return {transform: [{translateY: h > 0 ? -(h + anim.toast.keyboardGap) : 0}]};\n });\n\n const severityColors: Record<string, string> = {\n success: resolveToken('green.500'),\n info: resolveToken('blue.500'),\n warn: resolveToken('yellow.500'),\n error: resolveToken('red.500'),\n loading: resolveToken('blue.500'),\n brand: resolveToken('primary'),\n };\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const borderColor = resolveToken('border');\n\n const removeToast = useCallback((id: number) => {\n const timer = timersRef.current.get(id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(id);\n }\n setToasts(prev => prev.filter(t => t.id !== id));\n }, []);\n\n const toast: IToastFunction = useCallback((\n severity: ToastSeverity,\n summary: string,\n body: string = \"\",\n position: ToastPosition = \"bottom-center\",\n isUpdate: boolean = false,\n size: ToastSize = \"md\",\n onPress?: () => void,\n ) => {\n const id = ++toastIdCounter;\n const item: ToastItem = {id, severity, summary, body, position, size, sticky: severity === \"loading\", onPress};\n\n // isUpdate mirrors web's toastRef.replace: swap the most recent toast\n // at this position instead of stacking a new one.\n setToasts(prev => {\n if (!isUpdate) return [...prev, item];\n const lastAtPos = [...prev].reverse().find(t => t.position === position);\n if (!lastAtPos) return [...prev, item];\n const timer = timersRef.current.get(lastAtPos.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(lastAtPos.id);\n }\n return prev.map(t => (t.id === lastAtPos.id ? item : t));\n });\n\n if (!item.sticky) {\n const timer = setTimeout(() => removeToast(id), LIFE);\n timersRef.current.set(id, timer);\n }\n }, [removeToast]) as IToastFunction;\n\n const dismiss = useCallback((position?: ToastPosition) => {\n setToasts(prev => {\n const toRemove = position ? prev.filter(t => t.position === position) : prev;\n toRemove.forEach(t => {\n const timer = timersRef.current.get(t.id);\n if (timer) {\n clearTimeout(timer);\n timersRef.current.delete(t.id);\n }\n });\n return position ? prev.filter(t => t.position !== position) : [];\n });\n }, []);\n\n const dismissAll = useCallback(() => {\n timersRef.current.forEach(t => clearTimeout(t));\n timersRef.current.clear();\n setToasts([]);\n }, []);\n\n useImperativeHandle(ref, () => ({toast, dismiss, dismissAll}));\n\n useEffect(() => {\n return () => {\n timersRef.current.forEach(t => clearTimeout(t));\n };\n }, []);\n\n if (toasts.length === 0) return null;\n\n const getAlignment = (position: ToastPosition): 'flex-start' | 'center' | 'flex-end' => {\n if (position.endsWith('-left')) return 'flex-start';\n if (position.endsWith('-right')) return 'flex-end';\n return 'center';\n };\n\n const isTop = (position: ToastPosition) => position.startsWith('top');\n\n return (\n <View style={StyleSheet.absoluteFill} pointerEvents=\"box-none\">\n {toasts.map(item => {\n const top = isTop(item.position);\n const align = getAlignment(item.position);\n // One builder owns the whole entrance: FadeInUp/FadeInDown animate\n // opacity AND translateY together, direction matched to placement\n // (top toasts drop in from above, bottom toasts rise from below).\n const entering = (top ? FadeInUp : FadeInDown)\n .springify()\n .damping(anim.toast.enter.damping)\n .stiffness(anim.toast.enter.stiffness)\n .mass(anim.toast.enter.mass ?? 1);\n const exiting = (top ? FadeOutUp : FadeOutDown).duration(anim.toast.exitDuration);\n const s = SIZE_CONFIG[item.size] ?? SIZE_CONFIG.md;\n const accentColor = severityColors[item.severity] ?? severityColors.info;\n\n return (\n <Animated.View\n key={item.id}\n style={[\n styles.toastWrapper,\n {\n alignItems: align,\n ...(top\n ? {top: insets.top + 8}\n : {bottom: insets.bottom + 8}),\n },\n // Bottom toasts lift with the keyboard; top toasts never move.\n top ? null : keyboardOffsetStyle,\n ]}\n pointerEvents=\"box-none\"\n >\n <Animated.View\n entering={entering}\n exiting={exiting}\n layout={Layout.duration(anim.toast.layoutDuration)}\n style={[\n styles.toast,\n {\n backgroundColor: surfaceColor,\n borderColor,\n minWidth: s.minW,\n },\n ]}\n >\n <Pressable\n style={styles.pressArea}\n disabled={!item.onPress}\n onPress={() => {\n item.onPress?.();\n removeToast(item.id);\n }}\n >\n <View style={[styles.accentBar, {backgroundColor: accentColor, width: s.accentWidth}]}/>\n <View style={[styles.content, {paddingVertical: s.paddingV, paddingHorizontal: s.paddingH, gap: s.paddingH * 0.7}]}>\n {item.severity === \"loading\" && (\n <ActivityIndicator size=\"small\" color={accentColor}/>\n )}\n <View style={styles.textContainer}>\n <Text style={{fontWeight: \"600\", fontSize: s.summarySize, color: textColor}}>\n {item.summary}\n </Text>\n {!!item.body && (\n <Text style={{fontSize: s.bodySize, marginTop: 2, color: textColor, opacity: 0.7}}>\n {item.body}\n </Text>\n )}\n </View>\n <Pressable onPress={() => removeToast(item.id)} hitSlop={8}>\n <Text style={{fontSize: s.closeSize, fontWeight: \"bold\", color: textColor, opacity: 0.4}}>\n ✕\n </Text>\n </Pressable>\n </View>\n </Pressable>\n </Animated.View>\n </Animated.View>\n );\n })}\n </View>\n );\n};\n\nconst styles = StyleSheet.create({\n toastWrapper: {\n position: \"absolute\",\n left: 16,\n right: 16,\n zIndex: 9999,\n },\n toast: {\n flexDirection: \"row\",\n // Fill the wrapper (already inset 16pt each side) but never exceed 560pt;\n // the wrapper's alignItems keeps -left/-center/-right placement intact.\n width: \"100%\",\n maxWidth: 560,\n borderRadius: 10,\n borderWidth: 1,\n marginBottom: 8,\n overflow: \"hidden\",\n elevation: 6,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 3},\n shadowOpacity: 0.15,\n shadowRadius: 6,\n },\n accentBar: {},\n pressArea: {\n flex: 1,\n flexDirection: \"row\",\n },\n content: {\n flex: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n },\n textContainer: {\n flex: 1,\n },\n});\n\nexport default KitsToast;\n"],"names":["anim"],"mappings":"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"}
|
|
@@ -62,6 +62,8 @@ require('yup');
|
|
|
62
62
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
64
64
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
65
|
+
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
66
|
+
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
65
67
|
require('../../apps/mobile/src/Factory/DimensionsContext.cjs');
|
|
66
68
|
var index = require('../../apps/mobile/src/i18n/index.cjs');
|
|
67
69
|
require('../../apps/mobile/src/Core/AutoComplete/index.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":["createContext","useRef","useState","localeFiles","useEffect","initMobileI18n","useCallback","jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":["createContext","useRef","useState","localeFiles","useEffect","initMobileI18n","useCallback","jsx"],"mappings":"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"}
|
package/contexts/Locale/index.js
CHANGED
|
@@ -58,6 +58,8 @@ import 'yup';
|
|
|
58
58
|
import '../../packages/types/src/Css/map/index.js';
|
|
59
59
|
import '../../packages/types/src/Theme/shadows.js';
|
|
60
60
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
61
|
+
import '../../packages/types/src/Theme/alphaColors.js';
|
|
62
|
+
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
61
63
|
import '../../apps/mobile/src/Factory/DimensionsContext.js';
|
|
62
64
|
import { initMobileI18n } from '../../apps/mobile/src/i18n/index.js';
|
|
63
65
|
import '../../apps/mobile/src/Core/AutoComplete/index.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":[],"mappings":"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"}
|
package/contexts/Main/index.cjs
CHANGED
|
@@ -62,6 +62,8 @@ require('yup');
|
|
|
62
62
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
64
64
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
65
|
+
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
66
|
+
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
65
67
|
var DimensionsContext = require('../../apps/mobile/src/Factory/DimensionsContext.cjs');
|
|
66
68
|
require('i18next');
|
|
67
69
|
require('react-i18next');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Main/index.native.tsx"],"sourcesContent":["import React, {createContext, type PropsWithChildren, type ReactNode, useRef} from 'react';\nimport type {IMainContextProps, IMainContextValues} from '@lmb-it/kitsconcerto-types';\nimport DialogProvider from '../DialogContext';\nimport PermissionsProvider from '../PermissionsContext';\nimport LocaleContextProvider from '../Locale';\nimport ThemeContext, {KitsThemeProvider} from '../Theme';\n// import {IHeaderRef} from '../Components/Organisms/Layout/Header';\n// import {AuthLayout} from '../Components';\n// import AdminLayout from '../Components/Organisms/Layout/AdminLayout';\nimport {useWindowDimensions} from 'react-native';\nimport {GluestackUIProvider, DimensionsProvider} from '@lmb-it/kitsconcertomobile';\n\nexport const MainContext = createContext<IMainContextValues>({} as IMainContextValues);\n\nexport default function MainContextProvider({\n children,\n theme,\n kitsTheme,\n onLogOut,\n nonAuthRoutes,\n menuItems,\n permissions,\n logo,\n languages,\n defaultLanguage = 'en',\n authedRoutes,\n onChangeLanguage\n }: PropsWithChildren<IMainContextProps>) {\n const {width, height} = useWindowDimensions();\n\n const mq = {\n isSmall: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n isLandscape: width > height,\n isPortrait: height >= width\n };\n type IHeaderRef = any;\n const headerRef = useRef<IHeaderRef>(null);\n const appendToHeader = (element: ReactNode) => {\n if (headerRef.current?.appendToHeader) headerRef.current.appendToHeader(element);\n };\n\n\n const authLayout = !children && nonAuthRoutes?.length && !authedRoutes?.length;\n const adminLayout = !children && authedRoutes?.length && !nonAuthRoutes?.length;\n\n return (\n <MainContext.Provider value={{logo, onLogOut, appendToHeader, menuItems, mq}}>\n <GluestackUIProvider mode={theme}>\n <DimensionsProvider>\n <KitsThemeProvider theme={kitsTheme}>\n <ThemeContext theme={theme}>\n <LocaleContextProvider\n defaultLanguage={defaultLanguage}\n languages={languages}\n onChangeLanguage={onChangeLanguage}\n >\n <DialogProvider>\n <PermissionsProvider roles={permissions}>\n {!authLayout && !adminLayout && children}\n {/*{authLayout && <AuthLayout routes={nonAuthRoutes} />}*/}\n {/*{adminLayout && <AdminLayout routes={authedRoutes} headerRef={headerRef} />}*/}\n </PermissionsProvider>\n </DialogProvider>\n </LocaleContextProvider>\n </ThemeContext>\n </KitsThemeProvider>\n </DimensionsProvider>\n </GluestackUIProvider>\n </MainContext.Provider>\n );\n}\n"],"names":["createContext","useWindowDimensions","useRef","jsx","GluestackUIProvider","DimensionsProvider","KitsThemeProvider","ThemeContext","LocaleContextProvider","DialogProvider","PermissionsProvider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Main/index.native.tsx"],"sourcesContent":["import React, {createContext, type PropsWithChildren, type ReactNode, useRef} from 'react';\nimport type {IMainContextProps, IMainContextValues} from '@lmb-it/kitsconcerto-types';\nimport DialogProvider from '../DialogContext';\nimport PermissionsProvider from '../PermissionsContext';\nimport LocaleContextProvider from '../Locale';\nimport ThemeContext, {KitsThemeProvider} from '../Theme';\n// import {IHeaderRef} from '../Components/Organisms/Layout/Header';\n// import {AuthLayout} from '../Components';\n// import AdminLayout from '../Components/Organisms/Layout/AdminLayout';\nimport {useWindowDimensions} from 'react-native';\nimport {GluestackUIProvider, DimensionsProvider} from '@lmb-it/kitsconcertomobile';\n\nexport const MainContext = createContext<IMainContextValues>({} as IMainContextValues);\n\nexport default function MainContextProvider({\n children,\n theme,\n kitsTheme,\n onLogOut,\n nonAuthRoutes,\n menuItems,\n permissions,\n logo,\n languages,\n defaultLanguage = 'en',\n authedRoutes,\n onChangeLanguage\n }: PropsWithChildren<IMainContextProps>) {\n const {width, height} = useWindowDimensions();\n\n const mq = {\n isSmall: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n isLandscape: width > height,\n isPortrait: height >= width\n };\n type IHeaderRef = any;\n const headerRef = useRef<IHeaderRef>(null);\n const appendToHeader = (element: ReactNode) => {\n if (headerRef.current?.appendToHeader) headerRef.current.appendToHeader(element);\n };\n\n\n const authLayout = !children && nonAuthRoutes?.length && !authedRoutes?.length;\n const adminLayout = !children && authedRoutes?.length && !nonAuthRoutes?.length;\n\n return (\n <MainContext.Provider value={{logo, onLogOut, appendToHeader, menuItems, mq}}>\n <GluestackUIProvider mode={theme}>\n <DimensionsProvider>\n <KitsThemeProvider theme={kitsTheme}>\n <ThemeContext theme={theme}>\n <LocaleContextProvider\n defaultLanguage={defaultLanguage}\n languages={languages}\n onChangeLanguage={onChangeLanguage}\n >\n <DialogProvider>\n <PermissionsProvider roles={permissions}>\n {!authLayout && !adminLayout && children}\n {/*{authLayout && <AuthLayout routes={nonAuthRoutes} />}*/}\n {/*{adminLayout && <AdminLayout routes={authedRoutes} headerRef={headerRef} />}*/}\n </PermissionsProvider>\n </DialogProvider>\n </LocaleContextProvider>\n </ThemeContext>\n </KitsThemeProvider>\n </DimensionsProvider>\n </GluestackUIProvider>\n </MainContext.Provider>\n );\n}\n"],"names":["createContext","useWindowDimensions","useRef","jsx","GluestackUIProvider","DimensionsProvider","KitsThemeProvider","ThemeContext","LocaleContextProvider","DialogProvider","PermissionsProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAA,GAAcA,mBAAA,CAAkC,EAAwB;AAErF,SAAwB,mBAAA,CAAoB;AAAA,EACI,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,YAAA;AAAA,EACA;AACJ,CAAA,EAAyC;AACjF,EAAA,MAAM,EAAC,KAAA,EAAO,MAAA,EAAM,GAAIC,+BAAA,EAAoB;AAE5C,EAAA,MAAM,EAAA,GAAK;AAAA,IACP,SAAS,KAAA,GAAQ,GAAA;AAAA,IACjB,QAAA,EAAU,KAAA,IAAS,GAAA,IAAO,KAAA,GAAQ,IAAA;AAAA,IAClC,WAAW,KAAA,IAAS,IAAA;AAAA,IACpB,aAAa,KAAA,GAAQ,MAAA;AAAA,IACrB,YAAY,MAAA,IAAU;AAAA,GAC1B;AAEA,EAAA,MAAM,SAAA,GAAYC,aAAmB,IAAI,CAAA;AACzC,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAAuB;AAC3C,IAAA,IAAI,UAAU,OAAA,EAAS,cAAA,EAAgB,SAAA,CAAU,OAAA,CAAQ,eAAe,OAAO,CAAA;AAAA,EACnF,CAAA;AAGA,EAAA,MAAM,aAAa,CAAC,QAAA,IAAY,aAAA,EAAe,MAAA,IAAU,CAAC,YAAA,EAAc,MAAA;AACxE,EAAA,MAAM,cAAc,CAAC,QAAA,IAAY,YAAA,EAAc,MAAA,IAAU,CAAC,aAAA,EAAe,MAAA;AAEzE,EAAA,uBACIC,cAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAC,IAAA,EAAM,QAAA,EAAU,cAAA,EAAgB,SAAA,EAAW,EAAA,EAAE,EACvE,yCAACC,yBAAA,EAAA,EAAoB,IAAA,EAAM,KAAA,EACvB,QAAA,kBAAAD,cAAA,CAACE,oCAAA,EAAA,EACG,QAAA,kBAAAF,cAAA,CAACG,8CAAkB,KAAA,EAAO,SAAA,EACtB,QAAA,kBAAAH,cAAA,CAACI,oBAAA,EAAA,EAAa,KAAA,EACV,QAAA,kBAAAJ,cAAA;AAAA,IAACK,sBAAA;AAAA,IAAA;AAAA,MACG,eAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MAEA,QAAA,kBAAAL,cAAA,CAACM,qBAAA,EAAA,EACG,QAAA,kBAAAN,cAAA,CAACO,0BAAA,EAAA,EAAoB,KAAA,EAAO,WAAA,EACvB,QAAA,EAAA,CAAC,UAAA,IAAc,CAAC,WAAA,IAAe,QAAA,EAGpC,CAAA,EACJ;AAAA;AAAA,GACJ,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA;AAER;;;;;"}
|