@lmb-it/kitsconcerto-native 0.1.289 → 0.1.290
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 +1 -0
- package/apps/mobile/src/Core/Dropdown/index.cjs.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.js +1 -0
- package/apps/mobile/src/Core/Dropdown/index.js.map +1 -1
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.cjs +1 -0
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.cjs.map +1 -1
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.js +1 -0
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.js.map +1 -1
- package/apps/mobile/src/Factory/ResponsiveElement.cjs +1 -0
- package/apps/mobile/src/Factory/ResponsiveElement.cjs.map +1 -1
- package/apps/mobile/src/Factory/ResponsiveElement.js +1 -0
- package/apps/mobile/src/Factory/ResponsiveElement.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/cssVarMap.cjs +1 -0
- package/apps/mobile/src/Factory/helpers/cssVarMap.cjs.map +1 -1
- package/apps/mobile/src/Factory/helpers/cssVarMap.js +1 -0
- package/apps/mobile/src/Factory/helpers/cssVarMap.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/style.cjs +1 -0
- package/apps/mobile/src/Factory/helpers/style.cjs.map +1 -1
- package/apps/mobile/src/Factory/helpers/style.js +1 -0
- package/apps/mobile/src/Factory/helpers/style.js.map +1 -1
- package/apps/mobile/src/Factory/useSeparator.cjs +1 -0
- package/apps/mobile/src/Factory/useSeparator.cjs.map +1 -1
- package/apps/mobile/src/Factory/useSeparator.js +1 -0
- package/apps/mobile/src/Factory/useSeparator.js.map +1 -1
- package/components/Accordion/accordion.cjs +1 -0
- package/components/Accordion/accordion.cjs.map +1 -1
- package/components/Accordion/accordion.js +1 -0
- package/components/Accordion/accordion.js.map +1 -1
- package/components/Badge/index.cjs +1 -0
- package/components/Badge/index.cjs.map +1 -1
- package/components/Badge/index.js +1 -0
- package/components/Badge/index.js.map +1 -1
- package/components/BottomTabBar/index.cjs +1 -0
- package/components/BottomTabBar/index.cjs.map +1 -1
- package/components/BottomTabBar/index.js +1 -0
- package/components/BottomTabBar/index.js.map +1 -1
- package/components/Button/Button.cjs +1 -0
- package/components/Button/Button.cjs.map +1 -1
- package/components/Button/Button.js +1 -0
- package/components/Button/Button.js.map +1 -1
- package/components/MessageComposer/index.cjs +1 -0
- package/components/MessageComposer/index.cjs.map +1 -1
- package/components/MessageComposer/index.js +1 -0
- package/components/MessageComposer/index.js.map +1 -1
- package/components/SegmentedControl/index.cjs +1 -0
- package/components/SegmentedControl/index.cjs.map +1 -1
- package/components/SegmentedControl/index.js +1 -0
- package/components/SegmentedControl/index.js.map +1 -1
- package/components/SkeletonText/index.cjs +1 -0
- package/components/SkeletonText/index.cjs.map +1 -1
- package/components/SkeletonText/index.js +1 -0
- package/components/SkeletonText/index.js.map +1 -1
- package/components/Tabs/index.cjs +3 -2
- package/components/Tabs/index.cjs.map +1 -1
- package/components/Tabs/index.js +3 -2
- package/components/Tabs/index.js.map +1 -1
- package/contexts/Locale/index.cjs +1 -0
- package/contexts/Locale/index.cjs.map +1 -1
- package/contexts/Locale/index.js +1 -0
- package/contexts/Locale/index.js.map +1 -1
- package/contexts/Main/index.cjs +1 -0
- package/contexts/Main/index.cjs.map +1 -1
- package/contexts/Main/index.js +1 -0
- package/contexts/Main/index.js.map +1 -1
- package/contexts/Theme/index.cjs +1 -0
- package/contexts/Theme/index.cjs.map +1 -1
- package/contexts/Theme/index.js +1 -0
- package/contexts/Theme/index.js.map +1 -1
- package/data/DataView/Pagination/index.cjs +1 -0
- package/data/DataView/Pagination/index.cjs.map +1 -1
- package/data/DataView/Pagination/index.js +1 -0
- package/data/DataView/Pagination/index.js.map +1 -1
- package/data/TreeView/index.cjs +1 -0
- package/data/TreeView/index.cjs.map +1 -1
- package/data/TreeView/index.js +1 -0
- package/data/TreeView/index.js.map +1 -1
- package/form/controls/Checkbox/checkbox.cjs +1 -0
- package/form/controls/Checkbox/checkbox.cjs.map +1 -1
- package/form/controls/Checkbox/checkbox.js +1 -0
- package/form/controls/Checkbox/checkbox.js.map +1 -1
- package/form/controls/RadioButton/radiobutton.cjs +1 -0
- package/form/controls/RadioButton/radiobutton.cjs.map +1 -1
- package/form/controls/RadioButton/radiobutton.js +1 -0
- package/form/controls/RadioButton/radiobutton.js.map +1 -1
- package/form/controls/SelectButton/index.cjs +1 -0
- package/form/controls/SelectButton/index.cjs.map +1 -1
- package/form/controls/SelectButton/index.js +1 -0
- package/form/controls/SelectButton/index.js.map +1 -1
- package/form/controls/TriStateCheckbox/index.cjs +1 -0
- package/form/controls/TriStateCheckbox/index.cjs.map +1 -1
- package/form/controls/TriStateCheckbox/index.js +1 -0
- package/form/controls/TriStateCheckbox/index.js.map +1 -1
- package/form/file-pickers/MainUploader/index.cjs +1 -0
- package/form/file-pickers/MainUploader/index.cjs.map +1 -1
- package/form/file-pickers/MainUploader/index.js +1 -0
- package/form/file-pickers/MainUploader/index.js.map +1 -1
- package/form/helpers/ErrorMessage/errormessage.cjs +1 -0
- package/form/helpers/ErrorMessage/errormessage.cjs.map +1 -1
- package/form/helpers/ErrorMessage/errormessage.js +1 -0
- package/form/helpers/ErrorMessage/errormessage.js.map +1 -1
- package/form/helpers/FormContainer/index.cjs +1 -0
- package/form/helpers/FormContainer/index.cjs.map +1 -1
- package/form/helpers/FormContainer/index.js +1 -0
- package/form/helpers/FormContainer/index.js.map +1 -1
- package/form/helpers/Label/label.cjs +1 -0
- package/form/helpers/Label/label.cjs.map +1 -1
- package/form/helpers/Label/label.js +1 -0
- package/form/helpers/Label/label.js.map +1 -1
- package/form/inputs/InputMask/index.cjs +1 -0
- package/form/inputs/InputMask/index.cjs.map +1 -1
- package/form/inputs/InputMask/index.js +1 -0
- package/form/inputs/InputMask/index.js.map +1 -1
- package/form/inputs/InputNumber/index.cjs +1 -0
- package/form/inputs/InputNumber/index.cjs.map +1 -1
- package/form/inputs/InputNumber/index.js +1 -0
- package/form/inputs/InputNumber/index.js.map +1 -1
- package/form/inputs/InputPassword/index.cjs +1 -0
- package/form/inputs/InputPassword/index.cjs.map +1 -1
- package/form/inputs/InputPassword/index.js +1 -0
- package/form/inputs/InputPassword/index.js.map +1 -1
- package/form/inputs/InputSwitch/index.cjs +1 -0
- package/form/inputs/InputSwitch/index.cjs.map +1 -1
- package/form/inputs/InputSwitch/index.js +1 -0
- package/form/inputs/InputSwitch/index.js.map +1 -1
- package/form/inputs/InputText/index.cjs +1 -0
- package/form/inputs/InputText/index.cjs.map +1 -1
- package/form/inputs/InputText/index.js +1 -0
- package/form/inputs/InputText/index.js.map +1 -1
- package/form/inputs/InputTextarea/index.cjs +1 -0
- package/form/inputs/InputTextarea/index.cjs.map +1 -1
- package/form/inputs/InputTextarea/index.js +1 -0
- package/form/inputs/InputTextarea/index.js.map +1 -1
- package/form/inputs/PhoneInput/index.cjs +1 -0
- package/form/inputs/PhoneInput/index.cjs.map +1 -1
- package/form/inputs/PhoneInput/index.js +1 -0
- package/form/inputs/PhoneInput/index.js.map +1 -1
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.cjs +1 -0
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.cjs.map +1 -1
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.js +1 -0
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.js.map +1 -1
- package/form/selects/AutoComplete/index.cjs +1 -0
- package/form/selects/AutoComplete/index.cjs.map +1 -1
- package/form/selects/AutoComplete/index.js +1 -0
- package/form/selects/AutoComplete/index.js.map +1 -1
- package/form/selects/Dropdown/index.cjs +1 -0
- package/form/selects/Dropdown/index.cjs.map +1 -1
- package/form/selects/Dropdown/index.js +1 -0
- package/form/selects/Dropdown/index.js.map +1 -1
- package/form/selects/ListBox/index.cjs +1 -0
- package/form/selects/ListBox/index.cjs.map +1 -1
- package/form/selects/ListBox/index.js +1 -0
- package/form/selects/ListBox/index.js.map +1 -1
- package/form/selects/MultiSelect/index.cjs +1 -0
- package/form/selects/MultiSelect/index.cjs.map +1 -1
- package/form/selects/MultiSelect/index.js +1 -0
- package/form/selects/MultiSelect/index.js.map +1 -1
- package/form/selects/TreeSelect/index.cjs +1 -0
- package/form/selects/TreeSelect/index.cjs.map +1 -1
- package/form/selects/TreeSelect/index.js +1 -0
- package/form/selects/TreeSelect/index.js.map +1 -1
- package/form/selects/helpers/SelectPopupOverlay.cjs +1 -0
- package/form/selects/helpers/SelectPopupOverlay.cjs.map +1 -1
- package/form/selects/helpers/SelectPopupOverlay.js +1 -0
- package/form/selects/helpers/SelectPopupOverlay.js.map +1 -1
- package/form-renderer/components/layout/FieldWrapper.cjs +1 -0
- package/form-renderer/components/layout/FieldWrapper.cjs.map +1 -1
- package/form-renderer/components/layout/FieldWrapper.js +1 -0
- package/form-renderer/components/layout/FieldWrapper.js.map +1 -1
- package/hooks/shadowPresets.cjs +1 -0
- package/hooks/shadowPresets.cjs.map +1 -1
- package/hooks/shadowPresets.js +1 -0
- package/hooks/shadowPresets.js.map +1 -1
- package/hooks/useFocusStyles.cjs +1 -0
- package/hooks/useFocusStyles.cjs.map +1 -1
- package/hooks/useFocusStyles.js +1 -0
- package/hooks/useFocusStyles.js.map +1 -1
- package/index.cjs +2 -0
- package/index.cjs.map +1 -1
- package/index.d.ts +35 -3
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/layout/Center/index.cjs +1 -0
- package/layout/Center/index.cjs.map +1 -1
- package/layout/Center/index.js +1 -0
- package/layout/Center/index.js.map +1 -1
- package/layout/Container/container.cjs +1 -0
- package/layout/Container/container.cjs.map +1 -1
- package/layout/Container/container.js +1 -0
- package/layout/Container/container.js.map +1 -1
- package/layout/Flex/index.cjs +1 -0
- package/layout/Flex/index.cjs.map +1 -1
- package/layout/Flex/index.js +1 -0
- package/layout/Flex/index.js.map +1 -1
- package/layout/HStack/index.cjs +1 -0
- package/layout/HStack/index.cjs.map +1 -1
- package/layout/HStack/index.js +1 -0
- package/layout/HStack/index.js.map +1 -1
- package/layout/List/index.cjs +1 -0
- package/layout/List/index.cjs.map +1 -1
- package/layout/List/index.js +1 -0
- package/layout/List/index.js.map +1 -1
- package/layout/ListItem/index.cjs +1 -0
- package/layout/ListItem/index.cjs.map +1 -1
- package/layout/ListItem/index.js +1 -0
- package/layout/ListItem/index.js.map +1 -1
- package/layout/ScrollView/index.cjs +1 -0
- package/layout/ScrollView/index.cjs.map +1 -1
- package/layout/ScrollView/index.js +1 -0
- package/layout/ScrollView/index.js.map +1 -1
- package/layout/VStack/index.cjs +1 -0
- package/layout/VStack/index.cjs.map +1 -1
- package/layout/VStack/index.js +1 -0
- package/layout/VStack/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/types/src/Theme/resolvers.cjs +2 -55
- package/packages/types/src/Theme/resolvers.cjs.map +1 -1
- package/packages/types/src/Theme/resolvers.js +2 -55
- package/packages/types/src/Theme/resolvers.js.map +1 -1
- package/packages/types/src/Theme/semanticTokenNames.cjs +64 -0
- package/packages/types/src/Theme/semanticTokenNames.cjs.map +1 -0
- package/packages/types/src/Theme/semanticTokenNames.js +62 -0
- package/packages/types/src/Theme/semanticTokenNames.js.map +1 -0
- package/primitives/Box/index.cjs +1 -0
- package/primitives/Box/index.cjs.map +1 -1
- package/primitives/Box/index.js +1 -0
- package/primitives/Box/index.js.map +1 -1
- package/primitives/Card/index.cjs +1 -0
- package/primitives/Card/index.cjs.map +1 -1
- package/primitives/Card/index.js +1 -0
- package/primitives/Card/index.js.map +1 -1
- package/primitives/Divider/index.cjs +1 -0
- package/primitives/Divider/index.cjs.map +1 -1
- package/primitives/Divider/index.js +1 -0
- package/primitives/Divider/index.js.map +1 -1
- package/primitives/Heading/index.cjs +1 -0
- package/primitives/Heading/index.cjs.map +1 -1
- package/primitives/Heading/index.js +1 -0
- package/primitives/Heading/index.js.map +1 -1
- package/primitives/Image/index.cjs +1 -0
- package/primitives/Image/index.cjs.map +1 -1
- package/primitives/Image/index.js +1 -0
- package/primitives/Image/index.js.map +1 -1
- package/primitives/Skeleton/index.cjs +1 -0
- package/primitives/Skeleton/index.cjs.map +1 -1
- package/primitives/Skeleton/index.js +1 -0
- package/primitives/Skeleton/index.js.map +1 -1
- package/primitives/Svg/index.cjs +1 -0
- package/primitives/Svg/index.cjs.map +1 -1
- package/primitives/Svg/index.js +1 -0
- package/primitives/Svg/index.js.map +1 -1
- package/primitives/Text/index.cjs +1 -0
- package/primitives/Text/index.cjs.map +1 -1
- package/primitives/Text/index.js +1 -0
- package/primitives/Text/index.js.map +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/MessageComposer/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {View, Text, TextInput, TouchableOpacity} from \"react-native\";\nimport {resolveThemeTokenForNative} from \"@lmb-it/kitsconcertomobile\";\nimport useRtlLineHeight from \"../../hooks/useRtlLineHeight\";\nimport type {IMessageComposerProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Icon} from \"../../primitives\";\nimport {useComponentDefaults} from \"../../hooks\";\n\n/**\n * MessageComposer (native) — attach + multiline input + send, mirroring the\n * app's chat input bar (RN TextInput + TouchableOpacity, library Icon).\n */\nexport function MessageComposer(rawProps: IMessageComposerProps) {\n const props = useComponentDefaults<IMessageComposerProps>(\"MessageComposer\", rawProps).mergedProps;\n const {value, onChangeText, onSend, onAttach, placeholder = \"Message…\", sendDisabled, accentColor = \"brand\", locked, lockedLabel, attachDisabled, attachHint, onSelectionChange, selection, inputRef, testID} = props;\n\n const accent = resolveThemeTokenForNative(accentColor);\n const surface = resolveThemeTokenForNative(\"surface-card\");\n const border = resolveThemeTokenForNative(\"surface-border\");\n const fieldBg = resolveThemeTokenForNative(\"gray.100\");\n const textColor = resolveThemeTokenForNative(\"text\");\n const muted = resolveThemeTokenForNative(\"text-secondary\");\n const disabledBg = resolveThemeTokenForNative(\"gray.300\");\n\n /*\n * ⛔ ARABIC CLIPS WITHOUT AN EXPLICIT LINE BOX. These render RAW\n * react-native <Text> with a fontSize and no lineHeight, so React Native\n * uses the FONT'S natural box — and NotoKufiArabic's is too short for its\n * own ascenders. In an RTL script that does not read as clipping, it reads\n * as a BAD TRANSLATION: ش/س, غ/ع and ة/ه differ only by marks above the\n * baseline. Both are undefined in LTR, so no English layout moves.\n *\n * ⚠️ THE INPUT ITSELF IS DELIBERATELY NOT TOUCHED. The TextInput below is\n * fontSize 14 with no lineHeight for the same reason, but it also carries\n * a hand-tuned single-line height floor and a comment about a two-frame\n * re-measure. Giving it a taller line box without being able to TYPE\n * Arabic into it and watch the field settle would be guessing at the one\n * control a person uses most. Recorded, not changed.\n */\n const rtlLockedLine = useRtlLineHeight(undefined, 13);\n const rtlHintLine = useRtlLineHeight(undefined, 11);\n\n if (locked) {\n return (\n <View\n testID={testID}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingHorizontal: 12,\n paddingVertical: 10,\n backgroundColor: surface,\n borderTopWidth: 1,\n borderTopColor: border,\n }}\n >\n <View\n style={{\n flexGrow: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n backgroundColor: fieldBg,\n borderWidth: 1,\n borderColor: border,\n borderRadius: 999,\n paddingHorizontal: 16,\n paddingVertical: 11,\n }}\n >\n <Icon name=\"lock\" size={17} color={muted} />\n {lockedLabel != null && <Text style={{fontSize: 13, color: muted, ...(rtlLockedLine != null ? {lineHeight: rtlLockedLine} : {})}}>{lockedLabel}</Text>}\n </View>\n </View>\n );\n }\n\n const canSend = sendDisabled != null ? !sendDisabled : value.trim().length > 0;\n\n // Shared field + send (referenced by the default row AND the attach-disabled\n // branch — single source, so the input is never duplicated).\n //\n // onSelectionChange is adapted from RN's NativeSyntheticEvent shape to the\n // platform-agnostic {start, end} contract declared on IMessageComposerProps,\n // so consumers (e.g. @mention pickers) read the same shape on native and web.\n const field = (\n <TextInput\n ref={inputRef as React.Ref<TextInput>}\n style={{\n flex: 1,\n backgroundColor: fieldBg,\n borderRadius: 20,\n paddingHorizontal: 14,\n paddingVertical: 8,\n fontSize: 14,\n color: textColor,\n // Pin a single-line floor (= the 36px send button) so a\n // multiline RN TextInput doesn't measure a taller default on\n // frame 1 then settle on frame 2 — that re-measure re-flexes\n // the chat thread above it (a small shift-then-settle on open).\n // Still grows up to maxHeight when typing multiple lines.\n minHeight: 36,\n maxHeight: 120,\n }}\n placeholder={placeholder}\n placeholderTextColor={muted}\n value={value}\n onChangeText={onChangeText}\n selection={selection as {start: number; end?: number} | undefined}\n onSelectionChange={\n onSelectionChange\n ? e => onSelectionChange({start: e.nativeEvent.selection.start, end: e.nativeEvent.selection.end})\n : undefined\n }\n multiline\n />\n );\n\n const sendBtn = (\n <TouchableOpacity\n onPress={() => canSend && onSend?.()}\n disabled={!canSend}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Send\"\n style={{\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: canSend ? accent : disabledBg,\n }}\n >\n <Icon name=\"send\" size={18} color=\"#FFFFFF\" />\n </TouchableOpacity>\n );\n\n if (attachDisabled) {\n return (\n <View\n testID={testID}\n style={{\n paddingVertical: 10,\n backgroundColor: surface,\n borderTopWidth: 1,\n borderTopColor: border,\n }}\n >\n {attachHint != null && (\n <View style={{flexDirection: \"row\", alignItems: \"center\", gap: 6, paddingHorizontal: 12, paddingBottom: 8}}>\n <Icon name=\"info\" size={12} color={muted} />\n <Text style={{fontSize: 11, color: muted, ...(rtlHintLine != null ? {lineHeight: rtlHintLine} : {})}}>{attachHint}</Text>\n </View>\n )}\n <View style={{flexDirection: \"row\", alignItems: \"flex-end\", gap: 8, paddingHorizontal: 12}}>\n {onAttach != null && (\n <View style={{width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\", opacity: 0.5}}>\n <Icon name=\"paperclip\" size={20} color={muted} />\n </View>\n )}\n {field}\n {sendBtn}\n </View>\n </View>\n );\n }\n\n return (\n <View\n testID={testID}\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-end\",\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n backgroundColor: surface,\n borderTopWidth: 1,\n borderTopColor: border,\n }}\n >\n {onAttach != null && (\n <TouchableOpacity\n onPress={onAttach}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Attach\"\n style={{width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\"}}\n >\n <Icon name=\"paperclip\" size={20} color={muted} />\n </TouchableOpacity>\n )}\n {field}\n {sendBtn}\n </View>\n );\n}\n\nexport default MessageComposer;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/MessageComposer/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {View, Text, TextInput, TouchableOpacity} from \"react-native\";\nimport {resolveThemeTokenForNative} from \"@lmb-it/kitsconcertomobile\";\nimport useRtlLineHeight from \"../../hooks/useRtlLineHeight\";\nimport type {IMessageComposerProps} from \"@lmb-it/kitsconcerto-types\";\nimport {Icon} from \"../../primitives\";\nimport {useComponentDefaults} from \"../../hooks\";\n\n/**\n * MessageComposer (native) — attach + multiline input + send, mirroring the\n * app's chat input bar (RN TextInput + TouchableOpacity, library Icon).\n */\nexport function MessageComposer(rawProps: IMessageComposerProps) {\n const props = useComponentDefaults<IMessageComposerProps>(\"MessageComposer\", rawProps).mergedProps;\n const {value, onChangeText, onSend, onAttach, placeholder = \"Message…\", sendDisabled, accentColor = \"brand\", locked, lockedLabel, attachDisabled, attachHint, onSelectionChange, selection, inputRef, testID} = props;\n\n const accent = resolveThemeTokenForNative(accentColor);\n const surface = resolveThemeTokenForNative(\"surface-card\");\n const border = resolveThemeTokenForNative(\"surface-border\");\n const fieldBg = resolveThemeTokenForNative(\"gray.100\");\n const textColor = resolveThemeTokenForNative(\"text\");\n const muted = resolveThemeTokenForNative(\"text-secondary\");\n const disabledBg = resolveThemeTokenForNative(\"gray.300\");\n\n /*\n * ⛔ ARABIC CLIPS WITHOUT AN EXPLICIT LINE BOX. These render RAW\n * react-native <Text> with a fontSize and no lineHeight, so React Native\n * uses the FONT'S natural box — and NotoKufiArabic's is too short for its\n * own ascenders. In an RTL script that does not read as clipping, it reads\n * as a BAD TRANSLATION: ش/س, غ/ع and ة/ه differ only by marks above the\n * baseline. Both are undefined in LTR, so no English layout moves.\n *\n * ⚠️ THE INPUT ITSELF IS DELIBERATELY NOT TOUCHED. The TextInput below is\n * fontSize 14 with no lineHeight for the same reason, but it also carries\n * a hand-tuned single-line height floor and a comment about a two-frame\n * re-measure. Giving it a taller line box without being able to TYPE\n * Arabic into it and watch the field settle would be guessing at the one\n * control a person uses most. Recorded, not changed.\n */\n const rtlLockedLine = useRtlLineHeight(undefined, 13);\n const rtlHintLine = useRtlLineHeight(undefined, 11);\n\n if (locked) {\n return (\n <View\n testID={testID}\n style={{\n flexDirection: \"row\",\n alignItems: \"center\",\n paddingHorizontal: 12,\n paddingVertical: 10,\n backgroundColor: surface,\n borderTopWidth: 1,\n borderTopColor: border,\n }}\n >\n <View\n style={{\n flexGrow: 1,\n flexDirection: \"row\",\n alignItems: \"center\",\n gap: 10,\n backgroundColor: fieldBg,\n borderWidth: 1,\n borderColor: border,\n borderRadius: 999,\n paddingHorizontal: 16,\n paddingVertical: 11,\n }}\n >\n <Icon name=\"lock\" size={17} color={muted} />\n {lockedLabel != null && <Text style={{fontSize: 13, color: muted, ...(rtlLockedLine != null ? {lineHeight: rtlLockedLine} : {})}}>{lockedLabel}</Text>}\n </View>\n </View>\n );\n }\n\n const canSend = sendDisabled != null ? !sendDisabled : value.trim().length > 0;\n\n // Shared field + send (referenced by the default row AND the attach-disabled\n // branch — single source, so the input is never duplicated).\n //\n // onSelectionChange is adapted from RN's NativeSyntheticEvent shape to the\n // platform-agnostic {start, end} contract declared on IMessageComposerProps,\n // so consumers (e.g. @mention pickers) read the same shape on native and web.\n const field = (\n <TextInput\n ref={inputRef as React.Ref<TextInput>}\n style={{\n flex: 1,\n backgroundColor: fieldBg,\n borderRadius: 20,\n paddingHorizontal: 14,\n paddingVertical: 8,\n fontSize: 14,\n color: textColor,\n // Pin a single-line floor (= the 36px send button) so a\n // multiline RN TextInput doesn't measure a taller default on\n // frame 1 then settle on frame 2 — that re-measure re-flexes\n // the chat thread above it (a small shift-then-settle on open).\n // Still grows up to maxHeight when typing multiple lines.\n minHeight: 36,\n maxHeight: 120,\n }}\n placeholder={placeholder}\n placeholderTextColor={muted}\n value={value}\n onChangeText={onChangeText}\n selection={selection as {start: number; end?: number} | undefined}\n onSelectionChange={\n onSelectionChange\n ? e => onSelectionChange({start: e.nativeEvent.selection.start, end: e.nativeEvent.selection.end})\n : undefined\n }\n multiline\n />\n );\n\n const sendBtn = (\n <TouchableOpacity\n onPress={() => canSend && onSend?.()}\n disabled={!canSend}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Send\"\n style={{\n width: 36,\n height: 36,\n borderRadius: 18,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: canSend ? accent : disabledBg,\n }}\n >\n <Icon name=\"send\" size={18} color=\"#FFFFFF\" />\n </TouchableOpacity>\n );\n\n if (attachDisabled) {\n return (\n <View\n testID={testID}\n style={{\n paddingVertical: 10,\n backgroundColor: surface,\n borderTopWidth: 1,\n borderTopColor: border,\n }}\n >\n {attachHint != null && (\n <View style={{flexDirection: \"row\", alignItems: \"center\", gap: 6, paddingHorizontal: 12, paddingBottom: 8}}>\n <Icon name=\"info\" size={12} color={muted} />\n <Text style={{fontSize: 11, color: muted, ...(rtlHintLine != null ? {lineHeight: rtlHintLine} : {})}}>{attachHint}</Text>\n </View>\n )}\n <View style={{flexDirection: \"row\", alignItems: \"flex-end\", gap: 8, paddingHorizontal: 12}}>\n {onAttach != null && (\n <View style={{width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\", opacity: 0.5}}>\n <Icon name=\"paperclip\" size={20} color={muted} />\n </View>\n )}\n {field}\n {sendBtn}\n </View>\n </View>\n );\n }\n\n return (\n <View\n testID={testID}\n style={{\n flexDirection: \"row\",\n alignItems: \"flex-end\",\n gap: 8,\n paddingHorizontal: 12,\n paddingVertical: 10,\n backgroundColor: surface,\n borderTopWidth: 1,\n borderTopColor: border,\n }}\n >\n {onAttach != null && (\n <TouchableOpacity\n onPress={onAttach}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Attach\"\n style={{width: 36, height: 36, alignItems: \"center\", justifyContent: \"center\"}}\n >\n <Icon name=\"paperclip\" size={20} color={muted} />\n </TouchableOpacity>\n )}\n {field}\n {sendBtn}\n </View>\n );\n}\n\nexport default MessageComposer;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,SAAS,gBAAgB,QAAA,EAAiC;AAC7D,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAA4C,iBAAA,EAAmB,QAAQ,CAAA,CAAE,WAAA;AACvF,EAAA,MAAM,EAAC,KAAA,EAAO,YAAA,EAAc,QAAQ,QAAA,EAAU,WAAA,GAAc,iBAAY,YAAA,EAAc,WAAA,GAAc,OAAA,EAAS,MAAA,EAAQ,aAAa,cAAA,EAAgB,UAAA,EAAY,mBAAmB,SAAA,EAAW,QAAA,EAAU,QAAM,GAAI,KAAA;AAEhN,EAAA,MAAM,MAAA,GAAS,2BAA2B,WAAW,CAAA;AACrD,EAAA,MAAM,OAAA,GAAU,2BAA2B,cAAc,CAAA;AACzD,EAAA,MAAM,MAAA,GAAS,2BAA2B,gBAAgB,CAAA;AAC1D,EAAA,MAAM,OAAA,GAAU,2BAA2B,UAAU,CAAA;AACrD,EAAA,MAAM,SAAA,GAAY,2BAA2B,MAAM,CAAA;AACnD,EAAA,MAAM,KAAA,GAAQ,2BAA2B,gBAAgB,CAAA;AACzD,EAAA,MAAM,UAAA,GAAa,2BAA2B,UAAU,CAAA;AAiBxD,EAAA,MAAM,aAAA,GAAgB,gBAAA,CAAiB,MAAA,EAAW,EAAE,CAAA;AACpD,EAAA,MAAM,WAAA,GAAc,gBAAA,CAAiB,MAAA,EAAW,EAAE,CAAA;AAElD,EAAA,IAAI,MAAA,EAAQ;AACR,IAAA,uBACI,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACH,aAAA,EAAe,KAAA;AAAA,UACf,UAAA,EAAY,QAAA;AAAA,UACZ,iBAAA,EAAmB,EAAA;AAAA,UACnB,eAAA,EAAiB,EAAA;AAAA,UACjB,eAAA,EAAiB,OAAA;AAAA,UACjB,cAAA,EAAgB,CAAA;AAAA,UAChB,cAAA,EAAgB;AAAA,SACpB;AAAA,QAEA,QAAA,kBAAA,IAAA;AAAA,UAAC,IAAA;AAAA,UAAA;AAAA,YACG,KAAA,EAAO;AAAA,cACH,QAAA,EAAU,CAAA;AAAA,cACV,aAAA,EAAe,KAAA;AAAA,cACf,UAAA,EAAY,QAAA;AAAA,cACZ,GAAA,EAAK,EAAA;AAAA,cACL,eAAA,EAAiB,OAAA;AAAA,cACjB,WAAA,EAAa,CAAA;AAAA,cACb,WAAA,EAAa,MAAA;AAAA,cACb,YAAA,EAAc,GAAA;AAAA,cACd,iBAAA,EAAmB,EAAA;AAAA,cACnB,eAAA,EAAiB;AAAA,aACrB;AAAA,YAEA,QAAA,EAAA;AAAA,8BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,MAAA,EAAO,IAAA,EAAM,EAAA,EAAI,OAAO,KAAA,EAAO,CAAA;AAAA,cACzC,WAAA,IAAe,wBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,OAAO,EAAC,QAAA,EAAU,IAAI,KAAA,EAAO,KAAA,EAAO,GAAI,aAAA,IAAiB,IAAA,GAAO,EAAC,UAAA,EAAY,aAAA,KAAiB,EAAC,IAAM,QAAA,EAAA,WAAA,EAAY;AAAA;AAAA;AAAA;AACnJ;AAAA,KACJ;AAAA,EAER;AAEA,EAAA,MAAM,OAAA,GAAU,gBAAgB,IAAA,GAAO,CAAC,eAAe,KAAA,CAAM,IAAA,GAAO,MAAA,GAAS,CAAA;AAQ7E,EAAA,MAAM,KAAA,mBACF,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,GAAA,EAAK,QAAA;AAAA,MACL,KAAA,EAAO;AAAA,QACH,IAAA,EAAM,CAAA;AAAA,QACN,eAAA,EAAiB,OAAA;AAAA,QACjB,YAAA,EAAc,EAAA;AAAA,QACd,iBAAA,EAAmB,EAAA;AAAA,QACnB,eAAA,EAAiB,CAAA;AAAA,QACjB,QAAA,EAAU,EAAA;AAAA,QACV,KAAA,EAAO,SAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAMP,SAAA,EAAW,EAAA;AAAA,QACX,SAAA,EAAW;AAAA,OACf;AAAA,MACA,WAAA;AAAA,MACA,oBAAA,EAAsB,KAAA;AAAA,MACtB,KAAA;AAAA,MACA,YAAA;AAAA,MACA,SAAA;AAAA,MACA,mBACI,iBAAA,GACM,CAAA,CAAA,KAAK,iBAAA,CAAkB,EAAC,OAAO,CAAA,CAAE,WAAA,CAAY,SAAA,CAAU,KAAA,EAAO,KAAK,CAAA,CAAE,WAAA,CAAY,SAAA,CAAU,GAAA,EAAI,CAAA,GAC/F,MAAA;AAAA,MAEV,SAAA,EAAS;AAAA;AAAA,GACb;AAGJ,EAAA,MAAM,OAAA,mBACF,GAAA;AAAA,IAAC,gBAAA;AAAA,IAAA;AAAA,MACG,OAAA,EAAS,MAAM,OAAA,IAAW,MAAA,IAAS;AAAA,MACnC,UAAU,CAAC,OAAA;AAAA,MACX,iBAAA,EAAkB,QAAA;AAAA,MAClB,kBAAA,EAAmB,MAAA;AAAA,MACnB,KAAA,EAAO;AAAA,QACH,KAAA,EAAO,EAAA;AAAA,QACP,MAAA,EAAQ,EAAA;AAAA,QACR,YAAA,EAAc,EAAA;AAAA,QACd,UAAA,EAAY,QAAA;AAAA,QACZ,cAAA,EAAgB,QAAA;AAAA,QAChB,eAAA,EAAiB,UAAU,MAAA,GAAS;AAAA,OACxC;AAAA,MAEA,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,QAAO,IAAA,EAAM,EAAA,EAAI,OAAM,SAAA,EAAU;AAAA;AAAA,GAChD;AAGJ,EAAA,IAAI,cAAA,EAAgB;AAChB,IAAA,uBACI,IAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,MAAA;AAAA,QACA,KAAA,EAAO;AAAA,UACH,eAAA,EAAiB,EAAA;AAAA,UACjB,eAAA,EAAiB,OAAA;AAAA,UACjB,cAAA,EAAgB,CAAA;AAAA,UAChB,cAAA,EAAgB;AAAA,SACpB;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,UAAA,IAAc,IAAA,oBACX,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAC,aAAA,EAAe,KAAA,EAAO,UAAA,EAAY,QAAA,EAAU,KAAK,CAAA,EAAG,iBAAA,EAAmB,EAAA,EAAI,aAAA,EAAe,GAAC,EACrG,QAAA,EAAA;AAAA,4BAAA,GAAA,CAAC,QAAK,IAAA,EAAK,MAAA,EAAO,IAAA,EAAM,EAAA,EAAI,OAAO,KAAA,EAAO,CAAA;AAAA,gCACzC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAC,QAAA,EAAU,EAAA,EAAI,OAAO,KAAA,EAAO,GAAI,WAAA,IAAe,IAAA,GAAO,EAAC,UAAA,EAAY,WAAA,KAAe,EAAC,IAAM,QAAA,EAAA,UAAA,EAAW;AAAA,WAAA,EACtH,CAAA;AAAA,0BAEJ,IAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAC,aAAA,EAAe,KAAA,EAAO,UAAA,EAAY,UAAA,EAAY,GAAA,EAAK,CAAA,EAAG,iBAAA,EAAmB,EAAA,EAAE,EACpF,QAAA,EAAA;AAAA,YAAA,QAAA,IAAY,IAAA,oBACT,GAAA,CAAC,IAAA,EAAA,EAAK,KAAA,EAAO,EAAC,OAAO,EAAA,EAAI,MAAA,EAAQ,EAAA,EAAI,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,UAAU,OAAA,EAAS,GAAA,EAAG,EAC7F,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAY,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,KAAA,EAAO,CAAA,EACnD,CAAA;AAAA,YAEH,KAAA;AAAA,YACA;AAAA,WAAA,EACL;AAAA;AAAA;AAAA,KACJ;AAAA,EAER;AAEA,EAAA,uBACI,IAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,MAAA;AAAA,MACA,KAAA,EAAO;AAAA,QACH,aAAA,EAAe,KAAA;AAAA,QACf,UAAA,EAAY,UAAA;AAAA,QACZ,GAAA,EAAK,CAAA;AAAA,QACL,iBAAA,EAAmB,EAAA;AAAA,QACnB,eAAA,EAAiB,EAAA;AAAA,QACjB,eAAA,EAAiB,OAAA;AAAA,QACjB,cAAA,EAAgB,CAAA;AAAA,QAChB,cAAA,EAAgB;AAAA,OACpB;AAAA,MAEC,QAAA,EAAA;AAAA,QAAA,QAAA,IAAY,IAAA,oBACT,GAAA;AAAA,UAAC,gBAAA;AAAA,UAAA;AAAA,YACG,OAAA,EAAS,QAAA;AAAA,YACT,iBAAA,EAAkB,QAAA;AAAA,YAClB,kBAAA,EAAmB,QAAA;AAAA,YACnB,KAAA,EAAO,EAAC,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAI,UAAA,EAAY,QAAA,EAAU,cAAA,EAAgB,QAAA,EAAQ;AAAA,YAE7E,8BAAC,IAAA,EAAA,EAAK,IAAA,EAAK,aAAY,IAAA,EAAM,EAAA,EAAI,OAAO,KAAA,EAAO;AAAA;AAAA,SACnD;AAAA,QAEH,KAAA;AAAA,QACA;AAAA;AAAA;AAAA,GACL;AAER;;;;"}
|
|
@@ -61,6 +61,7 @@ require('yup');
|
|
|
61
61
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
62
62
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
64
|
+
require('../../packages/types/src/Theme/resolvers.cjs');
|
|
64
65
|
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
65
66
|
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
66
67
|
var useSeparator = require('../../apps/mobile/src/Factory/useSeparator.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/SegmentedControl/index.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport type {ISegmentedControlProps} from \"@lmb-it/kitsconcerto-types\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport {useComponentDefaults} from \"../../hooks\";\nimport {useKitsTheme} from \"../../contexts/Theme\";\n\nconst SIZE_MAP = {\n sm: {height: 30, fontSize: 11, px: 8, py: 4, descSize: 9.5, gap: 2},\n md: {height: 36, fontSize: 12.5, px: 12, py: 6, descSize: 10.5, gap: 4},\n lg: {height: 44, fontSize: 14, px: 16, py: 10, descSize: 11, gap: 4},\n} as const;\n\nexport function SegmentedControl<V extends string | number = string>(rawProps: ISegmentedControlProps<V>) {\n const {mergedProps: props, themeStyle} = useComponentDefaults<ISegmentedControlProps<V>>(\n \"SegmentedControl\",\n rawProps as any,\n );\n\n const {\n options,\n value,\n onChange,\n size = \"md\",\n fullWidth = true,\n disabled,\n id,\n testID,\n ...rest\n } = props;\n\n const {cssProps, nativeProps} = useSeparator<HTMLDivElement>(rest as any);\n const {resolveToken} = useKitsTheme();\n const sizeConfig = SIZE_MAP[size] ?? SIZE_MAP.md;\n\n const trackBg = resolveToken(\"surface-ground\");\n const borderColor = resolveToken(\"surface-border\");\n const inactiveText = resolveToken(\"text-secondary\");\n\n const containerCss = useMemo(\n () => ({\n ...themeStyle,\n ...cssProps,\n display: \"inline-flex\" as const,\n flexDirection: \"row\" as const,\n alignItems: \"stretch\" as const,\n gap: 2,\n padding: 2,\n backgroundColor: trackBg,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n ...(fullWidth ? {width: \"100%\"} : {}),\n ...(disabled ? {opacity: \"0.55\", pointerEvents: \"none\" as const} : {}),\n }),\n [themeStyle, cssProps, trackBg, borderColor, fullWidth, disabled],\n );\n\n return (\n <ResponsiveElement\n as=\"Box\"\n //@ts-ignore\n cssProps={containerCss}\n nativeProps={{...nativeProps, id, \"data-testid\": testID, role: \"tablist\"}}\n additionalStyles={{}}\n >\n {options.map(opt => {\n const selected = opt.value === value;\n const isDisabled = disabled || opt.disabled;\n const accent = opt.color ? resolveToken(opt.color) : resolveToken(\"primary\");\n\n const buttonCss = {\n flex: fullWidth ? 1 : undefined,\n minHeight: sizeConfig.height,\n paddingLeft: sizeConfig.px,\n paddingRight: sizeConfig.px,\n paddingTop: sizeConfig.py,\n paddingBottom: sizeConfig.py,\n borderRadius: 6,\n border: \"none\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n background: selected ? accent : \"transparent\",\n color: selected ? \"#FFFFFF\" : inactiveText,\n fontFamily: \"inherit\",\n fontWeight: \"700\",\n fontSize: sizeConfig.fontSize,\n lineHeight: \"1.1\",\n transition: \"background-color 0.15s, color 0.15s, box-shadow 0.15s\",\n boxShadow: selected ? \"0 1px 2px rgba(0,0,0,0.06)\" : \"none\",\n outline: \"none\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: sizeConfig.gap,\n textAlign: \"center\" as const,\n };\n\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n disabled={isDisabled}\n onClick={() => !isDisabled && onChange(opt.value)}\n style={buttonCss as any}\n >\n <span style={{lineHeight: \"1.1\"}}>{opt.label}</span>\n {opt.description && (\n <span\n style={{\n fontSize: sizeConfig.descSize,\n fontWeight: 600,\n opacity: selected ? 0.85 : 0.7,\n }}\n >\n {opt.description}\n </span>\n )}\n </button>\n );\n })}\n </ResponsiveElement>\n );\n}\n\nexport default SegmentedControl;\n"],"names":["useComponentDefaults","useSeparator","useKitsTheme","useMemo","jsx","ResponsiveElement","jsxs"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/SegmentedControl/index.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport type {ISegmentedControlProps} from \"@lmb-it/kitsconcerto-types\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport {useComponentDefaults} from \"../../hooks\";\nimport {useKitsTheme} from \"../../contexts/Theme\";\n\nconst SIZE_MAP = {\n sm: {height: 30, fontSize: 11, px: 8, py: 4, descSize: 9.5, gap: 2},\n md: {height: 36, fontSize: 12.5, px: 12, py: 6, descSize: 10.5, gap: 4},\n lg: {height: 44, fontSize: 14, px: 16, py: 10, descSize: 11, gap: 4},\n} as const;\n\nexport function SegmentedControl<V extends string | number = string>(rawProps: ISegmentedControlProps<V>) {\n const {mergedProps: props, themeStyle} = useComponentDefaults<ISegmentedControlProps<V>>(\n \"SegmentedControl\",\n rawProps as any,\n );\n\n const {\n options,\n value,\n onChange,\n size = \"md\",\n fullWidth = true,\n disabled,\n id,\n testID,\n ...rest\n } = props;\n\n const {cssProps, nativeProps} = useSeparator<HTMLDivElement>(rest as any);\n const {resolveToken} = useKitsTheme();\n const sizeConfig = SIZE_MAP[size] ?? SIZE_MAP.md;\n\n const trackBg = resolveToken(\"surface-ground\");\n const borderColor = resolveToken(\"surface-border\");\n const inactiveText = resolveToken(\"text-secondary\");\n\n const containerCss = useMemo(\n () => ({\n ...themeStyle,\n ...cssProps,\n display: \"inline-flex\" as const,\n flexDirection: \"row\" as const,\n alignItems: \"stretch\" as const,\n gap: 2,\n padding: 2,\n backgroundColor: trackBg,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n ...(fullWidth ? {width: \"100%\"} : {}),\n ...(disabled ? {opacity: \"0.55\", pointerEvents: \"none\" as const} : {}),\n }),\n [themeStyle, cssProps, trackBg, borderColor, fullWidth, disabled],\n );\n\n return (\n <ResponsiveElement\n as=\"Box\"\n //@ts-ignore\n cssProps={containerCss}\n nativeProps={{...nativeProps, id, \"data-testid\": testID, role: \"tablist\"}}\n additionalStyles={{}}\n >\n {options.map(opt => {\n const selected = opt.value === value;\n const isDisabled = disabled || opt.disabled;\n const accent = opt.color ? resolveToken(opt.color) : resolveToken(\"primary\");\n\n const buttonCss = {\n flex: fullWidth ? 1 : undefined,\n minHeight: sizeConfig.height,\n paddingLeft: sizeConfig.px,\n paddingRight: sizeConfig.px,\n paddingTop: sizeConfig.py,\n paddingBottom: sizeConfig.py,\n borderRadius: 6,\n border: \"none\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n background: selected ? accent : \"transparent\",\n color: selected ? \"#FFFFFF\" : inactiveText,\n fontFamily: \"inherit\",\n fontWeight: \"700\",\n fontSize: sizeConfig.fontSize,\n lineHeight: \"1.1\",\n transition: \"background-color 0.15s, color 0.15s, box-shadow 0.15s\",\n boxShadow: selected ? \"0 1px 2px rgba(0,0,0,0.06)\" : \"none\",\n outline: \"none\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: sizeConfig.gap,\n textAlign: \"center\" as const,\n };\n\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n disabled={isDisabled}\n onClick={() => !isDisabled && onChange(opt.value)}\n style={buttonCss as any}\n >\n <span style={{lineHeight: \"1.1\"}}>{opt.label}</span>\n {opt.description && (\n <span\n style={{\n fontSize: sizeConfig.descSize,\n fontWeight: 600,\n opacity: selected ? 0.85 : 0.7,\n }}\n >\n {opt.description}\n </span>\n )}\n </button>\n );\n })}\n </ResponsiveElement>\n );\n}\n\nexport default SegmentedControl;\n"],"names":["useComponentDefaults","useSeparator","useKitsTheme","useMemo","jsx","ResponsiveElement","jsxs"],"mappings":"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"}
|
|
@@ -57,6 +57,7 @@ import 'yup';
|
|
|
57
57
|
import '../../packages/types/src/Css/map/index.js';
|
|
58
58
|
import '../../packages/types/src/Theme/shadows.js';
|
|
59
59
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
60
|
+
import '../../packages/types/src/Theme/resolvers.js';
|
|
60
61
|
import '../../packages/types/src/Theme/alphaColors.js';
|
|
61
62
|
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
62
63
|
import useSeparator from '../../apps/mobile/src/Factory/useSeparator.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/SegmentedControl/index.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport type {ISegmentedControlProps} from \"@lmb-it/kitsconcerto-types\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport {useComponentDefaults} from \"../../hooks\";\nimport {useKitsTheme} from \"../../contexts/Theme\";\n\nconst SIZE_MAP = {\n sm: {height: 30, fontSize: 11, px: 8, py: 4, descSize: 9.5, gap: 2},\n md: {height: 36, fontSize: 12.5, px: 12, py: 6, descSize: 10.5, gap: 4},\n lg: {height: 44, fontSize: 14, px: 16, py: 10, descSize: 11, gap: 4},\n} as const;\n\nexport function SegmentedControl<V extends string | number = string>(rawProps: ISegmentedControlProps<V>) {\n const {mergedProps: props, themeStyle} = useComponentDefaults<ISegmentedControlProps<V>>(\n \"SegmentedControl\",\n rawProps as any,\n );\n\n const {\n options,\n value,\n onChange,\n size = \"md\",\n fullWidth = true,\n disabled,\n id,\n testID,\n ...rest\n } = props;\n\n const {cssProps, nativeProps} = useSeparator<HTMLDivElement>(rest as any);\n const {resolveToken} = useKitsTheme();\n const sizeConfig = SIZE_MAP[size] ?? SIZE_MAP.md;\n\n const trackBg = resolveToken(\"surface-ground\");\n const borderColor = resolveToken(\"surface-border\");\n const inactiveText = resolveToken(\"text-secondary\");\n\n const containerCss = useMemo(\n () => ({\n ...themeStyle,\n ...cssProps,\n display: \"inline-flex\" as const,\n flexDirection: \"row\" as const,\n alignItems: \"stretch\" as const,\n gap: 2,\n padding: 2,\n backgroundColor: trackBg,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n ...(fullWidth ? {width: \"100%\"} : {}),\n ...(disabled ? {opacity: \"0.55\", pointerEvents: \"none\" as const} : {}),\n }),\n [themeStyle, cssProps, trackBg, borderColor, fullWidth, disabled],\n );\n\n return (\n <ResponsiveElement\n as=\"Box\"\n //@ts-ignore\n cssProps={containerCss}\n nativeProps={{...nativeProps, id, \"data-testid\": testID, role: \"tablist\"}}\n additionalStyles={{}}\n >\n {options.map(opt => {\n const selected = opt.value === value;\n const isDisabled = disabled || opt.disabled;\n const accent = opt.color ? resolveToken(opt.color) : resolveToken(\"primary\");\n\n const buttonCss = {\n flex: fullWidth ? 1 : undefined,\n minHeight: sizeConfig.height,\n paddingLeft: sizeConfig.px,\n paddingRight: sizeConfig.px,\n paddingTop: sizeConfig.py,\n paddingBottom: sizeConfig.py,\n borderRadius: 6,\n border: \"none\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n background: selected ? accent : \"transparent\",\n color: selected ? \"#FFFFFF\" : inactiveText,\n fontFamily: \"inherit\",\n fontWeight: \"700\",\n fontSize: sizeConfig.fontSize,\n lineHeight: \"1.1\",\n transition: \"background-color 0.15s, color 0.15s, box-shadow 0.15s\",\n boxShadow: selected ? \"0 1px 2px rgba(0,0,0,0.06)\" : \"none\",\n outline: \"none\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: sizeConfig.gap,\n textAlign: \"center\" as const,\n };\n\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n disabled={isDisabled}\n onClick={() => !isDisabled && onChange(opt.value)}\n style={buttonCss as any}\n >\n <span style={{lineHeight: \"1.1\"}}>{opt.label}</span>\n {opt.description && (\n <span\n style={{\n fontSize: sizeConfig.descSize,\n fontWeight: 600,\n opacity: selected ? 0.85 : 0.7,\n }}\n >\n {opt.description}\n </span>\n )}\n </button>\n );\n })}\n </ResponsiveElement>\n );\n}\n\nexport default SegmentedControl;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/SegmentedControl/index.tsx"],"sourcesContent":["import React, {useMemo} from \"react\";\nimport type {ISegmentedControlProps} from \"@lmb-it/kitsconcerto-types\";\nimport {ResponsiveElement, useSeparator} from \"../../factory\";\nimport {useComponentDefaults} from \"../../hooks\";\nimport {useKitsTheme} from \"../../contexts/Theme\";\n\nconst SIZE_MAP = {\n sm: {height: 30, fontSize: 11, px: 8, py: 4, descSize: 9.5, gap: 2},\n md: {height: 36, fontSize: 12.5, px: 12, py: 6, descSize: 10.5, gap: 4},\n lg: {height: 44, fontSize: 14, px: 16, py: 10, descSize: 11, gap: 4},\n} as const;\n\nexport function SegmentedControl<V extends string | number = string>(rawProps: ISegmentedControlProps<V>) {\n const {mergedProps: props, themeStyle} = useComponentDefaults<ISegmentedControlProps<V>>(\n \"SegmentedControl\",\n rawProps as any,\n );\n\n const {\n options,\n value,\n onChange,\n size = \"md\",\n fullWidth = true,\n disabled,\n id,\n testID,\n ...rest\n } = props;\n\n const {cssProps, nativeProps} = useSeparator<HTMLDivElement>(rest as any);\n const {resolveToken} = useKitsTheme();\n const sizeConfig = SIZE_MAP[size] ?? SIZE_MAP.md;\n\n const trackBg = resolveToken(\"surface-ground\");\n const borderColor = resolveToken(\"surface-border\");\n const inactiveText = resolveToken(\"text-secondary\");\n\n const containerCss = useMemo(\n () => ({\n ...themeStyle,\n ...cssProps,\n display: \"inline-flex\" as const,\n flexDirection: \"row\" as const,\n alignItems: \"stretch\" as const,\n gap: 2,\n padding: 2,\n backgroundColor: trackBg,\n border: `1px solid ${borderColor}`,\n borderRadius: 8,\n ...(fullWidth ? {width: \"100%\"} : {}),\n ...(disabled ? {opacity: \"0.55\", pointerEvents: \"none\" as const} : {}),\n }),\n [themeStyle, cssProps, trackBg, borderColor, fullWidth, disabled],\n );\n\n return (\n <ResponsiveElement\n as=\"Box\"\n //@ts-ignore\n cssProps={containerCss}\n nativeProps={{...nativeProps, id, \"data-testid\": testID, role: \"tablist\"}}\n additionalStyles={{}}\n >\n {options.map(opt => {\n const selected = opt.value === value;\n const isDisabled = disabled || opt.disabled;\n const accent = opt.color ? resolveToken(opt.color) : resolveToken(\"primary\");\n\n const buttonCss = {\n flex: fullWidth ? 1 : undefined,\n minHeight: sizeConfig.height,\n paddingLeft: sizeConfig.px,\n paddingRight: sizeConfig.px,\n paddingTop: sizeConfig.py,\n paddingBottom: sizeConfig.py,\n borderRadius: 6,\n border: \"none\",\n cursor: isDisabled ? \"not-allowed\" : \"pointer\",\n background: selected ? accent : \"transparent\",\n color: selected ? \"#FFFFFF\" : inactiveText,\n fontFamily: \"inherit\",\n fontWeight: \"700\",\n fontSize: sizeConfig.fontSize,\n lineHeight: \"1.1\",\n transition: \"background-color 0.15s, color 0.15s, box-shadow 0.15s\",\n boxShadow: selected ? \"0 1px 2px rgba(0,0,0,0.06)\" : \"none\",\n outline: \"none\",\n display: \"flex\",\n flexDirection: \"column\" as const,\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: sizeConfig.gap,\n textAlign: \"center\" as const,\n };\n\n return (\n <button\n key={String(opt.value)}\n type=\"button\"\n role=\"tab\"\n aria-selected={selected}\n disabled={isDisabled}\n onClick={() => !isDisabled && onChange(opt.value)}\n style={buttonCss as any}\n >\n <span style={{lineHeight: \"1.1\"}}>{opt.label}</span>\n {opt.description && (\n <span\n style={{\n fontSize: sizeConfig.descSize,\n fontWeight: 600,\n opacity: selected ? 0.85 : 0.7,\n }}\n >\n {opt.description}\n </span>\n )}\n </button>\n );\n })}\n </ResponsiveElement>\n );\n}\n\nexport default SegmentedControl;\n"],"names":[],"mappings":"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"}
|
|
@@ -61,6 +61,7 @@ require('yup');
|
|
|
61
61
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
62
62
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
64
|
+
require('../../packages/types/src/Theme/resolvers.cjs');
|
|
64
65
|
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
65
66
|
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
66
67
|
require('../../apps/mobile/src/Factory/DimensionsContext.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/SkeletonText/index.native.tsx"],"sourcesContent":["import React from 'react';\nimport {SkeletonText as GSkeletonText} from '@lmb-it/kitsconcertomobile';\nimport type {ISkeletonText} from \"@lmb-it/kitsconcerto-types\";\n\nconst Skeleton: React.FC<ISkeletonText> = ({\n lines = 3,\n gap = 1,\n startColor,\n isLoaded,\n speed,\n animation,\n ...props\n }) => {\n\n return (\n <GSkeletonText\n _lines={lines}\n gap={gap}\n startColor={startColor ?? 'bg-background-200'}\n speed={speed}\n isLoaded={isLoaded}\n className=\"h-3\"\n />\n );\n};\n\nexport default Skeleton;\n"],"names":["jsx","GSkeletonText"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/SkeletonText/index.native.tsx"],"sourcesContent":["import React from 'react';\nimport {SkeletonText as GSkeletonText} from '@lmb-it/kitsconcertomobile';\nimport type {ISkeletonText} from \"@lmb-it/kitsconcerto-types\";\n\nconst Skeleton: React.FC<ISkeletonText> = ({\n lines = 3,\n gap = 1,\n startColor,\n isLoaded,\n speed,\n animation,\n ...props\n }) => {\n\n return (\n <GSkeletonText\n _lines={lines}\n gap={gap}\n startColor={startColor ?? 'bg-background-200'}\n speed={speed}\n isLoaded={isLoaded}\n className=\"h-3\"\n />\n );\n};\n\nexport default Skeleton;\n"],"names":["jsx","GSkeletonText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,WAAoC,CAAC;AAAA,EACI,KAAA,GAAQ,CAAA;AAAA,EACR,GAAA,GAAM,CAAA;AAAA,EACN,UAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAM;AAE7C,EAAA,uBACIA,cAAA;AAAA,IAACC,kBAAA;AAAA,IAAA;AAAA,MACG,MAAA,EAAQ,KAAA;AAAA,MACR,GAAA;AAAA,MACA,YAAY,UAAA,IAAc,mBAAA;AAAA,MAC1B,KAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAU;AAAA;AAAA,GACd;AAER;;;;"}
|
|
@@ -57,6 +57,7 @@ import 'yup';
|
|
|
57
57
|
import '../../packages/types/src/Css/map/index.js';
|
|
58
58
|
import '../../packages/types/src/Theme/shadows.js';
|
|
59
59
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
60
|
+
import '../../packages/types/src/Theme/resolvers.js';
|
|
60
61
|
import '../../packages/types/src/Theme/alphaColors.js';
|
|
61
62
|
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
62
63
|
import '../../apps/mobile/src/Factory/DimensionsContext.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/SkeletonText/index.native.tsx"],"sourcesContent":["import React from 'react';\nimport {SkeletonText as GSkeletonText} from '@lmb-it/kitsconcertomobile';\nimport type {ISkeletonText} from \"@lmb-it/kitsconcerto-types\";\n\nconst Skeleton: React.FC<ISkeletonText> = ({\n lines = 3,\n gap = 1,\n startColor,\n isLoaded,\n speed,\n animation,\n ...props\n }) => {\n\n return (\n <GSkeletonText\n _lines={lines}\n gap={gap}\n startColor={startColor ?? 'bg-background-200'}\n speed={speed}\n isLoaded={isLoaded}\n className=\"h-3\"\n />\n );\n};\n\nexport default Skeleton;\n"],"names":["GSkeletonText"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/SkeletonText/index.native.tsx"],"sourcesContent":["import React from 'react';\nimport {SkeletonText as GSkeletonText} from '@lmb-it/kitsconcertomobile';\nimport type {ISkeletonText} from \"@lmb-it/kitsconcerto-types\";\n\nconst Skeleton: React.FC<ISkeletonText> = ({\n lines = 3,\n gap = 1,\n startColor,\n isLoaded,\n speed,\n animation,\n ...props\n }) => {\n\n return (\n <GSkeletonText\n _lines={lines}\n gap={gap}\n startColor={startColor ?? 'bg-background-200'}\n speed={speed}\n isLoaded={isLoaded}\n className=\"h-3\"\n />\n );\n};\n\nexport default Skeleton;\n"],"names":["GSkeletonText"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,MAAM,WAAoC,CAAC;AAAA,EACI,KAAA,GAAQ,CAAA;AAAA,EACR,GAAA,GAAM,CAAA;AAAA,EACN,UAAA;AAAA,EACA,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACP,CAAA,KAAM;AAE7C,EAAA,uBACI,GAAA;AAAA,IAACA,YAAA;AAAA,IAAA;AAAA,MACG,MAAA,EAAQ,KAAA;AAAA,MACR,GAAA;AAAA,MACA,YAAY,UAAA,IAAc,mBAAA;AAAA,MAC1B,KAAA;AAAA,MACA,QAAA;AAAA,MACA,SAAA,EAAU;AAAA;AAAA,GACd;AAER;;;;"}
|
|
@@ -61,6 +61,7 @@ require('yup');
|
|
|
61
61
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
62
62
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
64
|
+
require('../../packages/types/src/Theme/resolvers.cjs');
|
|
64
65
|
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
65
66
|
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
66
67
|
require('i18next');
|
|
@@ -109,9 +110,9 @@ function Tabs(rawProps) {
|
|
|
109
110
|
countVariant = "suffix",
|
|
110
111
|
activeBadgeBackground = "surface-card",
|
|
111
112
|
activeBadgeTextColor = "text-primary",
|
|
112
|
-
inactiveBadgeBackground = "
|
|
113
|
+
inactiveBadgeBackground = "surface-card",
|
|
113
114
|
inactiveBadgeTextColor = "text-secondary",
|
|
114
|
-
inactiveBackground = "
|
|
115
|
+
inactiveBackground = "surface-muted",
|
|
115
116
|
inactiveTextColor = "text-secondary",
|
|
116
117
|
sizeHeights
|
|
117
118
|
} = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Tabs/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {ScrollView, TouchableOpacity, View} from \"react-native\";\nimport {resolveThemeTokenForNative} from \"@lmb-it/kitsconcertomobile\";\nimport type {ITabsProps, ITabItem} from \"@lmb-it/kitsconcerto-types\";\nimport {Text, Icon} from \"../../primitives\";\nimport {useComponentDefaults} from \"../../hooks\";\n\n// Mirrors the app's FilterChips (App/src/components/shared/FilterChips).\nconst SIZE = {\n sm: {h: 28, px: 12, fs: 12},\n md: {h: 32, px: 14, fs: 13},\n lg: {h: 40, px: 18, fs: 15},\n} as const;\n\n/**\n * Tabs (native) — horizontally-scrollable selectable filter row.\n *\n * Built like the app's working `FilterChips`: a RN horizontal `ScrollView` of\n * `TouchableOpacity` pills + the library `Text`. Active = filled `activeColor`;\n * inactive = neutral tint. Colours resolve via the standalone token resolver.\n */\nexport function Tabs<K extends string = string>(rawProps: ITabsProps<K>) {\n const props = useComponentDefaults<ITabsProps<K>>(\"Tabs\", rawProps).mergedProps;\n const {\n items, value, onChange, size = \"md\", activeColor = \"brand\", scrollable = true, gap = 8, testID,\n countVariant = \"suffix\",\n activeBadgeBackground = \"surface-card\",\n activeBadgeTextColor = \"text-primary\",\n inactiveBadgeBackground = \"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/components/Tabs/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {ScrollView, TouchableOpacity, View} from \"react-native\";\nimport {resolveThemeTokenForNative} from \"@lmb-it/kitsconcertomobile\";\nimport type {ITabsProps, ITabItem} from \"@lmb-it/kitsconcerto-types\";\nimport {Text, Icon} from \"../../primitives\";\nimport {useComponentDefaults} from \"../../hooks\";\n\n// Mirrors the app's FilterChips (App/src/components/shared/FilterChips).\nconst SIZE = {\n sm: {h: 28, px: 12, fs: 12},\n md: {h: 32, px: 14, fs: 13},\n lg: {h: 40, px: 18, fs: 15},\n} as const;\n\n/**\n * Tabs (native) — horizontally-scrollable selectable filter row.\n *\n * Built like the app's working `FilterChips`: a RN horizontal `ScrollView` of\n * `TouchableOpacity` pills + the library `Text`. Active = filled `activeColor`;\n * inactive = neutral tint. Colours resolve via the standalone token resolver.\n */\nexport function Tabs<K extends string = string>(rawProps: ITabsProps<K>) {\n const props = useComponentDefaults<ITabsProps<K>>(\"Tabs\", rawProps).mergedProps;\n const {\n items, value, onChange, size = \"md\", activeColor = \"brand\", scrollable = true, gap = 8, testID,\n countVariant = \"suffix\",\n activeBadgeBackground = \"surface-card\",\n activeBadgeTextColor = \"text-primary\",\n inactiveBadgeBackground = \"surface-card\",\n inactiveBadgeTextColor = \"text-secondary\",\n inactiveBackground = \"surface-muted\",\n inactiveTextColor = \"text-secondary\",\n sizeHeights,\n } = props;\n\n const cfg = SIZE[size] ?? SIZE.md;\n const heights = {sm: SIZE.sm.h, md: SIZE.md.h, lg: SIZE.lg.h, ...sizeHeights};\n const height = heights[size] ?? heights.md;\n const activeBg = resolveThemeTokenForNative(activeColor);\n const inactiveBg = resolveThemeTokenForNative(inactiveBackground);\n const inactiveText = resolveThemeTokenForNative(inactiveTextColor);\n const badge = countVariant === \"badge\";\n const activeBadgeBg = resolveThemeTokenForNative(activeBadgeBackground);\n const activeBadgeFg = resolveThemeTokenForNative(activeBadgeTextColor);\n const inactiveBadgeBg = resolveThemeTokenForNative(inactiveBadgeBackground);\n const inactiveBadgeFg = resolveThemeTokenForNative(inactiveBadgeTextColor);\n const badgeH = cfg.fs + 7;\n\n const renderChip = (item: ITabItem<K>) => {\n const active = item.key === value;\n const label = !badge && item.count != null ? `${item.label} ${item.count}` : item.label;\n const fg = active ? \"#FFFFFF\" : inactiveText;\n return (\n <TouchableOpacity\n key={item.key}\n activeOpacity={0.75}\n disabled={item.disabled}\n onPress={() => onChange(item.key)}\n accessibilityRole=\"button\"\n accessibilityState={{selected: active}}\n style={{\n height,\n borderRadius: 999,\n paddingHorizontal: cfg.px,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n backgroundColor: active ? activeBg : inactiveBg,\n opacity: item.disabled ? 0.5 : 1,\n }}\n >\n {item.icon != null && <Icon name={item.icon as never} size={cfg.fs + 1} color={fg} />}\n <Text fontSize={cfg.fs} fontWeight=\"600\" color={fg}>\n {label}\n </Text>\n {badge && item.count != null && (\n <View\n style={{\n height: badgeH,\n minWidth: badgeH,\n borderRadius: 999,\n paddingHorizontal: 6,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: active ? activeBadgeBg : inactiveBadgeBg,\n }}\n >\n <Text fontSize={cfg.fs - 2} fontWeight=\"600\" color={active ? activeBadgeFg : inactiveBadgeFg}>\n {item.count}\n </Text>\n </View>\n )}\n </TouchableOpacity>\n );\n };\n\n if (!scrollable) {\n return (\n <View style={{flexDirection: \"row\", flexWrap: \"wrap\", alignItems: \"center\", gap}} testID={testID}>\n {items.map(renderChip)}\n </View>\n );\n }\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{flexDirection: \"row\", alignItems: \"center\", gap, paddingVertical: 4}}\n testID={testID}\n >\n {items.map(renderChip)}\n </ScrollView>\n );\n}\n\nexport default Tabs;\n"],"names":["useComponentDefaults","resolveThemeTokenForNative","jsxs","TouchableOpacity","jsx","Icon","Text","View","ScrollView"],"mappings":"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"}
|
package/components/Tabs/index.js
CHANGED
|
@@ -59,6 +59,7 @@ import 'yup';
|
|
|
59
59
|
import '../../packages/types/src/Css/map/index.js';
|
|
60
60
|
import '../../packages/types/src/Theme/shadows.js';
|
|
61
61
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
62
|
+
import '../../packages/types/src/Theme/resolvers.js';
|
|
62
63
|
import '../../packages/types/src/Theme/alphaColors.js';
|
|
63
64
|
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
64
65
|
import 'i18next';
|
|
@@ -107,9 +108,9 @@ function Tabs(rawProps) {
|
|
|
107
108
|
countVariant = "suffix",
|
|
108
109
|
activeBadgeBackground = "surface-card",
|
|
109
110
|
activeBadgeTextColor = "text-primary",
|
|
110
|
-
inactiveBadgeBackground = "
|
|
111
|
+
inactiveBadgeBackground = "surface-card",
|
|
111
112
|
inactiveBadgeTextColor = "text-secondary",
|
|
112
|
-
inactiveBackground = "
|
|
113
|
+
inactiveBackground = "surface-muted",
|
|
113
114
|
inactiveTextColor = "text-secondary",
|
|
114
115
|
sizeHeights
|
|
115
116
|
} = props;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/components/Tabs/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {ScrollView, TouchableOpacity, View} from \"react-native\";\nimport {resolveThemeTokenForNative} from \"@lmb-it/kitsconcertomobile\";\nimport type {ITabsProps, ITabItem} from \"@lmb-it/kitsconcerto-types\";\nimport {Text, Icon} from \"../../primitives\";\nimport {useComponentDefaults} from \"../../hooks\";\n\n// Mirrors the app's FilterChips (App/src/components/shared/FilterChips).\nconst SIZE = {\n sm: {h: 28, px: 12, fs: 12},\n md: {h: 32, px: 14, fs: 13},\n lg: {h: 40, px: 18, fs: 15},\n} as const;\n\n/**\n * Tabs (native) — horizontally-scrollable selectable filter row.\n *\n * Built like the app's working `FilterChips`: a RN horizontal `ScrollView` of\n * `TouchableOpacity` pills + the library `Text`. Active = filled `activeColor`;\n * inactive = neutral tint. Colours resolve via the standalone token resolver.\n */\nexport function Tabs<K extends string = string>(rawProps: ITabsProps<K>) {\n const props = useComponentDefaults<ITabsProps<K>>(\"Tabs\", rawProps).mergedProps;\n const {\n items, value, onChange, size = \"md\", activeColor = \"brand\", scrollable = true, gap = 8, testID,\n countVariant = \"suffix\",\n activeBadgeBackground = \"surface-card\",\n activeBadgeTextColor = \"text-primary\",\n inactiveBadgeBackground = \"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/components/Tabs/index.native.tsx"],"sourcesContent":["import React from \"react\";\nimport {ScrollView, TouchableOpacity, View} from \"react-native\";\nimport {resolveThemeTokenForNative} from \"@lmb-it/kitsconcertomobile\";\nimport type {ITabsProps, ITabItem} from \"@lmb-it/kitsconcerto-types\";\nimport {Text, Icon} from \"../../primitives\";\nimport {useComponentDefaults} from \"../../hooks\";\n\n// Mirrors the app's FilterChips (App/src/components/shared/FilterChips).\nconst SIZE = {\n sm: {h: 28, px: 12, fs: 12},\n md: {h: 32, px: 14, fs: 13},\n lg: {h: 40, px: 18, fs: 15},\n} as const;\n\n/**\n * Tabs (native) — horizontally-scrollable selectable filter row.\n *\n * Built like the app's working `FilterChips`: a RN horizontal `ScrollView` of\n * `TouchableOpacity` pills + the library `Text`. Active = filled `activeColor`;\n * inactive = neutral tint. Colours resolve via the standalone token resolver.\n */\nexport function Tabs<K extends string = string>(rawProps: ITabsProps<K>) {\n const props = useComponentDefaults<ITabsProps<K>>(\"Tabs\", rawProps).mergedProps;\n const {\n items, value, onChange, size = \"md\", activeColor = \"brand\", scrollable = true, gap = 8, testID,\n countVariant = \"suffix\",\n activeBadgeBackground = \"surface-card\",\n activeBadgeTextColor = \"text-primary\",\n inactiveBadgeBackground = \"surface-card\",\n inactiveBadgeTextColor = \"text-secondary\",\n inactiveBackground = \"surface-muted\",\n inactiveTextColor = \"text-secondary\",\n sizeHeights,\n } = props;\n\n const cfg = SIZE[size] ?? SIZE.md;\n const heights = {sm: SIZE.sm.h, md: SIZE.md.h, lg: SIZE.lg.h, ...sizeHeights};\n const height = heights[size] ?? heights.md;\n const activeBg = resolveThemeTokenForNative(activeColor);\n const inactiveBg = resolveThemeTokenForNative(inactiveBackground);\n const inactiveText = resolveThemeTokenForNative(inactiveTextColor);\n const badge = countVariant === \"badge\";\n const activeBadgeBg = resolveThemeTokenForNative(activeBadgeBackground);\n const activeBadgeFg = resolveThemeTokenForNative(activeBadgeTextColor);\n const inactiveBadgeBg = resolveThemeTokenForNative(inactiveBadgeBackground);\n const inactiveBadgeFg = resolveThemeTokenForNative(inactiveBadgeTextColor);\n const badgeH = cfg.fs + 7;\n\n const renderChip = (item: ITabItem<K>) => {\n const active = item.key === value;\n const label = !badge && item.count != null ? `${item.label} ${item.count}` : item.label;\n const fg = active ? \"#FFFFFF\" : inactiveText;\n return (\n <TouchableOpacity\n key={item.key}\n activeOpacity={0.75}\n disabled={item.disabled}\n onPress={() => onChange(item.key)}\n accessibilityRole=\"button\"\n accessibilityState={{selected: active}}\n style={{\n height,\n borderRadius: 999,\n paddingHorizontal: cfg.px,\n flexDirection: \"row\",\n alignItems: \"center\",\n justifyContent: \"center\",\n gap: 6,\n backgroundColor: active ? activeBg : inactiveBg,\n opacity: item.disabled ? 0.5 : 1,\n }}\n >\n {item.icon != null && <Icon name={item.icon as never} size={cfg.fs + 1} color={fg} />}\n <Text fontSize={cfg.fs} fontWeight=\"600\" color={fg}>\n {label}\n </Text>\n {badge && item.count != null && (\n <View\n style={{\n height: badgeH,\n minWidth: badgeH,\n borderRadius: 999,\n paddingHorizontal: 6,\n alignItems: \"center\",\n justifyContent: \"center\",\n backgroundColor: active ? activeBadgeBg : inactiveBadgeBg,\n }}\n >\n <Text fontSize={cfg.fs - 2} fontWeight=\"600\" color={active ? activeBadgeFg : inactiveBadgeFg}>\n {item.count}\n </Text>\n </View>\n )}\n </TouchableOpacity>\n );\n };\n\n if (!scrollable) {\n return (\n <View style={{flexDirection: \"row\", flexWrap: \"wrap\", alignItems: \"center\", gap}} testID={testID}>\n {items.map(renderChip)}\n </View>\n );\n }\n\n return (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n keyboardShouldPersistTaps=\"handled\"\n contentContainerStyle={{flexDirection: \"row\", alignItems: \"center\", gap, paddingVertical: 4}}\n testID={testID}\n >\n {items.map(renderChip)}\n </ScrollView>\n );\n}\n\nexport default Tabs;\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAQA,MAAM,IAAA,GAAO;AAAA,EACT,IAAI,EAAC,CAAA,EAAG,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAE;AAAA,EAC1B,IAAI,EAAC,CAAA,EAAG,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA,EAAE;AAAA,EAC1B,IAAI,EAAC,CAAA,EAAG,IAAI,EAAA,EAAI,EAAA,EAAI,IAAI,EAAA;AAC5B,CAAA;AASO,SAAS,KAAgC,QAAA,EAAyB;AACrE,EAAA,MAAM,KAAA,GAAQ,oBAAA,CAAoC,MAAA,EAAQ,QAAQ,CAAA,CAAE,WAAA;AACpE,EAAA,MAAM;AAAA,IACF,KAAA;AAAA,IAAO,KAAA;AAAA,IAAO,QAAA;AAAA,IAAU,IAAA,GAAO,IAAA;AAAA,IAAM,WAAA,GAAc,OAAA;AAAA,IAAS,UAAA,GAAa,IAAA;AAAA,IAAM,GAAA,GAAM,CAAA;AAAA,IAAG,MAAA;AAAA,IACxF,YAAA,GAAe,QAAA;AAAA,IACf,qBAAA,GAAwB,cAAA;AAAA,IACxB,oBAAA,GAAuB,cAAA;AAAA,IACvB,uBAAA,GAA0B,cAAA;AAAA,IAC1B,sBAAA,GAAyB,gBAAA;AAAA,IACzB,kBAAA,GAAqB,eAAA;AAAA,IACrB,iBAAA,GAAoB,gBAAA;AAAA,IACpB;AAAA,GACJ,GAAI,KAAA;AAEJ,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA,CAAK,EAAA;AAC/B,EAAA,MAAM,OAAA,GAAU,EAAC,EAAA,EAAI,IAAA,CAAK,GAAG,CAAA,EAAG,EAAA,EAAI,IAAA,CAAK,EAAA,CAAG,GAAG,EAAA,EAAI,IAAA,CAAK,EAAA,CAAG,CAAA,EAAG,GAAG,WAAA,EAAW;AAC5E,EAAA,MAAM,MAAA,GAAS,OAAA,CAAQ,IAAI,CAAA,IAAK,OAAA,CAAQ,EAAA;AACxC,EAAA,MAAM,QAAA,GAAW,2BAA2B,WAAW,CAAA;AACvD,EAAA,MAAM,UAAA,GAAa,2BAA2B,kBAAkB,CAAA;AAChE,EAAA,MAAM,YAAA,GAAe,2BAA2B,iBAAiB,CAAA;AACjE,EAAA,MAAM,QAAQ,YAAA,KAAiB,OAAA;AAC/B,EAAA,MAAM,aAAA,GAAgB,2BAA2B,qBAAqB,CAAA;AACtE,EAAA,MAAM,aAAA,GAAgB,2BAA2B,oBAAoB,CAAA;AACrE,EAAA,MAAM,eAAA,GAAkB,2BAA2B,uBAAuB,CAAA;AAC1E,EAAA,MAAM,eAAA,GAAkB,2BAA2B,sBAAsB,CAAA;AACzE,EAAA,MAAM,MAAA,GAAS,IAAI,EAAA,GAAK,CAAA;AAExB,EAAA,MAAM,UAAA,GAAa,CAAC,IAAA,KAAsB;AACtC,IAAA,MAAM,MAAA,GAAS,KAAK,GAAA,KAAQ,KAAA;AAC5B,IAAA,MAAM,KAAA,GAAQ,CAAC,KAAA,IAAS,IAAA,CAAK,KAAA,IAAS,IAAA,GAAO,CAAA,EAAG,IAAA,CAAK,KAAK,CAAA,EAAA,EAAK,IAAA,CAAK,KAAK,KAAK,IAAA,CAAK,KAAA;AACnF,IAAA,MAAM,EAAA,GAAK,SAAS,SAAA,GAAY,YAAA;AAChC,IAAA,uBACI,IAAA;AAAA,MAAC,gBAAA;AAAA,MAAA;AAAA,QAEG,aAAA,EAAe,IAAA;AAAA,QACf,UAAU,IAAA,CAAK,QAAA;AAAA,QACf,OAAA,EAAS,MAAM,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA;AAAA,QAChC,iBAAA,EAAkB,QAAA;AAAA,QAClB,kBAAA,EAAoB,EAAC,QAAA,EAAU,MAAA,EAAM;AAAA,QACrC,KAAA,EAAO;AAAA,UACH,MAAA;AAAA,UACA,YAAA,EAAc,GAAA;AAAA,UACd,mBAAmB,GAAA,CAAI,EAAA;AAAA,UACvB,aAAA,EAAe,KAAA;AAAA,UACf,UAAA,EAAY,QAAA;AAAA,UACZ,cAAA,EAAgB,QAAA;AAAA,UAChB,GAAA,EAAK,CAAA;AAAA,UACL,eAAA,EAAiB,SAAS,QAAA,GAAW,UAAA;AAAA,UACrC,OAAA,EAAS,IAAA,CAAK,QAAA,GAAW,GAAA,GAAM;AAAA,SACnC;AAAA,QAEC,QAAA,EAAA;AAAA,UAAA,IAAA,CAAK,IAAA,IAAQ,IAAA,oBAAQ,GAAA,CAAC,IAAA,EAAA,EAAK,IAAA,EAAM,IAAA,CAAK,IAAA,EAAe,IAAA,EAAM,GAAA,CAAI,EAAA,GAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,0BACnF,GAAA,CAAC,QAAK,QAAA,EAAU,GAAA,CAAI,IAAI,UAAA,EAAW,KAAA,EAAM,KAAA,EAAO,EAAA,EAC3C,QAAA,EAAA,KAAA,EACL,CAAA;AAAA,UACC,KAAA,IAAS,IAAA,CAAK,KAAA,IAAS,IAAA,oBACpB,GAAA;AAAA,YAAC,IAAA;AAAA,YAAA;AAAA,cACG,KAAA,EAAO;AAAA,gBACH,MAAA,EAAQ,MAAA;AAAA,gBACR,QAAA,EAAU,MAAA;AAAA,gBACV,YAAA,EAAc,GAAA;AAAA,gBACd,iBAAA,EAAmB,CAAA;AAAA,gBACnB,UAAA,EAAY,QAAA;AAAA,gBACZ,cAAA,EAAgB,QAAA;AAAA,gBAChB,eAAA,EAAiB,SAAS,aAAA,GAAgB;AAAA,eAC9C;AAAA,cAEA,QAAA,kBAAA,GAAA,CAAC,IAAA,EAAA,EAAK,QAAA,EAAU,GAAA,CAAI,EAAA,GAAK,CAAA,EAAG,UAAA,EAAW,KAAA,EAAM,KAAA,EAAO,MAAA,GAAS,aAAA,GAAgB,eAAA,EACxE,eAAK,KAAA,EACV;AAAA;AAAA;AACJ;AAAA,OAAA;AAAA,MArCC,IAAA,CAAK;AAAA,KAuCd;AAAA,EAER,CAAA;AAEA,EAAA,IAAI,CAAC,UAAA,EAAY;AACb,IAAA,2BACK,IAAA,EAAA,EAAK,KAAA,EAAO,EAAC,aAAA,EAAe,OAAO,QAAA,EAAU,MAAA,EAAQ,UAAA,EAAY,QAAA,EAAU,KAAG,EAAG,MAAA,EAC7E,QAAA,EAAA,KAAA,CAAM,GAAA,CAAI,UAAU,CAAA,EACzB,CAAA;AAAA,EAER;AAEA,EAAA,uBACI,GAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACG,UAAA,EAAU,IAAA;AAAA,MACV,8BAAA,EAAgC,KAAA;AAAA,MAChC,yBAAA,EAA0B,SAAA;AAAA,MAC1B,qBAAA,EAAuB,EAAC,aAAA,EAAe,KAAA,EAAO,YAAY,QAAA,EAAU,GAAA,EAAK,iBAAiB,CAAA,EAAC;AAAA,MAC3F,MAAA;AAAA,MAEC,QAAA,EAAA,KAAA,CAAM,IAAI,UAAU;AAAA;AAAA,GACzB;AAER;;;;"}
|
|
@@ -62,6 +62,7 @@ require('yup');
|
|
|
62
62
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
64
64
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
65
|
+
require('../../packages/types/src/Theme/resolvers.cjs');
|
|
65
66
|
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
66
67
|
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
67
68
|
require('../../apps/mobile/src/Factory/DimensionsContext.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":["createContext","useRef","useState","localeFiles","useEffect","initMobileI18n","useCallback","jsx"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":["createContext","useRef","useState","localeFiles","useEffect","initMobileI18n","useCallback","jsx"],"mappings":"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"}
|
package/contexts/Locale/index.js
CHANGED
|
@@ -58,6 +58,7 @@ import 'yup';
|
|
|
58
58
|
import '../../packages/types/src/Css/map/index.js';
|
|
59
59
|
import '../../packages/types/src/Theme/shadows.js';
|
|
60
60
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
61
|
+
import '../../packages/types/src/Theme/resolvers.js';
|
|
61
62
|
import '../../packages/types/src/Theme/alphaColors.js';
|
|
62
63
|
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
63
64
|
import '../../apps/mobile/src/Factory/DimensionsContext.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Locale/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useCallback, useEffect, useRef, useState} from \"react\";\nimport AsyncStorage from \"@react-native-async-storage/async-storage\";\nimport {initMobileI18n} from \"@lmb-it/kitsconcertomobile\"; // ← our new initializer\nimport localeFiles from \"../../locale\"; // built-in languages\nimport type {ILocaleContextProps, ILocaleContextValues,} from \"@lmb-it/kitsconcerto-types\";\nimport i18n from \"i18next\";\n\nexport const LocaleContext = createContext<ILocaleContextValues>(\n {} as ILocaleContextValues\n);\n\nconst STORAGE_KEY = \"currentLanguage\";\n\nconst LocaleContextProvider: FC<PropsWithChildren<ILocaleContextProps>> = ({\n children,\n languages,\n defaultLanguage = \"en\",\n onChangeLanguage\n }) => {\n\n const defaultLocal = useRef<string>(\"\");\n const [language, setLanguage] = useState(defaultLanguage);\n const [isRTL, setIsRTL] = useState(defaultLanguage === \"ar\");\n const [isReady, setIsReady] = useState(false);\n\n // Build extra translations from props to match the expected format\n\n\n const translationsList = () => {\n const l: any = {};\n\n Object.keys(localeFiles).forEach(key => {\n l[key] = {translation: localeFiles[key]};\n })\n\n if (languages) {\n languages.forEach(({lang, translations}) => {\n if (lang in l) {\n l[lang] = {\n translation: {\n ...l[lang].translation,\n ...translations\n }\n };\n } else {\n l[lang] = {\n translation: {\n ...translations\n }\n };\n }\n\n })\n }\n return l;\n }\n\n // Initialize i18next on mount\n useEffect(() => {\n if (defaultLocal.current == defaultLanguage) return;\n const init = async () => {\n\n await initMobileI18n(translationsList()); // ← initialize i18n (merges base + user)\n\n // restore saved language\n const stored = await AsyncStorage.getItem(STORAGE_KEY);\n const lang = stored || defaultLanguage;\n\n await i18n.changeLanguage(lang);\n setLanguage(lang);\n setIsRTL(lang === \"ar\");\n\n defaultLocal.current = defaultLanguage;\n setIsReady(true);\n };\n\n void init();\n }, [defaultLanguage]);\n\n\n const isKeyExists = (key: string)=>{\n return i18n.exists(key)\n }\n // Change language (writes to AsyncStorage + updates context + updates i18next)\n const changeLanguage = useCallback(\n async (newLang: string) => {\n setLanguage(newLang);\n setIsRTL(newLang === \"ar\");\n\n await i18n.changeLanguage(newLang);\n\n await AsyncStorage.setItem(STORAGE_KEY, newLang);\n\n onChangeLanguage?.(newLang);\n },\n [onChangeLanguage]\n );\n\n // t() now comes directly from i18next\n const t = useCallback(\n (key: string, ...params: (string | number)[]) =>\n i18n.t(key, {replace: params}),\n []\n );\n\n return (\n <LocaleContext.Provider\n value={{\n t,\n changeLanguage,\n currentLanguage: language,\n isRTL,\n isKeyExists\n }}\n >\n {isReady ? children : null}\n </LocaleContext.Provider>\n );\n};\n\nexport default LocaleContextProvider;\n"],"names":[],"mappings":"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"}
|
package/contexts/Main/index.cjs
CHANGED
|
@@ -62,6 +62,7 @@ require('yup');
|
|
|
62
62
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
63
63
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
64
64
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
65
|
+
require('../../packages/types/src/Theme/resolvers.cjs');
|
|
65
66
|
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
66
67
|
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
67
68
|
var DimensionsContext = require('../../apps/mobile/src/Factory/DimensionsContext.cjs');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Main/index.native.tsx"],"sourcesContent":["import React, {createContext, type PropsWithChildren, type ReactNode, useRef} from 'react';\nimport type {IMainContextProps, IMainContextValues} from '@lmb-it/kitsconcerto-types';\nimport DialogProvider from '../DialogContext';\nimport PermissionsProvider from '../PermissionsContext';\nimport LocaleContextProvider from '../Locale';\nimport ThemeContext, {KitsThemeProvider} from '../Theme';\n// import {IHeaderRef} from '../Components/Organisms/Layout/Header';\n// import {AuthLayout} from '../Components';\n// import AdminLayout from '../Components/Organisms/Layout/AdminLayout';\nimport {useWindowDimensions} from 'react-native';\nimport {GluestackUIProvider, DimensionsProvider} from '@lmb-it/kitsconcertomobile';\n\nexport const MainContext = createContext<IMainContextValues>({} as IMainContextValues);\n\nexport default function MainContextProvider({\n children,\n theme,\n kitsTheme,\n onLogOut,\n nonAuthRoutes,\n menuItems,\n permissions,\n logo,\n languages,\n defaultLanguage = 'en',\n authedRoutes,\n onChangeLanguage\n }: PropsWithChildren<IMainContextProps>) {\n const {width, height} = useWindowDimensions();\n\n const mq = {\n isSmall: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n isLandscape: width > height,\n isPortrait: height >= width\n };\n type IHeaderRef = any;\n const headerRef = useRef<IHeaderRef>(null);\n const appendToHeader = (element: ReactNode) => {\n if (headerRef.current?.appendToHeader) headerRef.current.appendToHeader(element);\n };\n\n\n const authLayout = !children && nonAuthRoutes?.length && !authedRoutes?.length;\n const adminLayout = !children && authedRoutes?.length && !nonAuthRoutes?.length;\n\n return (\n <MainContext.Provider value={{logo, onLogOut, appendToHeader, menuItems, mq}}>\n <GluestackUIProvider mode={theme}>\n <DimensionsProvider>\n <KitsThemeProvider theme={kitsTheme}>\n <ThemeContext theme={theme}>\n <LocaleContextProvider\n defaultLanguage={defaultLanguage}\n languages={languages}\n onChangeLanguage={onChangeLanguage}\n >\n <DialogProvider>\n <PermissionsProvider roles={permissions}>\n {!authLayout && !adminLayout && children}\n {/*{authLayout && <AuthLayout routes={nonAuthRoutes} />}*/}\n {/*{adminLayout && <AdminLayout routes={authedRoutes} headerRef={headerRef} />}*/}\n </PermissionsProvider>\n </DialogProvider>\n </LocaleContextProvider>\n </ThemeContext>\n </KitsThemeProvider>\n </DimensionsProvider>\n </GluestackUIProvider>\n </MainContext.Provider>\n );\n}\n"],"names":["createContext","useWindowDimensions","useRef","jsx","GluestackUIProvider","DimensionsProvider","KitsThemeProvider","ThemeContext","LocaleContextProvider","DialogProvider","PermissionsProvider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Main/index.native.tsx"],"sourcesContent":["import React, {createContext, type PropsWithChildren, type ReactNode, useRef} from 'react';\nimport type {IMainContextProps, IMainContextValues} from '@lmb-it/kitsconcerto-types';\nimport DialogProvider from '../DialogContext';\nimport PermissionsProvider from '../PermissionsContext';\nimport LocaleContextProvider from '../Locale';\nimport ThemeContext, {KitsThemeProvider} from '../Theme';\n// import {IHeaderRef} from '../Components/Organisms/Layout/Header';\n// import {AuthLayout} from '../Components';\n// import AdminLayout from '../Components/Organisms/Layout/AdminLayout';\nimport {useWindowDimensions} from 'react-native';\nimport {GluestackUIProvider, DimensionsProvider} from '@lmb-it/kitsconcertomobile';\n\nexport const MainContext = createContext<IMainContextValues>({} as IMainContextValues);\n\nexport default function MainContextProvider({\n children,\n theme,\n kitsTheme,\n onLogOut,\n nonAuthRoutes,\n menuItems,\n permissions,\n logo,\n languages,\n defaultLanguage = 'en',\n authedRoutes,\n onChangeLanguage\n }: PropsWithChildren<IMainContextProps>) {\n const {width, height} = useWindowDimensions();\n\n const mq = {\n isSmall: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n isLandscape: width > height,\n isPortrait: height >= width\n };\n type IHeaderRef = any;\n const headerRef = useRef<IHeaderRef>(null);\n const appendToHeader = (element: ReactNode) => {\n if (headerRef.current?.appendToHeader) headerRef.current.appendToHeader(element);\n };\n\n\n const authLayout = !children && nonAuthRoutes?.length && !authedRoutes?.length;\n const adminLayout = !children && authedRoutes?.length && !nonAuthRoutes?.length;\n\n return (\n <MainContext.Provider value={{logo, onLogOut, appendToHeader, menuItems, mq}}>\n <GluestackUIProvider mode={theme}>\n <DimensionsProvider>\n <KitsThemeProvider theme={kitsTheme}>\n <ThemeContext theme={theme}>\n <LocaleContextProvider\n defaultLanguage={defaultLanguage}\n languages={languages}\n onChangeLanguage={onChangeLanguage}\n >\n <DialogProvider>\n <PermissionsProvider roles={permissions}>\n {!authLayout && !adminLayout && children}\n {/*{authLayout && <AuthLayout routes={nonAuthRoutes} />}*/}\n {/*{adminLayout && <AdminLayout routes={authedRoutes} headerRef={headerRef} />}*/}\n </PermissionsProvider>\n </DialogProvider>\n </LocaleContextProvider>\n </ThemeContext>\n </KitsThemeProvider>\n </DimensionsProvider>\n </GluestackUIProvider>\n </MainContext.Provider>\n );\n}\n"],"names":["createContext","useWindowDimensions","useRef","jsx","GluestackUIProvider","DimensionsProvider","KitsThemeProvider","ThemeContext","LocaleContextProvider","DialogProvider","PermissionsProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAA,GAAcA,mBAAA,CAAkC,EAAwB;AAErF,SAAwB,mBAAA,CAAoB;AAAA,EACI,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,YAAA;AAAA,EACA;AACJ,CAAA,EAAyC;AACjF,EAAA,MAAM,EAAC,KAAA,EAAO,MAAA,EAAM,GAAIC,+BAAA,EAAoB;AAE5C,EAAA,MAAM,EAAA,GAAK;AAAA,IACP,SAAS,KAAA,GAAQ,GAAA;AAAA,IACjB,QAAA,EAAU,KAAA,IAAS,GAAA,IAAO,KAAA,GAAQ,IAAA;AAAA,IAClC,WAAW,KAAA,IAAS,IAAA;AAAA,IACpB,aAAa,KAAA,GAAQ,MAAA;AAAA,IACrB,YAAY,MAAA,IAAU;AAAA,GAC1B;AAEA,EAAA,MAAM,SAAA,GAAYC,aAAmB,IAAI,CAAA;AACzC,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAAuB;AAC3C,IAAA,IAAI,UAAU,OAAA,EAAS,cAAA,EAAgB,SAAA,CAAU,OAAA,CAAQ,eAAe,OAAO,CAAA;AAAA,EACnF,CAAA;AAGA,EAAA,MAAM,aAAa,CAAC,QAAA,IAAY,aAAA,EAAe,MAAA,IAAU,CAAC,YAAA,EAAc,MAAA;AACxE,EAAA,MAAM,cAAc,CAAC,QAAA,IAAY,YAAA,EAAc,MAAA,IAAU,CAAC,aAAA,EAAe,MAAA;AAEzE,EAAA,uBACIC,cAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAC,IAAA,EAAM,QAAA,EAAU,cAAA,EAAgB,SAAA,EAAW,EAAA,EAAE,EACvE,yCAACC,yBAAA,EAAA,EAAoB,IAAA,EAAM,KAAA,EACvB,QAAA,kBAAAD,cAAA,CAACE,oCAAA,EAAA,EACG,QAAA,kBAAAF,cAAA,CAACG,8CAAkB,KAAA,EAAO,SAAA,EACtB,QAAA,kBAAAH,cAAA,CAACI,oBAAA,EAAA,EAAa,KAAA,EACV,QAAA,kBAAAJ,cAAA;AAAA,IAACK,sBAAA;AAAA,IAAA;AAAA,MACG,eAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MAEA,QAAA,kBAAAL,cAAA,CAACM,qBAAA,EAAA,EACG,QAAA,kBAAAN,cAAA,CAACO,0BAAA,EAAA,EAAoB,KAAA,EAAO,WAAA,EACvB,QAAA,EAAA,CAAC,UAAA,IAAc,CAAC,WAAA,IAAe,QAAA,EAGpC,CAAA,EACJ;AAAA;AAAA,GACJ,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA;AAER;;;;;"}
|
package/contexts/Main/index.js
CHANGED
|
@@ -58,6 +58,7 @@ import 'yup';
|
|
|
58
58
|
import '../../packages/types/src/Css/map/index.js';
|
|
59
59
|
import '../../packages/types/src/Theme/shadows.js';
|
|
60
60
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
61
|
+
import '../../packages/types/src/Theme/resolvers.js';
|
|
61
62
|
import '../../packages/types/src/Theme/alphaColors.js';
|
|
62
63
|
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
63
64
|
import { DimensionsProvider } from '../../apps/mobile/src/Factory/DimensionsContext.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Main/index.native.tsx"],"sourcesContent":["import React, {createContext, type PropsWithChildren, type ReactNode, useRef} from 'react';\nimport type {IMainContextProps, IMainContextValues} from '@lmb-it/kitsconcerto-types';\nimport DialogProvider from '../DialogContext';\nimport PermissionsProvider from '../PermissionsContext';\nimport LocaleContextProvider from '../Locale';\nimport ThemeContext, {KitsThemeProvider} from '../Theme';\n// import {IHeaderRef} from '../Components/Organisms/Layout/Header';\n// import {AuthLayout} from '../Components';\n// import AdminLayout from '../Components/Organisms/Layout/AdminLayout';\nimport {useWindowDimensions} from 'react-native';\nimport {GluestackUIProvider, DimensionsProvider} from '@lmb-it/kitsconcertomobile';\n\nexport const MainContext = createContext<IMainContextValues>({} as IMainContextValues);\n\nexport default function MainContextProvider({\n children,\n theme,\n kitsTheme,\n onLogOut,\n nonAuthRoutes,\n menuItems,\n permissions,\n logo,\n languages,\n defaultLanguage = 'en',\n authedRoutes,\n onChangeLanguage\n }: PropsWithChildren<IMainContextProps>) {\n const {width, height} = useWindowDimensions();\n\n const mq = {\n isSmall: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n isLandscape: width > height,\n isPortrait: height >= width\n };\n type IHeaderRef = any;\n const headerRef = useRef<IHeaderRef>(null);\n const appendToHeader = (element: ReactNode) => {\n if (headerRef.current?.appendToHeader) headerRef.current.appendToHeader(element);\n };\n\n\n const authLayout = !children && nonAuthRoutes?.length && !authedRoutes?.length;\n const adminLayout = !children && authedRoutes?.length && !nonAuthRoutes?.length;\n\n return (\n <MainContext.Provider value={{logo, onLogOut, appendToHeader, menuItems, mq}}>\n <GluestackUIProvider mode={theme}>\n <DimensionsProvider>\n <KitsThemeProvider theme={kitsTheme}>\n <ThemeContext theme={theme}>\n <LocaleContextProvider\n defaultLanguage={defaultLanguage}\n languages={languages}\n onChangeLanguage={onChangeLanguage}\n >\n <DialogProvider>\n <PermissionsProvider roles={permissions}>\n {!authLayout && !adminLayout && children}\n {/*{authLayout && <AuthLayout routes={nonAuthRoutes} />}*/}\n {/*{adminLayout && <AdminLayout routes={authedRoutes} headerRef={headerRef} />}*/}\n </PermissionsProvider>\n </DialogProvider>\n </LocaleContextProvider>\n </ThemeContext>\n </KitsThemeProvider>\n </DimensionsProvider>\n </GluestackUIProvider>\n </MainContext.Provider>\n );\n}\n"],"names":["ThemeContext","DialogProvider"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Main/index.native.tsx"],"sourcesContent":["import React, {createContext, type PropsWithChildren, type ReactNode, useRef} from 'react';\nimport type {IMainContextProps, IMainContextValues} from '@lmb-it/kitsconcerto-types';\nimport DialogProvider from '../DialogContext';\nimport PermissionsProvider from '../PermissionsContext';\nimport LocaleContextProvider from '../Locale';\nimport ThemeContext, {KitsThemeProvider} from '../Theme';\n// import {IHeaderRef} from '../Components/Organisms/Layout/Header';\n// import {AuthLayout} from '../Components';\n// import AdminLayout from '../Components/Organisms/Layout/AdminLayout';\nimport {useWindowDimensions} from 'react-native';\nimport {GluestackUIProvider, DimensionsProvider} from '@lmb-it/kitsconcertomobile';\n\nexport const MainContext = createContext<IMainContextValues>({} as IMainContextValues);\n\nexport default function MainContextProvider({\n children,\n theme,\n kitsTheme,\n onLogOut,\n nonAuthRoutes,\n menuItems,\n permissions,\n logo,\n languages,\n defaultLanguage = 'en',\n authedRoutes,\n onChangeLanguage\n }: PropsWithChildren<IMainContextProps>) {\n const {width, height} = useWindowDimensions();\n\n const mq = {\n isSmall: width < 768,\n isTablet: width >= 768 && width < 1024,\n isDesktop: width >= 1024,\n isLandscape: width > height,\n isPortrait: height >= width\n };\n type IHeaderRef = any;\n const headerRef = useRef<IHeaderRef>(null);\n const appendToHeader = (element: ReactNode) => {\n if (headerRef.current?.appendToHeader) headerRef.current.appendToHeader(element);\n };\n\n\n const authLayout = !children && nonAuthRoutes?.length && !authedRoutes?.length;\n const adminLayout = !children && authedRoutes?.length && !nonAuthRoutes?.length;\n\n return (\n <MainContext.Provider value={{logo, onLogOut, appendToHeader, menuItems, mq}}>\n <GluestackUIProvider mode={theme}>\n <DimensionsProvider>\n <KitsThemeProvider theme={kitsTheme}>\n <ThemeContext theme={theme}>\n <LocaleContextProvider\n defaultLanguage={defaultLanguage}\n languages={languages}\n onChangeLanguage={onChangeLanguage}\n >\n <DialogProvider>\n <PermissionsProvider roles={permissions}>\n {!authLayout && !adminLayout && children}\n {/*{authLayout && <AuthLayout routes={nonAuthRoutes} />}*/}\n {/*{adminLayout && <AdminLayout routes={authedRoutes} headerRef={headerRef} />}*/}\n </PermissionsProvider>\n </DialogProvider>\n </LocaleContextProvider>\n </ThemeContext>\n </KitsThemeProvider>\n </DimensionsProvider>\n </GluestackUIProvider>\n </MainContext.Provider>\n );\n}\n"],"names":["ThemeContext","DialogProvider"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAYO,MAAM,WAAA,GAAc,aAAA,CAAkC,EAAwB;AAErF,SAAwB,mBAAA,CAAoB;AAAA,EACI,QAAA;AAAA,EACA,KAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,SAAA;AAAA,EACA,eAAA,GAAkB,IAAA;AAAA,EAClB,YAAA;AAAA,EACA;AACJ,CAAA,EAAyC;AACjF,EAAA,MAAM,EAAC,KAAA,EAAO,MAAA,EAAM,GAAI,mBAAA,EAAoB;AAE5C,EAAA,MAAM,EAAA,GAAK;AAAA,IACP,SAAS,KAAA,GAAQ,GAAA;AAAA,IACjB,QAAA,EAAU,KAAA,IAAS,GAAA,IAAO,KAAA,GAAQ,IAAA;AAAA,IAClC,WAAW,KAAA,IAAS,IAAA;AAAA,IACpB,aAAa,KAAA,GAAQ,MAAA;AAAA,IACrB,YAAY,MAAA,IAAU;AAAA,GAC1B;AAEA,EAAA,MAAM,SAAA,GAAY,OAAmB,IAAI,CAAA;AACzC,EAAA,MAAM,cAAA,GAAiB,CAAC,OAAA,KAAuB;AAC3C,IAAA,IAAI,UAAU,OAAA,EAAS,cAAA,EAAgB,SAAA,CAAU,OAAA,CAAQ,eAAe,OAAO,CAAA;AAAA,EACnF,CAAA;AAGA,EAAA,MAAM,aAAa,CAAC,QAAA,IAAY,aAAA,EAAe,MAAA,IAAU,CAAC,YAAA,EAAc,MAAA;AACxE,EAAA,MAAM,cAAc,CAAC,QAAA,IAAY,YAAA,EAAc,MAAA,IAAU,CAAC,aAAA,EAAe,MAAA;AAEzE,EAAA,uBACI,GAAA,CAAC,WAAA,CAAY,QAAA,EAAZ,EAAqB,KAAA,EAAO,EAAC,IAAA,EAAM,QAAA,EAAU,cAAA,EAAgB,SAAA,EAAW,EAAA,EAAE,EACvE,8BAAC,mBAAA,EAAA,EAAoB,IAAA,EAAM,KAAA,EACvB,QAAA,kBAAA,GAAA,CAAC,kBAAA,EAAA,EACG,QAAA,kBAAA,GAAA,CAAC,qBAAkB,KAAA,EAAO,SAAA,EACtB,QAAA,kBAAA,GAAA,CAACA,oBAAA,EAAA,EAAa,KAAA,EACV,QAAA,kBAAA,GAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACG,eAAA;AAAA,MACA,SAAA;AAAA,MACA,gBAAA;AAAA,MAEA,QAAA,kBAAA,GAAA,CAACC,aAAA,EAAA,EACG,QAAA,kBAAA,GAAA,CAAC,mBAAA,EAAA,EAAoB,KAAA,EAAO,WAAA,EACvB,QAAA,EAAA,CAAC,UAAA,IAAc,CAAC,WAAA,IAAe,QAAA,EAGpC,CAAA,EACJ;AAAA;AAAA,GACJ,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA,EACJ,CAAA;AAER;;;;"}
|
package/contexts/Theme/index.cjs
CHANGED
|
@@ -14,6 +14,7 @@ require('yup');
|
|
|
14
14
|
require('../../packages/types/src/Css/map/index.cjs');
|
|
15
15
|
require('../../packages/types/src/Theme/shadows.cjs');
|
|
16
16
|
require('../../packages/types/src/Theme/defaultTheme.cjs');
|
|
17
|
+
require('../../packages/types/src/Theme/resolvers.cjs');
|
|
17
18
|
require('../../packages/types/src/Theme/alphaColors.cjs');
|
|
18
19
|
|
|
19
20
|
const ThemeContext = React.createContext({});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Theme/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useContext, useEffect, useState} from 'react';\nimport type {IThemeContextProps, IThemeContextValues} from '@lmb-it/kitsconcerto-types';\nimport {useColorScheme} from 'react-native';\n\nconst ThemeContext = createContext<IThemeContextValues>({} as IThemeContextValues);\n\nconst ThemeContextProvider: FC<PropsWithChildren<IThemeContextProps>> = ({children,theme }) => {\n const systemScheme = useColorScheme();\n const [selectedTheme, setTheme] = useState<'light' | 'dark'>(systemScheme ?? 'light');\n const [colorMode, setColorMode] = useState<any>();\n\n\n useEffect(() => {\n theme && setTheme(theme)\n }, [theme]);\n const switchTheme = (themeFile?: string) => {\n const newTheme = selectedTheme === 'dark' ? 'light' : 'dark';\n setTheme(newTheme);\n if (setColorMode) setColorMode(newTheme);\n };\n\n return (\n <ThemeContext.Provider value={{switchTheme, theme:selectedTheme}}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport default ThemeContextProvider;\nexport const useTheme = () => useContext(ThemeContext);\n\nexport {KitsThemeProvider, useKitsTheme, useNativeColorMap} from './KitsThemeProvider.native';\nexport {extendTheme, deepMerge} from './utils';\n"],"names":["createContext","useColorScheme","useState","useEffect","jsx","useContext"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../src/contexts/Theme/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useContext, useEffect, useState} from 'react';\nimport type {IThemeContextProps, IThemeContextValues} from '@lmb-it/kitsconcerto-types';\nimport {useColorScheme} from 'react-native';\n\nconst ThemeContext = createContext<IThemeContextValues>({} as IThemeContextValues);\n\nconst ThemeContextProvider: FC<PropsWithChildren<IThemeContextProps>> = ({children,theme }) => {\n const systemScheme = useColorScheme();\n const [selectedTheme, setTheme] = useState<'light' | 'dark'>(systemScheme ?? 'light');\n const [colorMode, setColorMode] = useState<any>();\n\n\n useEffect(() => {\n theme && setTheme(theme)\n }, [theme]);\n const switchTheme = (themeFile?: string) => {\n const newTheme = selectedTheme === 'dark' ? 'light' : 'dark';\n setTheme(newTheme);\n if (setColorMode) setColorMode(newTheme);\n };\n\n return (\n <ThemeContext.Provider value={{switchTheme, theme:selectedTheme}}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport default ThemeContextProvider;\nexport const useTheme = () => useContext(ThemeContext);\n\nexport {KitsThemeProvider, useKitsTheme, useNativeColorMap} from './KitsThemeProvider.native';\nexport {extendTheme, deepMerge} from './utils';\n"],"names":["createContext","useColorScheme","useState","useEffect","jsx","useContext"],"mappings":";;;;;;;;;;;;;;;;;;;AAIA,MAAM,YAAA,GAAeA,mBAAA,CAAmC,EAAyB,CAAA;AAEjF,MAAM,oBAAA,GAAkE,CAAC,EAAC,QAAA,EAAS,OAAM,KAAM;AAC3F,EAAA,MAAM,eAAeC,0BAAA,EAAe;AACpC,EAAA,MAAM,CAAC,aAAA,EAAe,QAAQ,CAAA,GAAIC,cAAA,CAA2B,gBAAgB,OAAO,CAAA;AACpF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAIA,cAAA,EAAc;AAGhD,EAAAC,eAAA,CAAU,MAAM;AACZ,IAAA,KAAA,IAAS,SAAS,KAAK,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACV,EAAA,MAAM,WAAA,GAAc,CAAC,SAAA,KAAuB;AACxC,IAAA,MAAM,QAAA,GAAW,aAAA,KAAkB,MAAA,GAAS,OAAA,GAAU,MAAA;AACtD,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,IAAI,YAAA,eAA2B,QAAQ,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,uBACIC,cAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAC,WAAA,EAAa,KAAA,EAAM,aAAA,EAAa,EAC1D,QAAA,EACL,CAAA;AAER;AAGO,MAAM,QAAA,GAAW,MAAMC,gBAAA,CAAW,YAAY;;;;;;;;"}
|
package/contexts/Theme/index.js
CHANGED
|
@@ -10,6 +10,7 @@ import 'yup';
|
|
|
10
10
|
import '../../packages/types/src/Css/map/index.js';
|
|
11
11
|
import '../../packages/types/src/Theme/shadows.js';
|
|
12
12
|
import '../../packages/types/src/Theme/defaultTheme.js';
|
|
13
|
+
import '../../packages/types/src/Theme/resolvers.js';
|
|
13
14
|
import '../../packages/types/src/Theme/alphaColors.js';
|
|
14
15
|
|
|
15
16
|
const ThemeContext = createContext({});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Theme/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useContext, useEffect, useState} from 'react';\nimport type {IThemeContextProps, IThemeContextValues} from '@lmb-it/kitsconcerto-types';\nimport {useColorScheme} from 'react-native';\n\nconst ThemeContext = createContext<IThemeContextValues>({} as IThemeContextValues);\n\nconst ThemeContextProvider: FC<PropsWithChildren<IThemeContextProps>> = ({children,theme }) => {\n const systemScheme = useColorScheme();\n const [selectedTheme, setTheme] = useState<'light' | 'dark'>(systemScheme ?? 'light');\n const [colorMode, setColorMode] = useState<any>();\n\n\n useEffect(() => {\n theme && setTheme(theme)\n }, [theme]);\n const switchTheme = (themeFile?: string) => {\n const newTheme = selectedTheme === 'dark' ? 'light' : 'dark';\n setTheme(newTheme);\n if (setColorMode) setColorMode(newTheme);\n };\n\n return (\n <ThemeContext.Provider value={{switchTheme, theme:selectedTheme}}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport default ThemeContextProvider;\nexport const useTheme = () => useContext(ThemeContext);\n\nexport {KitsThemeProvider, useKitsTheme, useNativeColorMap} from './KitsThemeProvider.native';\nexport {extendTheme, deepMerge} from './utils';\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../src/contexts/Theme/index.native.tsx"],"sourcesContent":["import React, {createContext, type FC, type PropsWithChildren, useContext, useEffect, useState} from 'react';\nimport type {IThemeContextProps, IThemeContextValues} from '@lmb-it/kitsconcerto-types';\nimport {useColorScheme} from 'react-native';\n\nconst ThemeContext = createContext<IThemeContextValues>({} as IThemeContextValues);\n\nconst ThemeContextProvider: FC<PropsWithChildren<IThemeContextProps>> = ({children,theme }) => {\n const systemScheme = useColorScheme();\n const [selectedTheme, setTheme] = useState<'light' | 'dark'>(systemScheme ?? 'light');\n const [colorMode, setColorMode] = useState<any>();\n\n\n useEffect(() => {\n theme && setTheme(theme)\n }, [theme]);\n const switchTheme = (themeFile?: string) => {\n const newTheme = selectedTheme === 'dark' ? 'light' : 'dark';\n setTheme(newTheme);\n if (setColorMode) setColorMode(newTheme);\n };\n\n return (\n <ThemeContext.Provider value={{switchTheme, theme:selectedTheme}}>\n {children}\n </ThemeContext.Provider>\n );\n};\n\nexport default ThemeContextProvider;\nexport const useTheme = () => useContext(ThemeContext);\n\nexport {KitsThemeProvider, useKitsTheme, useNativeColorMap} from './KitsThemeProvider.native';\nexport {extendTheme, deepMerge} from './utils';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAIA,MAAM,YAAA,GAAe,aAAA,CAAmC,EAAyB,CAAA;AAEjF,MAAM,oBAAA,GAAkE,CAAC,EAAC,QAAA,EAAS,OAAM,KAAM;AAC3F,EAAA,MAAM,eAAe,cAAA,EAAe;AACpC,EAAA,MAAM,CAAC,aAAA,EAAe,QAAQ,CAAA,GAAI,QAAA,CAA2B,gBAAgB,OAAO,CAAA;AACpF,EAAA,MAAM,CAAC,SAAA,EAAW,YAAY,CAAA,GAAI,QAAA,EAAc;AAGhD,EAAA,SAAA,CAAU,MAAM;AACZ,IAAA,KAAA,IAAS,SAAS,KAAK,CAAA;AAAA,EAC3B,CAAA,EAAG,CAAC,KAAK,CAAC,CAAA;AACV,EAAA,MAAM,WAAA,GAAc,CAAC,SAAA,KAAuB;AACxC,IAAA,MAAM,QAAA,GAAW,aAAA,KAAkB,MAAA,GAAS,OAAA,GAAU,MAAA;AACtD,IAAA,QAAA,CAAS,QAAQ,CAAA;AACjB,IAAA,IAAI,YAAA,eAA2B,QAAQ,CAAA;AAAA,EAC3C,CAAA;AAEA,EAAA,uBACI,GAAA,CAAC,YAAA,CAAa,QAAA,EAAb,EAAsB,KAAA,EAAO,EAAC,WAAA,EAAa,KAAA,EAAM,aAAA,EAAa,EAC1D,QAAA,EACL,CAAA;AAER;AAGO,MAAM,QAAA,GAAW,MAAM,UAAA,CAAW,YAAY;;;;"}
|