@lmb-it/kitsconcerto-native 0.1.296 → 0.1.298

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.
@@ -1 +1 @@
1
- {"version":3,"file":"index.cjs","sources":["../../../../../src/components/overlay/ConfirmDialog/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {Modal, Pressable, StyleSheet, View} from \"react-native\";\nimport Animated, {Easing, FadeIn, FadeOut, runOnJS, ZoomIn, ZoomOut} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Icon, Text} from \"../../../_compat\";\nimport type {IConfirmDialogProps} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {useSeverityColors, useAllSeverityColors} from \"../../../hooks/useSeverityColors\";\nimport {useResolvedStyle} from \"../../../hooks\";\nimport {overlayAnimations as anim, scrimExitDuration} from \"../../../animations\";\nimport {sheetEnter, sheetExit} from \"../sheetMotion\";\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 cancels the panel's exit\n * (reanimated reports `finished=false`, so the unmount is skipped) and the\n * inner re-enters cleanly; `visibleRef` is a second guard for the case where\n * the exit had already completed.\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 KitsConfirm(props: IConfirmDialogProps) {\n const {\n visible,\n header,\n message,\n icon,\n type = \"secondary\",\n accept,\n reject,\n acceptLabel = \"Accept\",\n rejectLabel = \"Reject\",\n buttons,\n defaultUI,\n async: asyncMode,\n onHide,\n content,\n children,\n position = \"center\",\n style,\n contentStyle,\n headerStyle,\n maskStyle,\n // LEGIT-PLATFORM-ONLY (web): acceptIcon/rejectIcon take PrimeReact\n // icon classes ('pi pi-*') with no native rendering path — use the\n // `buttons` array for custom native actions. acceptClassName/\n // rejectClassName are CSS classes; appendTo is a DOM portal target.\n } = props;\n\n const {resolveToken, theme} = useKitsTheme();\n const colors = useSeverityColors(type);\n const allColors = useAllSeverityColors();\n const insets = useSafeAreaInsets();\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const subtextColor = resolveToken('text-secondary');\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\n const {mounted, handleExitFinished} = useOverlayPresence(!!visible);\n if (!mounted) return null;\n\n const isSheet = position === 'bottom';\n const hide = () => onHide?.('hide');\n\n const doClick = async (callback?: () => void) => {\n if (asyncMode) {\n await callback?.();\n hide();\n } else {\n try {\n callback?.();\n } finally {\n hide();\n }\n }\n };\n\n const showIcon = icon != null || brandLogo != null;\n // Panel always uses surface-card. Severity (danger/success/...) only colours\n // the icon bubble and the action button — not the whole panel — otherwise\n // a danger confirm renders as a red wash with the underlying screen\n // bleeding through.\n const panelBg = surfaceColor;\n\n // Shared action row. `stretch` makes each button flex:1 (bottom-sheet,\n // full-width). The default accept/reject pair is ordered accept-first in the\n // centered card but reject-first (Cancel | Confirm) in the sheet, matching\n // the platform-native bottom-sheet convention.\n const renderActions = (stretch: boolean) => {\n if (buttons?.length) {\n return (\n <View style={styles.buttonRow}>\n {buttons.map((b, i) => {\n const buttonColors = allColors[b.type ?? type] ?? colors;\n const btnColor = buttonColors.solid;\n return (\n <Pressable\n key={i}\n disabled={b.disabled}\n style={[\n styles.actionBtn,\n stretch && styles.actionBtnSheet,\n stretch && {flex: 1},\n b.outlined\n ? {backgroundColor: \"transparent\", borderColor: btnColor, borderWidth: 1.5}\n : {backgroundColor: btnColor},\n b.rounded && {borderRadius: 999},\n b.disabled && {opacity: 0.5},\n ]}\n onPress={() => b.onClick(hide, accept, reject)}\n >\n <Text style={{\n color: b.outlined ? btnColor : buttonColors.solidText,\n fontWeight: \"600\",\n fontSize: 14,\n }}>\n {b.title}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n }\n\n const acceptBtn = (\n <Pressable\n key=\"accept\"\n style={[styles.actionBtn, stretch && styles.actionBtnSheet, {backgroundColor: colors.solid, flex: 1}]}\n onPress={() => doClick(accept)}\n >\n <Text style={[styles.btnTextPrimary, {color: colors.solidText}]}>{acceptLabel}</Text>\n </Pressable>\n );\n const rejectBtn = !defaultUI ? (\n <Pressable\n key=\"reject\"\n style={[styles.actionBtn, styles.actionBtnOutlined, stretch && styles.actionBtnSheet, {borderColor: colors.solid, flex: 1}]}\n onPress={() => doClick(reject)}\n >\n <Text style={[styles.btnTextOutlined, {color: colors.solid}]}>{rejectLabel}</Text>\n </Pressable>\n ) : null;\n\n return (\n <View style={styles.buttonRow}>\n {stretch ? <>{rejectBtn}{acceptBtn}</> : <>{acceptBtn}{rejectBtn}</>}\n </View>\n );\n };\n\n // ── Bottom sheet ────────────────────────────────────────\n if (isSheet) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the sheet — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.sheet.exitDuration))}\n style={[styles.sheetOverlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n /* ⛔ THE SAME FAULT AS `Dialog`'s SHEET, AND THE SAME ANSWER —\n see `../sheetMotion`. `SlideInDown` takes its travel from\n the window, and inside an RN `Modal` the window it measures\n is not the screen, so the panel is placed at rest on frame\n one. Measured on the Dialog, 30 September 2026; this file\n has the identical shape, so it takes the identical fix\n rather than a second one (§5).\n ⚠️ AND THIS FILE IS NOT YET WHOLE. Its panel is still a\n CHILD of the scrim above, so it still inherits the scrim's\n fade — the defect `Dialog` had corrected on 29 September and\n that was recorded then as this file's own next unit. The\n sheet will now slide AND fade here. That is better than not\n sliding, and it is still not the ruled motion. Not fixed in\n this unit, and not left unsaid. */\n entering={sheetEnter(anim.sheet.enter)}\n exiting={sheetExit(anim.sheet.exitDuration, handleExitFinished)}\n style={[\n styles.sheetPanel,\n {backgroundColor: panelBg, paddingBottom: 24 + insets.bottom},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Grabber */}\n <View style={[styles.grabber, {backgroundColor: grabberColor}]}/>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.sheetHeader, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.sheetMessage, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Injected item / extra content */}\n {children}\n\n {/* Actions */}\n {renderActions(true)}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n // ── Content-only mode (prompt) ──────────────────────────\n if (content) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.content.damping).stiffness(anim.confirm.content.stiffness).mass(anim.confirm.content.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {backgroundColor: surfaceColor, minWidth: 250, maxWidth: 380},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {content as React.ReactNode}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n\n {/* Card + icon stack: icon sits above the card */}\n <View style={styles.cardStack}>\n {/* Soft-circle icon bubble */}\n {showIcon && (\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.icon.damping).stiffness(anim.confirm.icon.stiffness).mass(anim.confirm.icon.mass ?? 1).delay(anim.confirm.icon.delay ?? 0)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease))}\n style={[styles.iconBubble, {backgroundColor: colors.iconBg}]}\n >\n {brandLogo ? brandLogo : typeof icon === \"string\" ? (\n <Icon name={icon as never} size={'xl'} color={colors.iconFg}/>\n ) : (\n icon\n )}\n </Animated.View>\n )}\n\n {/* Panel */}\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.enter.damping).stiffness(anim.confirm.enter.stiffness).mass(anim.confirm.enter.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {\n backgroundColor: panelBg,\n paddingTop: showIcon ? 48 : 24,\n gap: 10,\n },\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Close button */}\n <Pressable style={styles.closeBtn} onPress={hide} hitSlop={12}>\n <Text style={{fontSize: 18, color: subtextColor}}>✕</Text>\n </Pressable>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.header, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.message, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Children */}\n {children}\n\n {/* Buttons */}\n {renderActions(false)}\n </Animated.View>\n </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: 28,\n },\n sheetOverlay: {\n flex: 1,\n justifyContent: \"flex-end\",\n },\n sheetPanel: {\n // 24 == radii.2xl, top corners only (bottom stays square).\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n paddingHorizontal: 24,\n paddingTop: 10,\n gap: 14,\n // Subtle elevation (upward for a sheet): 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 grabber: {\n width: 40,\n height: 5,\n borderRadius: 999,\n alignSelf: \"center\",\n marginBottom: 6,\n },\n sheetHeader: {\n fontSize: 24,\n fontWeight: \"700\",\n textAlign: \"left\",\n },\n sheetMessage: {\n fontSize: 15,\n lineHeight: 22,\n textAlign: \"left\",\n },\n cardStack: {\n minWidth: 250,\n maxWidth: 380,\n alignItems: \"center\",\n },\n iconBubble: {\n width: 72,\n height: 72,\n borderRadius: 36,\n justifyContent: \"center\",\n alignItems: \"center\",\n zIndex: 2,\n marginBottom: -36,\n elevation: 8,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 4},\n shadowOpacity: 0.15,\n shadowRadius: 8,\n },\n panel: {\n alignSelf: \"stretch\",\n // 20 == radii.xl. Side padding (24) == bottom padding (24) for even rhythm.\n borderRadius: 20,\n paddingHorizontal: 24,\n paddingBottom: 24,\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 alignItems: \"center\",\n },\n closeBtn: {\n position: \"absolute\",\n top: 12,\n right: 14,\n zIndex: 3,\n },\n header: {\n fontSize: 22,\n fontWeight: \"700\",\n textAlign: \"center\",\n marginBottom: 8,\n },\n message: {\n fontSize: 14,\n textAlign: \"center\",\n lineHeight: 20,\n // Tightened so top/bottom whitespace around the actions reads balanced.\n marginBottom: 16,\n },\n buttonRow: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n gap: 12,\n width: \"100%\",\n },\n actionBtn: {\n paddingVertical: 12,\n paddingHorizontal: 24,\n // Pill (== radii.pill). Buttons here are raw Pressables, not kits Button,\n // so the pill comes from borderRadius — the pattern the `buttons` array\n // path (`b.rounded && {borderRadius: 999}`) already uses in this file.\n borderRadius: 999,\n minWidth: 100,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n // Taller buttons for the bottom-sheet action row (pill shape shared).\n actionBtnSheet: {\n paddingVertical: 16,\n borderRadius: 999,\n },\n actionBtnOutlined: {\n backgroundColor: \"transparent\",\n borderWidth: 1.5,\n },\n btnTextPrimary: {\n color: \"#fff\",\n fontWeight: \"600\",\n fontSize: 14,\n },\n btnTextOutlined: {\n fontWeight: \"600\",\n fontSize: 14,\n },\n});\n"],"names":["useKitsTheme","useSeverityColors","useAllSeverityColors","useSafeAreaInsets","useResolvedStyle","jsx","View","Pressable","Text","jsxs","Fragment","Modal","FadeIn","anim","FadeOut","scrimExitDuration","StyleSheet","sheetEnter","sheetExit","ZoomIn","ZoomOut","Easing","runOnJS","Icon"],"mappings":"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"}
1
+ {"version":3,"file":"index.cjs","sources":["../../../../../src/components/overlay/ConfirmDialog/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {Modal, Pressable, StyleSheet, View} from \"react-native\";\nimport Animated, {Easing, FadeIn, FadeOut, runOnJS, ZoomIn, ZoomOut} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Icon, Text} from \"../../../_compat\";\nimport type {IConfirmDialogProps} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {useSeverityColors, useAllSeverityColors} from \"../../../hooks/useSeverityColors\";\nimport {useResolvedStyle} from \"../../../hooks\";\nimport {overlayAnimations as anim, scrimExitDuration} from \"../../../animations\";\nimport {sheetEnter, sheetExit} from \"../sheetMotion\";\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 cancels the panel's exit\n * (reanimated reports `finished=false`, so the unmount is skipped) and the\n * inner re-enters cleanly; `visibleRef` is a second guard for the case where\n * the exit had already completed.\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 KitsConfirm(props: IConfirmDialogProps) {\n const {\n visible,\n header,\n message,\n icon,\n type = \"secondary\",\n accept,\n reject,\n acceptLabel = \"Accept\",\n rejectLabel = \"Reject\",\n buttons,\n defaultUI,\n async: asyncMode,\n onHide,\n closeAriaLabel = 'Close',\n content,\n children,\n position = \"center\",\n style,\n contentStyle,\n headerStyle,\n maskStyle,\n // LEGIT-PLATFORM-ONLY (web): acceptIcon/rejectIcon take PrimeReact\n // icon classes ('pi pi-*') with no native rendering path — use the\n // `buttons` array for custom native actions. acceptClassName/\n // rejectClassName are CSS classes; appendTo is a DOM portal target.\n } = props;\n\n const {resolveToken, theme} = useKitsTheme();\n const colors = useSeverityColors(type);\n const allColors = useAllSeverityColors();\n const insets = useSafeAreaInsets();\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const subtextColor = resolveToken('text-secondary');\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\n const {mounted, handleExitFinished} = useOverlayPresence(!!visible);\n if (!mounted) return null;\n\n const isSheet = position === 'bottom';\n const hide = () => onHide?.('hide');\n\n const doClick = async (callback?: () => void) => {\n if (asyncMode) {\n await callback?.();\n hide();\n } else {\n try {\n callback?.();\n } finally {\n hide();\n }\n }\n };\n\n const showIcon = icon != null || brandLogo != null;\n // Panel always uses surface-card. Severity (danger/success/...) only colours\n // the icon bubble and the action button — not the whole panel — otherwise\n // a danger confirm renders as a red wash with the underlying screen\n // bleeding through.\n const panelBg = surfaceColor;\n\n // Shared action row. `stretch` makes each button flex:1 (bottom-sheet,\n // full-width). The default accept/reject pair is ordered accept-first in the\n // centered card but reject-first (Cancel | Confirm) in the sheet, matching\n // the platform-native bottom-sheet convention.\n const renderActions = (stretch: boolean) => {\n if (buttons?.length) {\n return (\n <View style={styles.buttonRow}>\n {buttons.map((b, i) => {\n const buttonColors = allColors[b.type ?? type] ?? colors;\n const btnColor = buttonColors.solid;\n return (\n <Pressable\n key={i}\n disabled={b.disabled}\n style={[\n styles.actionBtn,\n stretch && styles.actionBtnSheet,\n stretch && {flex: 1},\n b.outlined\n ? {backgroundColor: \"transparent\", borderColor: btnColor, borderWidth: 1.5}\n : {backgroundColor: btnColor},\n b.rounded && {borderRadius: 999},\n b.disabled && {opacity: 0.5},\n ]}\n onPress={() => b.onClick(hide, accept, reject)}\n >\n <Text style={{\n color: b.outlined ? btnColor : buttonColors.solidText,\n fontWeight: \"600\",\n fontSize: 14,\n }}>\n {b.title}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n }\n\n const acceptBtn = (\n <Pressable\n key=\"accept\"\n style={[styles.actionBtn, stretch && styles.actionBtnSheet, {backgroundColor: colors.solid, flex: 1}]}\n onPress={() => doClick(accept)}\n >\n <Text style={[styles.btnTextPrimary, {color: colors.solidText}]}>{acceptLabel}</Text>\n </Pressable>\n );\n const rejectBtn = !defaultUI ? (\n <Pressable\n key=\"reject\"\n style={[styles.actionBtn, styles.actionBtnOutlined, stretch && styles.actionBtnSheet, {borderColor: colors.solid, flex: 1}]}\n onPress={() => doClick(reject)}\n >\n <Text style={[styles.btnTextOutlined, {color: colors.solid}]}>{rejectLabel}</Text>\n </Pressable>\n ) : null;\n\n return (\n <View style={styles.buttonRow}>\n {stretch ? <>{rejectBtn}{acceptBtn}</> : <>{acceptBtn}{rejectBtn}</>}\n </View>\n );\n };\n\n // ── Bottom sheet ────────────────────────────────────────\n if (isSheet) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the sheet — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.sheet.exitDuration))}\n style={[styles.sheetOverlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n /* ⛔ THE SAME FAULT AS `Dialog`'s SHEET, AND THE SAME ANSWER —\n see `../sheetMotion`. `SlideInDown` takes its travel from\n the window, and inside an RN `Modal` the window it measures\n is not the screen, so the panel is placed at rest on frame\n one. Measured on the Dialog, 30 September 2026; this file\n has the identical shape, so it takes the identical fix\n rather than a second one (§5).\n ⚠️ AND THIS FILE IS NOT YET WHOLE. Its panel is still a\n CHILD of the scrim above, so it still inherits the scrim's\n fade — the defect `Dialog` had corrected on 29 September and\n that was recorded then as this file's own next unit. The\n sheet will now slide AND fade here. That is better than not\n sliding, and it is still not the ruled motion. Not fixed in\n this unit, and not left unsaid. */\n entering={sheetEnter(anim.sheet.enter)}\n exiting={sheetExit(anim.sheet.exitDuration, handleExitFinished)}\n style={[\n styles.sheetPanel,\n {backgroundColor: panelBg, paddingBottom: 24 + insets.bottom},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Grabber */}\n <View style={[styles.grabber, {backgroundColor: grabberColor}]}/>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.sheetHeader, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.sheetMessage, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Injected item / extra content */}\n {children}\n\n {/* Actions */}\n {renderActions(true)}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n // ── Content-only mode (prompt) ──────────────────────────\n if (content) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.content.damping).stiffness(anim.confirm.content.stiffness).mass(anim.confirm.content.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {backgroundColor: surfaceColor, minWidth: 250, maxWidth: 380},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {content as React.ReactNode}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n\n {/* Card + icon stack: icon sits above the card */}\n <View style={styles.cardStack}>\n {/* Soft-circle icon bubble */}\n {showIcon && (\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.icon.damping).stiffness(anim.confirm.icon.stiffness).mass(anim.confirm.icon.mass ?? 1).delay(anim.confirm.icon.delay ?? 0)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease))}\n style={[styles.iconBubble, {backgroundColor: colors.iconBg}]}\n >\n {brandLogo ? brandLogo : typeof icon === \"string\" ? (\n <Icon name={icon as never} size={'xl'} color={colors.iconFg}/>\n ) : (\n icon\n )}\n </Animated.View>\n )}\n\n {/* Panel */}\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.enter.damping).stiffness(anim.confirm.enter.stiffness).mass(anim.confirm.enter.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {\n backgroundColor: panelBg,\n paddingTop: showIcon ? 48 : 24,\n gap: 10,\n },\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Close button */}\n <Pressable style={styles.closeBtn} onPress={hide} hitSlop={12}\n accessibilityRole=\"button\" accessibilityLabel={closeAriaLabel}>\n <Text style={{fontSize: 18, color: subtextColor}}>✕</Text>\n </Pressable>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.header, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.message, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Children */}\n {children}\n\n {/* Buttons */}\n {renderActions(false)}\n </Animated.View>\n </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: 28,\n },\n sheetOverlay: {\n flex: 1,\n justifyContent: \"flex-end\",\n },\n sheetPanel: {\n // 24 == radii.2xl, top corners only (bottom stays square).\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n paddingHorizontal: 24,\n paddingTop: 10,\n gap: 14,\n // Subtle elevation (upward for a sheet): 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 grabber: {\n width: 40,\n height: 5,\n borderRadius: 999,\n alignSelf: \"center\",\n marginBottom: 6,\n },\n sheetHeader: {\n fontSize: 24,\n fontWeight: \"700\",\n textAlign: \"left\",\n },\n sheetMessage: {\n fontSize: 15,\n lineHeight: 22,\n textAlign: \"left\",\n },\n cardStack: {\n minWidth: 250,\n maxWidth: 380,\n alignItems: \"center\",\n },\n iconBubble: {\n width: 72,\n height: 72,\n borderRadius: 36,\n justifyContent: \"center\",\n alignItems: \"center\",\n zIndex: 2,\n marginBottom: -36,\n elevation: 8,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 4},\n shadowOpacity: 0.15,\n shadowRadius: 8,\n },\n panel: {\n alignSelf: \"stretch\",\n // 20 == radii.xl. Side padding (24) == bottom padding (24) for even rhythm.\n borderRadius: 20,\n paddingHorizontal: 24,\n paddingBottom: 24,\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 alignItems: \"center\",\n },\n closeBtn: {\n position: \"absolute\",\n top: 12,\n right: 14,\n zIndex: 3,\n },\n header: {\n fontSize: 22,\n fontWeight: \"700\",\n textAlign: \"center\",\n marginBottom: 8,\n },\n message: {\n fontSize: 14,\n textAlign: \"center\",\n lineHeight: 20,\n // Tightened so top/bottom whitespace around the actions reads balanced.\n marginBottom: 16,\n },\n buttonRow: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n gap: 12,\n width: \"100%\",\n },\n actionBtn: {\n paddingVertical: 12,\n paddingHorizontal: 24,\n // Pill (== radii.pill). Buttons here are raw Pressables, not kits Button,\n // so the pill comes from borderRadius — the pattern the `buttons` array\n // path (`b.rounded && {borderRadius: 999}`) already uses in this file.\n borderRadius: 999,\n minWidth: 100,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n // Taller buttons for the bottom-sheet action row (pill shape shared).\n actionBtnSheet: {\n paddingVertical: 16,\n borderRadius: 999,\n },\n actionBtnOutlined: {\n backgroundColor: \"transparent\",\n borderWidth: 1.5,\n },\n btnTextPrimary: {\n color: \"#fff\",\n fontWeight: \"600\",\n fontSize: 14,\n },\n btnTextOutlined: {\n fontWeight: \"600\",\n fontSize: 14,\n },\n});\n"],"names":["useKitsTheme","useSeverityColors","useAllSeverityColors","useSafeAreaInsets","useResolvedStyle","jsx","View","Pressable","Text","jsxs","Fragment","Modal","FadeIn","anim","FadeOut","scrimExitDuration","StyleSheet","sheetEnter","sheetExit","ZoomIn","ZoomOut","Easing","runOnJS","Icon"],"mappings":"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"}
@@ -41,6 +41,7 @@ function KitsConfirm(props) {
41
41
  defaultUI,
42
42
  async: asyncMode,
43
43
  onHide,
44
+ closeAriaLabel = "Close",
44
45
  content,
45
46
  children,
46
47
  position = "center",
@@ -239,7 +240,17 @@ function KitsConfirm(props) {
239
240
  resolvedContentStyle
240
241
  ],
241
242
  children: [
242
- /* @__PURE__ */ jsx(Pressable, { style: styles.closeBtn, onPress: hide, hitSlop: 12, children: /* @__PURE__ */ jsx(Text, { style: { fontSize: 18, color: subtextColor }, children: "\u2715" }) }),
243
+ /* @__PURE__ */ jsx(
244
+ Pressable,
245
+ {
246
+ style: styles.closeBtn,
247
+ onPress: hide,
248
+ hitSlop: 12,
249
+ accessibilityRole: "button",
250
+ accessibilityLabel: closeAriaLabel,
251
+ children: /* @__PURE__ */ jsx(Text, { style: { fontSize: 18, color: subtextColor }, children: "\u2715" })
252
+ }
253
+ ),
243
254
  header != null && /* @__PURE__ */ jsx(Text, { style: [styles.header, { color: textColor }, resolvedHeaderStyle], children: header }),
244
255
  message != null && /* @__PURE__ */ jsx(Text, { style: [styles.message, { color: subtextColor }], children: message }),
245
256
  children,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../../../../../src/components/overlay/ConfirmDialog/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {Modal, Pressable, StyleSheet, View} from \"react-native\";\nimport Animated, {Easing, FadeIn, FadeOut, runOnJS, ZoomIn, ZoomOut} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Icon, Text} from \"../../../_compat\";\nimport type {IConfirmDialogProps} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {useSeverityColors, useAllSeverityColors} from \"../../../hooks/useSeverityColors\";\nimport {useResolvedStyle} from \"../../../hooks\";\nimport {overlayAnimations as anim, scrimExitDuration} from \"../../../animations\";\nimport {sheetEnter, sheetExit} from \"../sheetMotion\";\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 cancels the panel's exit\n * (reanimated reports `finished=false`, so the unmount is skipped) and the\n * inner re-enters cleanly; `visibleRef` is a second guard for the case where\n * the exit had already completed.\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 KitsConfirm(props: IConfirmDialogProps) {\n const {\n visible,\n header,\n message,\n icon,\n type = \"secondary\",\n accept,\n reject,\n acceptLabel = \"Accept\",\n rejectLabel = \"Reject\",\n buttons,\n defaultUI,\n async: asyncMode,\n onHide,\n content,\n children,\n position = \"center\",\n style,\n contentStyle,\n headerStyle,\n maskStyle,\n // LEGIT-PLATFORM-ONLY (web): acceptIcon/rejectIcon take PrimeReact\n // icon classes ('pi pi-*') with no native rendering path — use the\n // `buttons` array for custom native actions. acceptClassName/\n // rejectClassName are CSS classes; appendTo is a DOM portal target.\n } = props;\n\n const {resolveToken, theme} = useKitsTheme();\n const colors = useSeverityColors(type);\n const allColors = useAllSeverityColors();\n const insets = useSafeAreaInsets();\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const subtextColor = resolveToken('text-secondary');\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\n const {mounted, handleExitFinished} = useOverlayPresence(!!visible);\n if (!mounted) return null;\n\n const isSheet = position === 'bottom';\n const hide = () => onHide?.('hide');\n\n const doClick = async (callback?: () => void) => {\n if (asyncMode) {\n await callback?.();\n hide();\n } else {\n try {\n callback?.();\n } finally {\n hide();\n }\n }\n };\n\n const showIcon = icon != null || brandLogo != null;\n // Panel always uses surface-card. Severity (danger/success/...) only colours\n // the icon bubble and the action button — not the whole panel — otherwise\n // a danger confirm renders as a red wash with the underlying screen\n // bleeding through.\n const panelBg = surfaceColor;\n\n // Shared action row. `stretch` makes each button flex:1 (bottom-sheet,\n // full-width). The default accept/reject pair is ordered accept-first in the\n // centered card but reject-first (Cancel | Confirm) in the sheet, matching\n // the platform-native bottom-sheet convention.\n const renderActions = (stretch: boolean) => {\n if (buttons?.length) {\n return (\n <View style={styles.buttonRow}>\n {buttons.map((b, i) => {\n const buttonColors = allColors[b.type ?? type] ?? colors;\n const btnColor = buttonColors.solid;\n return (\n <Pressable\n key={i}\n disabled={b.disabled}\n style={[\n styles.actionBtn,\n stretch && styles.actionBtnSheet,\n stretch && {flex: 1},\n b.outlined\n ? {backgroundColor: \"transparent\", borderColor: btnColor, borderWidth: 1.5}\n : {backgroundColor: btnColor},\n b.rounded && {borderRadius: 999},\n b.disabled && {opacity: 0.5},\n ]}\n onPress={() => b.onClick(hide, accept, reject)}\n >\n <Text style={{\n color: b.outlined ? btnColor : buttonColors.solidText,\n fontWeight: \"600\",\n fontSize: 14,\n }}>\n {b.title}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n }\n\n const acceptBtn = (\n <Pressable\n key=\"accept\"\n style={[styles.actionBtn, stretch && styles.actionBtnSheet, {backgroundColor: colors.solid, flex: 1}]}\n onPress={() => doClick(accept)}\n >\n <Text style={[styles.btnTextPrimary, {color: colors.solidText}]}>{acceptLabel}</Text>\n </Pressable>\n );\n const rejectBtn = !defaultUI ? (\n <Pressable\n key=\"reject\"\n style={[styles.actionBtn, styles.actionBtnOutlined, stretch && styles.actionBtnSheet, {borderColor: colors.solid, flex: 1}]}\n onPress={() => doClick(reject)}\n >\n <Text style={[styles.btnTextOutlined, {color: colors.solid}]}>{rejectLabel}</Text>\n </Pressable>\n ) : null;\n\n return (\n <View style={styles.buttonRow}>\n {stretch ? <>{rejectBtn}{acceptBtn}</> : <>{acceptBtn}{rejectBtn}</>}\n </View>\n );\n };\n\n // ── Bottom sheet ────────────────────────────────────────\n if (isSheet) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the sheet — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.sheet.exitDuration))}\n style={[styles.sheetOverlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n /* ⛔ THE SAME FAULT AS `Dialog`'s SHEET, AND THE SAME ANSWER —\n see `../sheetMotion`. `SlideInDown` takes its travel from\n the window, and inside an RN `Modal` the window it measures\n is not the screen, so the panel is placed at rest on frame\n one. Measured on the Dialog, 30 September 2026; this file\n has the identical shape, so it takes the identical fix\n rather than a second one (§5).\n ⚠️ AND THIS FILE IS NOT YET WHOLE. Its panel is still a\n CHILD of the scrim above, so it still inherits the scrim's\n fade — the defect `Dialog` had corrected on 29 September and\n that was recorded then as this file's own next unit. The\n sheet will now slide AND fade here. That is better than not\n sliding, and it is still not the ruled motion. Not fixed in\n this unit, and not left unsaid. */\n entering={sheetEnter(anim.sheet.enter)}\n exiting={sheetExit(anim.sheet.exitDuration, handleExitFinished)}\n style={[\n styles.sheetPanel,\n {backgroundColor: panelBg, paddingBottom: 24 + insets.bottom},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Grabber */}\n <View style={[styles.grabber, {backgroundColor: grabberColor}]}/>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.sheetHeader, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.sheetMessage, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Injected item / extra content */}\n {children}\n\n {/* Actions */}\n {renderActions(true)}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n // ── Content-only mode (prompt) ──────────────────────────\n if (content) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.content.damping).stiffness(anim.confirm.content.stiffness).mass(anim.confirm.content.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {backgroundColor: surfaceColor, minWidth: 250, maxWidth: 380},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {content as React.ReactNode}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n\n {/* Card + icon stack: icon sits above the card */}\n <View style={styles.cardStack}>\n {/* Soft-circle icon bubble */}\n {showIcon && (\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.icon.damping).stiffness(anim.confirm.icon.stiffness).mass(anim.confirm.icon.mass ?? 1).delay(anim.confirm.icon.delay ?? 0)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease))}\n style={[styles.iconBubble, {backgroundColor: colors.iconBg}]}\n >\n {brandLogo ? brandLogo : typeof icon === \"string\" ? (\n <Icon name={icon as never} size={'xl'} color={colors.iconFg}/>\n ) : (\n icon\n )}\n </Animated.View>\n )}\n\n {/* Panel */}\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.enter.damping).stiffness(anim.confirm.enter.stiffness).mass(anim.confirm.enter.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {\n backgroundColor: panelBg,\n paddingTop: showIcon ? 48 : 24,\n gap: 10,\n },\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Close button */}\n <Pressable style={styles.closeBtn} onPress={hide} hitSlop={12}>\n <Text style={{fontSize: 18, color: subtextColor}}>✕</Text>\n </Pressable>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.header, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.message, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Children */}\n {children}\n\n {/* Buttons */}\n {renderActions(false)}\n </Animated.View>\n </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: 28,\n },\n sheetOverlay: {\n flex: 1,\n justifyContent: \"flex-end\",\n },\n sheetPanel: {\n // 24 == radii.2xl, top corners only (bottom stays square).\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n paddingHorizontal: 24,\n paddingTop: 10,\n gap: 14,\n // Subtle elevation (upward for a sheet): 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 grabber: {\n width: 40,\n height: 5,\n borderRadius: 999,\n alignSelf: \"center\",\n marginBottom: 6,\n },\n sheetHeader: {\n fontSize: 24,\n fontWeight: \"700\",\n textAlign: \"left\",\n },\n sheetMessage: {\n fontSize: 15,\n lineHeight: 22,\n textAlign: \"left\",\n },\n cardStack: {\n minWidth: 250,\n maxWidth: 380,\n alignItems: \"center\",\n },\n iconBubble: {\n width: 72,\n height: 72,\n borderRadius: 36,\n justifyContent: \"center\",\n alignItems: \"center\",\n zIndex: 2,\n marginBottom: -36,\n elevation: 8,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 4},\n shadowOpacity: 0.15,\n shadowRadius: 8,\n },\n panel: {\n alignSelf: \"stretch\",\n // 20 == radii.xl. Side padding (24) == bottom padding (24) for even rhythm.\n borderRadius: 20,\n paddingHorizontal: 24,\n paddingBottom: 24,\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 alignItems: \"center\",\n },\n closeBtn: {\n position: \"absolute\",\n top: 12,\n right: 14,\n zIndex: 3,\n },\n header: {\n fontSize: 22,\n fontWeight: \"700\",\n textAlign: \"center\",\n marginBottom: 8,\n },\n message: {\n fontSize: 14,\n textAlign: \"center\",\n lineHeight: 20,\n // Tightened so top/bottom whitespace around the actions reads balanced.\n marginBottom: 16,\n },\n buttonRow: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n gap: 12,\n width: \"100%\",\n },\n actionBtn: {\n paddingVertical: 12,\n paddingHorizontal: 24,\n // Pill (== radii.pill). Buttons here are raw Pressables, not kits Button,\n // so the pill comes from borderRadius — the pattern the `buttons` array\n // path (`b.rounded && {borderRadius: 999}`) already uses in this file.\n borderRadius: 999,\n minWidth: 100,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n // Taller buttons for the bottom-sheet action row (pill shape shared).\n actionBtnSheet: {\n paddingVertical: 16,\n borderRadius: 999,\n },\n actionBtnOutlined: {\n backgroundColor: \"transparent\",\n borderWidth: 1.5,\n },\n btnTextPrimary: {\n color: \"#fff\",\n fontWeight: \"600\",\n fontSize: 14,\n },\n btnTextOutlined: {\n fontWeight: \"600\",\n fontSize: 14,\n },\n});\n"],"names":["anim"],"mappings":";;;;;;;;;;;;;;;;AAsBA,SAAS,mBAAmB,OAAA,EAAkB;AAC1C,EAAA,MAAM,CAAC,OAAA,EAAS,UAAU,CAAA,GAAI,KAAA,CAAM,SAAS,OAAO,CAAA;AACpD,EAAA,MAAM,UAAA,GAAa,KAAA,CAAM,MAAA,CAAO,OAAO,CAAA;AACvC,EAAA,KAAA,CAAM,UAAU,MAAM;AAClB,IAAA,UAAA,CAAW,OAAA,GAAU,OAAA;AACrB,IAAA,IAAI,OAAA,aAAoB,IAAI,CAAA;AAAA,EAChC,CAAA,EAAG,CAAC,OAAO,CAAC,CAAA;AAEZ,EAAA,MAAM,kBAAA,GAAqB,KAAA,CAAM,WAAA,CAAY,MAAM;AAC/C,IAAA,IAAI,CAAC,UAAA,CAAW,OAAA,EAAS,UAAA,CAAW,KAAK,CAAA;AAAA,EAC7C,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,OAAO,EAAC,SAAS,kBAAA,EAAkB;AACvC;AAEA,SAAwB,YAAY,KAAA,EAA4B;AAC5D,EAAA,MAAM;AAAA,IACF,OAAA;AAAA,IACA,MAAA;AAAA,IACA,OAAA;AAAA,IACA,IAAA;AAAA,IACA,IAAA,GAAO,WAAA;AAAA,IACP,MAAA;AAAA,IACA,MAAA;AAAA,IACA,WAAA,GAAc,QAAA;AAAA,IACd,WAAA,GAAc,QAAA;AAAA,IACd,OAAA;AAAA,IACA,SAAA;AAAA,IACA,KAAA,EAAO,SAAA;AAAA,IACP,MAAA;AAAA,IACA,OAAA;AAAA,IACA,QAAA;AAAA,IACA,QAAA,GAAW,QAAA;AAAA,IACX,KAAA;AAAA,IACA,YAAA;AAAA,IACA,WAAA;AAAA,IACA;AAAA;AAAA;AAAA;AAAA;AAAA,GAKJ,GAAI,KAAA;AAEJ,EAAA,MAAM,EAAC,YAAA,EAAc,KAAA,EAAK,GAAI,YAAA,EAAa;AAC3C,EAAA,MAAM,MAAA,GAAS,kBAAkB,IAAI,CAAA;AACrC,EAAA,MAAM,YAAY,oBAAA,EAAqB;AACvC,EAAA,MAAM,SAAS,iBAAA,EAAkB;AAEjC,EAAA,MAAM,YAAA,GAAe,aAAa,cAAc,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,aAAa,MAAM,CAAA;AACrC,EAAA,MAAM,YAAA,GAAe,aAAa,gBAAgB,CAAA;AAClD,EAAA,MAAM,YAAA,GAAe,aAAa,UAAU,CAAA;AAE5C,EAAA,MAAM,UAAA,GAAa,aAAa,gBAAgB,CAAA;AAChD,EAAA,MAAM,SAAA,GAAY,IAAA,KAAS,OAAA,GAAU,KAAA,CAAM,OAAO,IAAA,GAAO,IAAA;AAEzD,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,KAAA,IAAS,EAAE,CAAA;AAClD,EAAA,MAAM,oBAAA,GAAuB,gBAAA,CAAiB,YAAA,IAAgB,EAAE,CAAA;AAChE,EAAA,MAAM,mBAAA,GAAsB,gBAAA,CAAiB,WAAA,IAAe,EAAE,CAAA;AAC9D,EAAA,MAAM,iBAAA,GAAoB,gBAAA,CAAiB,SAAA,IAAa,EAAE,CAAA;AAE1D,EAAA,MAAM,EAAC,OAAA,EAAS,kBAAA,KAAsB,kBAAA,CAAmB,CAAC,CAAC,OAAO,CAAA;AAClE,EAAA,IAAI,CAAC,SAAS,OAAO,IAAA;AAErB,EAAA,MAAM,UAAU,QAAA,KAAa,QAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,MAAM,MAAA,GAAS,MAAM,CAAA;AAElC,EAAA,MAAM,OAAA,GAAU,OAAO,QAAA,KAA0B;AAC7C,IAAA,IAAI,SAAA,EAAW;AACX,MAAA,MAAM,QAAA,IAAW;AACjB,MAAA,IAAA,EAAK;AAAA,IACT,CAAA,MAAO;AACH,MAAA,IAAI;AACA,QAAA,QAAA,IAAW;AAAA,MACf,CAAA,SAAE;AACE,QAAA,IAAA,EAAK;AAAA,MACT;AAAA,IACJ;AAAA,EACJ,CAAA;AAEA,EAAA,MAAM,QAAA,GAAW,IAAA,IAAQ,IAAA,IAAQ,SAAA,IAAa,IAAA;AAK9C,EAAA,MAAM,OAAA,GAAU,YAAA;AAMhB,EAAA,MAAM,aAAA,GAAgB,CAAC,OAAA,KAAqB;AACxC,IAAA,IAAI,SAAS,MAAA,EAAQ;AACjB,MAAA,uBACI,GAAA,CAAC,QAAK,KAAA,EAAO,MAAA,CAAO,WACf,QAAA,EAAA,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM;AACnB,QAAA,MAAM,YAAA,GAAe,SAAA,CAAU,CAAA,CAAE,IAAA,IAAQ,IAAI,CAAA,IAAK,MAAA;AAClD,QAAA,MAAM,WAAW,YAAA,CAAa,KAAA;AAC9B,QAAA,uBACI,GAAA;AAAA,UAAC,SAAA;AAAA,UAAA;AAAA,YAEG,UAAU,CAAA,CAAE,QAAA;AAAA,YACZ,KAAA,EAAO;AAAA,cACH,MAAA,CAAO,SAAA;AAAA,cACP,WAAW,MAAA,CAAO,cAAA;AAAA,cAClB,OAAA,IAAW,EAAC,IAAA,EAAM,CAAA,EAAC;AAAA,cACnB,CAAA,CAAE,QAAA,GACI,EAAC,eAAA,EAAiB,aAAA,EAAe,WAAA,EAAa,QAAA,EAAU,WAAA,EAAa,GAAA,EAAG,GACxE,EAAC,eAAA,EAAiB,QAAA,EAAQ;AAAA,cAChC,CAAA,CAAE,OAAA,IAAW,EAAC,YAAA,EAAc,GAAA,EAAG;AAAA,cAC/B,CAAA,CAAE,QAAA,IAAY,EAAC,OAAA,EAAS,GAAA;AAAG,aAC/B;AAAA,YACA,SAAS,MAAM,CAAA,CAAE,OAAA,CAAQ,IAAA,EAAM,QAAQ,MAAM,CAAA;AAAA,YAE7C,QAAA,kBAAA,GAAA,CAAC,QAAK,KAAA,EAAO;AAAA,cACT,KAAA,EAAO,CAAA,CAAE,QAAA,GAAW,QAAA,GAAW,YAAA,CAAa,SAAA;AAAA,cAC5C,UAAA,EAAY,KAAA;AAAA,cACZ,QAAA,EAAU;AAAA,aACd,EACK,YAAE,KAAA,EACP;AAAA,WAAA;AAAA,UApBK;AAAA,SAqBT;AAAA,MAER,CAAC,CAAA,EACL,CAAA;AAAA,IAER;AAEA,IAAA,MAAM,SAAA,mBACF,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEG,KAAA,EAAO,CAAC,MAAA,CAAO,SAAA,EAAW,OAAA,IAAW,MAAA,CAAO,cAAA,EAAgB,EAAC,eAAA,EAAiB,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,GAAE,CAAA;AAAA,QACpG,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,QAE7B,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,cAAA,EAAgB,EAAC,KAAA,EAAO,MAAA,CAAO,SAAA,EAAU,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY;AAAA,OAAA;AAAA,MAJ1E;AAAA,KAKR;AAEJ,IAAA,MAAM,SAAA,GAAY,CAAC,SAAA,mBACf,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QAEG,KAAA,EAAO,CAAC,MAAA,CAAO,SAAA,EAAW,OAAO,iBAAA,EAAmB,OAAA,IAAW,MAAA,CAAO,cAAA,EAAgB,EAAC,WAAA,EAAa,MAAA,CAAO,KAAA,EAAO,IAAA,EAAM,GAAE,CAAA;AAAA,QAC1H,OAAA,EAAS,MAAM,OAAA,CAAQ,MAAM,CAAA;AAAA,QAE7B,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,eAAA,EAAiB,EAAC,KAAA,EAAO,MAAA,CAAO,KAAA,EAAM,CAAA,EAAI,QAAA,EAAA,WAAA,EAAY;AAAA,OAAA;AAAA,MAJvE;AAAA,KAKR,GACA,IAAA;AAEJ,IAAA,2BACK,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EACf,oCAAU,IAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAW;AAAA,KAAA,EAAU,oBAAM,IAAA,CAAA,QAAA,EAAA,EAAG,QAAA,EAAA;AAAA,MAAA,SAAA;AAAA,MAAW;AAAA,KAAA,EAAU,CAAA,EACrE,CAAA;AAAA,EAER,CAAA;AAGA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,uBACI,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAO,IAAA,EAAC,WAAA,EAAW,MAAC,aAAA,EAAc,MAAA,EAAO,cAAA,EAAgB,IAAA,EAC3D,QAAA,EAAA,OAAA,oBACD,IAAA;AAAA,MAAC,QAAA,CAAS,IAAA;AAAA,MAAT;AAAA,QACG,QAAA,EAAU,MAAA,CAAO,QAAA,CAASA,iBAAA,CAAK,MAAM,aAAa,CAAA;AAAA,QAElD,SAAS,OAAA,CAAQ,QAAA,CAAS,kBAAkBA,iBAAA,CAAK,KAAA,CAAM,YAAY,CAAC,CAAA;AAAA,QACpE,KAAA,EAAO,CAAC,MAAA,CAAO,YAAA,EAAc,EAAC,eAAA,EAAiB,UAAA,IAAa,iBAAwB,CAAA;AAAA,QAEpF,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,UAAA,CAAW,YAAA,EAAc,SAAS,IAAA,EAAK,CAAA;AAAA,0BACzD,IAAA;AAAA,YAAC,QAAA,CAAS,IAAA;AAAA,YAAT;AAAA,cAeG,QAAA,EAAU,UAAA,CAAWA,iBAAA,CAAK,KAAA,CAAM,KAAK,CAAA;AAAA,cACrC,OAAA,EAAS,SAAA,CAAUA,iBAAA,CAAK,KAAA,CAAM,cAAc,kBAAkB,CAAA;AAAA,cAC9D,KAAA,EAAO;AAAA,gBACH,MAAA,CAAO,UAAA;AAAA,gBACP,EAAC,eAAA,EAAiB,OAAA,EAAS,aAAA,EAAe,EAAA,GAAK,OAAO,MAAA,EAAM;AAAA,gBAC5D,aAAA;AAAA,gBACA;AAAA,eACJ;AAAA,cAGA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,SAAS,EAAC,eAAA,EAAiB,YAAA,EAAa,CAAA,EAAE,CAAA;AAAA,gBAG9D,MAAA,IAAU,IAAA,oBACP,GAAA,CAAC,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,WAAA,EAAa,EAAC,KAAA,EAAO,SAAA,EAAS,EAAG,mBAA0B,GAC3E,QAAA,EAAA,MAAA,EACL,CAAA;AAAA,gBAIH,OAAA,IAAW,IAAA,oBACR,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,YAAA,EAAc,EAAC,KAAA,EAAO,YAAA,EAAa,GACnD,QAAA,EAAA,OAAA,EACL,CAAA;AAAA,gBAIH,QAAA;AAAA,gBAGA,cAAc,IAAI;AAAA;AAAA;AAAA;AACvB;AAAA;AAAA,KACJ,EAEJ,CAAA;AAAA,EAER;AAGA,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,uBACI,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAO,IAAA,EAAC,WAAA,EAAW,MAAC,aAAA,EAAc,MAAA,EAAO,cAAA,EAAgB,IAAA,EAC3D,QAAA,EAAA,OAAA,oBACD,IAAA;AAAA,MAAC,QAAA,CAAS,IAAA;AAAA,MAAT;AAAA,QACG,QAAA,EAAU,MAAA,CAAO,QAAA,CAASA,iBAAA,CAAK,MAAM,aAAa,CAAA;AAAA,QAElD,SAAS,OAAA,CAAQ,QAAA,CAAS,kBAAkBA,iBAAA,CAAK,OAAA,CAAQ,YAAY,CAAC,CAAA;AAAA,QACtE,KAAA,EAAO,CAAC,MAAA,CAAO,OAAA,EAAS,EAAC,eAAA,EAAiB,UAAA,IAAa,iBAAwB,CAAA;AAAA,QAE/E,QAAA,EAAA;AAAA,0BAAA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,UAAA,CAAW,YAAA,EAAc,SAAS,IAAA,EAAK,CAAA;AAAA,0BACzD,GAAA;AAAA,YAAC,QAAA,CAAS,IAAA;AAAA,YAAT;AAAA,cACG,QAAA,EAAU,OAAO,SAAA,EAAU,CAAE,QAAQA,iBAAA,CAAK,OAAA,CAAQ,QAAQ,OAAO,CAAA,CAAE,UAAUA,iBAAA,CAAK,OAAA,CAAQ,QAAQ,SAAS,CAAA,CAAE,KAAKA,iBAAA,CAAK,OAAA,CAAQ,OAAA,CAAQ,IAAS,CAAA;AAAA,cAChJ,SAAS,OAAA,CAAQ,QAAA,CAASA,iBAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,EAAA,CAAG,OAAO,IAAI,CAAC,CAAA,CAAE,YAAA,CAAa,CAAC,QAAA,KAAa;AAC3G,gBAAA,SAAA;AACA,gBAAA,IAAI,QAAA,EAAU,OAAA,CAAQ,kBAAkB,CAAA,EAAE;AAAA,cAC9C,CAAC,CAAA;AAAA,cACD,KAAA,EAAO;AAAA,gBACH,MAAA,CAAO,KAAA;AAAA,gBACP,EAAC,eAAA,EAAiB,YAAA,EAAc,QAAA,EAAU,GAAA,EAAK,UAAU,GAAA,EAAG;AAAA,gBAC5D,aAAA;AAAA,gBACA;AAAA,eACJ;AAAA,cAEC,QAAA,EAAA;AAAA;AAAA;AACL;AAAA;AAAA,KACJ,EAEJ,CAAA;AAAA,EAER;AAEA,EAAA,uBACI,GAAA,CAAC,KAAA,EAAA,EAAM,OAAA,EAAO,IAAA,EAAC,WAAA,EAAW,MAAC,aAAA,EAAc,MAAA,EAAO,cAAA,EAAgB,IAAA,EAC3D,QAAA,EAAA,OAAA,oBACD,IAAA;AAAA,IAAC,QAAA,CAAS,IAAA;AAAA,IAAT;AAAA,MACG,QAAA,EAAU,MAAA,CAAO,QAAA,CAASA,iBAAA,CAAK,MAAM,aAAa,CAAA;AAAA,MAElD,SAAS,OAAA,CAAQ,QAAA,CAAS,kBAAkBA,iBAAA,CAAK,OAAA,CAAQ,YAAY,CAAC,CAAA;AAAA,MACtE,KAAA,EAAO,CAAC,MAAA,CAAO,OAAA,EAAS,EAAC,eAAA,EAAiB,UAAA,IAAa,iBAAwB,CAAA;AAAA,MAE/E,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,SAAA,EAAA,EAAU,KAAA,EAAO,UAAA,CAAW,YAAA,EAAc,SAAS,IAAA,EAAK,CAAA;AAAA,wBAGzD,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,MAAA,CAAO,SAAA,EAEf,QAAA,EAAA;AAAA,UAAA,QAAA,oBACG,GAAA;AAAA,YAAC,QAAA,CAAS,IAAA;AAAA,YAAT;AAAA,cACG,QAAA,EAAU,MAAA,CAAO,SAAA,EAAU,CAAE,OAAA,CAAQA,iBAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,OAAO,CAAA,CAAE,SAAA,CAAUA,iBAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,SAAS,CAAA,CAAE,IAAA,CAAKA,iBAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,IAAS,CAAA,CAAE,KAAA,CAAMA,iBAAA,CAAK,OAAA,CAAQ,IAAA,CAAK,KAAU,CAAA;AAAA,cAC3K,OAAA,EAAS,OAAA,CAAQ,QAAA,CAASA,iBAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,EAAA,CAAG,MAAA,CAAO,IAAI,CAAC,CAAA;AAAA,cAClF,KAAA,EAAO,CAAC,MAAA,CAAO,UAAA,EAAY,EAAC,eAAA,EAAiB,MAAA,CAAO,QAAO,CAAA;AAAA,cAE1D,QAAA,EAAA,SAAA,GAAY,SAAA,GAAY,OAAO,IAAA,KAAS,2BACrC,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,IAAA,EAAe,IAAA,EAAM,IAAA,EAAM,KAAA,EAAO,MAAA,CAAO,QAAO,CAAA,GAE5D;AAAA;AAAA,WAER;AAAA,0BAIJ,IAAA;AAAA,YAAC,QAAA,CAAS,IAAA;AAAA,YAAT;AAAA,cACG,QAAA,EAAU,OAAO,SAAA,EAAU,CAAE,QAAQA,iBAAA,CAAK,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAE,UAAUA,iBAAA,CAAK,OAAA,CAAQ,MAAM,SAAS,CAAA,CAAE,KAAKA,iBAAA,CAAK,OAAA,CAAQ,KAAA,CAAM,IAAS,CAAA;AAAA,cAC1I,SAAS,OAAA,CAAQ,QAAA,CAASA,iBAAA,CAAK,OAAA,CAAQ,YAAY,CAAA,CAAE,MAAA,CAAO,MAAA,CAAO,EAAA,CAAG,OAAO,IAAI,CAAC,CAAA,CAAE,YAAA,CAAa,CAAC,QAAA,KAAa;AAC3G,gBAAA,SAAA;AACA,gBAAA,IAAI,QAAA,EAAU,OAAA,CAAQ,kBAAkB,CAAA,EAAE;AAAA,cAC9C,CAAC,CAAA;AAAA,cACD,KAAA,EAAO;AAAA,gBACH,MAAA,CAAO,KAAA;AAAA,gBACP;AAAA,kBACI,eAAA,EAAiB,OAAA;AAAA,kBACjB,UAAA,EAAY,WAAW,EAAA,GAAK,EAAA;AAAA,kBAC5B,GAAA,EAAK;AAAA,iBACT;AAAA,gBACA,aAAA;AAAA,gBACA;AAAA,eACJ;AAAA,cAGA,QAAA,EAAA;AAAA,gCAAA,GAAA,CAAC,aAAU,KAAA,EAAO,MAAA,CAAO,UAAU,OAAA,EAAS,IAAA,EAAM,SAAS,EAAA,EACvD,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAC,QAAA,EAAU,EAAA,EAAI,OAAO,YAAA,EAAY,EAAG,oBAAC,CAAA,EACvD,CAAA;AAAA,gBAGC,MAAA,IAAU,IAAA,oBACP,GAAA,CAAC,IAAA,EAAA,EAAK,OAAO,CAAC,MAAA,CAAO,MAAA,EAAQ,EAAC,KAAA,EAAO,SAAA,EAAS,EAAG,mBAA0B,GACtE,QAAA,EAAA,MAAA,EACL,CAAA;AAAA,gBAIH,OAAA,IAAW,IAAA,oBACR,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,CAAC,MAAA,CAAO,OAAA,EAAS,EAAC,KAAA,EAAO,YAAA,EAAa,GAC9C,QAAA,EAAA,OAAA,EACL,CAAA;AAAA,gBAIH,QAAA;AAAA,gBAGA,cAAc,KAAK;AAAA;AAAA;AAAA;AACxB,SAAA,EACJ;AAAA;AAAA;AAAA,GACJ,EAEJ,CAAA;AAER;AAEA,MAAM,MAAA,GAAS,WAAW,MAAA,CAAO;AAAA,EAC7B,OAAA,EAAS;AAAA,IACL,IAAA,EAAM,CAAA;AAAA,IACN,cAAA,EAAgB,QAAA;AAAA,IAChB,UAAA,EAAY,QAAA;AAAA,IACZ,OAAA,EAAS;AAAA,GACb;AAAA,EACA,YAAA,EAAc;AAAA,IACV,IAAA,EAAM,CAAA;AAAA,IACN,cAAA,EAAgB;AAAA,GACpB;AAAA,EACA,UAAA,EAAY;AAAA;AAAA,IAER,mBAAA,EAAqB,EAAA;AAAA,IACrB,oBAAA,EAAsB,EAAA;AAAA,IACtB,iBAAA,EAAmB,EAAA;AAAA,IACnB,UAAA,EAAY,EAAA;AAAA,IACZ,GAAA,EAAK,EAAA;AAAA;AAAA,IAEL,SAAA,EAAW,CAAA;AAAA,IACX,WAAA,EAAa,MAAA;AAAA,IACb,YAAA,EAAc,EAAC,KAAA,EAAO,CAAA,EAAG,QAAQ,EAAA,EAAE;AAAA,IACnC,aAAA,EAAe,IAAA;AAAA,IACf,YAAA,EAAc;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,CAAA;AAAA,IACR,YAAA,EAAc,GAAA;AAAA,IACd,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc;AAAA,GAClB;AAAA,EACA,WAAA,EAAa;AAAA,IACT,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACf;AAAA,EACA,YAAA,EAAc;AAAA,IACV,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,EAAA;AAAA,IACZ,SAAA,EAAW;AAAA,GACf;AAAA,EACA,SAAA,EAAW;AAAA,IACP,QAAA,EAAU,GAAA;AAAA,IACV,QAAA,EAAU,GAAA;AAAA,IACV,UAAA,EAAY;AAAA,GAChB;AAAA,EACA,UAAA,EAAY;AAAA,IACR,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ,EAAA;AAAA,IACR,YAAA,EAAc,EAAA;AAAA,IACd,cAAA,EAAgB,QAAA;AAAA,IAChB,UAAA,EAAY,QAAA;AAAA,IACZ,MAAA,EAAQ,CAAA;AAAA,IACR,YAAA,EAAc,GAAA;AAAA,IACd,SAAA,EAAW,CAAA;AAAA,IACX,WAAA,EAAa,MAAA;AAAA,IACb,YAAA,EAAc,EAAC,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAC;AAAA,IAClC,aAAA,EAAe,IAAA;AAAA,IACf,YAAA,EAAc;AAAA,GAClB;AAAA,EACA,KAAA,EAAO;AAAA,IACH,SAAA,EAAW,SAAA;AAAA;AAAA,IAEX,YAAA,EAAc,EAAA;AAAA,IACd,iBAAA,EAAmB,EAAA;AAAA,IACnB,aAAA,EAAe,EAAA;AAAA;AAAA,IAEf,SAAA,EAAW,CAAA;AAAA,IACX,WAAA,EAAa,MAAA;AAAA,IACb,YAAA,EAAc,EAAC,KAAA,EAAO,CAAA,EAAG,QAAQ,CAAA,EAAC;AAAA,IAClC,aAAA,EAAe,IAAA;AAAA,IACf,YAAA,EAAc,EAAA;AAAA,IACd,UAAA,EAAY;AAAA,GAChB;AAAA,EACA,QAAA,EAAU;AAAA,IACN,QAAA,EAAU,UAAA;AAAA,IACV,GAAA,EAAK,EAAA;AAAA,IACL,KAAA,EAAO,EAAA;AAAA,IACP,MAAA,EAAQ;AAAA,GACZ;AAAA,EACA,MAAA,EAAQ;AAAA,IACJ,QAAA,EAAU,EAAA;AAAA,IACV,UAAA,EAAY,KAAA;AAAA,IACZ,SAAA,EAAW,QAAA;AAAA,IACX,YAAA,EAAc;AAAA,GAClB;AAAA,EACA,OAAA,EAAS;AAAA,IACL,QAAA,EAAU,EAAA;AAAA,IACV,SAAA,EAAW,QAAA;AAAA,IACX,UAAA,EAAY,EAAA;AAAA;AAAA,IAEZ,YAAA,EAAc;AAAA,GAClB;AAAA,EACA,SAAA,EAAW;AAAA,IACP,aAAA,EAAe,KAAA;AAAA,IACf,cAAA,EAAgB,QAAA;AAAA,IAChB,GAAA,EAAK,EAAA;AAAA,IACL,KAAA,EAAO;AAAA,GACX;AAAA,EACA,SAAA,EAAW;AAAA,IACP,eAAA,EAAiB,EAAA;AAAA,IACjB,iBAAA,EAAmB,EAAA;AAAA;AAAA;AAAA;AAAA,IAInB,YAAA,EAAc,GAAA;AAAA,IACd,QAAA,EAAU,GAAA;AAAA,IACV,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB;AAAA,GACpB;AAAA;AAAA,EAEA,cAAA,EAAgB;AAAA,IACZ,eAAA,EAAiB,EAAA;AAAA,IACjB,YAAA,EAAc;AAAA,GAClB;AAAA,EACA,iBAAA,EAAmB;AAAA,IACf,eAAA,EAAiB,aAAA;AAAA,IACjB,WAAA,EAAa;AAAA,GACjB;AAAA,EACA,cAAA,EAAgB;AAAA,IACZ,KAAA,EAAO,MAAA;AAAA,IACP,UAAA,EAAY,KAAA;AAAA,IACZ,QAAA,EAAU;AAAA,GACd;AAAA,EACA,eAAA,EAAiB;AAAA,IACb,UAAA,EAAY,KAAA;AAAA,IACZ,QAAA,EAAU;AAAA;AAElB,CAAC,CAAA;;;;"}
