@lmb-it/kitsconcerto-native 0.1.256 → 0.1.258
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/apps/mobile/src/Core/Dropdown/index.cjs +64 -23
- package/apps/mobile/src/Core/Dropdown/index.cjs.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.js +66 -25
- package/apps/mobile/src/Core/Dropdown/index.js.map +1 -1
- package/apps/mobile/src/Core/Dropdown/panelGeometry.cjs +43 -0
- package/apps/mobile/src/Core/Dropdown/panelGeometry.cjs.map +1 -0
- package/apps/mobile/src/Core/Dropdown/panelGeometry.js +38 -0
- package/apps/mobile/src/Core/Dropdown/panelGeometry.js.map +1 -0
- package/apps/mobile/src/Core/MultiSelect/index.cjs +21 -2
- package/apps/mobile/src/Core/MultiSelect/index.cjs.map +1 -1
- package/apps/mobile/src/Core/MultiSelect/index.js +21 -2
- package/apps/mobile/src/Core/MultiSelect/index.js.map +1 -1
- package/form/controls/Checkbox/checkbox.cjs +1 -1
- package/form/controls/Checkbox/checkbox.cjs.map +1 -1
- package/form/controls/Checkbox/checkbox.js +1 -1
- package/form/controls/Checkbox/checkbox.js.map +1 -1
- package/form/inputs/InputTextarea/index.cjs +6 -1
- package/form/inputs/InputTextarea/index.cjs.map +1 -1
- package/form/inputs/InputTextarea/index.js +6 -1
- package/form/inputs/InputTextarea/index.js.map +1 -1
- package/form/inputs/Slider/index.cjs +6 -3
- package/form/inputs/Slider/index.cjs.map +1 -1
- package/form/inputs/Slider/index.js +6 -3
- package/form/inputs/Slider/index.js.map +1 -1
- package/form/selects/Dropdown/index.cjs +5 -1
- package/form/selects/Dropdown/index.cjs.map +1 -1
- package/form/selects/Dropdown/index.js +5 -1
- package/form/selects/Dropdown/index.js.map +1 -1
- package/form/selects/ListBox/index.cjs +6 -2
- package/form/selects/ListBox/index.cjs.map +1 -1
- package/form/selects/ListBox/index.js +6 -2
- package/form/selects/ListBox/index.js.map +1 -1
- package/form/selects/MultiSelect/index.cjs +5 -1
- package/form/selects/MultiSelect/index.cjs.map +1 -1
- package/form/selects/MultiSelect/index.js +5 -1
- package/form/selects/MultiSelect/index.js.map +1 -1
- package/index.d.ts +2 -0
- package/locale/ar.json.cjs +3 -0
- package/locale/ar.json.cjs.map +1 -1
- package/locale/ar.json.js +3 -1
- package/locale/ar.json.js.map +1 -1
- package/locale/en.json.cjs +3 -0
- package/locale/en.json.cjs.map +1 -1
- package/locale/en.json.js +3 -1
- package/locale/en.json.js.map +1 -1
- package/package.json +1 -1
- package/packages/types/src/Theme/defaultTheme.cjs +7 -1
- package/packages/types/src/Theme/defaultTheme.cjs.map +1 -1
- package/packages/types/src/Theme/defaultTheme.js +7 -1
- package/packages/types/src/Theme/defaultTheme.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../../../../../apps/mobile/src/Core/MultiSelect/index.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n Modal,\n FlatList,\n TextInput,\n StyleSheet,\n Pressable,\n ActivityIndicator,\n Dimensions,\n} from 'react-native';\nimport { resolveThemeTokenForNative } from '../../Factory/helpers/style';\n\nexport type MultiSelectChangeEvent<T> = React.ChangeEvent<{\n value: T[];\n}>;\n\nexport interface MultiSelectProps<T> {\n value?: T[] | null;\n onChange?: (e: MultiSelectChangeEvent<T>, selectedItems: T[]) => void;\n isModal?: boolean;\n\n options?: T[];\n\n optionLabel?: keyof T | string;\n optionValue?: keyof T | string;\n\n optionGroupLabel?: keyof T | string;\n optionGroupChildren?: keyof T | string;\n\n placeholder?: string;\n disabled?: boolean;\n loading?: boolean;\n filter?: boolean;\n emptyFilterMessage?: string;\n\n display?: 'comma' | 'chip';\n maxSelectedLabels?: number;\n\n itemTemplate?: (item: T) => React.ReactElement;\n selectedItemTemplate?: (item: T) => React.ReactElement;\n style?: import('react-native').ViewStyle;\n}\n\nconst t = resolveThemeTokenForNative;\n\nconst TEXT_STYLE_KEYS = new Set([\n 'fontSize', 'fontFamily', 'fontWeight', 'fontStyle',\n 'color', 'letterSpacing', 'lineHeight', 'textAlign',\n 'textDecorationLine', 'textTransform',\n]);\n\nfunction splitStyle(combined?: any): { viewStyle?: any; textStyle?: any } {\n if (!combined) return {};\n const view: Record<string, any> = {};\n const text: Record<string, any> = {};\n for (const [k, v] of Object.entries(combined)) {\n if (TEXT_STYLE_KEYS.has(k)) text[k] = v;\n else view[k] = v;\n }\n return {\n viewStyle: Object.keys(view).length ? view : undefined,\n textStyle: Object.keys(text).length ? text : undefined,\n };\n}\n\nexport default function MultiSelect<T>(props: MultiSelectProps<T>) {\n const {\n value,\n onChange,\n options = [],\n optionLabel,\n optionValue,\n optionGroupLabel,\n optionGroupChildren,\n isModal = false,\n placeholder = 'Select',\n disabled,\n loading,\n filter,\n emptyFilterMessage = 'No results found',\n display = 'chip',\n maxSelectedLabels = 10,\n itemTemplate,\n selectedItemTemplate,\n style: externalStyle,\n } = props;\n\n const triggerRef = useRef<View>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [triggerLayout, setTriggerLayout] = useState<{\n x: number; y: number; width: number; height: number;\n } | null>(null);\n\n const close = () => setOpen(false);\n\n const toggleOpen = () => {\n if (disabled) return;\n if (open) {\n setOpen(false);\n return;\n }\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setTriggerLayout({ x, y, width, height });\n setOpen(true);\n });\n };\n\n const { viewStyle: externalViewStyle, textStyle: externalTextStyle } = splitStyle(externalStyle);\n\n const colors = {\n border: t('border') || t('gray.300'),\n borderFocus: t('primary'),\n bg: t('surface-card') || '#fff',\n disabledBg: t('surface-ground') || t('gray.100'),\n placeholder: t('text-secondary') || t('gray.400'),\n text: t('text') || t('gray.800'),\n textSecondary: t('text-secondary') || t('gray.500'),\n chipBg: t('primary.100') || t('indigo.100'),\n chipText: t('primary.700') || t('indigo.700'),\n chipRemove: t('primary.500') || t('indigo.500'),\n chipMoreBg: t('surface-ground') || t('gray.100'),\n headerBorder: t('border') || t('gray.200'),\n groupBg: t('surface-ground') || t('gray.50'),\n groupBorder: t('border') || t('gray.200'),\n itemBorder: t('surface-ground') || t('gray.100'),\n itemSelectedBg: t('highlight-bg') || t('indigo.50'),\n itemSelectedText: t('primary.700') || t('indigo.700'),\n checkboxBorder: t('border') || t('gray.300'),\n checkboxChecked: t('primary'),\n invalidBorder: t('danger') || t('red.500'),\n searchBg: t('surface-ground') || t('gray.50'),\n };\n\n const getValue = (item: T, key?: keyof T | string) =>\n key ? (item as any)[key] : item;\n\n const getLabel = (item: T, key?: keyof T | string) =>\n String(key ? (item as any)[key] : item);\n\n const selectedValues = Array.isArray(value) ? value : [];\n\n // Build display items: flat list with optional group headers\n const displayItems: { type: 'group' | 'item'; data: any }[] = useMemo(() => {\n if (optionGroupLabel && optionGroupChildren) {\n const result: { type: 'group' | 'item'; data: any }[] = [];\n options.forEach((group: any) => {\n result.push({ type: 'group', data: group });\n const children = group[optionGroupChildren] ?? [];\n children.forEach((child: any) => result.push({ type: 'item', data: child }));\n });\n return result;\n }\n return options.map((item) => ({ type: 'item' as const, data: item }));\n }, [options, optionGroupLabel, optionGroupChildren]);\n\n const filtered = useMemo(() => {\n if (!filter || !query) return displayItems;\n return displayItems.filter((entry) => {\n if (entry.type === 'group') return true; // keep group headers\n return getLabel(entry.data, optionLabel)\n .toLowerCase()\n .includes(query.toLowerCase());\n });\n }, [query, displayItems]);\n\n const isSelected = (item: T) =>\n selectedValues.some(\n (v) => getValue(v, optionValue) === getValue(item, optionValue),\n );\n\n const toggleItem = (item: T) => {\n const exists = isSelected(item);\n const next = exists\n ? selectedValues.filter(\n (v) => getValue(v, optionValue) !== getValue(item, optionValue),\n )\n : [...selectedValues, item];\n\n const syntheticEvent = {\n target: { value: next },\n } as React.ChangeEvent<any>;\n\n onChange?.(syntheticEvent, next);\n };\n\n const removeItem = (item: T) => {\n const next = selectedValues.filter(\n (v) => getValue(v, optionValue) !== getValue(item, optionValue),\n );\n const syntheticEvent = {\n target: { value: next },\n } as React.ChangeEvent<any>;\n onChange?.(syntheticEvent, next);\n };\n\n const renderCheckbox = (checked: boolean) => (\n <View\n style={[\n styles.checkbox,\n { borderColor: colors.checkboxBorder, backgroundColor: colors.bg },\n checked && { backgroundColor: colors.checkboxChecked, borderColor: colors.checkboxChecked },\n ]}\n >\n {checked && <Text style={styles.checkmark}>✓</Text>}\n </View>\n );\n\n const renderListContent = () => {\n if (loading) {\n return (\n <View style={styles.loadingContainer}>\n <ActivityIndicator size=\"small\" color={colors.checkboxChecked} />\n <Text style={[styles.loadingText, { color: colors.placeholder }]}>Loading...</Text>\n </View>\n );\n }\n\n const itemsOnly = filtered.filter((e) => e.type === 'item');\n if (itemsOnly.length === 0) {\n return (\n <View style={styles.emptyContainer}>\n <Text style={[styles.emptyText, { color: colors.placeholder }]}>{emptyFilterMessage}</Text>\n </View>\n );\n }\n\n return (\n <FlatList\n data={filtered}\n keyExtractor={(entry, i) =>\n entry.type === 'group' ? `group-${i}` : `item-${i}`\n }\n keyboardShouldPersistTaps=\"handled\"\n renderItem={({ item: entry }) => {\n if (entry.type === 'group') {\n return (\n <View style={[styles.groupHeader, { backgroundColor: colors.groupBg, borderBottomColor: colors.groupBorder }]}>\n <Text style={[styles.groupHeaderText, { color: colors.textSecondary }]}>\n {getLabel(entry.data, optionGroupLabel)}\n </Text>\n </View>\n );\n }\n const checked = isSelected(entry.data);\n return (\n <TouchableOpacity\n onPress={() => toggleItem(entry.data)}\n style={[\n styles.item,\n { borderBottomColor: colors.itemBorder },\n checked && { backgroundColor: colors.itemSelectedBg },\n ]}\n activeOpacity={0.7}\n >\n {renderCheckbox(checked)}\n {itemTemplate ? (\n itemTemplate(entry.data)\n ) : (\n <Text style={[\n styles.itemText,\n { color: colors.text },\n checked && { color: colors.itemSelectedText, fontWeight: '500' },\n ]}>\n {getLabel(entry.data, optionLabel)}\n </Text>\n )}\n </TouchableOpacity>\n );\n }}\n />\n );\n };\n\n const renderSelected = () => {\n if (!selectedValues.length) {\n return <Text style={[styles.placeholder, { color: colors.placeholder }, externalTextStyle]}>{placeholder}</Text>;\n }\n\n if (display === 'chip') {\n const visibleItems = selectedValues.slice(0, maxSelectedLabels);\n const remaining = selectedValues.length - maxSelectedLabels;\n return (\n <View style={styles.chips}>\n {visibleItems.map((item, i) =>\n selectedItemTemplate ? (\n <React.Fragment key={i}>{selectedItemTemplate(item)}</React.Fragment>\n ) : (\n <View key={i} style={[styles.chip, { backgroundColor: colors.chipBg }]}>\n <Text style={[styles.chipText, { color: colors.chipText }]}>{getLabel(item, optionLabel)}</Text>\n <TouchableOpacity\n onPress={() => removeItem(item)}\n hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n >\n <Text style={[styles.chipRemove, { color: colors.chipRemove }]}>✕</Text>\n </TouchableOpacity>\n </View>\n ),\n )}\n {remaining > 0 && (\n <View style={[styles.chipMore, { backgroundColor: colors.chipMoreBg }]}>\n <Text style={[styles.chipMoreText, { color: colors.textSecondary }]}>+{remaining}</Text>\n </View>\n )}\n </View>\n );\n }\n\n return (\n <Text numberOfLines={1} style={[styles.commaText, { color: colors.text }, externalTextStyle]}>\n {selectedValues\n .slice(0, maxSelectedLabels)\n .map((v) => getLabel(v, optionLabel))\n .join(', ')}\n </Text>\n );\n };\n\n const panelContent = (\n <View style={{ flex: 1 }}>\n {/* Header */}\n <View style={[styles.panelHeader, { borderBottomColor: colors.headerBorder }]}>\n <Text style={[styles.panelHeaderText, { color: colors.textSecondary }]}>\n {selectedValues.length} item{selectedValues.length !== 1 ? 's' : ''} selected\n </Text>\n <TouchableOpacity onPress={() => setOpen(false)}>\n <Text style={[styles.panelCloseText, { color: colors.placeholder }]}>✕</Text>\n </TouchableOpacity>\n </View>\n\n {/* Search */}\n {filter && (\n <View style={[styles.searchContainer, { borderColor: colors.border, backgroundColor: colors.searchBg }]}>\n <Text style={styles.searchIcon}>🔍</Text>\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder=\"Search...\"\n style={[styles.searchInput, { color: colors.text }]}\n placeholderTextColor={colors.placeholder}\n />\n </View>\n )}\n\n {/* List */}\n {renderListContent()}\n </View>\n );\n\n return (\n <View style={{ width: '100%' }}>\n {/* Input trigger */}\n <TouchableOpacity\n ref={triggerRef as any}\n activeOpacity={0.8}\n disabled={disabled}\n onPress={toggleOpen}\n style={[\n styles.input,\n { borderColor: colors.border, backgroundColor: colors.bg },\n disabled && { backgroundColor: colors.disabledBg, opacity: 0.6 },\n open && { borderColor: colors.borderFocus },\n externalViewStyle,\n ]}\n >\n <View style={styles.inputContent}>\n {renderSelected()}\n </View>\n <Text style={[styles.dropdownArrow, { color: colors.placeholder }]}>{open ? '▲' : '▼'}</Text>\n </TouchableOpacity>\n\n {/* Modal mode */}\n {isModal && (\n <Modal visible={open} transparent animationType=\"fade\">\n <Pressable style={styles.overlay} onPress={() => setOpen(false)}>\n <View\n style={[styles.modalPanel, { backgroundColor: colors.bg }]}\n onStartShouldSetResponder={() => true}\n >\n {panelContent}\n </View>\n </Pressable>\n </Modal>\n )}\n\n {/* Inline mode — Modal-portal popover anchored to trigger */}\n {!isModal && (\n <Modal\n visible={open && !!triggerLayout}\n transparent\n animationType=\"none\"\n onRequestClose={close}\n >\n <Pressable style={styles.popoverOverlay} onPress={close}>\n {triggerLayout && (() => {\n const screen = Dimensions.get('window');\n const PANEL_MAX_HEIGHT = 320;\n const GAP = 4;\n const spaceBelow = screen.height - (triggerLayout.y + triggerLayout.height);\n const spaceAbove = triggerLayout.y;\n const openUp = spaceBelow < PANEL_MAX_HEIGHT && spaceAbove > spaceBelow;\n const maxHeight = Math.min(\n PANEL_MAX_HEIGHT,\n openUp ? spaceAbove - GAP : spaceBelow - GAP,\n );\n const top = openUp\n ? triggerLayout.y - maxHeight - GAP\n : triggerLayout.y + triggerLayout.height + GAP;\n\n return (\n <View\n style={[\n styles.popoverPanel,\n {\n top,\n left: triggerLayout.x,\n width: triggerLayout.width,\n maxHeight,\n borderColor: colors.border,\n backgroundColor: colors.bg,\n },\n ]}\n onStartShouldSetResponder={() => true}\n >\n {panelContent}\n </View>\n );\n })()}\n </Pressable>\n </Modal>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n // Input\n input: {\n minHeight: 42,\n borderWidth: 1,\n borderRadius: 6,\n paddingHorizontal: 10,\n paddingVertical: 6,\n flexDirection: 'row',\n alignItems: 'center',\n },\n inputContent: {\n flex: 1,\n },\n dropdownArrow: {\n fontSize: 10,\n marginLeft: 8,\n },\n\n // Placeholder\n placeholder: { fontSize: 14 },\n commaText: { fontSize: 14 },\n\n // Chips display\n chips: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 4,\n },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 10,\n paddingRight: 6,\n paddingVertical: 3,\n borderRadius: 16,\n gap: 4,\n },\n chipText: {\n fontSize: 13,\n },\n chipRemove: {\n fontSize: 12,\n paddingHorizontal: 2,\n },\n chipMore: {\n paddingHorizontal: 10,\n paddingVertical: 3,\n borderRadius: 16,\n },\n chipMoreText: {\n fontSize: 13,\n },\n\n // Panel header\n panelHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 10,\n borderBottomWidth: 1,\n },\n panelHeaderText: {\n fontSize: 13,\n },\n panelCloseText: {\n fontSize: 18,\n fontWeight: '600',\n },\n\n // Search\n searchContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n margin: 8,\n paddingHorizontal: 10,\n height: 36,\n borderWidth: 1,\n borderRadius: 6,\n },\n searchIcon: {\n fontSize: 14,\n marginRight: 6,\n },\n searchInput: {\n flex: 1,\n fontSize: 14,\n paddingVertical: 0,\n },\n\n // Group header\n groupHeader: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n groupHeaderText: {\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n },\n\n // Items\n item: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 10,\n paddingHorizontal: 12,\n gap: 10,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n itemText: {\n fontSize: 14,\n flex: 1,\n },\n\n // Checkbox\n checkbox: {\n width: 20,\n height: 20,\n borderWidth: 2,\n borderRadius: 4,\n justifyContent: 'center',\n alignItems: 'center',\n },\n checkmark: {\n color: '#fff',\n fontSize: 13,\n fontWeight: '700',\n },\n\n // Loading / Empty\n loadingContainer: {\n padding: 24,\n alignItems: 'center',\n gap: 8,\n },\n loadingText: {\n fontSize: 13,\n },\n emptyContainer: {\n padding: 24,\n alignItems: 'center',\n },\n emptyText: {\n fontSize: 14,\n },\n\n // Modal\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.4)',\n justifyContent: 'center',\n },\n modalPanel: {\n margin: 24,\n maxHeight: '70%',\n borderRadius: 12,\n overflow: 'hidden',\n },\n\n // Popover (Modal-portal)\n popoverOverlay: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n popoverPanel: {\n position: 'absolute',\n borderWidth: 1,\n borderRadius: 6,\n overflow: 'hidden',\n elevation: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 8,\n },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../../../../../apps/mobile/src/Core/MultiSelect/index.tsx"],"sourcesContent":["import React, { useMemo, useRef, useState } from 'react';\nimport {\n View,\n Text,\n TouchableOpacity,\n Modal,\n FlatList,\n TextInput,\n StyleSheet,\n Pressable,\n ActivityIndicator,\n Dimensions,\n} from 'react-native';\nimport { resolveThemeTokenForNative } from '../../Factory/helpers/style';\n\nexport type MultiSelectChangeEvent<T> = React.ChangeEvent<{\n value: T[];\n}>;\n\nexport interface MultiSelectProps<T> {\n value?: T[] | null;\n onChange?: (e: MultiSelectChangeEvent<T>, selectedItems: T[]) => void;\n isModal?: boolean;\n\n options?: T[];\n\n optionLabel?: keyof T | string;\n optionValue?: keyof T | string;\n\n optionGroupLabel?: keyof T | string;\n optionGroupChildren?: keyof T | string;\n\n placeholder?: string;\n disabled?: boolean;\n loading?: boolean;\n filter?: boolean;\n emptyFilterMessage?: string;\n /**\n * Placeholder for the panel's filter field, already written in the reader's\n * language by the KitsConcerto wrapper — this component lives in\n * `apps/mobile`, which `packages/ui` imports, so it cannot translate.\n */\n filterPlaceholder?: string;\n /** Reader's direction, from the wrapper's `useLanguage().isRTL`. */\n isRTL?: boolean;\n\n display?: 'comma' | 'chip';\n maxSelectedLabels?: number;\n\n itemTemplate?: (item: T) => React.ReactElement;\n selectedItemTemplate?: (item: T) => React.ReactElement;\n style?: import('react-native').ViewStyle;\n}\n\nconst t = resolveThemeTokenForNative;\n\nconst TEXT_STYLE_KEYS = new Set([\n 'fontSize', 'fontFamily', 'fontWeight', 'fontStyle',\n 'color', 'letterSpacing', 'lineHeight', 'textAlign',\n 'textDecorationLine', 'textTransform',\n]);\n\nfunction splitStyle(combined?: any): { viewStyle?: any; textStyle?: any } {\n if (!combined) return {};\n const view: Record<string, any> = {};\n const text: Record<string, any> = {};\n for (const [k, v] of Object.entries(combined)) {\n if (TEXT_STYLE_KEYS.has(k)) text[k] = v;\n else view[k] = v;\n }\n return {\n viewStyle: Object.keys(view).length ? view : undefined,\n textStyle: Object.keys(text).length ? text : undefined,\n };\n}\n\nexport default function MultiSelect<T>(props: MultiSelectProps<T>) {\n const {\n value,\n onChange,\n options = [],\n optionLabel,\n optionValue,\n optionGroupLabel,\n optionGroupChildren,\n isModal = false,\n placeholder = 'Select',\n disabled,\n loading,\n filter,\n // ⚠️ English literals of last resort, not translations — the wrapper always\n // passes the reader's own sentence. These only apply when this component is\n // used directly from `apps/mobile`, so a panel can never render blank.\n emptyFilterMessage = 'No results found',\n filterPlaceholder = 'Search...',\n isRTL = false,\n display = 'chip',\n maxSelectedLabels = 10,\n itemTemplate,\n selectedItemTemplate,\n style: externalStyle,\n } = props;\n\n const triggerRef = useRef<View>(null);\n const [open, setOpen] = useState(false);\n const [query, setQuery] = useState('');\n const [triggerLayout, setTriggerLayout] = useState<{\n x: number; y: number; width: number; height: number;\n } | null>(null);\n\n const close = () => setOpen(false);\n\n const toggleOpen = () => {\n if (disabled) return;\n if (open) {\n setOpen(false);\n return;\n }\n triggerRef.current?.measureInWindow((x, y, width, height) => {\n setTriggerLayout({ x, y, width, height });\n setOpen(true);\n });\n };\n\n const { viewStyle: externalViewStyle, textStyle: externalTextStyle } = splitStyle(externalStyle);\n\n const colors = {\n border: t('border') || t('gray.300'),\n borderFocus: t('primary'),\n bg: t('surface-card') || '#fff',\n disabledBg: t('surface-ground') || t('gray.100'),\n placeholder: t('text-secondary') || t('gray.400'),\n text: t('text') || t('gray.800'),\n textSecondary: t('text-secondary') || t('gray.500'),\n chipBg: t('primary.100') || t('indigo.100'),\n chipText: t('primary.700') || t('indigo.700'),\n chipRemove: t('primary.500') || t('indigo.500'),\n chipMoreBg: t('surface-ground') || t('gray.100'),\n headerBorder: t('border') || t('gray.200'),\n groupBg: t('surface-ground') || t('gray.50'),\n groupBorder: t('border') || t('gray.200'),\n itemBorder: t('surface-ground') || t('gray.100'),\n itemSelectedBg: t('highlight-bg') || t('indigo.50'),\n itemSelectedText: t('primary.700') || t('indigo.700'),\n checkboxBorder: t('border') || t('gray.300'),\n checkboxChecked: t('primary'),\n invalidBorder: t('danger') || t('red.500'),\n searchBg: t('surface-ground') || t('gray.50'),\n };\n\n const getValue = (item: T, key?: keyof T | string) =>\n key ? (item as any)[key] : item;\n\n const getLabel = (item: T, key?: keyof T | string) =>\n String(key ? (item as any)[key] : item);\n\n const selectedValues = Array.isArray(value) ? value : [];\n\n // Build display items: flat list with optional group headers\n const displayItems: { type: 'group' | 'item'; data: any }[] = useMemo(() => {\n if (optionGroupLabel && optionGroupChildren) {\n const result: { type: 'group' | 'item'; data: any }[] = [];\n options.forEach((group: any) => {\n result.push({ type: 'group', data: group });\n const children = group[optionGroupChildren] ?? [];\n children.forEach((child: any) => result.push({ type: 'item', data: child }));\n });\n return result;\n }\n return options.map((item) => ({ type: 'item' as const, data: item }));\n }, [options, optionGroupLabel, optionGroupChildren]);\n\n const filtered = useMemo(() => {\n if (!filter || !query) return displayItems;\n return displayItems.filter((entry) => {\n if (entry.type === 'group') return true; // keep group headers\n return getLabel(entry.data, optionLabel)\n .toLowerCase()\n .includes(query.toLowerCase());\n });\n }, [query, displayItems]);\n\n const isSelected = (item: T) =>\n selectedValues.some(\n (v) => getValue(v, optionValue) === getValue(item, optionValue),\n );\n\n const toggleItem = (item: T) => {\n const exists = isSelected(item);\n const next = exists\n ? selectedValues.filter(\n (v) => getValue(v, optionValue) !== getValue(item, optionValue),\n )\n : [...selectedValues, item];\n\n const syntheticEvent = {\n target: { value: next },\n } as React.ChangeEvent<any>;\n\n onChange?.(syntheticEvent, next);\n };\n\n const removeItem = (item: T) => {\n const next = selectedValues.filter(\n (v) => getValue(v, optionValue) !== getValue(item, optionValue),\n );\n const syntheticEvent = {\n target: { value: next },\n } as React.ChangeEvent<any>;\n onChange?.(syntheticEvent, next);\n };\n\n const renderCheckbox = (checked: boolean) => (\n <View\n style={[\n styles.checkbox,\n { borderColor: colors.checkboxBorder, backgroundColor: colors.bg },\n checked && { backgroundColor: colors.checkboxChecked, borderColor: colors.checkboxChecked },\n ]}\n >\n {checked && <Text style={styles.checkmark}>✓</Text>}\n </View>\n );\n\n const renderListContent = () => {\n if (loading) {\n return (\n <View style={styles.loadingContainer}>\n <ActivityIndicator size=\"small\" color={colors.checkboxChecked} />\n <Text style={[styles.loadingText, { color: colors.placeholder }]}>Loading...</Text>\n </View>\n );\n }\n\n const itemsOnly = filtered.filter((e) => e.type === 'item');\n if (itemsOnly.length === 0) {\n return (\n <View style={styles.emptyContainer}>\n <Text style={[styles.emptyText, { color: colors.placeholder }]}>{emptyFilterMessage}</Text>\n </View>\n );\n }\n\n return (\n <FlatList\n data={filtered}\n keyExtractor={(entry, i) =>\n entry.type === 'group' ? `group-${i}` : `item-${i}`\n }\n keyboardShouldPersistTaps=\"handled\"\n renderItem={({ item: entry }) => {\n if (entry.type === 'group') {\n return (\n <View style={[styles.groupHeader, { backgroundColor: colors.groupBg, borderBottomColor: colors.groupBorder }]}>\n <Text style={[styles.groupHeaderText, { color: colors.textSecondary }]}>\n {getLabel(entry.data, optionGroupLabel)}\n </Text>\n </View>\n );\n }\n const checked = isSelected(entry.data);\n return (\n <TouchableOpacity\n onPress={() => toggleItem(entry.data)}\n style={[\n styles.item,\n { borderBottomColor: colors.itemBorder },\n checked && { backgroundColor: colors.itemSelectedBg },\n ]}\n activeOpacity={0.7}\n >\n {renderCheckbox(checked)}\n {itemTemplate ? (\n itemTemplate(entry.data)\n ) : (\n <Text style={[\n styles.itemText,\n { color: colors.text },\n checked && { color: colors.itemSelectedText, fontWeight: '500' },\n ]}>\n {getLabel(entry.data, optionLabel)}\n </Text>\n )}\n </TouchableOpacity>\n );\n }}\n />\n );\n };\n\n const renderSelected = () => {\n if (!selectedValues.length) {\n return <Text style={[styles.placeholder, { color: colors.placeholder }, externalTextStyle]}>{placeholder}</Text>;\n }\n\n if (display === 'chip') {\n const visibleItems = selectedValues.slice(0, maxSelectedLabels);\n const remaining = selectedValues.length - maxSelectedLabels;\n return (\n <View style={styles.chips}>\n {visibleItems.map((item, i) =>\n selectedItemTemplate ? (\n <React.Fragment key={i}>{selectedItemTemplate(item)}</React.Fragment>\n ) : (\n <View key={i} style={[styles.chip, { backgroundColor: colors.chipBg }]}>\n <Text style={[styles.chipText, { color: colors.chipText }]}>{getLabel(item, optionLabel)}</Text>\n <TouchableOpacity\n onPress={() => removeItem(item)}\n hitSlop={{ top: 8, bottom: 8, left: 8, right: 8 }}\n >\n <Text style={[styles.chipRemove, { color: colors.chipRemove }]}>✕</Text>\n </TouchableOpacity>\n </View>\n ),\n )}\n {remaining > 0 && (\n <View style={[styles.chipMore, { backgroundColor: colors.chipMoreBg }]}>\n <Text style={[styles.chipMoreText, { color: colors.textSecondary }]}>+{remaining}</Text>\n </View>\n )}\n </View>\n );\n }\n\n return (\n <Text numberOfLines={1} style={[styles.commaText, { color: colors.text }, externalTextStyle]}>\n {selectedValues\n .slice(0, maxSelectedLabels)\n .map((v) => getLabel(v, optionLabel))\n .join(', ')}\n </Text>\n );\n };\n\n const panelContent = (\n <View style={{ flex: 1 }}>\n {/* Header */}\n <View style={[styles.panelHeader, { borderBottomColor: colors.headerBorder }]}>\n <Text style={[styles.panelHeaderText, { color: colors.textSecondary }]}>\n {selectedValues.length} item{selectedValues.length !== 1 ? 's' : ''} selected\n </Text>\n <TouchableOpacity onPress={() => setOpen(false)}>\n <Text style={[styles.panelCloseText, { color: colors.placeholder }]}>✕</Text>\n </TouchableOpacity>\n </View>\n\n {/* Search */}\n {filter && (\n <View style={[styles.searchContainer, { borderColor: colors.border, backgroundColor: colors.searchBg }]}>\n <Text style={styles.searchIcon}>🔍</Text>\n <TextInput\n value={query}\n onChangeText={setQuery}\n placeholder={filterPlaceholder}\n style={[\n styles.searchInput,\n { color: colors.text },\n // The filter follows the reader's language, not the platform's\n // layout direction — same rule as the Dropdown's panel.\n isRTL ? styles.searchRtl : styles.searchLtr,\n ]}\n placeholderTextColor={colors.placeholder}\n />\n </View>\n )}\n\n {/* List */}\n {renderListContent()}\n </View>\n );\n\n return (\n <View style={{ width: '100%' }}>\n {/* Input trigger */}\n <TouchableOpacity\n ref={triggerRef as any}\n activeOpacity={0.8}\n disabled={disabled}\n onPress={toggleOpen}\n style={[\n styles.input,\n { borderColor: colors.border, backgroundColor: colors.bg },\n disabled && { backgroundColor: colors.disabledBg, opacity: 0.6 },\n open && { borderColor: colors.borderFocus },\n externalViewStyle,\n ]}\n >\n <View style={styles.inputContent}>\n {renderSelected()}\n </View>\n <Text style={[styles.dropdownArrow, { color: colors.placeholder }]}>{open ? '▲' : '▼'}</Text>\n </TouchableOpacity>\n\n {/* Modal mode */}\n {isModal && (\n <Modal visible={open} transparent animationType=\"fade\">\n <Pressable style={styles.overlay} onPress={() => setOpen(false)}>\n <View\n style={[styles.modalPanel, { backgroundColor: colors.bg }]}\n onStartShouldSetResponder={() => true}\n >\n {panelContent}\n </View>\n </Pressable>\n </Modal>\n )}\n\n {/* Inline mode — Modal-portal popover anchored to trigger */}\n {!isModal && (\n <Modal\n visible={open && !!triggerLayout}\n transparent\n animationType=\"none\"\n onRequestClose={close}\n >\n <Pressable style={styles.popoverOverlay} onPress={close}>\n {triggerLayout && (() => {\n const screen = Dimensions.get('window');\n const PANEL_MAX_HEIGHT = 320;\n const GAP = 4;\n const spaceBelow = screen.height - (triggerLayout.y + triggerLayout.height);\n const spaceAbove = triggerLayout.y;\n const openUp = spaceBelow < PANEL_MAX_HEIGHT && spaceAbove > spaceBelow;\n const maxHeight = Math.min(\n PANEL_MAX_HEIGHT,\n openUp ? spaceAbove - GAP : spaceBelow - GAP,\n );\n const top = openUp\n ? triggerLayout.y - maxHeight - GAP\n : triggerLayout.y + triggerLayout.height + GAP;\n\n return (\n <View\n style={[\n styles.popoverPanel,\n {\n top,\n left: triggerLayout.x,\n width: triggerLayout.width,\n maxHeight,\n borderColor: colors.border,\n backgroundColor: colors.bg,\n },\n ]}\n onStartShouldSetResponder={() => true}\n >\n {panelContent}\n </View>\n );\n })()}\n </Pressable>\n </Modal>\n )}\n </View>\n );\n}\n\nconst styles = StyleSheet.create({\n // Input\n input: {\n minHeight: 42,\n borderWidth: 1,\n borderRadius: 6,\n paddingHorizontal: 10,\n paddingVertical: 6,\n flexDirection: 'row',\n alignItems: 'center',\n },\n inputContent: {\n flex: 1,\n },\n dropdownArrow: {\n fontSize: 10,\n marginLeft: 8,\n },\n\n // Placeholder\n placeholder: { fontSize: 14 },\n commaText: { fontSize: 14 },\n\n // Chips display\n chips: {\n flexDirection: 'row',\n flexWrap: 'wrap',\n gap: 4,\n },\n chip: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingLeft: 10,\n paddingRight: 6,\n paddingVertical: 3,\n borderRadius: 16,\n gap: 4,\n },\n chipText: {\n fontSize: 13,\n },\n chipRemove: {\n fontSize: 12,\n paddingHorizontal: 2,\n },\n chipMore: {\n paddingHorizontal: 10,\n paddingVertical: 3,\n borderRadius: 16,\n },\n chipMoreText: {\n fontSize: 13,\n },\n\n // Panel header\n panelHeader: {\n flexDirection: 'row',\n justifyContent: 'space-between',\n alignItems: 'center',\n paddingHorizontal: 12,\n paddingVertical: 10,\n borderBottomWidth: 1,\n },\n panelHeaderText: {\n fontSize: 13,\n },\n panelCloseText: {\n fontSize: 18,\n fontWeight: '600',\n },\n\n // Search\n searchContainer: {\n flexDirection: 'row',\n alignItems: 'center',\n margin: 8,\n paddingHorizontal: 10,\n height: 36,\n borderWidth: 1,\n borderRadius: 6,\n },\n searchIcon: {\n fontSize: 14,\n marginRight: 6,\n },\n searchInput: {\n flex: 1,\n fontSize: 14,\n paddingVertical: 0,\n },\n searchLtr: {\n textAlign: 'left' as const,\n writingDirection: 'ltr' as const,\n },\n searchRtl: {\n textAlign: 'right' as const,\n writingDirection: 'rtl' as const,\n },\n\n // Group header\n groupHeader: {\n paddingHorizontal: 12,\n paddingVertical: 8,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n groupHeaderText: {\n fontSize: 12,\n fontWeight: '700',\n textTransform: 'uppercase',\n letterSpacing: 0.5,\n },\n\n // Items\n item: {\n flexDirection: 'row',\n alignItems: 'center',\n paddingVertical: 10,\n paddingHorizontal: 12,\n gap: 10,\n borderBottomWidth: StyleSheet.hairlineWidth,\n },\n itemText: {\n fontSize: 14,\n flex: 1,\n },\n\n // Checkbox\n checkbox: {\n width: 20,\n height: 20,\n borderWidth: 2,\n borderRadius: 4,\n justifyContent: 'center',\n alignItems: 'center',\n },\n checkmark: {\n color: '#fff',\n fontSize: 13,\n fontWeight: '700',\n },\n\n // Loading / Empty\n loadingContainer: {\n padding: 24,\n alignItems: 'center',\n gap: 8,\n },\n loadingText: {\n fontSize: 13,\n },\n emptyContainer: {\n padding: 24,\n alignItems: 'center',\n },\n emptyText: {\n fontSize: 14,\n },\n\n // Modal\n overlay: {\n flex: 1,\n backgroundColor: 'rgba(0,0,0,0.4)',\n justifyContent: 'center',\n },\n modalPanel: {\n margin: 24,\n maxHeight: '70%',\n borderRadius: 12,\n overflow: 'hidden',\n },\n\n // Popover (Modal-portal)\n popoverOverlay: {\n flex: 1,\n backgroundColor: 'transparent',\n },\n popoverPanel: {\n position: 'absolute',\n borderWidth: 1,\n borderRadius: 6,\n overflow: 'hidden',\n elevation: 8,\n shadowColor: '#000',\n shadowOffset: { width: 0, height: 2 },\n shadowOpacity: 0.15,\n shadowRadius: 8,\n },\n});\n"],"names":[],"mappings":"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"}
|
|
@@ -207,7 +207,7 @@ const CheckboxButton = ({
|
|
|
207
207
|
disabled,
|
|
208
208
|
children: /* @__PURE__ */ jsxRuntime.jsxs(index.default, { flexDirection: direction, alignItems: "center", gap: 4, children: [
|
|
209
209
|
renderContent(),
|
|
210
|
-
!!item.label && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { children: item.label })
|
|
210
|
+
!!item.label && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: textStyle, children: item.label })
|
|
211
211
|
] })
|
|
212
212
|
}
|
|
213
213
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.cjs","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {!!item.label && <Text>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["useKitsTheme","useMemo","resolveStyleRecord","splitTextStyle","jsx","Text","Pressable","Flex","CoreCheckboxIndicator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkbox.cjs","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {/* ⛔ THIS TEXT HAD NO STYLE AT ALL — same dark-mode fault as\n the Checkbox item text above and the Radio label before its\n 21 Sep fix; reuses the SAME resolved textStyle, not a bare\n Text, so the theme's Checkbox.item colour reaches it too. */}\n {!!item.label && <Text style={textStyle}>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["useKitsTheme","useMemo","resolveStyleRecord","splitTextStyle","jsx","Text","Pressable","Flex","CoreCheckboxIndicator"],"mappings":"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"}
|
|
@@ -203,7 +203,7 @@ const CheckboxButton = ({
|
|
|
203
203
|
disabled,
|
|
204
204
|
children: /* @__PURE__ */ jsxs(Flex, { flexDirection: direction, alignItems: "center", gap: 4, children: [
|
|
205
205
|
renderContent(),
|
|
206
|
-
!!item.label && /* @__PURE__ */ jsx(Text, { children: item.label })
|
|
206
|
+
!!item.label && /* @__PURE__ */ jsx(Text, { style: textStyle, children: item.label })
|
|
207
207
|
] })
|
|
208
208
|
}
|
|
209
209
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {!!item.label && <Text>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["CoreCheckboxIndicator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkbox.js","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {/* ⛔ THIS TEXT HAD NO STYLE AT ALL — same dark-mode fault as\n the Checkbox item text above and the Radio label before its\n 21 Sep fix; reuses the SAME resolved textStyle, not a bare\n Text, so the theme's Checkbox.item colour reaches it too. */}\n {!!item.label && <Text style={textStyle}>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["CoreCheckboxIndicator"],"mappings":"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"}
|
|
@@ -94,12 +94,16 @@ var locale = require('../../../hooks/locale.cjs');
|
|
|
94
94
|
require('../../../contexts/DialogContext.cjs');
|
|
95
95
|
var useComponentDefaults = require('../../../hooks/useComponentDefaults.cjs');
|
|
96
96
|
var useResolvedStyle = require('../../../hooks/useResolvedStyle.cjs');
|
|
97
|
+
var KitsThemeProvider_native = require('../../../contexts/Theme/KitsThemeProvider.cjs');
|
|
97
98
|
|
|
98
99
|
const KitsInputTextarea = React.forwardRef((rawProps, ref) => {
|
|
99
100
|
const { mergedProps: props, themeStyle, elementStyles } = useComponentDefaults.default("Textarea", rawProps);
|
|
100
101
|
const resolvedThemeStyle = useResolvedStyle.default(themeStyle);
|
|
101
102
|
const resolvedRootStyle = useResolvedStyle.default(elementStyles?.root || {});
|
|
102
103
|
const { isRTL } = locale.useLanguage();
|
|
104
|
+
const { resolveToken } = KitsThemeProvider_native.useKitsTheme();
|
|
105
|
+
const resolvedRootColor = resolvedRootStyle?.color ?? resolvedThemeStyle?.color;
|
|
106
|
+
const valueColor = typeof resolvedRootColor === "string" && resolvedRootColor.length > 0 ? resolvedRootColor : resolveToken("text");
|
|
103
107
|
const {
|
|
104
108
|
id,
|
|
105
109
|
label,
|
|
@@ -220,7 +224,8 @@ const KitsInputTextarea = React.forwardRef((rawProps, ref) => {
|
|
|
220
224
|
paddingHorizontal: 12,
|
|
221
225
|
paddingVertical: 8,
|
|
222
226
|
textAlign: isRTL ? "right" : "left",
|
|
223
|
-
writingDirection: isRTL ? "rtl" : "ltr"
|
|
227
|
+
writingDirection: isRTL ? "rtl" : "ltr",
|
|
228
|
+
color: valueColor
|
|
224
229
|
// ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),
|
|
225
230
|
},
|
|
226
231
|
...navProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":["forwardRef","useComponentDefaults","useResolvedStyle","useLanguage","keyboardTypeFromKeyFilter","useFormFieldKeyboardNav","useSeparator","useRef","useState","useEffect","useImperativeHandle","useCallback","applyKeyFilter","jsx","KitsContainer","Textarea","TextareaInput","mergeRefs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n /*\n * ⛔ THE TYPED TEXT HAD NO COLOUR OF ITS OWN — found on AlphaMatch's\n * offer composer, 22 Sep 2026: near-black on a dark field while typing.\n * `resolvedRootStyle`/`resolvedThemeStyle` DO carry `color: 'text'`, but\n * that lands on the outer `<Textarea>` wrapper, which is a View — RN does\n * not propagate `color` from a View into a nested TextInput's own text\n * rendering. `<TextareaInput>` is the actual RN TextInput and needs the\n * colour on ITS OWN style, the same way InputText's shared Field.tsx\n * always does (`color: resolveThemeTokenForNative('text')`).\n */\n const { resolveToken } = useKitsTheme();\n const resolvedRootColor =\n (resolvedRootStyle as any)?.color ?? (resolvedThemeStyle as any)?.color;\n const valueColor =\n typeof resolvedRootColor === \"string\" && resolvedRootColor.length > 0\n ? resolvedRootColor\n : resolveToken('text');\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n color: valueColor,\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":["forwardRef","useComponentDefaults","useResolvedStyle","useLanguage","useKitsTheme","keyboardTypeFromKeyFilter","useFormFieldKeyboardNav","useSeparator","useRef","useState","useEffect","useImperativeHandle","useCallback","applyKeyFilter","jsx","KitsContainer","Textarea","TextareaInput","mergeRefs"],"mappings":"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"}
|
|
@@ -90,12 +90,16 @@ import { useLanguage } from '../../../hooks/locale.js';
|
|
|
90
90
|
import '../../../contexts/DialogContext.js';
|
|
91
91
|
import useComponentDefaults from '../../../hooks/useComponentDefaults.js';
|
|
92
92
|
import useResolvedStyle from '../../../hooks/useResolvedStyle.js';
|
|
93
|
+
import { useKitsTheme } from '../../../contexts/Theme/KitsThemeProvider.js';
|
|
93
94
|
|
|
94
95
|
const KitsInputTextarea = forwardRef((rawProps, ref) => {
|
|
95
96
|
const { mergedProps: props, themeStyle, elementStyles } = useComponentDefaults("Textarea", rawProps);
|
|
96
97
|
const resolvedThemeStyle = useResolvedStyle(themeStyle);
|
|
97
98
|
const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});
|
|
98
99
|
const { isRTL } = useLanguage();
|
|
100
|
+
const { resolveToken } = useKitsTheme();
|
|
101
|
+
const resolvedRootColor = resolvedRootStyle?.color ?? resolvedThemeStyle?.color;
|
|
102
|
+
const valueColor = typeof resolvedRootColor === "string" && resolvedRootColor.length > 0 ? resolvedRootColor : resolveToken("text");
|
|
99
103
|
const {
|
|
100
104
|
id,
|
|
101
105
|
label,
|
|
@@ -216,7 +220,8 @@ const KitsInputTextarea = forwardRef((rawProps, ref) => {
|
|
|
216
220
|
paddingHorizontal: 12,
|
|
217
221
|
paddingVertical: 8,
|
|
218
222
|
textAlign: isRTL ? "right" : "left",
|
|
219
|
-
writingDirection: isRTL ? "rtl" : "ltr"
|
|
223
|
+
writingDirection: isRTL ? "rtl" : "ltr",
|
|
224
|
+
color: valueColor
|
|
220
225
|
// ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),
|
|
221
226
|
},
|
|
222
227
|
...navProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n /*\n * ⛔ THE TYPED TEXT HAD NO COLOUR OF ITS OWN — found on AlphaMatch's\n * offer composer, 22 Sep 2026: near-black on a dark field while typing.\n * `resolvedRootStyle`/`resolvedThemeStyle` DO carry `color: 'text'`, but\n * that lands on the outer `<Textarea>` wrapper, which is a View — RN does\n * not propagate `color` from a View into a nested TextInput's own text\n * rendering. `<TextareaInput>` is the actual RN TextInput and needs the\n * colour on ITS OWN style, the same way InputText's shared Field.tsx\n * always does (`color: resolveThemeTokenForNative('text')`).\n */\n const { resolveToken } = useKitsTheme();\n const resolvedRootColor =\n (resolvedRootStyle as any)?.color ?? (resolvedThemeStyle as any)?.color;\n const valueColor =\n typeof resolvedRootColor === \"string\" && resolvedRootColor.length > 0\n ? resolvedRootColor\n : resolveToken('text');\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n color: valueColor,\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var Slider = require('@react-native-community/slider');
|
|
8
8
|
var reactNative = require('react-native');
|
|
9
|
+
var KitsThemeProvider_native = require('../../../contexts/Theme/KitsThemeProvider.cjs');
|
|
9
10
|
var index = require('../../../layout/Flex/index.cjs');
|
|
10
11
|
|
|
11
12
|
const KitsSliders = ({
|
|
@@ -21,6 +22,8 @@ const KitsSliders = ({
|
|
|
21
22
|
className
|
|
22
23
|
}) => {
|
|
23
24
|
const isControlled = value !== void 0;
|
|
25
|
+
const { resolveToken } = KitsThemeProvider_native.useKitsTheme();
|
|
26
|
+
const valueColor = resolveToken("text");
|
|
24
27
|
const [localValue, setLocalValue] = React.useState(
|
|
25
28
|
isRange ? [minValue, maxValue] : minValue
|
|
26
29
|
);
|
|
@@ -72,8 +75,8 @@ const KitsSliders = ({
|
|
|
72
75
|
}
|
|
73
76
|
),
|
|
74
77
|
/* @__PURE__ */ jsxRuntime.jsxs(index.default, { justifyContent: "space-between", children: [
|
|
75
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: prefix ? `${prefix}${start}` : start }),
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: prefix ? `${prefix}${end}` : end })
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: valueColor }, children: prefix ? `${prefix}${start}` : start }),
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: valueColor }, children: prefix ? `${prefix}${end}` : end })
|
|
77
80
|
] })
|
|
78
81
|
] });
|
|
79
82
|
}
|
|
@@ -97,7 +100,7 @@ const KitsSliders = ({
|
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
),
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.jsx(index.default, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: prefix ? `${prefix}${numericValue}` : numericValue }) })
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsx(index.default, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: valueColor }, children: prefix ? `${prefix}${numericValue}` : numericValue }) })
|
|
101
104
|
] });
|
|
102
105
|
};
|
|
103
106
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/Slider/index.native.tsx"],"sourcesContent":["import React, { type FC, useEffect, useState } from \"react\";\nimport Slider from \"@react-native-community/slider\";\nimport { Text } from \"react-native\";\nimport type { ISliderProps } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex } from \"../../../_compat\";\n\nconst KitsSliders: FC<ISliderProps> = ({\n minValue = 0,\n maxValue = 100,\n prefix,\n step,\n disabled,\n value,\n isRange = false,\n onChange,\n onSlideEnd,\n className,\n }) => {\n const isControlled = value !== undefined;\n\n const [localValue, setLocalValue] = useState<number | [number, number]>(\n isRange ? [minValue, maxValue] : minValue\n );\n\n const currentValue = isControlled ? value : localValue;\n\n useEffect(() => {\n if (!isControlled) {\n setLocalValue(isRange ? [minValue, maxValue] : minValue);\n }\n }, [minValue, maxValue, isRange, isControlled]);\n\n /* ---------------------------- RANGE MODE --------------------------- */\n\n if (isRange) {\n const [start, end] = Array.isArray(currentValue)\n ? currentValue\n : [minValue, maxValue];\n\n return (\n <Flex w=\"full\" flexDirection=\"column\" gap={2} className={className}>\n {/* Start thumb */}\n <Slider\n minimumValue={minValue}\n maximumValue={end}\n value={start}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [v, end];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [v, end],\n });\n }}\n />\n\n {/* End thumb */}\n <Slider\n minimumValue={start}\n maximumValue={maxValue}\n value={end}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [start, v];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [start, v],\n });\n }}\n />\n\n <Flex justifyContent=\"space-between\">\n <Text>{prefix ? `${prefix}${start}` : start}</Text>\n <Text>{prefix ? `${prefix}${end}` : end}</Text>\n </Flex>\n </Flex>\n );\n }\n\n /* --------------------------- SINGLE MODE ---------------------------- */\n\n const numericValue =\n typeof currentValue === \"number\" ? currentValue : minValue;\n\n return (\n <Flex w={'full'} flexDirection=\"column\" gap={2} className={className}>\n <Slider\n minimumValue={minValue}\n maximumValue={maxValue}\n step={step}\n disabled={disabled}\n value={numericValue}\n onValueChange={(v: number) => {\n isControlled ? onChange?.({value:v}) : setLocalValue(v);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: v,\n });\n }}\n />\n\n <Flex justifyContent=\"flex-end\">\n <Text>{prefix ? `${prefix}${numericValue}` : numericValue}</Text>\n </Flex>\n </Flex>\n );\n};\n\nexport default KitsSliders;\n"],"names":["useState","useEffect","jsxs","Flex","jsx","Text"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/Slider/index.native.tsx"],"sourcesContent":["import React, { type FC, useEffect, useState } from \"react\";\nimport Slider from \"@react-native-community/slider\";\nimport { Text } from \"react-native\";\nimport type { ISliderProps } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\nconst KitsSliders: FC<ISliderProps> = ({\n minValue = 0,\n maxValue = 100,\n prefix,\n step,\n disabled,\n value,\n isRange = false,\n onChange,\n onSlideEnd,\n className,\n }) => {\n const isControlled = value !== undefined;\n /*\n * ⛔ THESE THREE LABELS HAD NO COLOUR AT ALL — the only file in the\n * whole native form tree importing RAW RN `Text` instead of the themed\n * primitive, found sweeping every native input for the same dark-mode\n * fault as the Textarea (22 Sep 2026). Native drew them in the platform\n * default (black), invisible on the dark background.\n */\n const { resolveToken } = useKitsTheme();\n const valueColor = resolveToken('text');\n\n const [localValue, setLocalValue] = useState<number | [number, number]>(\n isRange ? [minValue, maxValue] : minValue\n );\n\n const currentValue = isControlled ? value : localValue;\n\n useEffect(() => {\n if (!isControlled) {\n setLocalValue(isRange ? [minValue, maxValue] : minValue);\n }\n }, [minValue, maxValue, isRange, isControlled]);\n\n /* ---------------------------- RANGE MODE --------------------------- */\n\n if (isRange) {\n const [start, end] = Array.isArray(currentValue)\n ? currentValue\n : [minValue, maxValue];\n\n return (\n <Flex w=\"full\" flexDirection=\"column\" gap={2} className={className}>\n {/* Start thumb */}\n <Slider\n minimumValue={minValue}\n maximumValue={end}\n value={start}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [v, end];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [v, end],\n });\n }}\n />\n\n {/* End thumb */}\n <Slider\n minimumValue={start}\n maximumValue={maxValue}\n value={end}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [start, v];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [start, v],\n });\n }}\n />\n\n <Flex justifyContent=\"space-between\">\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${start}` : start}</Text>\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${end}` : end}</Text>\n </Flex>\n </Flex>\n );\n }\n\n /* --------------------------- SINGLE MODE ---------------------------- */\n\n const numericValue =\n typeof currentValue === \"number\" ? currentValue : minValue;\n\n return (\n <Flex w={'full'} flexDirection=\"column\" gap={2} className={className}>\n <Slider\n minimumValue={minValue}\n maximumValue={maxValue}\n step={step}\n disabled={disabled}\n value={numericValue}\n onValueChange={(v: number) => {\n isControlled ? onChange?.({value:v}) : setLocalValue(v);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: v,\n });\n }}\n />\n\n <Flex justifyContent=\"flex-end\">\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${numericValue}` : numericValue}</Text>\n </Flex>\n </Flex>\n );\n};\n\nexport default KitsSliders;\n"],"names":["useKitsTheme","useState","useEffect","jsxs","Flex","jsx","Text"],"mappings":";;;;;;;;;;;AAOA,MAAM,cAAgC,CAAC;AAAA,EACI,QAAA,GAAW,CAAA;AAAA,EACX,QAAA,GAAW,GAAA;AAAA,EACX,MAAA;AAAA,EACA,IAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,OAAA,GAAU,KAAA;AAAA,EACV,QAAA;AAAA,EACA,UAAA;AAAA,EACA;AACJ,CAAA,KAAM;AACzC,EAAA,MAAM,eAAe,KAAA,KAAU,MAAA;AAQ/B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAIA,qCAAA,EAAa;AACtC,EAAA,MAAM,UAAA,GAAa,aAAa,MAAM,CAAA;AAEtC,EAAA,MAAM,CAAC,UAAA,EAAY,aAAa,CAAA,GAAIC,cAAA;AAAA,IAChC,OAAA,GAAU,CAAC,QAAA,EAAU,QAAQ,CAAA,GAAI;AAAA,GACrC;AAEA,EAAA,MAAM,YAAA,GAAe,eAAe,KAAA,GAAQ,UAAA;AAE5C,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,IAAI,CAAC,YAAA,EAAc;AACf,MAAA,aAAA,CAAc,OAAA,GAAU,CAAC,QAAA,EAAU,QAAQ,IAAI,QAAQ,CAAA;AAAA,IAC3D;AAAA,EACJ,GAAG,CAAC,QAAA,EAAU,QAAA,EAAU,OAAA,EAAS,YAAY,CAAC,CAAA;AAI9C,EAAA,IAAI,OAAA,EAAS;AACT,IAAA,MAAM,CAAC,KAAA,EAAO,GAAG,CAAA,GAAI,KAAA,CAAM,OAAA,CAAQ,YAAY,CAAA,GACzC,YAAA,GACA,CAAC,QAAA,EAAU,QAAQ,CAAA;AAEzB,IAAA,uBACIC,eAAA,CAACC,iBAAK,CAAA,EAAE,MAAA,EAAO,eAAc,QAAA,EAAS,GAAA,EAAK,GAAG,SAAA,EAE1C,QAAA,EAAA;AAAA,sBAAAC,cAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,YAAA,EAAc,QAAA;AAAA,UACd,YAAA,EAAc,GAAA;AAAA,UACd,KAAA,EAAO,KAAA;AAAA,UACP,IAAA;AAAA,UACA,QAAA;AAAA,UACA,aAAA,EAAe,CAAC,CAAA,KAAc;AAC1B,YAAA,MAAM,IAAA,GAAyB,CAAC,CAAA,EAAG,GAAG,CAAA;AACtC,YAAA,YAAA,GAAe,WAAW,EAAC,KAAA,EAAM,MAAK,CAAA,GAAI,cAAc,IAAI,CAAA;AAAA,UAChE,CAAA;AAAA,UACA,iBAAA,EAAmB,CAAC,CAAA,KAAc;AAC9B,YAAA,UAAA,GAAa;AAAA,cACT,KAAA,EAAO,CAAC,CAAA,EAAG,GAAG;AAAA,aACjB,CAAA;AAAA,UACL;AAAA;AAAA,OACJ;AAAA,sBAGAA,cAAA;AAAA,QAAC,MAAA;AAAA,QAAA;AAAA,UACG,YAAA,EAAc,KAAA;AAAA,UACd,YAAA,EAAc,QAAA;AAAA,UACd,KAAA,EAAO,GAAA;AAAA,UACP,IAAA;AAAA,UACA,QAAA;AAAA,UACA,aAAA,EAAe,CAAC,CAAA,KAAc;AAC1B,YAAA,MAAM,IAAA,GAAyB,CAAC,KAAA,EAAO,CAAC,CAAA;AACxC,YAAA,YAAA,GAAe,WAAW,EAAC,KAAA,EAAM,MAAK,CAAA,GAAI,cAAc,IAAI,CAAA;AAAA,UAChE,CAAA;AAAA,UACA,iBAAA,EAAmB,CAAC,CAAA,KAAc;AAC9B,YAAA,UAAA,GAAa;AAAA,cACT,KAAA,EAAO,CAAC,KAAA,EAAO,CAAC;AAAA,aACnB,CAAA;AAAA,UACL;AAAA;AAAA,OACJ;AAAA,sBAEAF,eAAA,CAACC,aAAA,EAAA,EAAK,cAAA,EAAe,eAAA,EACjB,QAAA,EAAA;AAAA,wBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,EAAW,EAAI,QAAA,EAAA,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,KAAK,CAAA,CAAA,GAAK,KAAA,EAAM,CAAA;AAAA,wBAC1ED,cAAA,CAACC,gBAAA,EAAA,EAAK,KAAA,EAAO,EAAE,KAAA,EAAO,UAAA,EAAW,EAAI,QAAA,EAAA,MAAA,GAAS,CAAA,EAAG,MAAM,CAAA,EAAG,GAAG,KAAK,GAAA,EAAI;AAAA,OAAA,EAC1E;AAAA,KAAA,EACJ,CAAA;AAAA,EAER;AAIA,EAAA,MAAM,YAAA,GACF,OAAO,YAAA,KAAiB,QAAA,GAAW,YAAA,GAAe,QAAA;AAEtD,EAAA,uBACIH,eAAA,CAACC,iBAAK,CAAA,EAAG,MAAA,EAAQ,eAAc,QAAA,EAAS,GAAA,EAAK,GAAG,SAAA,EAC5C,QAAA,EAAA;AAAA,oBAAAC,cAAA;AAAA,MAAC,MAAA;AAAA,MAAA;AAAA,QACG,YAAA,EAAc,QAAA;AAAA,QACd,YAAA,EAAc,QAAA;AAAA,QACd,IAAA;AAAA,QACA,QAAA;AAAA,QACA,KAAA,EAAO,YAAA;AAAA,QACP,aAAA,EAAe,CAAC,CAAA,KAAc;AAC1B,UAAA,YAAA,GAAe,WAAW,EAAC,KAAA,EAAM,GAAE,CAAA,GAAI,cAAc,CAAC,CAAA;AAAA,QAC1D,CAAA;AAAA,QACA,iBAAA,EAAmB,CAAC,CAAA,KAAc;AAC9B,UAAA,UAAA,GAAa;AAAA,YACT,KAAA,EAAO;AAAA,WACV,CAAA;AAAA,QACL;AAAA;AAAA,KACJ;AAAA,mCAECD,aAAA,EAAA,EAAK,cAAA,EAAe,YACjB,QAAA,kBAAAC,cAAA,CAACC,gBAAA,EAAA,EAAK,OAAO,EAAE,KAAA,EAAO,UAAA,EAAW,EAAI,mBAAS,CAAA,EAAG,MAAM,GAAG,YAAY,CAAA,CAAA,GAAK,cAAa,CAAA,EAC5F;AAAA,GAAA,EACJ,CAAA;AAER;;;;"}
|