@lmb-it/kitsconcerto-native 0.1.242 → 0.1.244
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/animations/index.cjs +25 -15
- package/animations/index.cjs.map +1 -1
- package/animations/index.js +25 -15
- package/animations/index.js.map +1 -1
- package/apps/mobile/src/Core/AutoComplete/index.cjs +105 -64
- package/apps/mobile/src/Core/AutoComplete/index.cjs.map +1 -1
- package/apps/mobile/src/Core/AutoComplete/index.js +106 -65
- package/apps/mobile/src/Core/AutoComplete/index.js.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.cjs +2 -0
- package/apps/mobile/src/Core/Dropdown/index.cjs.map +1 -1
- package/apps/mobile/src/Core/Dropdown/index.js +2 -0
- package/apps/mobile/src/Core/Dropdown/index.js.map +1 -1
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.cjs +2 -0
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.cjs.map +1 -1
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.js +2 -0
- package/apps/mobile/src/Core/Trees/components/CoreToolbar.js.map +1 -1
- package/apps/mobile/src/Factory/ResponsiveElement.cjs +2 -0
- package/apps/mobile/src/Factory/ResponsiveElement.cjs.map +1 -1
- package/apps/mobile/src/Factory/ResponsiveElement.js +2 -0
- package/apps/mobile/src/Factory/ResponsiveElement.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/cssVarMap.cjs +16 -0
- package/apps/mobile/src/Factory/helpers/cssVarMap.cjs.map +1 -1
- package/apps/mobile/src/Factory/helpers/cssVarMap.js +16 -0
- package/apps/mobile/src/Factory/helpers/cssVarMap.js.map +1 -1
- package/apps/mobile/src/Factory/helpers/style.cjs +17 -1
- package/apps/mobile/src/Factory/helpers/style.cjs.map +1 -1
- package/apps/mobile/src/Factory/helpers/style.js +17 -1
- package/apps/mobile/src/Factory/helpers/style.js.map +1 -1
- package/apps/mobile/src/Factory/useSeparator.cjs +1 -0
- package/apps/mobile/src/Factory/useSeparator.cjs.map +1 -1
- package/apps/mobile/src/Factory/useSeparator.js +1 -0
- package/apps/mobile/src/Factory/useSeparator.js.map +1 -1
- package/components/Accordion/accordion.cjs +2 -0
- package/components/Accordion/accordion.cjs.map +1 -1
- package/components/Accordion/accordion.js +2 -0
- package/components/Accordion/accordion.js.map +1 -1
- package/components/Badge/index.cjs +2 -0
- package/components/Badge/index.cjs.map +1 -1
- package/components/Badge/index.js +2 -0
- package/components/Badge/index.js.map +1 -1
- package/components/BottomTabBar/index.cjs +2 -0
- package/components/BottomTabBar/index.cjs.map +1 -1
- package/components/BottomTabBar/index.js +2 -0
- package/components/BottomTabBar/index.js.map +1 -1
- package/components/Button/Button.cjs +2 -0
- package/components/Button/Button.cjs.map +1 -1
- package/components/Button/Button.js +2 -0
- package/components/Button/Button.js.map +1 -1
- package/components/MessageComposer/index.cjs +2 -0
- package/components/MessageComposer/index.cjs.map +1 -1
- package/components/MessageComposer/index.js +2 -0
- package/components/MessageComposer/index.js.map +1 -1
- package/components/SegmentedControl/index.cjs +2 -0
- package/components/SegmentedControl/index.cjs.map +1 -1
- package/components/SegmentedControl/index.js +2 -0
- package/components/SegmentedControl/index.js.map +1 -1
- package/components/SkeletonText/index.cjs +2 -0
- package/components/SkeletonText/index.cjs.map +1 -1
- package/components/SkeletonText/index.js +2 -0
- package/components/SkeletonText/index.js.map +1 -1
- package/components/Tabs/index.cjs +48 -6
- package/components/Tabs/index.cjs.map +1 -1
- package/components/Tabs/index.js +48 -6
- package/components/Tabs/index.js.map +1 -1
- package/components/overlay/ConfirmDialog/index.cjs +146 -89
- package/components/overlay/ConfirmDialog/index.cjs.map +1 -1
- package/components/overlay/ConfirmDialog/index.js +147 -90
- package/components/overlay/ConfirmDialog/index.js.map +1 -1
- package/components/overlay/Dialog/index.cjs +90 -64
- package/components/overlay/Dialog/index.cjs.map +1 -1
- package/components/overlay/Dialog/index.js +91 -65
- package/components/overlay/Dialog/index.js.map +1 -1
- package/components/overlay/Toast/index.cjs +19 -18
- package/components/overlay/Toast/index.cjs.map +1 -1
- package/components/overlay/Toast/index.js +22 -21
- package/components/overlay/Toast/index.js.map +1 -1
- package/contexts/Locale/index.cjs +2 -0
- package/contexts/Locale/index.cjs.map +1 -1
- package/contexts/Locale/index.js +2 -0
- package/contexts/Locale/index.js.map +1 -1
- package/contexts/Main/index.cjs +2 -0
- package/contexts/Main/index.cjs.map +1 -1
- package/contexts/Main/index.js +2 -0
- package/contexts/Main/index.js.map +1 -1
- package/contexts/Theme/KitsThemeProvider.cjs +2 -0
- package/contexts/Theme/KitsThemeProvider.cjs.map +1 -1
- package/contexts/Theme/KitsThemeProvider.js +2 -0
- package/contexts/Theme/KitsThemeProvider.js.map +1 -1
- package/contexts/Theme/index.cjs +1 -0
- package/contexts/Theme/index.cjs.map +1 -1
- package/contexts/Theme/index.js +1 -0
- package/contexts/Theme/index.js.map +1 -1
- package/contexts/Theme/resolvers.cjs +4 -0
- package/contexts/Theme/resolvers.cjs.map +1 -1
- package/contexts/Theme/resolvers.js +4 -0
- package/contexts/Theme/resolvers.js.map +1 -1
- package/data/DataView/Pagination/index.cjs +2 -0
- package/data/DataView/Pagination/index.cjs.map +1 -1
- package/data/DataView/Pagination/index.js +2 -0
- package/data/DataView/Pagination/index.js.map +1 -1
- package/data/TreeView/index.cjs +2 -0
- package/data/TreeView/index.cjs.map +1 -1
- package/data/TreeView/index.js +2 -0
- package/data/TreeView/index.js.map +1 -1
- package/form/controls/Checkbox/checkbox.cjs +2 -0
- package/form/controls/Checkbox/checkbox.cjs.map +1 -1
- package/form/controls/Checkbox/checkbox.js +2 -0
- package/form/controls/Checkbox/checkbox.js.map +1 -1
- package/form/controls/RadioButton/radiobutton.cjs +2 -0
- package/form/controls/RadioButton/radiobutton.cjs.map +1 -1
- package/form/controls/RadioButton/radiobutton.js +2 -0
- package/form/controls/RadioButton/radiobutton.js.map +1 -1
- package/form/controls/SelectButton/index.cjs +2 -0
- package/form/controls/SelectButton/index.cjs.map +1 -1
- package/form/controls/SelectButton/index.js +2 -0
- package/form/controls/SelectButton/index.js.map +1 -1
- package/form/controls/TriStateCheckbox/index.cjs +2 -0
- package/form/controls/TriStateCheckbox/index.cjs.map +1 -1
- package/form/controls/TriStateCheckbox/index.js +2 -0
- package/form/controls/TriStateCheckbox/index.js.map +1 -1
- package/form/file-pickers/MainUploader/index.cjs +1 -0
- package/form/file-pickers/MainUploader/index.cjs.map +1 -1
- package/form/file-pickers/MainUploader/index.js +1 -0
- package/form/file-pickers/MainUploader/index.js.map +1 -1
- package/form/helpers/ErrorMessage/errormessage.cjs +2 -0
- package/form/helpers/ErrorMessage/errormessage.cjs.map +1 -1
- package/form/helpers/ErrorMessage/errormessage.js +2 -0
- package/form/helpers/ErrorMessage/errormessage.js.map +1 -1
- package/form/helpers/FormContainer/index.cjs +2 -0
- package/form/helpers/FormContainer/index.cjs.map +1 -1
- package/form/helpers/FormContainer/index.js +2 -0
- package/form/helpers/FormContainer/index.js.map +1 -1
- package/form/helpers/Label/label.cjs +2 -0
- package/form/helpers/Label/label.cjs.map +1 -1
- package/form/helpers/Label/label.js +2 -0
- package/form/helpers/Label/label.js.map +1 -1
- package/form/inputs/InputMask/index.cjs +2 -0
- package/form/inputs/InputMask/index.cjs.map +1 -1
- package/form/inputs/InputMask/index.js +2 -0
- package/form/inputs/InputMask/index.js.map +1 -1
- package/form/inputs/InputNumber/index.cjs +2 -0
- package/form/inputs/InputNumber/index.cjs.map +1 -1
- package/form/inputs/InputNumber/index.js +2 -0
- package/form/inputs/InputNumber/index.js.map +1 -1
- package/form/inputs/InputPassword/index.cjs +2 -0
- package/form/inputs/InputPassword/index.cjs.map +1 -1
- package/form/inputs/InputPassword/index.js +2 -0
- package/form/inputs/InputPassword/index.js.map +1 -1
- package/form/inputs/InputSwitch/index.cjs +2 -0
- package/form/inputs/InputSwitch/index.cjs.map +1 -1
- package/form/inputs/InputSwitch/index.js +2 -0
- package/form/inputs/InputSwitch/index.js.map +1 -1
- package/form/inputs/InputText/index.cjs +2 -0
- package/form/inputs/InputText/index.cjs.map +1 -1
- package/form/inputs/InputText/index.js +2 -0
- package/form/inputs/InputText/index.js.map +1 -1
- package/form/inputs/InputTextarea/index.cjs +2 -0
- package/form/inputs/InputTextarea/index.cjs.map +1 -1
- package/form/inputs/InputTextarea/index.js +2 -0
- package/form/inputs/InputTextarea/index.js.map +1 -1
- package/form/inputs/PhoneInput/index.cjs +2 -0
- package/form/inputs/PhoneInput/index.cjs.map +1 -1
- package/form/inputs/PhoneInput/index.js +2 -0
- package/form/inputs/PhoneInput/index.js.map +1 -1
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.cjs +1 -0
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.cjs.map +1 -1
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.js +1 -0
- package/form/inputs/RadiusPicker/components/NumericRadiusInput.js.map +1 -1
- package/form/selects/AutoComplete/index.cjs +2 -0
- package/form/selects/AutoComplete/index.cjs.map +1 -1
- package/form/selects/AutoComplete/index.js +2 -0
- package/form/selects/AutoComplete/index.js.map +1 -1
- package/form/selects/Dropdown/index.cjs +2 -0
- package/form/selects/Dropdown/index.cjs.map +1 -1
- package/form/selects/Dropdown/index.js +2 -0
- package/form/selects/Dropdown/index.js.map +1 -1
- package/form/selects/ListBox/index.cjs +2 -0
- package/form/selects/ListBox/index.cjs.map +1 -1
- package/form/selects/ListBox/index.js +2 -0
- package/form/selects/ListBox/index.js.map +1 -1
- package/form/selects/MultiSelect/index.cjs +2 -0
- package/form/selects/MultiSelect/index.cjs.map +1 -1
- package/form/selects/MultiSelect/index.js +2 -0
- package/form/selects/MultiSelect/index.js.map +1 -1
- package/form/selects/TreeSelect/index.cjs +2 -0
- package/form/selects/TreeSelect/index.cjs.map +1 -1
- package/form/selects/TreeSelect/index.js +2 -0
- package/form/selects/TreeSelect/index.js.map +1 -1
- package/form-renderer/components/layout/FieldWrapper.cjs +2 -0
- package/form-renderer/components/layout/FieldWrapper.cjs.map +1 -1
- package/form-renderer/components/layout/FieldWrapper.js +2 -0
- package/form-renderer/components/layout/FieldWrapper.js.map +1 -1
- package/hooks/shadowPresets.cjs +1 -0
- package/hooks/shadowPresets.cjs.map +1 -1
- package/hooks/shadowPresets.js +1 -0
- package/hooks/shadowPresets.js.map +1 -1
- package/hooks/useFocusStyles.cjs +2 -0
- package/hooks/useFocusStyles.cjs.map +1 -1
- package/hooks/useFocusStyles.js +2 -0
- package/hooks/useFocusStyles.js.map +1 -1
- package/index.cjs +5 -0
- package/index.cjs.map +1 -1
- package/index.d.ts +51 -1
- package/index.js +1 -0
- package/index.js.map +1 -1
- package/layout/Center/index.cjs +2 -0
- package/layout/Center/index.cjs.map +1 -1
- package/layout/Center/index.js +2 -0
- package/layout/Center/index.js.map +1 -1
- package/layout/Container/container.cjs +2 -0
- package/layout/Container/container.cjs.map +1 -1
- package/layout/Container/container.js +2 -0
- package/layout/Container/container.js.map +1 -1
- package/layout/Flex/index.cjs +2 -0
- package/layout/Flex/index.cjs.map +1 -1
- package/layout/Flex/index.js +2 -0
- package/layout/Flex/index.js.map +1 -1
- package/layout/HStack/index.cjs +2 -0
- package/layout/HStack/index.cjs.map +1 -1
- package/layout/HStack/index.js +2 -0
- package/layout/HStack/index.js.map +1 -1
- package/layout/List/index.cjs +2 -0
- package/layout/List/index.cjs.map +1 -1
- package/layout/List/index.js +2 -0
- package/layout/List/index.js.map +1 -1
- package/layout/ListItem/index.cjs +2 -0
- package/layout/ListItem/index.cjs.map +1 -1
- package/layout/ListItem/index.js +2 -0
- package/layout/ListItem/index.js.map +1 -1
- package/layout/ScrollView/index.cjs +2 -0
- package/layout/ScrollView/index.cjs.map +1 -1
- package/layout/ScrollView/index.js +2 -0
- package/layout/ScrollView/index.js.map +1 -1
- package/layout/VStack/index.cjs +2 -0
- package/layout/VStack/index.cjs.map +1 -1
- package/layout/VStack/index.js +2 -0
- package/layout/VStack/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/types/src/Theme/alphaColors.cjs +24 -0
- package/packages/types/src/Theme/alphaColors.cjs.map +1 -0
- package/packages/types/src/Theme/alphaColors.js +19 -0
- package/packages/types/src/Theme/alphaColors.js.map +1 -0
- package/packages/types/src/Theme/defaultTheme.cjs +1 -1
- package/packages/types/src/Theme/defaultTheme.cjs.map +1 -1
- package/packages/types/src/Theme/defaultTheme.js +1 -1
- package/packages/types/src/Theme/defaultTheme.js.map +1 -1
- package/packages/types/src/Theme/resolvers.cjs +6 -0
- package/packages/types/src/Theme/resolvers.cjs.map +1 -1
- package/packages/types/src/Theme/resolvers.js +6 -0
- package/packages/types/src/Theme/resolvers.js.map +1 -1
- package/primitives/Box/index.cjs +2 -0
- package/primitives/Box/index.cjs.map +1 -1
- package/primitives/Box/index.js +2 -0
- package/primitives/Box/index.js.map +1 -1
- package/primitives/Card/index.cjs +2 -0
- package/primitives/Card/index.cjs.map +1 -1
- package/primitives/Card/index.js +2 -0
- package/primitives/Card/index.js.map +1 -1
- package/primitives/Divider/index.cjs +2 -0
- package/primitives/Divider/index.cjs.map +1 -1
- package/primitives/Divider/index.js +2 -0
- package/primitives/Divider/index.js.map +1 -1
- package/primitives/Heading/index.cjs +2 -0
- package/primitives/Heading/index.cjs.map +1 -1
- package/primitives/Heading/index.js +2 -0
- package/primitives/Heading/index.js.map +1 -1
- package/primitives/Icon/index.cjs +1 -0
- package/primitives/Icon/index.cjs.map +1 -1
- package/primitives/Icon/index.js +1 -0
- package/primitives/Icon/index.js.map +1 -1
- package/primitives/Image/index.cjs +2 -0
- package/primitives/Image/index.cjs.map +1 -1
- package/primitives/Image/index.js +2 -0
- package/primitives/Image/index.js.map +1 -1
- package/primitives/Skeleton/index.cjs +2 -0
- package/primitives/Skeleton/index.cjs.map +1 -1
- package/primitives/Skeleton/index.js +2 -0
- package/primitives/Skeleton/index.js.map +1 -1
- package/primitives/Svg/index.cjs +2 -0
- package/primitives/Svg/index.cjs.map +1 -1
- package/primitives/Svg/index.js +2 -0
- package/primitives/Svg/index.js.map +1 -1
- package/primitives/Text/index.cjs +2 -0
- package/primitives/Text/index.cjs.map +1 -1
- package/primitives/Text/index.js +2 -0
- package/primitives/Text/index.js.map +1 -1
|
@@ -57,6 +57,8 @@ 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/alphaColors.js';
|
|
61
|
+
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
60
62
|
import '../../apps/mobile/src/Factory/DimensionsContext.js';
|
|
61
63
|
import 'i18next';
|
|
62
64
|
import 'react-i18next';
|
|
@@ -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,8 @@ 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/alphaColors.cjs');
|
|
65
|
+
require('../../apps/mobile/src/Factory/helpers/cssVarMap.cjs');
|
|
64
66
|
require('i18next');
|
|
65
67
|
require('react-i18next');
|
|
66
68
|
require('../../apps/mobile/src/Core/AutoComplete/index.cjs');
|
|
@@ -93,14 +95,39 @@ const SIZE = {
|
|
|
93
95
|
};
|
|
94
96
|
function Tabs(rawProps) {
|
|
95
97
|
const props = useComponentDefaults.default("Tabs", rawProps).mergedProps;
|
|
96
|
-
const {
|
|
98
|
+
const {
|
|
99
|
+
items,
|
|
100
|
+
value,
|
|
101
|
+
onChange,
|
|
102
|
+
size = "md",
|
|
103
|
+
activeColor = "brand",
|
|
104
|
+
scrollable = true,
|
|
105
|
+
gap = 8,
|
|
106
|
+
testID,
|
|
107
|
+
countVariant = "suffix",
|
|
108
|
+
activeBadgeBackground = "surface-card",
|
|
109
|
+
activeBadgeTextColor = "text-primary",
|
|
110
|
+
inactiveBadgeBackground = "gray.200",
|
|
111
|
+
inactiveBadgeTextColor = "text-secondary",
|
|
112
|
+
inactiveBackground = "gray.100",
|
|
113
|
+
inactiveTextColor = "text-secondary",
|
|
114
|
+
sizeHeights
|
|
115
|
+
} = props;
|
|
97
116
|
const cfg = SIZE[size] ?? SIZE.md;
|
|
117
|
+
const heights = { sm: SIZE.sm.h, md: SIZE.md.h, lg: SIZE.lg.h, ...sizeHeights };
|
|
118
|
+
const height = heights[size] ?? heights.md;
|
|
98
119
|
const activeBg = style.resolveThemeTokenForNative(activeColor);
|
|
99
|
-
const inactiveBg = style.resolveThemeTokenForNative(
|
|
100
|
-
const inactiveText = style.resolveThemeTokenForNative(
|
|
120
|
+
const inactiveBg = style.resolveThemeTokenForNative(inactiveBackground);
|
|
121
|
+
const inactiveText = style.resolveThemeTokenForNative(inactiveTextColor);
|
|
122
|
+
const badge = countVariant === "badge";
|
|
123
|
+
const activeBadgeBg = style.resolveThemeTokenForNative(activeBadgeBackground);
|
|
124
|
+
const activeBadgeFg = style.resolveThemeTokenForNative(activeBadgeTextColor);
|
|
125
|
+
const inactiveBadgeBg = style.resolveThemeTokenForNative(inactiveBadgeBackground);
|
|
126
|
+
const inactiveBadgeFg = style.resolveThemeTokenForNative(inactiveBadgeTextColor);
|
|
127
|
+
const badgeH = cfg.fs + 7;
|
|
101
128
|
const renderChip = (item) => {
|
|
102
129
|
const active = item.key === value;
|
|
103
|
-
const label = item.count != null ? `${item.label} ${item.count}` : item.label;
|
|
130
|
+
const label = !badge && item.count != null ? `${item.label} ${item.count}` : item.label;
|
|
104
131
|
const fg = active ? "#FFFFFF" : inactiveText;
|
|
105
132
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
106
133
|
reactNative.TouchableOpacity,
|
|
@@ -111,7 +138,7 @@ function Tabs(rawProps) {
|
|
|
111
138
|
accessibilityRole: "button",
|
|
112
139
|
accessibilityState: { selected: active },
|
|
113
140
|
style: {
|
|
114
|
-
height
|
|
141
|
+
height,
|
|
115
142
|
borderRadius: 999,
|
|
116
143
|
paddingHorizontal: cfg.px,
|
|
117
144
|
flexDirection: "row",
|
|
@@ -123,7 +150,22 @@ function Tabs(rawProps) {
|
|
|
123
150
|
},
|
|
124
151
|
children: [
|
|
125
152
|
item.icon != null && /* @__PURE__ */ jsxRuntime.jsx(index_native.Icon, { name: item.icon, size: cfg.fs + 1, color: fg }),
|
|
126
|
-
/* @__PURE__ */ jsxRuntime.jsx(index_native$1.default, { fontSize: cfg.fs, fontWeight: "600", color: fg, children: label })
|
|
153
|
+
/* @__PURE__ */ jsxRuntime.jsx(index_native$1.default, { fontSize: cfg.fs, fontWeight: "600", color: fg, children: label }),
|
|
154
|
+
badge && item.count != null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
155
|
+
reactNative.View,
|
|
156
|
+
{
|
|
157
|
+
style: {
|
|
158
|
+
height: badgeH,
|
|
159
|
+
minWidth: badgeH,
|
|
160
|
+
borderRadius: 999,
|
|
161
|
+
paddingHorizontal: 6,
|
|
162
|
+
alignItems: "center",
|
|
163
|
+
justifyContent: "center",
|
|
164
|
+
backgroundColor: active ? activeBadgeBg : inactiveBadgeBg
|
|
165
|
+
},
|
|
166
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(index_native$1.default, { fontSize: cfg.fs - 2, fontWeight: "600", color: active ? activeBadgeFg : inactiveBadgeFg, children: item.count })
|
|
167
|
+
}
|
|
168
|
+
)
|
|
127
169
|
]
|
|
128
170
|
},
|
|
129
171
|
item.key
|
|
@@ -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 {items, value, onChange, size = \"md\", activeColor = \"brand\", scrollable = true, gap = 8, testID} = props;\n\n const cfg = SIZE[size] ?? SIZE.md;\n const activeBg = resolveThemeTokenForNative(activeColor);\n const inactiveBg = resolveThemeTokenForNative(
|
|
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 = \"gray.200\",\n inactiveBadgeTextColor = \"text-secondary\",\n inactiveBackground = \"gray.100\",\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":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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,GAAQA,4BAAA,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,UAAA;AAAA,IAC1B,sBAAA,GAAyB,gBAAA;AAAA,IACzB,kBAAA,GAAqB,UAAA;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,GAAWC,iCAA2B,WAAW,CAAA;AACvD,EAAA,MAAM,UAAA,GAAaA,iCAA2B,kBAAkB,CAAA;AAChE,EAAA,MAAM,YAAA,GAAeA,iCAA2B,iBAAiB,CAAA;AACjE,EAAA,MAAM,QAAQ,YAAA,KAAiB,OAAA;AAC/B,EAAA,MAAM,aAAA,GAAgBA,iCAA2B,qBAAqB,CAAA;AACtE,EAAA,MAAM,aAAA,GAAgBA,iCAA2B,oBAAoB,CAAA;AACrE,EAAA,MAAM,eAAA,GAAkBA,iCAA2B,uBAAuB,CAAA;AAC1E,EAAA,MAAM,eAAA,GAAkBA,iCAA2B,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,uBACIC,eAAA;AAAA,MAACC,4BAAA;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,oBAAQC,cAAA,CAACC,iBAAA,EAAA,EAAK,IAAA,EAAM,IAAA,CAAK,IAAA,EAAe,IAAA,EAAM,GAAA,CAAI,EAAA,GAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,CAAA;AAAA,0BACnFD,cAAA,CAACE,0BAAK,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,oBACpBF,cAAA;AAAA,YAACG,gBAAA;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,kBAAAH,cAAA,CAACE,sBAAA,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,sCACKC,gBAAA,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,uBACIH,cAAA;AAAA,IAACI,sBAAA;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;;;;"}
|
package/components/Tabs/index.js
CHANGED
|
@@ -59,6 +59,8 @@ 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/alphaColors.js';
|
|
63
|
+
import '../../apps/mobile/src/Factory/helpers/cssVarMap.js';
|
|
62
64
|
import 'i18next';
|
|
63
65
|
import 'react-i18next';
|
|
64
66
|
import '../../apps/mobile/src/Core/AutoComplete/index.js';
|
|
@@ -91,14 +93,39 @@ const SIZE = {
|
|
|
91
93
|
};
|
|
92
94
|
function Tabs(rawProps) {
|
|
93
95
|
const props = useComponentDefaults("Tabs", rawProps).mergedProps;
|
|
94
|
-
const {
|
|
96
|
+
const {
|
|
97
|
+
items,
|
|
98
|
+
value,
|
|
99
|
+
onChange,
|
|
100
|
+
size = "md",
|
|
101
|
+
activeColor = "brand",
|
|
102
|
+
scrollable = true,
|
|
103
|
+
gap = 8,
|
|
104
|
+
testID,
|
|
105
|
+
countVariant = "suffix",
|
|
106
|
+
activeBadgeBackground = "surface-card",
|
|
107
|
+
activeBadgeTextColor = "text-primary",
|
|
108
|
+
inactiveBadgeBackground = "gray.200",
|
|
109
|
+
inactiveBadgeTextColor = "text-secondary",
|
|
110
|
+
inactiveBackground = "gray.100",
|
|
111
|
+
inactiveTextColor = "text-secondary",
|
|
112
|
+
sizeHeights
|
|
113
|
+
} = props;
|
|
95
114
|
const cfg = SIZE[size] ?? SIZE.md;
|
|
115
|
+
const heights = { sm: SIZE.sm.h, md: SIZE.md.h, lg: SIZE.lg.h, ...sizeHeights };
|
|
116
|
+
const height = heights[size] ?? heights.md;
|
|
96
117
|
const activeBg = resolveThemeTokenForNative(activeColor);
|
|
97
|
-
const inactiveBg = resolveThemeTokenForNative(
|
|
98
|
-
const inactiveText = resolveThemeTokenForNative(
|
|
118
|
+
const inactiveBg = resolveThemeTokenForNative(inactiveBackground);
|
|
119
|
+
const inactiveText = resolveThemeTokenForNative(inactiveTextColor);
|
|
120
|
+
const badge = countVariant === "badge";
|
|
121
|
+
const activeBadgeBg = resolveThemeTokenForNative(activeBadgeBackground);
|
|
122
|
+
const activeBadgeFg = resolveThemeTokenForNative(activeBadgeTextColor);
|
|
123
|
+
const inactiveBadgeBg = resolveThemeTokenForNative(inactiveBadgeBackground);
|
|
124
|
+
const inactiveBadgeFg = resolveThemeTokenForNative(inactiveBadgeTextColor);
|
|
125
|
+
const badgeH = cfg.fs + 7;
|
|
99
126
|
const renderChip = (item) => {
|
|
100
127
|
const active = item.key === value;
|
|
101
|
-
const label = item.count != null ? `${item.label} ${item.count}` : item.label;
|
|
128
|
+
const label = !badge && item.count != null ? `${item.label} ${item.count}` : item.label;
|
|
102
129
|
const fg = active ? "#FFFFFF" : inactiveText;
|
|
103
130
|
return /* @__PURE__ */ jsxs(
|
|
104
131
|
TouchableOpacity,
|
|
@@ -109,7 +136,7 @@ function Tabs(rawProps) {
|
|
|
109
136
|
accessibilityRole: "button",
|
|
110
137
|
accessibilityState: { selected: active },
|
|
111
138
|
style: {
|
|
112
|
-
height
|
|
139
|
+
height,
|
|
113
140
|
borderRadius: 999,
|
|
114
141
|
paddingHorizontal: cfg.px,
|
|
115
142
|
flexDirection: "row",
|
|
@@ -121,7 +148,22 @@ function Tabs(rawProps) {
|
|
|
121
148
|
},
|
|
122
149
|
children: [
|
|
123
150
|
item.icon != null && /* @__PURE__ */ jsx(Icon, { name: item.icon, size: cfg.fs + 1, color: fg }),
|
|
124
|
-
/* @__PURE__ */ jsx(Text, { fontSize: cfg.fs, fontWeight: "600", color: fg, children: label })
|
|
151
|
+
/* @__PURE__ */ jsx(Text, { fontSize: cfg.fs, fontWeight: "600", color: fg, children: label }),
|
|
152
|
+
badge && item.count != null && /* @__PURE__ */ jsx(
|
|
153
|
+
View,
|
|
154
|
+
{
|
|
155
|
+
style: {
|
|
156
|
+
height: badgeH,
|
|
157
|
+
minWidth: badgeH,
|
|
158
|
+
borderRadius: 999,
|
|
159
|
+
paddingHorizontal: 6,
|
|
160
|
+
alignItems: "center",
|
|
161
|
+
justifyContent: "center",
|
|
162
|
+
backgroundColor: active ? activeBadgeBg : inactiveBadgeBg
|
|
163
|
+
},
|
|
164
|
+
children: /* @__PURE__ */ jsx(Text, { fontSize: cfg.fs - 2, fontWeight: "600", color: active ? activeBadgeFg : inactiveBadgeFg, children: item.count })
|
|
165
|
+
}
|
|
166
|
+
)
|
|
125
167
|
]
|
|
126
168
|
},
|
|
127
169
|
item.key
|
|
@@ -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 {items, value, onChange, size = \"md\", activeColor = \"brand\", scrollable = true, gap = 8, testID} = props;\n\n const cfg = SIZE[size] ?? SIZE.md;\n const activeBg = resolveThemeTokenForNative(activeColor);\n const inactiveBg = resolveThemeTokenForNative(
|
|
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 = \"gray.200\",\n inactiveBadgeTextColor = \"text-secondary\",\n inactiveBackground = \"gray.100\",\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":"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"}
|
|
@@ -3,11 +3,11 @@
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
|
+
var React = require('react');
|
|
6
7
|
var reactNative = require('react-native');
|
|
7
8
|
var Animated = require('react-native-reanimated');
|
|
8
9
|
var reactNativeSafeAreaContext = require('react-native-safe-area-context');
|
|
9
10
|
var useSeverityColors = require('../../../hooks/useSeverityColors.cjs');
|
|
10
|
-
require('react');
|
|
11
11
|
require('../../../contexts/DialogContext.cjs');
|
|
12
12
|
var useResolvedStyle = require('../../../hooks/useResolvedStyle.cjs');
|
|
13
13
|
var index = require('../../../animations/index.cjs');
|
|
@@ -15,6 +15,18 @@ var KitsThemeProvider_native = require('../../../contexts/Theme/KitsThemeProvide
|
|
|
15
15
|
var index_native = require('../../../primitives/Text/index.cjs');
|
|
16
16
|
var index_native$1 = require('../../../primitives/Icon/index.cjs');
|
|
17
17
|
|
|
18
|
+
function useOverlayPresence(visible) {
|
|
19
|
+
const [mounted, setMounted] = React.useState(visible);
|
|
20
|
+
const visibleRef = React.useRef(visible);
|
|
21
|
+
React.useEffect(() => {
|
|
22
|
+
visibleRef.current = visible;
|
|
23
|
+
if (visible) setMounted(true);
|
|
24
|
+
}, [visible]);
|
|
25
|
+
const handleExitFinished = React.useCallback(() => {
|
|
26
|
+
if (!visibleRef.current) setMounted(false);
|
|
27
|
+
}, []);
|
|
28
|
+
return { mounted, handleExitFinished };
|
|
29
|
+
}
|
|
18
30
|
function KitsConfirm(props) {
|
|
19
31
|
const {
|
|
20
32
|
visible,
|
|
@@ -52,12 +64,14 @@ function KitsConfirm(props) {
|
|
|
52
64
|
const textColor = resolveToken("text");
|
|
53
65
|
const subtextColor = resolveToken("gray.500");
|
|
54
66
|
const grabberColor = resolveToken("gray.300");
|
|
67
|
+
const scrimColor = resolveToken("black-alpha-40");
|
|
55
68
|
const brandLogo = type === "brand" ? theme.config.logo : null;
|
|
56
69
|
const resolvedStyle = useResolvedStyle.default(style || {});
|
|
57
70
|
const resolvedContentStyle = useResolvedStyle.default(contentStyle || {});
|
|
58
71
|
const resolvedHeaderStyle = useResolvedStyle.default(headerStyle || {});
|
|
59
72
|
const resolvedMaskStyle = useResolvedStyle.default(maskStyle || {});
|
|
60
|
-
|
|
73
|
+
const { mounted, handleExitFinished } = useOverlayPresence(!!visible);
|
|
74
|
+
if (!mounted) return null;
|
|
61
75
|
const isSheet = position === "bottom";
|
|
62
76
|
const hide = () => onHide?.("hide");
|
|
63
77
|
const doClick = async (callback) => {
|
|
@@ -125,108 +139,145 @@ function KitsConfirm(props) {
|
|
|
125
139
|
] }) });
|
|
126
140
|
};
|
|
127
141
|
if (isSheet) {
|
|
128
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.Modal, { visible: true, transparent: true, animationType: "none", onRequestClose: hide, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
Animated.
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
142
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.Modal, { visible: true, transparent: true, animationType: "none", onRequestClose: hide, children: visible && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
143
|
+
Animated.View,
|
|
144
|
+
{
|
|
145
|
+
entering: Animated.FadeIn.duration(index.overlayAnimations.scrim.enterDuration),
|
|
146
|
+
exiting: Animated.FadeOut.duration(index.overlayAnimations.scrim.exitDuration),
|
|
147
|
+
style: [styles.sheetOverlay, { backgroundColor: scrimColor }, resolvedMaskStyle],
|
|
148
|
+
children: [
|
|
149
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Pressable, { style: reactNative.StyleSheet.absoluteFill, onPress: hide }),
|
|
150
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
151
|
+
Animated.View,
|
|
152
|
+
{
|
|
153
|
+
entering: Animated.SlideInDown.springify().damping(index.overlayAnimations.sheet.enter.damping).stiffness(index.overlayAnimations.sheet.enter.stiffness).mass(index.overlayAnimations.sheet.enter.mass),
|
|
154
|
+
exiting: Animated.SlideOutDown.duration(index.overlayAnimations.sheet.exitDuration).easing(Animated.Easing.in(Animated.Easing.ease)).withCallback((finished) => {
|
|
155
|
+
"worklet";
|
|
156
|
+
if (finished) Animated.runOnJS(handleExitFinished)();
|
|
157
|
+
}),
|
|
158
|
+
style: [
|
|
159
|
+
styles.sheetPanel,
|
|
160
|
+
{ backgroundColor: panelBg, paddingBottom: 24 + insets.bottom },
|
|
161
|
+
resolvedStyle,
|
|
162
|
+
resolvedContentStyle
|
|
163
|
+
],
|
|
164
|
+
children: [
|
|
165
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.View, { style: [styles.grabber, { backgroundColor: grabberColor }] }),
|
|
166
|
+
header != null && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: [styles.sheetHeader, { color: textColor }, resolvedHeaderStyle], children: header }),
|
|
167
|
+
message != null && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: [styles.sheetMessage, { color: subtextColor }], children: message }),
|
|
168
|
+
children,
|
|
169
|
+
renderActions(true)
|
|
170
|
+
]
|
|
171
|
+
}
|
|
172
|
+
)
|
|
173
|
+
]
|
|
174
|
+
}
|
|
175
|
+
) });
|
|
150
176
|
}
|
|
151
177
|
if (content) {
|
|
152
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.Modal, { visible: true, transparent: true, animationType: "none", onRequestClose: hide, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
Animated.
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
178
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.Modal, { visible: true, transparent: true, animationType: "none", onRequestClose: hide, children: visible && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
179
|
+
Animated.View,
|
|
180
|
+
{
|
|
181
|
+
entering: Animated.FadeIn.duration(index.overlayAnimations.scrim.enterDuration),
|
|
182
|
+
exiting: Animated.FadeOut.duration(index.overlayAnimations.scrim.exitDuration),
|
|
183
|
+
style: [styles.overlay, { backgroundColor: scrimColor }, resolvedMaskStyle],
|
|
184
|
+
children: [
|
|
185
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Pressable, { style: reactNative.StyleSheet.absoluteFill, onPress: hide }),
|
|
186
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
187
|
+
Animated.View,
|
|
188
|
+
{
|
|
189
|
+
entering: Animated.ZoomIn.springify().damping(index.overlayAnimations.confirm.content.damping).stiffness(index.overlayAnimations.confirm.content.stiffness).mass(index.overlayAnimations.confirm.content.mass),
|
|
190
|
+
exiting: Animated.ZoomOut.duration(index.overlayAnimations.confirm.exitDuration).easing(Animated.Easing.in(Animated.Easing.ease)).withCallback((finished) => {
|
|
191
|
+
"worklet";
|
|
192
|
+
if (finished) Animated.runOnJS(handleExitFinished)();
|
|
193
|
+
}),
|
|
194
|
+
style: [
|
|
195
|
+
styles.panel,
|
|
196
|
+
{ backgroundColor: surfaceColor, minWidth: 250, maxWidth: 380 },
|
|
197
|
+
resolvedStyle,
|
|
198
|
+
resolvedContentStyle
|
|
199
|
+
],
|
|
200
|
+
children: content
|
|
201
|
+
}
|
|
202
|
+
)
|
|
203
|
+
]
|
|
204
|
+
}
|
|
205
|
+
) });
|
|
168
206
|
}
|
|
169
|
-
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.Modal, { visible: true, transparent: true, animationType: "none", onRequestClose: hide, children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
207
|
+
return /* @__PURE__ */ jsxRuntime.jsx(reactNative.Modal, { visible: true, transparent: true, animationType: "none", onRequestClose: hide, children: visible && /* @__PURE__ */ jsxRuntime.jsxs(
|
|
208
|
+
Animated.View,
|
|
209
|
+
{
|
|
210
|
+
entering: Animated.FadeIn.duration(index.overlayAnimations.scrim.enterDuration),
|
|
211
|
+
exiting: Animated.FadeOut.duration(index.overlayAnimations.scrim.exitDuration),
|
|
212
|
+
style: [styles.overlay, { backgroundColor: scrimColor }, resolvedMaskStyle],
|
|
213
|
+
children: [
|
|
214
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Pressable, { style: reactNative.StyleSheet.absoluteFill, onPress: hide }),
|
|
215
|
+
/* @__PURE__ */ jsxRuntime.jsxs(reactNative.View, { style: styles.cardStack, children: [
|
|
216
|
+
showIcon && /* @__PURE__ */ jsxRuntime.jsx(
|
|
217
|
+
Animated.View,
|
|
218
|
+
{
|
|
219
|
+
entering: Animated.ZoomIn.springify().damping(index.overlayAnimations.confirm.icon.damping).stiffness(index.overlayAnimations.confirm.icon.stiffness).mass(index.overlayAnimations.confirm.icon.mass).delay(index.overlayAnimations.confirm.icon.delay),
|
|
220
|
+
exiting: Animated.ZoomOut.duration(index.overlayAnimations.confirm.exitDuration).easing(Animated.Easing.in(Animated.Easing.ease)),
|
|
221
|
+
style: [styles.iconBubble, { backgroundColor: colors.iconBg }],
|
|
222
|
+
children: brandLogo ? brandLogo : typeof icon === "string" ? /* @__PURE__ */ jsxRuntime.jsx(index_native$1.Icon, { name: icon, size: "xl", color: colors.iconFg }) : icon
|
|
223
|
+
}
|
|
224
|
+
),
|
|
225
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
226
|
+
Animated.View,
|
|
186
227
|
{
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
228
|
+
entering: Animated.ZoomIn.springify().damping(index.overlayAnimations.confirm.enter.damping).stiffness(index.overlayAnimations.confirm.enter.stiffness).mass(index.overlayAnimations.confirm.enter.mass),
|
|
229
|
+
exiting: Animated.ZoomOut.duration(index.overlayAnimations.confirm.exitDuration).easing(Animated.Easing.in(Animated.Easing.ease)).withCallback((finished) => {
|
|
230
|
+
"worklet";
|
|
231
|
+
if (finished) Animated.runOnJS(handleExitFinished)();
|
|
232
|
+
}),
|
|
233
|
+
style: [
|
|
234
|
+
styles.panel,
|
|
235
|
+
{
|
|
236
|
+
backgroundColor: panelBg,
|
|
237
|
+
paddingTop: showIcon ? 48 : 24,
|
|
238
|
+
gap: 10
|
|
239
|
+
},
|
|
240
|
+
resolvedStyle,
|
|
241
|
+
resolvedContentStyle
|
|
242
|
+
],
|
|
243
|
+
children: [
|
|
244
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Pressable, { style: styles.closeBtn, onPress: hide, hitSlop: 12, children: /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: { fontSize: 18, color: subtextColor }, children: "\u2715" }) }),
|
|
245
|
+
header != null && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: [styles.header, { color: textColor }, resolvedHeaderStyle], children: header }),
|
|
246
|
+
message != null && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: [styles.message, { color: subtextColor }], children: message }),
|
|
247
|
+
children,
|
|
248
|
+
renderActions(false)
|
|
249
|
+
]
|
|
250
|
+
}
|
|
251
|
+
)
|
|
252
|
+
] })
|
|
253
|
+
]
|
|
254
|
+
}
|
|
255
|
+
) });
|
|
205
256
|
}
|
|
206
257
|
const styles = reactNative.StyleSheet.create({
|
|
207
258
|
overlay: {
|
|
208
259
|
flex: 1,
|
|
209
|
-
backgroundColor: "rgba(0,0,0,0.55)",
|
|
210
260
|
justifyContent: "center",
|
|
211
261
|
alignItems: "center",
|
|
212
262
|
padding: 28
|
|
213
263
|
},
|
|
214
264
|
sheetOverlay: {
|
|
215
265
|
flex: 1,
|
|
216
|
-
backgroundColor: "rgba(0,0,0,0.55)",
|
|
217
266
|
justifyContent: "flex-end"
|
|
218
267
|
},
|
|
219
268
|
sheetPanel: {
|
|
269
|
+
// 24 == radii.2xl, top corners only (bottom stays square).
|
|
220
270
|
borderTopLeftRadius: 24,
|
|
221
271
|
borderTopRightRadius: 24,
|
|
222
272
|
paddingHorizontal: 24,
|
|
223
273
|
paddingTop: 10,
|
|
224
274
|
gap: 14,
|
|
225
|
-
elevation:
|
|
275
|
+
// Subtle elevation (upward for a sheet): low opacity, wide blur, minimal offset.
|
|
276
|
+
elevation: 6,
|
|
226
277
|
shadowColor: "#000",
|
|
227
|
-
shadowOffset: { width: 0, height: -
|
|
278
|
+
shadowOffset: { width: 0, height: -2 },
|
|
228
279
|
shadowOpacity: 0.15,
|
|
229
|
-
shadowRadius:
|
|
280
|
+
shadowRadius: 20
|
|
230
281
|
},
|
|
231
282
|
grabber: {
|
|
232
283
|
width: 40,
|
|
@@ -266,14 +317,16 @@ const styles = reactNative.StyleSheet.create({
|
|
|
266
317
|
},
|
|
267
318
|
panel: {
|
|
268
319
|
alignSelf: "stretch",
|
|
269
|
-
|
|
320
|
+
// 20 == radii.xl. Side padding (24) == bottom padding (24) for even rhythm.
|
|
321
|
+
borderRadius: 20,
|
|
270
322
|
paddingHorizontal: 24,
|
|
271
323
|
paddingBottom: 24,
|
|
272
|
-
elevation:
|
|
324
|
+
// Subtle elevation: low opacity, wide blur, minimal offset.
|
|
325
|
+
elevation: 6,
|
|
273
326
|
shadowColor: "#000",
|
|
274
|
-
shadowOffset: { width: 0, height:
|
|
275
|
-
shadowOpacity: 0.
|
|
276
|
-
shadowRadius:
|
|
327
|
+
shadowOffset: { width: 0, height: 2 },
|
|
328
|
+
shadowOpacity: 0.15,
|
|
329
|
+
shadowRadius: 20,
|
|
277
330
|
alignItems: "center"
|
|
278
331
|
},
|
|
279
332
|
closeBtn: {
|
|
@@ -292,7 +345,8 @@ const styles = reactNative.StyleSheet.create({
|
|
|
292
345
|
fontSize: 14,
|
|
293
346
|
textAlign: "center",
|
|
294
347
|
lineHeight: 20,
|
|
295
|
-
|
|
348
|
+
// Tightened so top/bottom whitespace around the actions reads balanced.
|
|
349
|
+
marginBottom: 16
|
|
296
350
|
},
|
|
297
351
|
buttonRow: {
|
|
298
352
|
flexDirection: "row",
|
|
@@ -303,15 +357,18 @@ const styles = reactNative.StyleSheet.create({
|
|
|
303
357
|
actionBtn: {
|
|
304
358
|
paddingVertical: 12,
|
|
305
359
|
paddingHorizontal: 24,
|
|
306
|
-
|
|
360
|
+
// Pill (== radii.pill). Buttons here are raw Pressables, not kits Button,
|
|
361
|
+
// so the pill comes from borderRadius — the pattern the `buttons` array
|
|
362
|
+
// path (`b.rounded && {borderRadius: 999}`) already uses in this file.
|
|
363
|
+
borderRadius: 999,
|
|
307
364
|
minWidth: 100,
|
|
308
365
|
alignItems: "center",
|
|
309
366
|
justifyContent: "center"
|
|
310
367
|
},
|
|
311
|
-
// Taller
|
|
368
|
+
// Taller buttons for the bottom-sheet action row (pill shape shared).
|
|
312
369
|
actionBtnSheet: {
|
|
313
370
|
paddingVertical: 16,
|
|
314
|
-
borderRadius:
|
|
371
|
+
borderRadius: 999
|
|
315
372
|
},
|
|
316
373
|
actionBtnOutlined: {
|
|
317
374
|
backgroundColor: "transparent",
|