1
+ {"version":3,"file":"index.js","sources":["../../../../../src/components/overlay/ConfirmDialog/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {Modal, Pressable, StyleSheet, View} from \"react-native\";\nimport Animated, {Easing, FadeIn, FadeOut, runOnJS, ZoomIn, ZoomOut} from \"react-native-reanimated\";\nimport {useSafeAreaInsets} from \"react-native-safe-area-context\";\nimport {Icon, Text} from \"../../../_compat\";\nimport type {IConfirmDialogProps} from \"@lmb-it/kitsconcerto-types\";\nimport {useKitsTheme} from \"../../../contexts/Theme\";\nimport {useSeverityColors, useAllSeverityColors} from \"../../../hooks/useSeverityColors\";\nimport {useResolvedStyle} from \"../../../hooks\";\nimport {overlayAnimations as anim, scrimExitDuration} from \"../../../animations\";\nimport {sheetEnter, sheetExit} from \"../sheetMotion\";\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 cancels the panel's exit\n * (reanimated reports `finished=false`, so the unmount is skipped) and the\n * inner re-enters cleanly; `visibleRef` is a second guard for the case where\n * the exit had already completed.\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 KitsConfirm(props: IConfirmDialogProps) {\n const {\n visible,\n header,\n message,\n icon,\n type = \"secondary\",\n accept,\n reject,\n acceptLabel = \"Accept\",\n rejectLabel = \"Reject\",\n buttons,\n defaultUI,\n async: asyncMode,\n onHide,\n closeAriaLabel = 'Close',\n content,\n children,\n position = \"center\",\n style,\n contentStyle,\n headerStyle,\n maskStyle,\n // LEGIT-PLATFORM-ONLY (web): acceptIcon/rejectIcon take PrimeReact\n // icon classes ('pi pi-*') with no native rendering path — use the\n // `buttons` array for custom native actions. acceptClassName/\n // rejectClassName are CSS classes; appendTo is a DOM portal target.\n } = props;\n\n const {resolveToken, theme} = useKitsTheme();\n const colors = useSeverityColors(type);\n const allColors = useAllSeverityColors();\n const insets = useSafeAreaInsets();\n\n const surfaceColor = resolveToken('surface-card');\n const textColor = resolveToken('text');\n const subtextColor = resolveToken('text-secondary');\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\n const {mounted, handleExitFinished} = useOverlayPresence(!!visible);\n if (!mounted) return null;\n\n const isSheet = position === 'bottom';\n const hide = () => onHide?.('hide');\n\n const doClick = async (callback?: () => void) => {\n if (asyncMode) {\n await callback?.();\n hide();\n } else {\n try {\n callback?.();\n } finally {\n hide();\n }\n }\n };\n\n const showIcon = icon != null || brandLogo != null;\n // Panel always uses surface-card. Severity (danger/success/...) only colours\n // the icon bubble and the action button — not the whole panel — otherwise\n // a danger confirm renders as a red wash with the underlying screen\n // bleeding through.\n const panelBg = surfaceColor;\n\n // Shared action row. `stretch` makes each button flex:1 (bottom-sheet,\n // full-width). The default accept/reject pair is ordered accept-first in the\n // centered card but reject-first (Cancel | Confirm) in the sheet, matching\n // the platform-native bottom-sheet convention.\n const renderActions = (stretch: boolean) => {\n if (buttons?.length) {\n return (\n <View style={styles.buttonRow}>\n {buttons.map((b, i) => {\n const buttonColors = allColors[b.type ?? type] ?? colors;\n const btnColor = buttonColors.solid;\n return (\n <Pressable\n key={i}\n disabled={b.disabled}\n style={[\n styles.actionBtn,\n stretch && styles.actionBtnSheet,\n stretch && {flex: 1},\n b.outlined\n ? {backgroundColor: \"transparent\", borderColor: btnColor, borderWidth: 1.5}\n : {backgroundColor: btnColor},\n b.rounded && {borderRadius: 999},\n b.disabled && {opacity: 0.5},\n ]}\n onPress={() => b.onClick(hide, accept, reject)}\n >\n <Text style={{\n color: b.outlined ? btnColor : buttonColors.solidText,\n fontWeight: \"600\",\n fontSize: 14,\n }}>\n {b.title}\n </Text>\n </Pressable>\n );\n })}\n </View>\n );\n }\n\n const acceptBtn = (\n <Pressable\n key=\"accept\"\n style={[styles.actionBtn, stretch && styles.actionBtnSheet, {backgroundColor: colors.solid, flex: 1}]}\n onPress={() => doClick(accept)}\n >\n <Text style={[styles.btnTextPrimary, {color: colors.solidText}]}>{acceptLabel}</Text>\n </Pressable>\n );\n const rejectBtn = !defaultUI ? (\n <Pressable\n key=\"reject\"\n style={[styles.actionBtn, styles.actionBtnOutlined, stretch && styles.actionBtnSheet, {borderColor: colors.solid, flex: 1}]}\n onPress={() => doClick(reject)}\n >\n <Text style={[styles.btnTextOutlined, {color: colors.solid}]}>{rejectLabel}</Text>\n </Pressable>\n ) : null;\n\n return (\n <View style={styles.buttonRow}>\n {stretch ? <>{rejectBtn}{acceptBtn}</> : <>{acceptBtn}{rejectBtn}</>}\n </View>\n );\n };\n\n // ── Bottom sheet ────────────────────────────────────────\n if (isSheet) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the sheet — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.sheet.exitDuration))}\n style={[styles.sheetOverlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n /* ⛔ THE SAME FAULT AS `Dialog`'s SHEET, AND THE SAME ANSWER —\n see `../sheetMotion`. `SlideInDown` takes its travel from\n the window, and inside an RN `Modal` the window it measures\n is not the screen, so the panel is placed at rest on frame\n one. Measured on the Dialog, 30 September 2026; this file\n has the identical shape, so it takes the identical fix\n rather than a second one (§5).\n ⚠️ AND THIS FILE IS NOT YET WHOLE. Its panel is still a\n CHILD of the scrim above, so it still inherits the scrim's\n fade — the defect `Dialog` had corrected on 29 September and\n that was recorded then as this file's own next unit. The\n sheet will now slide AND fade here. That is better than not\n sliding, and it is still not the ruled motion. Not fixed in\n this unit, and not left unsaid. */\n entering={sheetEnter(anim.sheet.enter)}\n exiting={sheetExit(anim.sheet.exitDuration, handleExitFinished)}\n style={[\n styles.sheetPanel,\n {backgroundColor: panelBg, paddingBottom: 24 + insets.bottom},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Grabber */}\n <View style={[styles.grabber, {backgroundColor: grabberColor}]}/>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.sheetHeader, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.sheetMessage, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Injected item / extra content */}\n {children}\n\n {/* Actions */}\n {renderActions(true)}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n // ── Content-only mode (prompt) ──────────────────────────\n if (content) {\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.content.damping).stiffness(anim.confirm.content.stiffness).mass(anim.confirm.content.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {backgroundColor: surfaceColor, minWidth: 250, maxWidth: 380},\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {content as React.ReactNode}\n </Animated.View>\n </Animated.View>\n )}\n </Modal>\n );\n }\n\n return (\n <Modal visible transparent animationType=\"none\" onRequestClose={hide}>\n {visible && (\n <Animated.View\n entering={FadeIn.duration(anim.scrim.enterDuration)}\n /* Contains the centred panel — see `scrimExitDuration`. */\n exiting={FadeOut.duration(scrimExitDuration(anim.confirm.exitDuration))}\n style={[styles.overlay, {backgroundColor: scrimColor}, resolvedMaskStyle as any]}\n >\n <Pressable style={StyleSheet.absoluteFill} onPress={hide}/>\n\n {/* Card + icon stack: icon sits above the card */}\n <View style={styles.cardStack}>\n {/* Soft-circle icon bubble */}\n {showIcon && (\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.icon.damping).stiffness(anim.confirm.icon.stiffness).mass(anim.confirm.icon.mass ?? 1).delay(anim.confirm.icon.delay ?? 0)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease))}\n style={[styles.iconBubble, {backgroundColor: colors.iconBg}]}\n >\n {brandLogo ? brandLogo : typeof icon === \"string\" ? (\n <Icon name={icon as never} size={'xl'} color={colors.iconFg}/>\n ) : (\n icon\n )}\n </Animated.View>\n )}\n\n {/* Panel */}\n <Animated.View\n entering={ZoomIn.springify().damping(anim.confirm.enter.damping).stiffness(anim.confirm.enter.stiffness).mass(anim.confirm.enter.mass ?? 1)}\n exiting={ZoomOut.duration(anim.confirm.exitDuration).easing(Easing.in(Easing.ease)).withCallback((finished) => {\n 'worklet';\n if (finished) runOnJS(handleExitFinished)();\n })}\n style={[\n styles.panel,\n {\n backgroundColor: panelBg,\n paddingTop: showIcon ? 48 : 24,\n gap: 10,\n },\n resolvedStyle as any,\n resolvedContentStyle as any,\n ]}\n >\n {/* Close button */}\n <Pressable style={styles.closeBtn} onPress={hide} hitSlop={12}\n accessibilityRole=\"button\" accessibilityLabel={closeAriaLabel}>\n <Text style={{fontSize: 18, color: subtextColor}}>✕</Text>\n </Pressable>\n\n {/* Header */}\n {header != null && (\n <Text style={[styles.header, {color: textColor}, resolvedHeaderStyle as any]}>\n {header as React.ReactNode}\n </Text>\n )}\n\n {/* Message */}\n {message != null && (\n <Text style={[styles.message, {color: subtextColor}]}>\n {message as React.ReactNode}\n </Text>\n )}\n\n {/* Children */}\n {children}\n\n {/* Buttons */}\n {renderActions(false)}\n </Animated.View>\n </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: 28,\n },\n sheetOverlay: {\n flex: 1,\n justifyContent: \"flex-end\",\n },\n sheetPanel: {\n // 24 == radii.2xl, top corners only (bottom stays square).\n borderTopLeftRadius: 24,\n borderTopRightRadius: 24,\n paddingHorizontal: 24,\n paddingTop: 10,\n gap: 14,\n // Subtle elevation (upward for a sheet): 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 grabber: {\n width: 40,\n height: 5,\n borderRadius: 999,\n alignSelf: \"center\",\n marginBottom: 6,\n },\n sheetHeader: {\n fontSize: 24,\n fontWeight: \"700\",\n textAlign: \"left\",\n },\n sheetMessage: {\n fontSize: 15,\n lineHeight: 22,\n textAlign: \"left\",\n },\n cardStack: {\n minWidth: 250,\n maxWidth: 380,\n alignItems: \"center\",\n },\n iconBubble: {\n width: 72,\n height: 72,\n borderRadius: 36,\n justifyContent: \"center\",\n alignItems: \"center\",\n zIndex: 2,\n marginBottom: -36,\n elevation: 8,\n shadowColor: \"#000\",\n shadowOffset: {width: 0, height: 4},\n shadowOpacity: 0.15,\n shadowRadius: 8,\n },\n panel: {\n alignSelf: \"stretch\",\n // 20 == radii.xl. Side padding (24) == bottom padding (24) for even rhythm.\n borderRadius: 20,\n paddingHorizontal: 24,\n paddingBottom: 24,\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 alignItems: \"center\",\n },\n closeBtn: {\n position: \"absolute\",\n top: 12,\n right: 14,\n zIndex: 3,\n },\n header: {\n fontSize: 22,\n fontWeight: \"700\",\n textAlign: \"center\",\n marginBottom: 8,\n },\n message: {\n fontSize: 14,\n textAlign: \"center\",\n lineHeight: 20,\n // Tightened so top/bottom whitespace around the actions reads balanced.\n marginBottom: 16,\n },\n buttonRow: {\n flexDirection: \"row\",\n justifyContent: \"center\",\n gap: 12,\n width: \"100%\",\n },\n actionBtn: {\n paddingVertical: 12,\n paddingHorizontal: 24,\n // Pill (== radii.pill). Buttons here are raw Pressables, not kits Button,\n // so the pill comes from borderRadius — the pattern the `buttons` array\n // path (`b.rounded && {borderRadius: 999}`) already uses in this file.\n borderRadius: 999,\n minWidth: 100,\n alignItems: \"center\",\n justifyContent: \"center\",\n },\n // Taller buttons for the bottom-sheet action row (pill shape shared).\n actionBtnSheet: {\n paddingVertical: 16,\n borderRadius: 999,\n },\n actionBtnOutlined: {\n backgroundColor: \"transparent\",\n borderWidth: 1.5,\n },\n btnTextPrimary: {\n color: \"#fff\",\n fontWeight: \"600\",\n fontSize: 14,\n },\n btnTextOutlined: {\n fontWeight: \"600\",\n fontSize: 14,\n },\n});\n"],"names":["anim"],"mappings":"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"}
@@ -123,6 +123,7 @@ const PopupProvider = ({ children }) => {
123
123
  message,
124
124
  defaultUI: true,
125
125
  acceptLabel: opts.acceptLabel ?? "OK",
126
+ closeAriaLabel: opts.closeAriaLabel,
126
127
  type: opts.type,
127
128
  icon: opts.icon,
128
129
  headless: opts.headless
@@ -1 +1 @@
1
- {"version":3,"file":"DialogContext.cjs","sources":["../../../src/contexts/DialogContext.tsx"],"sourcesContent":["import React, {createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState} from \"react\";\nimport KitsToast from \"../components/overlay/Toast\";\nimport KitsConfirm from \"../components/overlay/ConfirmDialog\";\nimport KitsDialog from \"../components/overlay/Dialog\";\nimport KitsConfirmPopup from \"../components/overlay/ConfirmPopup\";\nimport type {\n IConfirmDialogProps,\n IConfirmPopupProps,\n IDialogState,\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n} from \"@lmb-it/kitsconcerto-types\";\n\ninterface Ctx {\n confirm: (props: IConfirmDialogProps) => void;\n confirmPopup: (props: IConfirmPopupProps) => void;\n dialog: (props: IDialogState) => void;\n toast: IToastFunction;\n toastDismiss: (position?: ToastPosition) => void;\n toastDismissAll: () => void;\n alert: (message: React.ReactNode, opts?: IConfirmDialogProps) => Promise<void>;\n confirmAsync: (opts: IConfirmDialogProps) => Promise<boolean>;\n prompt: (\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts?: IConfirmDialogProps\n ) => Promise<any>;\n}\n\nconst PopupContext = createContext<Ctx>(null as any);\ntype PendingDialog = {resolve?: (v: any) => void; reject?: (r?: any) => void; owner?: number};\ntype OwnedConfirmation = IConfirmDialogProps & {owner: number};\n\nconst PopupProvider: React.FC<React.PropsWithChildren> = ({children}) => {\n const toastRef = useRef<IKitsToastRef>(null);\n\n // --- Confirm ---\n const [confirmState, setConfirmState] = useState<OwnedConfirmation>({visible: false, owner: 0});\n const confirmPromiseRef = useRef<PendingDialog>({});\n const confirmOwnerRef = useRef(0);\n const notifiedConfirmOwnerRef = useRef(0);\n const activeConfirmActionsRef = useRef(new Map<number, PendingDialog>());\n const promptPromiseRef = useRef<PendingDialog>({});\n const mountedRef = useRef(true);\n\n const openConfirmation = useCallback((props: IConfirmDialogProps, pending: PendingDialog = {}) => {\n if (!mountedRef.current) {pending.resolve?.(false); return;}\n const previous = confirmPromiseRef.current;\n if (previous.owner !== undefined) previous.resolve?.(false);\n const owner = ++confirmOwnerRef.current;\n confirmPromiseRef.current = {...pending, owner};\n setConfirmState({...props, owner});\n }, []);\n\n const hideConfirm = useCallback((owner: number) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner)) return;\n const pending = confirmPromiseRef.current;\n setConfirmState(s => s.owner === owner ? {...s, visible: false} : s);\n // Some renderers close before invoking their explicit action. Settle\n // dismissal at the end of that synchronous action, without a timer.\n // A newer confirmation owns a different promise and is never cleared.\n Promise.resolve().then(() => {\n if (pending.owner !== owner) return;\n pending.resolve?.(false);\n if (confirmPromiseRef.current === pending) confirmPromiseRef.current = {};\n });\n }, []);\n const runConfirmAction = useCallback((owner: number, accepted: boolean, callback?: () => unknown, wait = false) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || confirmPromiseRef.current.owner !== owner) return;\n const pending = confirmPromiseRef.current;\n confirmPromiseRef.current = {};\n if (!wait) {\n pending.resolve?.(accepted);\n try {return callback?.();} finally {hideConfirm(owner);}\n }\n activeConfirmActionsRef.current.set(owner, pending);\n const failed = (error: unknown) => {\n activeConfirmActionsRef.current.delete(owner);\n if (owner !== confirmOwnerRef.current || !mountedRef.current) {\n pending.resolve?.(false);\n return;\n }\n confirmPromiseRef.current = pending;\n return Promise.reject(error);\n };\n try {\n return Promise.resolve(callback?.()).then(() => {\n activeConfirmActionsRef.current.delete(owner);\n pending.resolve?.(accepted);\n hideConfirm(owner);\n }, failed);\n } catch (error) {\n return failed(error);\n }\n }, [hideConfirm]);\n\n // --- ConfirmPopup ---\n const [confirmPopupState, setConfirmPopupState] = useState<IConfirmPopupProps>({visible: false});\n const hideConfirmPopup = useCallback((_result: unknown) => setConfirmPopupState(s => ({...s, visible: false})), []);\n\n // --- Dialog ---\n const [dialogState, setDialogState] = useState<IDialogState>({visible: false});\n // @ts-ignore\n const onCloseRef = useRef<(() => void) | undefined>();\n\n useEffect(() => {\n onCloseRef.current = dialogState.onClose;\n }, [dialogState.onClose]);\n\n const hideDialog = useCallback(() => {\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n setDialogState(s => ({...s, visible: false}));\n onCloseRef.current?.();\n }, []);\n\n // --- Cleanup pending promises on unmount ---\n useLayoutEffect(() => {\n mountedRef.current = true;\n const activeActions = activeConfirmActionsRef.current;\n return () => {\n mountedRef.current = false;\n confirmPromiseRef.current.reject?.();\n confirmPromiseRef.current = {};\n activeActions.forEach(pending => pending.reject?.());\n activeActions.clear();\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n };\n }, []);\n\n // --- Toast API ---\n const toast = useCallback<IToastFunction>((...a) => {\n toastRef.current?.toast(...(a as IToastParams));\n }, []);\n\n const toastDismiss = useCallback((position?: ToastPosition) => {\n toastRef.current?.dismiss?.(position);\n }, []);\n\n const toastDismissAll = useCallback(() => {\n toastRef.current?.dismissAll?.();\n }, []);\n\n // --- Confirm API ---\n const confirm = useCallback((props: IConfirmDialogProps) => {\n openConfirmation({visible: true, acceptLabel: \"Accept\", rejectLabel: \"Reject\", ...props});\n }, [openConfirmation]);\n\n const confirmPopup = useCallback((props: IConfirmPopupProps) => {\n setConfirmPopupState({visible: true, ...props});\n }, []);\n\n const dialog = useCallback(({visible = true, ...props}: IDialogState) => {\n setDialogState({visible, ...props});\n }, []);\n\n const alert = useCallback((message: React.ReactNode, opts: IConfirmDialogProps = {}) =>\n new Promise<void>(resolve => {\n openConfirmation({\n visible: true,\n header: opts.header ?? \"Alert\",\n message,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"OK\",\n type: opts.type,\n icon: opts.icon,\n headless: opts.headless,\n }, {resolve: () => resolve(), reject: () => resolve()});\n }), [openConfirmation]);\n\n const confirmAsync = useCallback((opts: IConfirmDialogProps) =>\n new Promise<boolean>(resolve => {\n openConfirmation({\n visible: true,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"Yes\",\n rejectLabel: opts.rejectLabel ?? \"No\",\n ...opts,\n }, {resolve, reject: () => resolve(false)});\n }), [openConfirmation]);\n\n const prompt = useCallback((\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts: IConfirmDialogProps = {}\n ) =>\n new Promise<any>((resolve, reject) => {\n const pending = {resolve, reject};\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = pending;\n const hide = () => {\n if (promptPromiseRef.current !== pending) return;\n setDialogState(s => ({...s, visible: false}));\n promptPromiseRef.current = {};\n };\n setDialogState({\n visible: true,\n header: opts.header,\n children: render({\n resolve: (v) => {\n resolve(v);\n hide();\n },\n reject: () => {\n reject();\n hide();\n },\n hide,\n }),\n });\n }), []);\n\n // --- Stable context value ---\n const value = useMemo<Ctx>(() => ({\n confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt,\n }), [confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt]);\n const {owner, ...confirmationProps} = confirmState;\n\n return (\n <PopupContext.Provider value={value}>\n {children}\n <KitsToast ref={toastRef}/>\n <KitsConfirm\n key={owner}\n {...confirmationProps}\n onHide={result => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner) || notifiedConfirmOwnerRef.current === owner) return;\n notifiedConfirmOwnerRef.current = owner;\n hideConfirm(owner);\n confirmationProps.onHide?.(result);\n }}\n accept={() => runConfirmAction(owner, true, confirmationProps.accept, confirmationProps.async)}\n reject={() => runConfirmAction(owner, false, confirmationProps.reject, confirmationProps.async)}\n />\n <KitsDialog state={dialogState} onHide={hideDialog}/>\n {/*@ts-ignore*/}\n <KitsConfirmPopup onHide={hideConfirmPopup} {...confirmPopupState} />\n </PopupContext.Provider>\n );\n};\n\nexport const usePopup = () => useContext(PopupContext);\nexport const useDialog = usePopup; // alias\n\nexport default PopupProvider;\n"],"names":["createContext","useRef","useState","useCallback","owner","useEffect","useLayoutEffect","useMemo","jsxs","jsx","KitsToast","KitsConfirm","KitsDialog","KitsConfirmPopup","useContext"],"mappings":";;;;;;;;;;;AA8BA,MAAM,YAAA,GAAeA,oBAAmB,IAAW,CAAA;AAInD,MAAM,aAAA,GAAmD,CAAC,EAAC,QAAA,EAAQ,KAAM;AACrE,EAAA,MAAM,QAAA,GAAWC,aAAsB,IAAI,CAAA;AAG3C,EAAA,MAAM,CAAC,YAAA,EAAc,eAAe,CAAA,GAAIC,cAAA,CAA4B,EAAC,OAAA,EAAS,KAAA,EAAO,KAAA,EAAO,CAAA,EAAE,CAAA;AAC9F,EAAA,MAAM,iBAAA,GAAoBD,YAAA,CAAsB,EAAE,CAAA;AAClD,EAAA,MAAM,eAAA,GAAkBA,aAAO,CAAC,CAAA;AAChC,EAAA,MAAM,uBAAA,GAA0BA,aAAO,CAAC,CAAA;AACxC,EAAA,MAAM,uBAAA,GAA0BA,YAAA,iBAAO,IAAI,GAAA,EAA4B,CAAA;AACvE,EAAA,MAAM,gBAAA,GAAmBA,YAAA,CAAsB,EAAE,CAAA;AACjD,EAAA,MAAM,UAAA,GAAaA,aAAO,IAAI,CAAA;AAE9B,EAAA,MAAM,mBAAmBE,iBAAA,CAAY,CAAC,KAAA,EAA4B,OAAA,GAAyB,EAAC,KAAM;AAC9F,IAAA,IAAI,CAAC,WAAW,OAAA,EAAS;AAAC,MAAA,OAAA,CAAQ,UAAU,KAAK,CAAA;AAAG,MAAA;AAAA,IAAO;AAC3D,IAAA,MAAM,WAAW,iBAAA,CAAkB,OAAA;AACnC,IAAA,IAAI,QAAA,CAAS,KAAA,KAAU,MAAA,EAAW,QAAA,CAAS,UAAU,KAAK,CAAA;AAC1D,IAAA,MAAMC,MAAAA,GAAQ,EAAE,eAAA,CAAgB,OAAA;AAChC,IAAA,iBAAA,CAAkB,OAAA,GAAU,EAAC,GAAG,OAAA,EAAS,OAAAA,MAAAA,EAAK;AAC9C,IAAA,eAAA,CAAgB,EAAC,GAAG,KAAA,EAAO,KAAA,EAAAA,QAAM,CAAA;AAAA,EACrC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,WAAA,GAAcD,iBAAA,CAAY,CAACC,MAAAA,KAAkB;AAC/C,IAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAWA,MAAAA,KAAU,eAAA,CAAgB,WAAW,uBAAA,CAAwB,OAAA,CAAQ,GAAA,CAAIA,MAAK,CAAA,EAAG;AAC5G,IAAA,MAAM,UAAU,iBAAA,CAAkB,OAAA;AAClC,IAAA,eAAA,CAAgB,CAAA,CAAA,KAAK,CAAA,CAAE,KAAA,KAAUA,MAAAA,GAAQ,EAAC,GAAG,CAAA,EAAG,OAAA,EAAS,KAAA,EAAK,GAAI,CAAC,CAAA;AAInE,IAAA,OAAA,CAAQ,OAAA,EAAQ,CAAE,IAAA,CAAK,MAAM;AACzB,MAAA,IAAI,OAAA,CAAQ,UAAUA,MAAAA,EAAO;AAC7B,MAAA,OAAA,CAAQ,UAAU,KAAK,CAAA;AACvB,MAAA,IAAI,iBAAA,CAAkB,OAAA,KAAY,OAAA,EAAS,iBAAA,CAAkB,UAAU,EAAC;AAAA,IAC5E,CAAC,CAAA;AAAA,EACL,CAAA,EAAG,EAAE,CAAA;AACL,EAAA,MAAM,mBAAmBD,iBAAA,CAAY,CAACC,QAAe,QAAA,EAAmB,QAAA,EAA0B,OAAO,KAAA,KAAU;AAC/G,IAAA,IAAI,CAAC,WAAW,OAAA,IAAWA,MAAAA,KAAU,gBAAgB,OAAA,IAAW,iBAAA,CAAkB,OAAA,CAAQ,KAAA,KAAUA,MAAAA,EAAO;AAC3G,IAAA,MAAM,UAAU,iBAAA,CAAkB,OAAA;AAClC,IAAA,iBAAA,CAAkB,UAAU,EAAC;AAC7B,IAAA,IAAI,CAAC,IAAA,EAAM;AACP,MAAA,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAC1B,MAAA,IAAI;AAAC,QAAA,OAAO,QAAA,IAAW;AAAA,MAAE,CAAA,SAAE;AAAS,QAAA,WAAA,CAAYA,MAAK,CAAA;AAAA,MAAE;AAAA,IAC3D;AACA,IAAA,uBAAA,CAAwB,OAAA,CAAQ,GAAA,CAAIA,MAAAA,EAAO,OAAO,CAAA;AAClD,IAAA,MAAM,MAAA,GAAS,CAAC,KAAA,KAAmB;AAC/B,MAAA,uBAAA,CAAwB,OAAA,CAAQ,OAAOA,MAAK,CAAA;AAC5C,MAAA,IAAIA,MAAAA,KAAU,eAAA,CAAgB,OAAA,IAAW,CAAC,WAAW,OAAA,EAAS;AAC1D,QAAA,OAAA,CAAQ,UAAU,KAAK,CAAA;AACvB,QAAA;AAAA,MACJ;AACA,MAAA,iBAAA,CAAkB,OAAA,GAAU,OAAA;AAC5B,MAAA,OAAO,OAAA,CAAQ,OAAO,KAAK,CAAA;AAAA,IAC/B,CAAA;AACA,IAAA,IAAI;AACA,MAAA,OAAO,QAAQ,OAAA,CAAQ,QAAA,IAAY,CAAA,CAAE,KAAK,MAAM;AAC5C,QAAA,uBAAA,CAAwB,OAAA,CAAQ,OAAOA,MAAK,CAAA;AAC5C,QAAA,OAAA,CAAQ,UAAU,QAAQ,CAAA;AAC1B,QAAA,WAAA,CAAYA,MAAK,CAAA;AAAA,MACrB,GAAG,MAAM,CAAA;AAAA,IACb,SAAS,KAAA,EAAO;AACZ,MAAA,OAAO,OAAO,KAAK,CAAA;AAAA,IACvB;AAAA,EACJ,CAAA,EAAG,CAAC,WAAW,CAAC,CAAA;AAGhB,EAAA,MAAM,CAAC,mBAAmB,oBAAoB,CAAA,GAAIF,eAA6B,EAAC,OAAA,EAAS,OAAM,CAAA;AAC/F,EAAA,MAAM,gBAAA,GAAmBC,iBAAA,CAAY,CAAC,OAAA,KAAqB,qBAAqB,CAAA,CAAA,MAAM,EAAC,GAAG,CAAA,EAAG,OAAA,EAAS,KAAA,EAAK,CAAE,CAAA,EAAG,EAAE,CAAA;AAGlH,EAAA,MAAM,CAAC,aAAa,cAAc,CAAA,GAAID,eAAuB,EAAC,OAAA,EAAS,OAAM,CAAA;AAE7E,EAAA,MAAM,aAAaD,YAAA,EAAiC;AAEpD,EAAAI,eAAA,CAAU,MAAM;AACZ,IAAA,UAAA,CAAW,UAAU,WAAA,CAAY,OAAA;AAAA,EACrC,CAAA,EAAG,CAAC,WAAA,CAAY,OAAO,CAAC,CAAA;AAExB,EAAA,MAAM,UAAA,GAAaF,kBAAY,MAAM;AACjC,IAAA,gBAAA,CAAiB,QAAQ,MAAA,IAAS;AAClC,IAAA,gBAAA,CAAiB,UAAU,EAAC;AAC5B,IAAA,cAAA,CAAe,QAAM,EAAC,GAAG,CAAA,EAAG,OAAA,EAAS,OAAK,CAAE,CAAA;AAC5C,IAAA,UAAA,CAAW,OAAA,IAAU;AAAA,EACzB,CAAA,EAAG,EAAE,CAAA;AAGL,EAAAG,qBAAA,CAAgB,MAAM;AAClB,IAAA,UAAA,CAAW,OAAA,GAAU,IAAA;AACrB,IAAA,MAAM,gBAAgB,uBAAA,CAAwB,OAAA;AAC9C,IAAA,OAAO,MAAM;AACT,MAAA,UAAA,CAAW,OAAA,GAAU,KAAA;AACrB,MAAA,iBAAA,CAAkB,QAAQ,MAAA,IAAS;AACnC,MAAA,iBAAA,CAAkB,UAAU,EAAC;AAC7B,MAAA,aAAA,CAAc,OAAA,CAAQ,CAAA,OAAA,KAAW,OAAA,CAAQ,MAAA,IAAU,CAAA;AACnD,MAAA,aAAA,CAAc,KAAA,EAAM;AACpB,MAAA,gBAAA,CAAiB,QAAQ,MAAA,IAAS;AAClC,MAAA,gBAAA,CAAiB,UAAU,EAAC;AAAA,IAChC,CAAA;AAAA,EACJ,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,KAAA,GAAQH,iBAAA,CAA4B,CAAA,GAAI,CAAA,KAAM;AAChD,IAAA,QAAA,CAAS,OAAA,EAAS,KAAA,CAAM,GAAI,CAAkB,CAAA;AAAA,EAClD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,YAAA,GAAeA,iBAAA,CAAY,CAAC,QAAA,KAA6B;AAC3D,IAAA,QAAA,CAAS,OAAA,EAAS,UAAU,QAAQ,CAAA;AAAA,EACxC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,eAAA,GAAkBA,kBAAY,MAAM;AACtC,IAAA,QAAA,CAAS,SAAS,UAAA,IAAa;AAAA,EACnC,CAAA,EAAG,EAAE,CAAA;AAGL,EAAA,MAAM,OAAA,GAAUA,iBAAA,CAAY,CAAC,KAAA,KAA+B;AACxD,IAAA,gBAAA,CAAiB,EAAC,SAAS,IAAA,EAAM,WAAA,EAAa,UAAU,WAAA,EAAa,QAAA,EAAU,GAAG,KAAA,EAAM,CAAA;AAAA,EAC5F,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAErB,EAAA,MAAM,YAAA,GAAeA,iBAAA,CAAY,CAAC,KAAA,KAA8B;AAC5D,IAAA,oBAAA,CAAqB,EAAC,OAAA,EAAS,IAAA,EAAM,GAAG,OAAM,CAAA;AAAA,EAClD,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,MAAA,GAASA,kBAAY,CAAC,EAAC,UAAU,IAAA,EAAM,GAAG,OAAK,KAAoB;AACrE,IAAA,cAAA,CAAe,EAAC,OAAA,EAAS,GAAG,KAAA,EAAM,CAAA;AAAA,EACtC,CAAA,EAAG,EAAE,CAAA;AAEL,EAAA,MAAM,KAAA,GAAQA,kBAAY,CAAC,OAAA,EAA0B,OAA4B,EAAC,KAC9E,IAAI,OAAA,CAAc,CAAA,OAAA,KAAW;AACzB,IAAA,gBAAA,CAAiB;AAAA,MACb,OAAA,EAAS,IAAA;AAAA,MACT,MAAA,EAAQ,KAAK,MAAA,IAAU,OAAA;AAAA,MACvB,OAAA;AAAA,MACA,SAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAa,KAAK,WAAA,IAAe,IAAA;AAAA,MACjC,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,UAAU,IAAA,CAAK;AAAA,KACnB,EAAG,EAAC,OAAA,EAAS,MAAM,OAAA,IAAW,MAAA,EAAQ,MAAM,OAAA,EAAQ,EAAE,CAAA;AAAA,EAC1D,CAAC,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAE1B,EAAA,MAAM,eAAeA,iBAAA,CAAY,CAAC,IAAA,KAC9B,IAAI,QAAiB,CAAA,OAAA,KAAW;AAC5B,IAAA,gBAAA,CAAiB;AAAA,MACb,OAAA,EAAS,IAAA;AAAA,MACT,SAAA,EAAW,IAAA;AAAA,MACX,WAAA,EAAa,KAAK,WAAA,IAAe,KAAA;AAAA,MACjC,WAAA,EAAa,KAAK,WAAA,IAAe,IAAA;AAAA,MACjC,GAAG;AAAA,KACP,EAAG,EAAC,OAAA,EAAS,MAAA,EAAQ,MAAM,OAAA,CAAQ,KAAK,GAAE,CAAA;AAAA,EAC9C,CAAC,CAAA,EAAG,CAAC,gBAAgB,CAAC,CAAA;AAE1B,EAAA,MAAM,MAAA,GAASA,iBAAA,CAAY,CACvB,MAAA,EACA,IAAA,GAA4B,EAAC,KAE7B,IAAI,OAAA,CAAa,CAAC,OAAA,EAAS,MAAA,KAAW;AAClC,IAAA,MAAM,OAAA,GAAU,EAAC,OAAA,EAAS,MAAA,EAAM;AAChC,IAAA,gBAAA,CAAiB,QAAQ,MAAA,IAAS;AAClC,IAAA,gBAAA,CAAiB,OAAA,GAAU,OAAA;AAC3B,IAAA,MAAM,OAAO,MAAM;AACf,MAAA,IAAI,gBAAA,CAAiB,YAAY,OAAA,EAAS;AAC1C,MAAA,cAAA,CAAe,QAAM,EAAC,GAAG,CAAA,EAAG,OAAA,EAAS,OAAK,CAAE,CAAA;AAC5C,MAAA,gBAAA,CAAiB,UAAU,EAAC;AAAA,IAChC,CAAA;AACA,IAAA,cAAA,CAAe;AAAA,MACX,OAAA,EAAS,IAAA;AAAA,MACT,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,UAAU,MAAA,CAAO;AAAA,QACb,OAAA,EAAS,CAAC,CAAA,KAAM;AACZ,UAAA,OAAA,CAAQ,CAAC,CAAA;AACT,UAAA,IAAA,EAAK;AAAA,QACT,CAAA;AAAA,QACA,QAAQ,MAAM;AACV,UAAA,MAAA,EAAO;AACP,UAAA,IAAA,EAAK;AAAA,QACT,CAAA;AAAA,QACA;AAAA,OACH;AAAA,KACJ,CAAA;AAAA,EACL,CAAC,CAAA,EAAG,EAAE,CAAA;AAGV,EAAA,MAAM,KAAA,GAAQI,cAAa,OAAO;AAAA,IAC9B,OAAA;AAAA,IAAS,YAAA;AAAA,IAAc,MAAA;AAAA,IAAQ,KAAA;AAAA,IAAO,YAAA;AAAA,IAAc,eAAA;AAAA,IAAiB,KAAA;AAAA,IAAO,YAAA;AAAA,IAAc;AAAA,GAC9F,CAAA,EAAI,CAAC,OAAA,EAAS,YAAA,EAAc,MAAA,EAAQ,KAAA,EAAO,YAAA,EAAc,eAAA,EAAiB,KAAA,EAAO,YAAA,EAAc,MAAM,CAAC,CAAA;AACtG,EAAA,MAAM,EAAC,KAAA,EAAO,GAAG,iBAAA,EAAiB,GAAI,YAAA;AAEtC,EAAA,uBACIC,eAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAClB,QAAA,EAAA;AAAA,IAAA,QAAA;AAAA,oBACDC,cAAA,CAACC,oBAAA,EAAA,EAAU,GAAA,EAAK,QAAA,EAAS,CAAA;AAAA,oBACzBD,cAAA;AAAA,MAACE,sBAAA;AAAA,MAAA;AAAA,QAEI,GAAG,iBAAA;AAAA,QACJ,QAAQ,CAAA,MAAA,KAAU;AACd,UAAA,IAAI,CAAC,UAAA,CAAW,OAAA,IAAW,KAAA,KAAU,eAAA,CAAgB,OAAA,IAAW,uBAAA,CAAwB,OAAA,CAAQ,GAAA,CAAI,KAAK,CAAA,IAAK,uBAAA,CAAwB,YAAY,KAAA,EAAO;AACzJ,UAAA,uBAAA,CAAwB,OAAA,GAAU,KAAA;AAClC,UAAA,WAAA,CAAY,KAAK,CAAA;AACjB,UAAA,iBAAA,CAAkB,SAAS,MAAM,CAAA;AAAA,QACrC,CAAA;AAAA,QACA,MAAA,EAAQ,MAAM,gBAAA,CAAiB,KAAA,EAAO,MAAM,iBAAA,CAAkB,MAAA,EAAQ,kBAAkB,KAAK,CAAA;AAAA,QAC7F,MAAA,EAAQ,MAAM,gBAAA,CAAiB,KAAA,EAAO,OAAO,iBAAA,CAAkB,MAAA,EAAQ,kBAAkB,KAAK;AAAA,OAAA;AAAA,MATzF;AAAA,KAUT;AAAA,oBACAF,cAAA,CAACG,sBAAA,EAAA,EAAW,KAAA,EAAO,WAAA,EAAa,QAAQ,UAAA,EAAW,CAAA;AAAA,oBAEnDH,cAAA,CAACI,sBAAA,EAAA,EAAiB,MAAA,EAAQ,gBAAA,EAAmB,GAAG,iBAAA,EAAmB;AAAA,GAAA,EACvE,CAAA;AAER;AAEO,MAAM,QAAA,GAAW,MAAMC,gBAAA,CAAW,YAAY;AAC9C,MAAM,SAAA,GAAY;;;;;;"}
1
+ {"version":3,"file":"DialogContext.cjs","sources":["../../../src/contexts/DialogContext.tsx"],"sourcesContent":["import React, {createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState} from \"react\";\nimport KitsToast from \"../components/overlay/Toast\";\nimport KitsConfirm from \"../components/overlay/ConfirmDialog\";\nimport KitsDialog from \"../components/overlay/Dialog\";\nimport KitsConfirmPopup from \"../components/overlay/ConfirmPopup\";\nimport type {\n IConfirmDialogProps,\n IConfirmPopupProps,\n IDialogState,\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n} from \"@lmb-it/kitsconcerto-types\";\n\ninterface Ctx {\n confirm: (props: IConfirmDialogProps) => void;\n confirmPopup: (props: IConfirmPopupProps) => void;\n dialog: (props: IDialogState) => void;\n toast: IToastFunction;\n toastDismiss: (position?: ToastPosition) => void;\n toastDismissAll: () => void;\n alert: (message: React.ReactNode, opts?: IConfirmDialogProps) => Promise<void>;\n confirmAsync: (opts: IConfirmDialogProps) => Promise<boolean>;\n prompt: (\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts?: IConfirmDialogProps\n ) => Promise<any>;\n}\n\nconst PopupContext = createContext<Ctx>(null as any);\ntype PendingDialog = {resolve?: (v: any) => void; reject?: (r?: any) => void; owner?: number};\ntype OwnedConfirmation = IConfirmDialogProps & {owner: number};\n\nconst PopupProvider: React.FC<React.PropsWithChildren> = ({children}) => {\n const toastRef = useRef<IKitsToastRef>(null);\n\n // --- Confirm ---\n const [confirmState, setConfirmState] = useState<OwnedConfirmation>({visible: false, owner: 0});\n const confirmPromiseRef = useRef<PendingDialog>({});\n const confirmOwnerRef = useRef(0);\n const notifiedConfirmOwnerRef = useRef(0);\n const activeConfirmActionsRef = useRef(new Map<number, PendingDialog>());\n const promptPromiseRef = useRef<PendingDialog>({});\n const mountedRef = useRef(true);\n\n const openConfirmation = useCallback((props: IConfirmDialogProps, pending: PendingDialog = {}) => {\n if (!mountedRef.current) {pending.resolve?.(false); return;}\n const previous = confirmPromiseRef.current;\n if (previous.owner !== undefined) previous.resolve?.(false);\n const owner = ++confirmOwnerRef.current;\n confirmPromiseRef.current = {...pending, owner};\n setConfirmState({...props, owner});\n }, []);\n\n const hideConfirm = useCallback((owner: number) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner)) return;\n const pending = confirmPromiseRef.current;\n setConfirmState(s => s.owner === owner ? {...s, visible: false} : s);\n // Some renderers close before invoking their explicit action. Settle\n // dismissal at the end of that synchronous action, without a timer.\n // A newer confirmation owns a different promise and is never cleared.\n Promise.resolve().then(() => {\n if (pending.owner !== owner) return;\n pending.resolve?.(false);\n if (confirmPromiseRef.current === pending) confirmPromiseRef.current = {};\n });\n }, []);\n const runConfirmAction = useCallback((owner: number, accepted: boolean, callback?: () => unknown, wait = false) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || confirmPromiseRef.current.owner !== owner) return;\n const pending = confirmPromiseRef.current;\n confirmPromiseRef.current = {};\n if (!wait) {\n pending.resolve?.(accepted);\n try {return callback?.();} finally {hideConfirm(owner);}\n }\n activeConfirmActionsRef.current.set(owner, pending);\n const failed = (error: unknown) => {\n activeConfirmActionsRef.current.delete(owner);\n if (owner !== confirmOwnerRef.current || !mountedRef.current) {\n pending.resolve?.(false);\n return;\n }\n confirmPromiseRef.current = pending;\n return Promise.reject(error);\n };\n try {\n return Promise.resolve(callback?.()).then(() => {\n activeConfirmActionsRef.current.delete(owner);\n pending.resolve?.(accepted);\n hideConfirm(owner);\n }, failed);\n } catch (error) {\n return failed(error);\n }\n }, [hideConfirm]);\n\n // --- ConfirmPopup ---\n const [confirmPopupState, setConfirmPopupState] = useState<IConfirmPopupProps>({visible: false});\n const hideConfirmPopup = useCallback((_result: unknown) => setConfirmPopupState(s => ({...s, visible: false})), []);\n\n // --- Dialog ---\n const [dialogState, setDialogState] = useState<IDialogState>({visible: false});\n // @ts-ignore\n const onCloseRef = useRef<(() => void) | undefined>();\n\n useEffect(() => {\n onCloseRef.current = dialogState.onClose;\n }, [dialogState.onClose]);\n\n const hideDialog = useCallback(() => {\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n setDialogState(s => ({...s, visible: false}));\n onCloseRef.current?.();\n }, []);\n\n // --- Cleanup pending promises on unmount ---\n useLayoutEffect(() => {\n mountedRef.current = true;\n const activeActions = activeConfirmActionsRef.current;\n return () => {\n mountedRef.current = false;\n confirmPromiseRef.current.reject?.();\n confirmPromiseRef.current = {};\n activeActions.forEach(pending => pending.reject?.());\n activeActions.clear();\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n };\n }, []);\n\n // --- Toast API ---\n const toast = useCallback<IToastFunction>((...a) => {\n toastRef.current?.toast(...(a as IToastParams));\n }, []);\n\n const toastDismiss = useCallback((position?: ToastPosition) => {\n toastRef.current?.dismiss?.(position);\n }, []);\n\n const toastDismissAll = useCallback(() => {\n toastRef.current?.dismissAll?.();\n }, []);\n\n // --- Confirm API ---\n const confirm = useCallback((props: IConfirmDialogProps) => {\n openConfirmation({visible: true, acceptLabel: \"Accept\", rejectLabel: \"Reject\", ...props});\n }, [openConfirmation]);\n\n const confirmPopup = useCallback((props: IConfirmPopupProps) => {\n setConfirmPopupState({visible: true, ...props});\n }, []);\n\n const dialog = useCallback(({visible = true, ...props}: IDialogState) => {\n setDialogState({visible, ...props});\n }, []);\n\n const alert = useCallback((message: React.ReactNode, opts: IConfirmDialogProps = {}) =>\n new Promise<void>(resolve => {\n openConfirmation({\n visible: true,\n header: opts.header ?? \"Alert\",\n message,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"OK\",\n closeAriaLabel: opts.closeAriaLabel,\n type: opts.type,\n icon: opts.icon,\n headless: opts.headless,\n }, {resolve: () => resolve(), reject: () => resolve()});\n }), [openConfirmation]);\n\n const confirmAsync = useCallback((opts: IConfirmDialogProps) =>\n new Promise<boolean>(resolve => {\n openConfirmation({\n visible: true,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"Yes\",\n rejectLabel: opts.rejectLabel ?? \"No\",\n ...opts,\n }, {resolve, reject: () => resolve(false)});\n }), [openConfirmation]);\n\n const prompt = useCallback((\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts: IConfirmDialogProps = {}\n ) =>\n new Promise<any>((resolve, reject) => {\n const pending = {resolve, reject};\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = pending;\n const hide = () => {\n if (promptPromiseRef.current !== pending) return;\n setDialogState(s => ({...s, visible: false}));\n promptPromiseRef.current = {};\n };\n setDialogState({\n visible: true,\n header: opts.header,\n children: render({\n resolve: (v) => {\n resolve(v);\n hide();\n },\n reject: () => {\n reject();\n hide();\n },\n hide,\n }),\n });\n }), []);\n\n // --- Stable context value ---\n const value = useMemo<Ctx>(() => ({\n confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt,\n }), [confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt]);\n const {owner, ...confirmationProps} = confirmState;\n\n return (\n <PopupContext.Provider value={value}>\n {children}\n <KitsToast ref={toastRef}/>\n <KitsConfirm\n key={owner}\n {...confirmationProps}\n onHide={result => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner) || notifiedConfirmOwnerRef.current === owner) return;\n notifiedConfirmOwnerRef.current = owner;\n hideConfirm(owner);\n confirmationProps.onHide?.(result);\n }}\n accept={() => runConfirmAction(owner, true, confirmationProps.accept, confirmationProps.async)}\n reject={() => runConfirmAction(owner, false, confirmationProps.reject, confirmationProps.async)}\n />\n <KitsDialog state={dialogState} onHide={hideDialog}/>\n {/*@ts-ignore*/}\n <KitsConfirmPopup onHide={hideConfirmPopup} {...confirmPopupState} />\n </PopupContext.Provider>\n );\n};\n\nexport const usePopup = () => useContext(PopupContext);\nexport const useDialog = usePopup; // alias\n\nexport default PopupProvider;\n"],"names":["createContext","useRef","useState","useCallback","owner","useEffect","useLayoutEffect","useMemo","jsxs","jsx","KitsToast","KitsConfirm","KitsDialog","KitsConfirmPopup","useContext"],"mappings":"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"}
@@ -119,6 +119,7 @@ const PopupProvider = ({ children }) => {
119
119
  message,
120
120
  defaultUI: true,
121
121
  acceptLabel: opts.acceptLabel ?? "OK",
122
+ closeAriaLabel: opts.closeAriaLabel,
122
123
  type: opts.type,
123
124
  icon: opts.icon,
124
125
  headless: opts.headless
@@ -1 +1 @@
1
- {"version":3,"file":"DialogContext.js","sources":["../../../src/contexts/DialogContext.tsx"],"sourcesContent":["import React, {createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState} from \"react\";\nimport KitsToast from \"../components/overlay/Toast\";\nimport KitsConfirm from \"../components/overlay/ConfirmDialog\";\nimport KitsDialog from \"../components/overlay/Dialog\";\nimport KitsConfirmPopup from \"../components/overlay/ConfirmPopup\";\nimport type {\n IConfirmDialogProps,\n IConfirmPopupProps,\n IDialogState,\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n} from \"@lmb-it/kitsconcerto-types\";\n\ninterface Ctx {\n confirm: (props: IConfirmDialogProps) => void;\n confirmPopup: (props: IConfirmPopupProps) => void;\n dialog: (props: IDialogState) => void;\n toast: IToastFunction;\n toastDismiss: (position?: ToastPosition) => void;\n toastDismissAll: () => void;\n alert: (message: React.ReactNode, opts?: IConfirmDialogProps) => Promise<void>;\n confirmAsync: (opts: IConfirmDialogProps) => Promise<boolean>;\n prompt: (\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts?: IConfirmDialogProps\n ) => Promise<any>;\n}\n\nconst PopupContext = createContext<Ctx>(null as any);\ntype PendingDialog = {resolve?: (v: any) => void; reject?: (r?: any) => void; owner?: number};\ntype OwnedConfirmation = IConfirmDialogProps & {owner: number};\n\nconst PopupProvider: React.FC<React.PropsWithChildren> = ({children}) => {\n const toastRef = useRef<IKitsToastRef>(null);\n\n // --- Confirm ---\n const [confirmState, setConfirmState] = useState<OwnedConfirmation>({visible: false, owner: 0});\n const confirmPromiseRef = useRef<PendingDialog>({});\n const confirmOwnerRef = useRef(0);\n const notifiedConfirmOwnerRef = useRef(0);\n const activeConfirmActionsRef = useRef(new Map<number, PendingDialog>());\n const promptPromiseRef = useRef<PendingDialog>({});\n const mountedRef = useRef(true);\n\n const openConfirmation = useCallback((props: IConfirmDialogProps, pending: PendingDialog = {}) => {\n if (!mountedRef.current) {pending.resolve?.(false); return;}\n const previous = confirmPromiseRef.current;\n if (previous.owner !== undefined) previous.resolve?.(false);\n const owner = ++confirmOwnerRef.current;\n confirmPromiseRef.current = {...pending, owner};\n setConfirmState({...props, owner});\n }, []);\n\n const hideConfirm = useCallback((owner: number) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner)) return;\n const pending = confirmPromiseRef.current;\n setConfirmState(s => s.owner === owner ? {...s, visible: false} : s);\n // Some renderers close before invoking their explicit action. Settle\n // dismissal at the end of that synchronous action, without a timer.\n // A newer confirmation owns a different promise and is never cleared.\n Promise.resolve().then(() => {\n if (pending.owner !== owner) return;\n pending.resolve?.(false);\n if (confirmPromiseRef.current === pending) confirmPromiseRef.current = {};\n });\n }, []);\n const runConfirmAction = useCallback((owner: number, accepted: boolean, callback?: () => unknown, wait = false) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || confirmPromiseRef.current.owner !== owner) return;\n const pending = confirmPromiseRef.current;\n confirmPromiseRef.current = {};\n if (!wait) {\n pending.resolve?.(accepted);\n try {return callback?.();} finally {hideConfirm(owner);}\n }\n activeConfirmActionsRef.current.set(owner, pending);\n const failed = (error: unknown) => {\n activeConfirmActionsRef.current.delete(owner);\n if (owner !== confirmOwnerRef.current || !mountedRef.current) {\n pending.resolve?.(false);\n return;\n }\n confirmPromiseRef.current = pending;\n return Promise.reject(error);\n };\n try {\n return Promise.resolve(callback?.()).then(() => {\n activeConfirmActionsRef.current.delete(owner);\n pending.resolve?.(accepted);\n hideConfirm(owner);\n }, failed);\n } catch (error) {\n return failed(error);\n }\n }, [hideConfirm]);\n\n // --- ConfirmPopup ---\n const [confirmPopupState, setConfirmPopupState] = useState<IConfirmPopupProps>({visible: false});\n const hideConfirmPopup = useCallback((_result: unknown) => setConfirmPopupState(s => ({...s, visible: false})), []);\n\n // --- Dialog ---\n const [dialogState, setDialogState] = useState<IDialogState>({visible: false});\n // @ts-ignore\n const onCloseRef = useRef<(() => void) | undefined>();\n\n useEffect(() => {\n onCloseRef.current = dialogState.onClose;\n }, [dialogState.onClose]);\n\n const hideDialog = useCallback(() => {\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n setDialogState(s => ({...s, visible: false}));\n onCloseRef.current?.();\n }, []);\n\n // --- Cleanup pending promises on unmount ---\n useLayoutEffect(() => {\n mountedRef.current = true;\n const activeActions = activeConfirmActionsRef.current;\n return () => {\n mountedRef.current = false;\n confirmPromiseRef.current.reject?.();\n confirmPromiseRef.current = {};\n activeActions.forEach(pending => pending.reject?.());\n activeActions.clear();\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n };\n }, []);\n\n // --- Toast API ---\n const toast = useCallback<IToastFunction>((...a) => {\n toastRef.current?.toast(...(a as IToastParams));\n }, []);\n\n const toastDismiss = useCallback((position?: ToastPosition) => {\n toastRef.current?.dismiss?.(position);\n }, []);\n\n const toastDismissAll = useCallback(() => {\n toastRef.current?.dismissAll?.();\n }, []);\n\n // --- Confirm API ---\n const confirm = useCallback((props: IConfirmDialogProps) => {\n openConfirmation({visible: true, acceptLabel: \"Accept\", rejectLabel: \"Reject\", ...props});\n }, [openConfirmation]);\n\n const confirmPopup = useCallback((props: IConfirmPopupProps) => {\n setConfirmPopupState({visible: true, ...props});\n }, []);\n\n const dialog = useCallback(({visible = true, ...props}: IDialogState) => {\n setDialogState({visible, ...props});\n }, []);\n\n const alert = useCallback((message: React.ReactNode, opts: IConfirmDialogProps = {}) =>\n new Promise<void>(resolve => {\n openConfirmation({\n visible: true,\n header: opts.header ?? \"Alert\",\n message,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"OK\",\n type: opts.type,\n icon: opts.icon,\n headless: opts.headless,\n }, {resolve: () => resolve(), reject: () => resolve()});\n }), [openConfirmation]);\n\n const confirmAsync = useCallback((opts: IConfirmDialogProps) =>\n new Promise<boolean>(resolve => {\n openConfirmation({\n visible: true,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"Yes\",\n rejectLabel: opts.rejectLabel ?? \"No\",\n ...opts,\n }, {resolve, reject: () => resolve(false)});\n }), [openConfirmation]);\n\n const prompt = useCallback((\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts: IConfirmDialogProps = {}\n ) =>\n new Promise<any>((resolve, reject) => {\n const pending = {resolve, reject};\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = pending;\n const hide = () => {\n if (promptPromiseRef.current !== pending) return;\n setDialogState(s => ({...s, visible: false}));\n promptPromiseRef.current = {};\n };\n setDialogState({\n visible: true,\n header: opts.header,\n children: render({\n resolve: (v) => {\n resolve(v);\n hide();\n },\n reject: () => {\n reject();\n hide();\n },\n hide,\n }),\n });\n }), []);\n\n // --- Stable context value ---\n const value = useMemo<Ctx>(() => ({\n confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt,\n }), [confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt]);\n const {owner, ...confirmationProps} = confirmState;\n\n return (\n <PopupContext.Provider value={value}>\n {children}\n <KitsToast ref={toastRef}/>\n <KitsConfirm\n key={owner}\n {...confirmationProps}\n onHide={result => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner) || notifiedConfirmOwnerRef.current === owner) return;\n notifiedConfirmOwnerRef.current = owner;\n hideConfirm(owner);\n confirmationProps.onHide?.(result);\n }}\n accept={() => runConfirmAction(owner, true, confirmationProps.accept, confirmationProps.async)}\n reject={() => runConfirmAction(owner, false, confirmationProps.reject, confirmationProps.async)}\n />\n <KitsDialog state={dialogState} onHide={hideDialog}/>\n {/*@ts-ignore*/}\n <KitsConfirmPopup onHide={hideConfirmPopup} {...confirmPopupState} />\n </PopupContext.Provider>\n );\n};\n\nexport const usePopup = () => useContext(PopupContext);\nexport const useDialog = usePopup; // alias\n\nexport default PopupProvider;\n"],"names":["owner","KitsDialog"],"mappings":"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"}
1
+ {"version":3,"file":"DialogContext.js","sources":["../../../src/contexts/DialogContext.tsx"],"sourcesContent":["import React, {createContext, useCallback, useContext, useEffect, useLayoutEffect, useMemo, useRef, useState} from \"react\";\nimport KitsToast from \"../components/overlay/Toast\";\nimport KitsConfirm from \"../components/overlay/ConfirmDialog\";\nimport KitsDialog from \"../components/overlay/Dialog\";\nimport KitsConfirmPopup from \"../components/overlay/ConfirmPopup\";\nimport type {\n IConfirmDialogProps,\n IConfirmPopupProps,\n IDialogState,\n IKitsToastRef,\n IToastFunction,\n IToastParams,\n ToastPosition,\n} from \"@lmb-it/kitsconcerto-types\";\n\ninterface Ctx {\n confirm: (props: IConfirmDialogProps) => void;\n confirmPopup: (props: IConfirmPopupProps) => void;\n dialog: (props: IDialogState) => void;\n toast: IToastFunction;\n toastDismiss: (position?: ToastPosition) => void;\n toastDismissAll: () => void;\n alert: (message: React.ReactNode, opts?: IConfirmDialogProps) => Promise<void>;\n confirmAsync: (opts: IConfirmDialogProps) => Promise<boolean>;\n prompt: (\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts?: IConfirmDialogProps\n ) => Promise<any>;\n}\n\nconst PopupContext = createContext<Ctx>(null as any);\ntype PendingDialog = {resolve?: (v: any) => void; reject?: (r?: any) => void; owner?: number};\ntype OwnedConfirmation = IConfirmDialogProps & {owner: number};\n\nconst PopupProvider: React.FC<React.PropsWithChildren> = ({children}) => {\n const toastRef = useRef<IKitsToastRef>(null);\n\n // --- Confirm ---\n const [confirmState, setConfirmState] = useState<OwnedConfirmation>({visible: false, owner: 0});\n const confirmPromiseRef = useRef<PendingDialog>({});\n const confirmOwnerRef = useRef(0);\n const notifiedConfirmOwnerRef = useRef(0);\n const activeConfirmActionsRef = useRef(new Map<number, PendingDialog>());\n const promptPromiseRef = useRef<PendingDialog>({});\n const mountedRef = useRef(true);\n\n const openConfirmation = useCallback((props: IConfirmDialogProps, pending: PendingDialog = {}) => {\n if (!mountedRef.current) {pending.resolve?.(false); return;}\n const previous = confirmPromiseRef.current;\n if (previous.owner !== undefined) previous.resolve?.(false);\n const owner = ++confirmOwnerRef.current;\n confirmPromiseRef.current = {...pending, owner};\n setConfirmState({...props, owner});\n }, []);\n\n const hideConfirm = useCallback((owner: number) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner)) return;\n const pending = confirmPromiseRef.current;\n setConfirmState(s => s.owner === owner ? {...s, visible: false} : s);\n // Some renderers close before invoking their explicit action. Settle\n // dismissal at the end of that synchronous action, without a timer.\n // A newer confirmation owns a different promise and is never cleared.\n Promise.resolve().then(() => {\n if (pending.owner !== owner) return;\n pending.resolve?.(false);\n if (confirmPromiseRef.current === pending) confirmPromiseRef.current = {};\n });\n }, []);\n const runConfirmAction = useCallback((owner: number, accepted: boolean, callback?: () => unknown, wait = false) => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || confirmPromiseRef.current.owner !== owner) return;\n const pending = confirmPromiseRef.current;\n confirmPromiseRef.current = {};\n if (!wait) {\n pending.resolve?.(accepted);\n try {return callback?.();} finally {hideConfirm(owner);}\n }\n activeConfirmActionsRef.current.set(owner, pending);\n const failed = (error: unknown) => {\n activeConfirmActionsRef.current.delete(owner);\n if (owner !== confirmOwnerRef.current || !mountedRef.current) {\n pending.resolve?.(false);\n return;\n }\n confirmPromiseRef.current = pending;\n return Promise.reject(error);\n };\n try {\n return Promise.resolve(callback?.()).then(() => {\n activeConfirmActionsRef.current.delete(owner);\n pending.resolve?.(accepted);\n hideConfirm(owner);\n }, failed);\n } catch (error) {\n return failed(error);\n }\n }, [hideConfirm]);\n\n // --- ConfirmPopup ---\n const [confirmPopupState, setConfirmPopupState] = useState<IConfirmPopupProps>({visible: false});\n const hideConfirmPopup = useCallback((_result: unknown) => setConfirmPopupState(s => ({...s, visible: false})), []);\n\n // --- Dialog ---\n const [dialogState, setDialogState] = useState<IDialogState>({visible: false});\n // @ts-ignore\n const onCloseRef = useRef<(() => void) | undefined>();\n\n useEffect(() => {\n onCloseRef.current = dialogState.onClose;\n }, [dialogState.onClose]);\n\n const hideDialog = useCallback(() => {\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n setDialogState(s => ({...s, visible: false}));\n onCloseRef.current?.();\n }, []);\n\n // --- Cleanup pending promises on unmount ---\n useLayoutEffect(() => {\n mountedRef.current = true;\n const activeActions = activeConfirmActionsRef.current;\n return () => {\n mountedRef.current = false;\n confirmPromiseRef.current.reject?.();\n confirmPromiseRef.current = {};\n activeActions.forEach(pending => pending.reject?.());\n activeActions.clear();\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = {};\n };\n }, []);\n\n // --- Toast API ---\n const toast = useCallback<IToastFunction>((...a) => {\n toastRef.current?.toast(...(a as IToastParams));\n }, []);\n\n const toastDismiss = useCallback((position?: ToastPosition) => {\n toastRef.current?.dismiss?.(position);\n }, []);\n\n const toastDismissAll = useCallback(() => {\n toastRef.current?.dismissAll?.();\n }, []);\n\n // --- Confirm API ---\n const confirm = useCallback((props: IConfirmDialogProps) => {\n openConfirmation({visible: true, acceptLabel: \"Accept\", rejectLabel: \"Reject\", ...props});\n }, [openConfirmation]);\n\n const confirmPopup = useCallback((props: IConfirmPopupProps) => {\n setConfirmPopupState({visible: true, ...props});\n }, []);\n\n const dialog = useCallback(({visible = true, ...props}: IDialogState) => {\n setDialogState({visible, ...props});\n }, []);\n\n const alert = useCallback((message: React.ReactNode, opts: IConfirmDialogProps = {}) =>\n new Promise<void>(resolve => {\n openConfirmation({\n visible: true,\n header: opts.header ?? \"Alert\",\n message,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"OK\",\n closeAriaLabel: opts.closeAriaLabel,\n type: opts.type,\n icon: opts.icon,\n headless: opts.headless,\n }, {resolve: () => resolve(), reject: () => resolve()});\n }), [openConfirmation]);\n\n const confirmAsync = useCallback((opts: IConfirmDialogProps) =>\n new Promise<boolean>(resolve => {\n openConfirmation({\n visible: true,\n defaultUI: true,\n acceptLabel: opts.acceptLabel ?? \"Yes\",\n rejectLabel: opts.rejectLabel ?? \"No\",\n ...opts,\n }, {resolve, reject: () => resolve(false)});\n }), [openConfirmation]);\n\n const prompt = useCallback((\n render: (api: { resolve: (v: any) => void; reject: () => void; hide: () => void }) => React.ReactNode,\n opts: IConfirmDialogProps = {}\n ) =>\n new Promise<any>((resolve, reject) => {\n const pending = {resolve, reject};\n promptPromiseRef.current.reject?.();\n promptPromiseRef.current = pending;\n const hide = () => {\n if (promptPromiseRef.current !== pending) return;\n setDialogState(s => ({...s, visible: false}));\n promptPromiseRef.current = {};\n };\n setDialogState({\n visible: true,\n header: opts.header,\n children: render({\n resolve: (v) => {\n resolve(v);\n hide();\n },\n reject: () => {\n reject();\n hide();\n },\n hide,\n }),\n });\n }), []);\n\n // --- Stable context value ---\n const value = useMemo<Ctx>(() => ({\n confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt,\n }), [confirm, confirmPopup, dialog, toast, toastDismiss, toastDismissAll, alert, confirmAsync, prompt]);\n const {owner, ...confirmationProps} = confirmState;\n\n return (\n <PopupContext.Provider value={value}>\n {children}\n <KitsToast ref={toastRef}/>\n <KitsConfirm\n key={owner}\n {...confirmationProps}\n onHide={result => {\n if (!mountedRef.current || owner !== confirmOwnerRef.current || activeConfirmActionsRef.current.has(owner) || notifiedConfirmOwnerRef.current === owner) return;\n notifiedConfirmOwnerRef.current = owner;\n hideConfirm(owner);\n confirmationProps.onHide?.(result);\n }}\n accept={() => runConfirmAction(owner, true, confirmationProps.accept, confirmationProps.async)}\n reject={() => runConfirmAction(owner, false, confirmationProps.reject, confirmationProps.async)}\n />\n <KitsDialog state={dialogState} onHide={hideDialog}/>\n {/*@ts-ignore*/}\n <KitsConfirmPopup onHide={hideConfirmPopup} {...confirmPopupState} />\n </PopupContext.Provider>\n );\n};\n\nexport const usePopup = () => useContext(PopupContext);\nexport const useDialog = usePopup; // alias\n\nexport default PopupProvider;\n"],"names":["owner","KitsDialog"],"mappings":"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"}
package/index.d.ts CHANGED
@@ -3731,7 +3731,7 @@ export type AvatarShape = "circle" | "rounded";
3731
3731
  /** Presence indicator. @default "none" */
3732
3732
  export type AvatarStatus = "none" | "online" | "offline" | "away" | "busy";
3733
3733
  export interface IAvatarProps extends IStyleClasses {
3734
- /** Image URI. When present it wins over initials/icon. */
3734
+ /** Image URI. Existing initials/icon remain visible until load, and after an image error. */
3735
3735
  src?: string;
3736
3736
  /** Full name — initials are derived from it ("Fouad K" → "FK"). */
3737
3737
  name?: string;
@@ -7971,6 +7971,8 @@ export interface IDialogButton {
7971
7971
  }
7972
7972
  export interface IConfirmDialogProps extends ConfirmDialogProps {
7973
7973
  visible?: boolean;
7974
+ /** Accessible close-button name; defaults to "Close". */
7975
+ closeAriaLabel?: string;
7974
7976
  defaultUI?: boolean;
7975
7977
  headless?: boolean;
7976
7978
  type?: Types;
@@ -8817,7 +8819,7 @@ declare const Text: React__default.FC<ITextComponent>;
8817
8819
 
8818
8820
  declare const Heading: React__default.FC<IHeadingComponent>;
8819
8821
 
8820
- declare const Image: ({ style, ref, src, ...props }: IImageComponent) => React__default.JSX.Element;
8822
+ declare const Image: ({ ref, src, ...props }: IImageComponent) => React__default.JSX.Element;
8821
8823
 
8822
8824
  declare function Icon({ name, size, color, strokeWidth, ...rest }: IIconProps): React__default.JSX.Element;
8823
8825
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lmb-it/kitsconcerto-native",
3
- "version": "0.1.296",
3
+ "version": "0.1.298",
4
4
  "description": "KitsConcerto — Native (React Native) UI components",
5
5
  "main": "index.cjs",
6
6
  "module": "index.js",