@lmb-it/kitsconcerto-native 0.1.255 → 0.1.257
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/form/controls/Checkbox/checkbox.cjs +1 -1
- package/form/controls/Checkbox/checkbox.cjs.map +1 -1
- package/form/controls/Checkbox/checkbox.js +1 -1
- package/form/controls/Checkbox/checkbox.js.map +1 -1
- package/form/inputs/InputTextarea/index.cjs +6 -1
- package/form/inputs/InputTextarea/index.cjs.map +1 -1
- package/form/inputs/InputTextarea/index.js +6 -1
- package/form/inputs/InputTextarea/index.js.map +1 -1
- package/form/inputs/Slider/index.cjs +6 -3
- package/form/inputs/Slider/index.cjs.map +1 -1
- package/form/inputs/Slider/index.js +6 -3
- package/form/inputs/Slider/index.js.map +1 -1
- package/package.json +1 -1
- package/packages/types/src/Theme/defaultTheme.cjs +13 -2
- package/packages/types/src/Theme/defaultTheme.cjs.map +1 -1
- package/packages/types/src/Theme/defaultTheme.js +13 -2
- package/packages/types/src/Theme/defaultTheme.js.map +1 -1
|
@@ -207,7 +207,7 @@ const CheckboxButton = ({
|
|
|
207
207
|
disabled,
|
|
208
208
|
children: /* @__PURE__ */ jsxRuntime.jsxs(index.default, { flexDirection: direction, alignItems: "center", gap: 4, children: [
|
|
209
209
|
renderContent(),
|
|
210
|
-
!!item.label && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { children: item.label })
|
|
210
|
+
!!item.label && /* @__PURE__ */ jsxRuntime.jsx(index_native.default, { style: textStyle, children: item.label })
|
|
211
211
|
] })
|
|
212
212
|
}
|
|
213
213
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.cjs","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {!!item.label && <Text>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["useKitsTheme","useMemo","resolveStyleRecord","splitTextStyle","jsx","Text","Pressable","Flex","CoreCheckboxIndicator"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"checkbox.cjs","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {/* ⛔ THIS TEXT HAD NO STYLE AT ALL — same dark-mode fault as\n the Checkbox item text above and the Radio label before its\n 21 Sep fix; reuses the SAME resolved textStyle, not a bare\n Text, so the theme's Checkbox.item colour reaches it too. */}\n {!!item.label && <Text style={textStyle}>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["useKitsTheme","useMemo","resolveStyleRecord","splitTextStyle","jsx","Text","Pressable","Flex","CoreCheckboxIndicator"],"mappings":"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"}
|
|
@@ -203,7 +203,7 @@ const CheckboxButton = ({
|
|
|
203
203
|
disabled,
|
|
204
204
|
children: /* @__PURE__ */ jsxs(Flex, { flexDirection: direction, alignItems: "center", gap: 4, children: [
|
|
205
205
|
renderContent(),
|
|
206
|
-
!!item.label && /* @__PURE__ */ jsx(Text, { children: item.label })
|
|
206
|
+
!!item.label && /* @__PURE__ */ jsx(Text, { style: textStyle, children: item.label })
|
|
207
207
|
] })
|
|
208
208
|
}
|
|
209
209
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkbox.js","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {!!item.label && <Text>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["CoreCheckboxIndicator"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0BA,MAAM,aAAA,GAAgB,CAAC,CAAA,KAAmC;AACtD,EAAA,QAAQ,CAAA;AAAG,IACP,KAAK,IAAA;AAAA,IAAM,KAAK,IAAA;AAAM,MAAA,OAAO,IAAA;AAAA,IAC7B,KAAK,IAAA;AAAA,IAAM,KAAK,IAAA;AAAM,MAAA,OAAO,IAAA;AAAA,IAC7B;AAAS,MAAA,OAAO,IAAA;AAAA;AAExB,CAAA;AAEA,MAAM,iBAAiB,CAAK;AAAA,EACxB,IAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,SAAA;AAAA,EACA,QAAA;AAAA,EACA;AACJ,CAAA,KAA8B;AAC1B,EAAA,MAAM,EAAE,YAAA,EAAa,GAAI,YAAA,EAAa;AACtC,EAAA,MAAM,YAAA,GAAe,aAAa,SAAS,CAAA;AAC3C,EAAA,MAAM,WAAA,GAAc,aAAa,UAAU,CAAA;AAK3C,EAAA,MAAM,iBAAA,GAAoB,QAAQ,MAAM;AACpC,IAAA,MAAM,MAAA,GAA8B;AAAA,MAChC,GAAI,UAAA,EAAY,IAAA,IAAQ,EAAC;AAAA,MACzB,GAAI,QAAA,GAAW,UAAA,EAAY,YAAA,GAAe,IAAA;AAAA,MAC1C,GAAI,QAAA,GAAW,UAAA,EAAY,YAAA,GAAe,IAAA;AAAA,MAC1C,GAAI,SAAA,GAAY,UAAA,EAAY,WAAA,GAAc,IAAA;AAAA,MAC1C,GAAI,KAAK,CAAA,IAAK,IAAA,IAAQ,EAAE,IAAA,CAAK,KAAA,IAAU,IAAA,CAAK,KAAA,CAAc,CAAA,IAAK,IAAA,CAAA,IAAS,EAAE,IAAA,CAAK,KAAA,IAAU,KAAK,KAAA,CAAc,KAAA,IAAS,QAC/G,EAAE,KAAA,EAAO,IAAA,CAAK,CAAA,EAAE,GAChB,IAAA;AAAA,MACN,GAAI,IAAA,CAAK,KAAA,IAAS,EAAC;AAAA,MACnB,GAAI,QAAA,GAAW,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,MACpC,GAAI,QAAA,GAAW,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,MACpC,GAAI,SAAA,GAAY,IAAA,CAAK,YAAA,GAAe;AAAA,KACxC;AACA,IAAA,OAAO,kBAAA,CAAmB,QAAQ,YAAY,CAAA;AAAA,EAClD,GAAG,CAAC,UAAA,EAAY,QAAA,EAAU,QAAA,EAAU,WAAW,IAAA,CAAK,KAAA,EAAO,IAAA,CAAK,aAAA,EAAe,KAAK,aAAA,EAAe,IAAA,CAAK,cAAc,IAAA,CAAK,CAAA,EAAG,YAAY,CAAC,CAAA;AAI3I,EAAA,MAAM,EAAE,OAAA,EAAS,YAAA,EAAc,IAAA,EAAM,WAAU,GAAI,OAAA;AAAA,IAC/C,MAAM,eAAe,iBAAiB,CAAA;AAAA,IACtC,CAAC,iBAAiB;AAAA,GACtB;AAEA,EAAA,MAAM,KAAA,GAAgC;AAAA,IAClC,EAAA,EAAI,EAAA;AAAA,IAAI,EAAA,EAAI,EAAA;AAAA,IAAI,EAAA,EAAI,EAAA;AAAA,IAAI,EAAA,EAAI,EAAA;AAAA,IAAI,EAAA,EAAI;AAAA,GACxC;AAEA,EAAA,MAAM,QAAA,GAA6C;AAAA,IAC/C,EAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IAAG,EAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IAAG,EAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IAAG,EAAA,EAAI,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,IAAG,EAAA,EAAI,CAAC,CAAA,EAAG,EAAE;AAAA,GAC9D;AAEA,EAAA,MAAM,OAAO,IAAA,CAAK,IAAA,GAAO,MAAM,IAAA,CAAK,IAAI,IAAI,KAAA,CAAM,EAAA;AAClD,EAAA,MAAM,UAAU,IAAA,CAAK,IAAA,GAAO,SAAS,IAAA,CAAK,IAAI,IAAI,QAAA,CAAS,EAAA;AAG3D,EAAA,MAAM,SAAA,GAAY,KAAK,aAAA,KAAkB,MAAA;AACzC,EAAA,MAAM,WAAA,GAAc,KAAK,aAAA,KAAkB,QAAA;AAC3C,EAAA,MAAM,QAAA,GAAW,KAAK,aAAA,KAAkB,KAAA;AAExC,EAAA,MAAM,YACF,SAAA,GAAY,aAAA,GACR,WAAA,GAAc,QAAA,GACV,WAAW,gBAAA,GACP,KAAA;AAGhB,EAAA,MAAM,cAAA,GAAiB,QAAQ,OAAO;AAAA,IAClC,OAAA,EAAS,WAAW,EAAA,GAAK,GAAA;AAAA,IACzB,WAAA,EAAa,IAAA,CAAK,SAAA,GAAY,CAAA,GAAI,CAAA;AAAA,IAClC,YAAA,EAAc,IAAA,CAAK,SAAA,GAAY,CAAA,GAAI,CAAA;AAAA,IACnC,WAAA,EAAa,WAAW,YAAA,GAAe,WAAA;AAAA,IACvC,eAAA,EAAiB,WAAW,YAAA,GAAe,aAAA;AAAA,IAC3C,iBAAA,EAAmB,IAAA,CAAK,SAAA,GAAY,CAAA,GAAI,UAAU,CAAC,CAAA;AAAA,IACnD,eAAA,EAAiB,IAAA,CAAK,SAAA,GAAY,CAAA,GAAI,UAAU,CAAC;AAAA,MACjD,CAAC,QAAA,EAAU,UAAU,IAAA,CAAK,SAAA,EAAW,OAAO,CAAC,CAAA;AAGjD,EAAA,MAAM,gBAAgB,MAAM;AACxB,IAAA,IAAI,KAAK,SAAA,EAAW;AAChB,MAAA,OAAO,OAAO,IAAA,CAAK,SAAA,KAAc,UAAA,GAC3B,IAAA,CAAK,UAAU,EAAE,QAAA,EAAU,KAAA,EAAO,IAAA,CAAK,OAAO,SAAA,EAAW,CAAC,CAAC,SAAA,EAAW,IACtE,IAAA,CAAK,SAAA;AAAA,IACf;AAGA,IAAA,MAAM,YAAA,GAAe,QAAA,IAAY,CAAC,IAAA,CAAK,YAAY,MAAA,GAAS,MAAA;AAC5D,IAAA,uBACI,GAAA;AAAA,MAAC,IAAA;AAAA,MAAA;AAAA,QACG,QAAA,EAAU,IAAA;AAAA,QACV,SAAA,EAAW,YAAA;AAAA,QACX,CAAA,EAAG,CAAA;AAAA,QACH,KAAA,EAAO,SAAA;AAAA,QAEN,QAAA,EAAA,IAAA,CAAK;AAAA;AAAA,KACV;AAAA,EAER,CAAA;AAGA,EAAA,MAAM,aAAa,sBACf,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,SAAS,MAAM;AAAE,QAAA,IAAI,CAAC,UAAU,QAAA,EAAS;AAAA,MAAG,CAAA;AAAA,MAC5C,QAAA;AAAA,MAEA,+BAAC,IAAA,EAAA,EAAK,UAAA,EAAW,UAAS,GAAA,EAAK,CAAA,EAAG,eAAe,SAAA,EAC7C,QAAA,EAAA;AAAA,wBAAA,GAAA;AAAA,UAACA,iBAAA;AAAA,UAAA;AAAA,YACG,OAAA,EAAS,QAAA;AAAA,YACT,QAAA;AAAA,YACA,OAAA,EAAS,SAAA;AAAA,YACT,sBAAA,EAAwB,YAAA;AAAA,YACxB,kBAAA,EAAoB,YAAA;AAAA,YACpB,IAAA,EAAM,aAAA,CAAc,IAAA,CAAK,IAAI;AAAA;AAAA,SACjC;AAAA,QACC,aAAA;AAAc,OAAA,EACnB;AAAA;AAAA,GACJ;AAIJ,EAAA,MAAM,kBAAkB,sBACpB,GAAA;AAAA,IAAC,SAAA;AAAA,IAAA;AAAA,MACG,SAAS,MAAM;AAAE,QAAA,IAAI,CAAC,UAAU,QAAA,EAAS;AAAA,MAAG,CAAA;AAAA,MAC5C,QAAA;AAAA,MAEA,+BAAC,IAAA,EAAA,EAAK,aAAA,EAAe,WAAW,UAAA,EAAW,QAAA,EAAS,KAAK,CAAA,EACpD,QAAA,EAAA;AAAA,QAAA,aAAA,EAAc;AAAA,QACd,CAAC,CAAC,IAAA,CAAK,yBAAS,GAAA,CAAC,IAAA,EAAA,EAAM,eAAK,KAAA,EAAM;AAAA,OAAA,EACvC;AAAA;AAAA,GACJ;AAMJ,EAAA,IAAI,CAAC,IAAA,CAAK,SAAA,IAAa,CAAC,KAAK,SAAA,EAAW;AACpC,IAAA,uBACI,GAAA;AAAA,MAAC,SAAA;AAAA,MAAA;AAAA,QACG,SAAS,MAAM;AAAE,UAAA,IAAI,CAAC,UAAU,QAAA,EAAS;AAAA,QAAG,CAAA;AAAA,QAC5C,QAAA;AAAA,QACA,KAAA,EAAO,CAAC,cAAA,EAAgB,YAAY,CAAA;AAAA,QAEnC,QAAA,EAAA,aAAA;AAAc;AAAA,KACnB;AAAA,EAER;AAGA,EAAA,uBACI,GAAA;AAAA,IAAC,IAAA;AAAA,IAAA;AAAA,MACG,aAAA,EAAe,WAAW,MAAA,GAAS,MAAA;AAAA,MACnC,KAAA,EAAO,YAAA;AAAA,MACP,UAAA,EAAW,YAAA;AAAA,MAEV,QAAA,EAAA,IAAA,CAAK,SAAA,GAAY,UAAA,EAAW,GAAI,eAAA;AAAgB;AAAA,GACrD;AAER;;;;"}
|
|
1
|
+
{"version":3,"file":"checkbox.js","sources":["../../../../../src/form/controls/Checkbox/checkbox.native.tsx"],"sourcesContent":["import React, { useMemo } from \"react\";\nimport type { IRadioCheckboxListItem } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex, Text } from \"../../../_compat\";\nimport { Pressable } from \"react-native\";\nimport { CoreCheckboxIndicator } from \"@lmb-it/kitsconcertomobile\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\nimport { resolveStyleRecord, splitTextStyle } from \"../../../hooks/useResolvedStyle\";\n\ninterface CheckboxButtonProps<T> {\n item: IRadioCheckboxListItem<T>;\n selected: boolean;\n disabled?: boolean;\n isInvalid?: boolean;\n onToggle: () => void;\n /**\n * Pre-merged slot styles from KitsCheckbox (theme `Checkbox.item*` +\n * per-instance `slots.item*`). Unresolved IStyleClasses.\n */\n slotStyles?: {\n item?: Record<string, any>;\n itemSelected?: Record<string, any>;\n itemDisabled?: Record<string, any>;\n itemInvalid?: Record<string, any>;\n };\n}\n\nconst indicatorSize = (s?: string): 'sm' | 'md' | 'lg' => {\n switch (s) {\n case 'xs': case 'sm': return 'sm';\n case 'lg': case 'xl': return 'lg';\n default: return 'md';\n }\n};\n\nconst CheckboxButton = <T,>({\n item,\n selected,\n disabled,\n isInvalid,\n onToggle,\n slotStyles,\n}: CheckboxButtonProps<T>) => {\n const { resolveToken } = useKitsTheme();\n const primaryColor = resolveToken('primary');\n const borderColor = resolveToken('gray.300');\n\n /* Per-item style (slotStyles + item.style*), token-resolved.\n slotStyles is pre-merged at KitsCheckbox level\n (FormElement < Checkbox.item < per-instance slots.item). */\n const resolvedItemStyle = useMemo(() => {\n const merged: Record<string, any> = {\n ...(slotStyles?.item || {}),\n ...(selected ? slotStyles?.itemSelected : null),\n ...(disabled ? slotStyles?.itemDisabled : null),\n ...(isInvalid ? slotStyles?.itemInvalid : null),\n ...(item.w != null && !(item.style && (item.style as any).w != null) && !(item.style && (item.style as any).width != null)\n ? { width: item.w }\n : null),\n ...(item.style || {}),\n ...(selected ? item.styleSelected : null),\n ...(disabled ? item.styleDisabled : null),\n ...(isInvalid ? item.styleInvalid : null),\n };\n return resolveStyleRecord(merged, resolveToken);\n }, [slotStyles, selected, disabled, isInvalid, item.style, item.styleSelected, item.styleDisabled, item.styleInvalid, item.w, resolveToken]);\n\n // Route text props to inner Text, layout props to outer wrapper.\n // No size default — `style.flex` / `style.width` flow through directly.\n const { wrapper: wrapperStyle, text: textStyle } = useMemo(\n () => splitTextStyle(resolvedItemStyle),\n [resolvedItemStyle],\n );\n\n const sizes: Record<string, number> = {\n xs: 13, sm: 17, md: 22, lg: 27, xl: 30,\n };\n\n const paddings: Record<string, [number, number]> = {\n xs: [1, 3], sm: [2, 5], md: [3, 7], lg: [4, 9], xl: [5, 13],\n };\n\n const size = item.size ? sizes[item.size] : sizes.xs;\n const padding = item.size ? paddings[item.size] : paddings.xs;\n\n /* ---- Label positioning (mirrors web) ---- */\n const leftLabel = item.labelPosition === \"left\";\n const bottomLabel = item.labelPosition === \"bottom\";\n const topLabel = item.labelPosition === \"top\";\n\n const direction =\n leftLabel ? \"row-reverse\" :\n bottomLabel ? \"column\" :\n topLabel ? \"column-reverse\" :\n \"row\";\n\n /* ---- Button mode style (mirrors web checked-option) ---- */\n const containerStyle = useMemo(() => ({\n opacity: disabled ? 40 : 100,\n borderWidth: item.component ? 0 : 1,\n borderRadius: item.component ? 0 : 8,\n borderColor: selected ? primaryColor : borderColor,\n backgroundColor: selected ? primaryColor : 'transparent',\n paddingHorizontal: item.component ? 0 : padding?.[1],\n paddingVertical: item.component ? 0 : padding?.[0],\n }), [disabled, selected, item.component, padding]);\n\n /* ---- Content: custom component or label text ---- */\n const renderContent = () => {\n if (item.component) {\n return typeof item.component === \"function\"\n ? item.component({ selected, value: item.value, isInvalid: !!isInvalid })\n : item.component;\n }\n // Default selected-button color (white on primary fill) kept,\n // but user-supplied text props override it via spread style.\n const defaultColor = selected && !item.withBulbs ? '#fff' : undefined;\n return (\n <Text\n fontSize={size}\n fontColor={defaultColor}\n m={0}\n style={textStyle}\n >\n {item.label}\n </Text>\n );\n };\n\n /* ---- Bulb: custom checkbox indicator + content (mirrors web PrimeCheckbox + renderContent) ---- */\n const renderBulb = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex alignItems=\"center\" gap={6} flexDirection={direction}>\n <CoreCheckboxIndicator\n checked={selected}\n disabled={disabled}\n invalid={isInvalid}\n checkedBackgroundColor={primaryColor}\n checkedBorderColor={primaryColor}\n size={indicatorSize(item.size)}\n />\n {renderContent()}\n </Flex>\n </Pressable>\n );\n\n /* ---- Component: custom component + label (mirrors web renderComponent) ---- */\n const renderComponent = () => (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n >\n <Flex flexDirection={direction} alignItems=\"center\" gap={4}>\n {renderContent()}\n {/* ⛔ THIS TEXT HAD NO STYLE AT ALL — same dark-mode fault as\n the Checkbox item text above and the Radio label before its\n 21 Sep fix; reuses the SAME resolved textStyle, not a bare\n Text, so the theme's Checkbox.item colour reaches it too. */}\n {!!item.label && <Text style={textStyle}>{item.label}</Text>}\n </Flex>\n </Pressable>\n );\n\n\n // BUTTON mode: collapse to a single layer — Pressable IS the styled\n // pill. wrapperStyle wins over containerStyle (later in RN array).\n if (!item.withBulbs && !item.component) {\n return (\n <Pressable\n onPress={() => { if (!disabled) onToggle(); }}\n disabled={disabled}\n style={[containerStyle, wrapperStyle]}\n >\n {renderContent()}\n </Pressable>\n );\n }\n\n // BULB / COMPONENT modes keep the nested structure.\n return (\n <Flex\n pointerEvents={disabled ? \"none\" : \"auto\"}\n style={wrapperStyle}\n alignItems=\"flex-start\"\n >\n {item.withBulbs ? renderBulb() : renderComponent()}\n </Flex>\n );\n};\n\nexport default CheckboxButton;\n"],"names":["CoreCheckboxIndicator"],"mappings":"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"}
|
|
@@ -94,12 +94,16 @@ var locale = require('../../../hooks/locale.cjs');
|
|
|
94
94
|
require('../../../contexts/DialogContext.cjs');
|
|
95
95
|
var useComponentDefaults = require('../../../hooks/useComponentDefaults.cjs');
|
|
96
96
|
var useResolvedStyle = require('../../../hooks/useResolvedStyle.cjs');
|
|
97
|
+
var KitsThemeProvider_native = require('../../../contexts/Theme/KitsThemeProvider.cjs');
|
|
97
98
|
|
|
98
99
|
const KitsInputTextarea = React.forwardRef((rawProps, ref) => {
|
|
99
100
|
const { mergedProps: props, themeStyle, elementStyles } = useComponentDefaults.default("Textarea", rawProps);
|
|
100
101
|
const resolvedThemeStyle = useResolvedStyle.default(themeStyle);
|
|
101
102
|
const resolvedRootStyle = useResolvedStyle.default(elementStyles?.root || {});
|
|
102
103
|
const { isRTL } = locale.useLanguage();
|
|
104
|
+
const { resolveToken } = KitsThemeProvider_native.useKitsTheme();
|
|
105
|
+
const resolvedRootColor = resolvedRootStyle?.color ?? resolvedThemeStyle?.color;
|
|
106
|
+
const valueColor = typeof resolvedRootColor === "string" && resolvedRootColor.length > 0 ? resolvedRootColor : resolveToken("text");
|
|
103
107
|
const {
|
|
104
108
|
id,
|
|
105
109
|
label,
|
|
@@ -220,7 +224,8 @@ const KitsInputTextarea = React.forwardRef((rawProps, ref) => {
|
|
|
220
224
|
paddingHorizontal: 12,
|
|
221
225
|
paddingVertical: 8,
|
|
222
226
|
textAlign: isRTL ? "right" : "left",
|
|
223
|
-
writingDirection: isRTL ? "rtl" : "ltr"
|
|
227
|
+
writingDirection: isRTL ? "rtl" : "ltr",
|
|
228
|
+
color: valueColor
|
|
224
229
|
// ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),
|
|
225
230
|
},
|
|
226
231
|
...navProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":["forwardRef","useComponentDefaults","useResolvedStyle","useLanguage","keyboardTypeFromKeyFilter","useFormFieldKeyboardNav","useSeparator","useRef","useState","useEffect","useImperativeHandle","useCallback","applyKeyFilter","jsx","KitsContainer","Textarea","TextareaInput","mergeRefs"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n /*\n * ⛔ THE TYPED TEXT HAD NO COLOUR OF ITS OWN — found on AlphaMatch's\n * offer composer, 22 Sep 2026: near-black on a dark field while typing.\n * `resolvedRootStyle`/`resolvedThemeStyle` DO carry `color: 'text'`, but\n * that lands on the outer `<Textarea>` wrapper, which is a View — RN does\n * not propagate `color` from a View into a nested TextInput's own text\n * rendering. `<TextareaInput>` is the actual RN TextInput and needs the\n * colour on ITS OWN style, the same way InputText's shared Field.tsx\n * always does (`color: resolveThemeTokenForNative('text')`).\n */\n const { resolveToken } = useKitsTheme();\n const resolvedRootColor =\n (resolvedRootStyle as any)?.color ?? (resolvedThemeStyle as any)?.color;\n const valueColor =\n typeof resolvedRootColor === \"string\" && resolvedRootColor.length > 0\n ? resolvedRootColor\n : resolveToken('text');\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n color: valueColor,\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":["forwardRef","useComponentDefaults","useResolvedStyle","useLanguage","useKitsTheme","keyboardTypeFromKeyFilter","useFormFieldKeyboardNav","useSeparator","useRef","useState","useEffect","useImperativeHandle","useCallback","applyKeyFilter","jsx","KitsContainer","Textarea","TextareaInput","mergeRefs"],"mappings":"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"}
|
|
@@ -90,12 +90,16 @@ import { useLanguage } from '../../../hooks/locale.js';
|
|
|
90
90
|
import '../../../contexts/DialogContext.js';
|
|
91
91
|
import useComponentDefaults from '../../../hooks/useComponentDefaults.js';
|
|
92
92
|
import useResolvedStyle from '../../../hooks/useResolvedStyle.js';
|
|
93
|
+
import { useKitsTheme } from '../../../contexts/Theme/KitsThemeProvider.js';
|
|
93
94
|
|
|
94
95
|
const KitsInputTextarea = forwardRef((rawProps, ref) => {
|
|
95
96
|
const { mergedProps: props, themeStyle, elementStyles } = useComponentDefaults("Textarea", rawProps);
|
|
96
97
|
const resolvedThemeStyle = useResolvedStyle(themeStyle);
|
|
97
98
|
const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});
|
|
98
99
|
const { isRTL } = useLanguage();
|
|
100
|
+
const { resolveToken } = useKitsTheme();
|
|
101
|
+
const resolvedRootColor = resolvedRootStyle?.color ?? resolvedThemeStyle?.color;
|
|
102
|
+
const valueColor = typeof resolvedRootColor === "string" && resolvedRootColor.length > 0 ? resolvedRootColor : resolveToken("text");
|
|
99
103
|
const {
|
|
100
104
|
id,
|
|
101
105
|
label,
|
|
@@ -216,7 +220,8 @@ const KitsInputTextarea = forwardRef((rawProps, ref) => {
|
|
|
216
220
|
paddingHorizontal: 12,
|
|
217
221
|
paddingVertical: 8,
|
|
218
222
|
textAlign: isRTL ? "right" : "left",
|
|
219
|
-
writingDirection: isRTL ? "rtl" : "ltr"
|
|
223
|
+
writingDirection: isRTL ? "rtl" : "ltr",
|
|
224
|
+
color: valueColor
|
|
220
225
|
// ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),
|
|
221
226
|
},
|
|
222
227
|
...navProps
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/InputTextarea/index.native.tsx"],"sourcesContent":["import React, {\n forwardRef,\n useCallback,\n useEffect,\n useImperativeHandle,\n useRef,\n useState,\n} from \"react\";\nimport type { IKitsInputTextarea } from \"@lmb-it/kitsconcerto-types\";\nimport KitsContainer from \"../../helpers/FormContainer\";\nimport { useSeparator } from \"../../../factory\";\nimport { applyKeyFilter } from \"../InputText/keyFilter.native\";\nimport { keyboardTypeFromKeyFilter } from \"../../helpers/native/keyboardFromFilter\";\nimport {useFormFieldKeyboardNav} from \"../../../hooks/useFormFieldKeyboardNav\";\nimport {mergeRefs} from \"../../../utils/mergeRefs\";\n\n// ✅ correct Gluestack components\nimport {\n Textarea,\n TextareaInput,\n} from \"@lmb-it/kitsconcertomobile\";\nimport {useComponentDefaults, useResolvedStyle} from \"@lmb-it/kitsconcerto/hooks\";\nimport { useLanguage } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\ntype NativeTextareaRef = {\n focus(): void;\n blur(): void;\n clear(): void;\n};\n\nconst KitsInputTextarea = forwardRef<\n NativeTextareaRef,\n IKitsInputTextarea\n>((rawProps, ref) => {\n const {mergedProps: props, themeStyle, elementStyles} = useComponentDefaults('Textarea', rawProps);\n const resolvedThemeStyle = useResolvedStyle(themeStyle);\n const resolvedRootStyle = useResolvedStyle(elementStyles?.root || {});\n const { isRTL } = useLanguage();\n /*\n * ⛔ THE TYPED TEXT HAD NO COLOUR OF ITS OWN — found on AlphaMatch's\n * offer composer, 22 Sep 2026: near-black on a dark field while typing.\n * `resolvedRootStyle`/`resolvedThemeStyle` DO carry `color: 'text'`, but\n * that lands on the outer `<Textarea>` wrapper, which is a View — RN does\n * not propagate `color` from a View into a nested TextInput's own text\n * rendering. `<TextareaInput>` is the actual RN TextInput and needs the\n * colour on ITS OWN style, the same way InputText's shared Field.tsx\n * always does (`color: resolveThemeTokenForNative('text')`).\n */\n const { resolveToken } = useKitsTheme();\n const resolvedRootColor =\n (resolvedRootStyle as any)?.color ?? (resolvedThemeStyle as any)?.color;\n const valueColor =\n typeof resolvedRootColor === \"string\" && resolvedRootColor.length > 0\n ? resolvedRootColor\n : resolveToken('text');\n const {\n id,\n label,\n value,\n defaultValue,\n onChange,\n keyFilter,\n errors,\n hideError,\n invalid,\n isFloatedLabel,\n disabled,\n helperText,\n inputSize,\n containerStyle,\n localProps,\n keyboardNavId,\n rows,\n autoResize,\n maxLength,\n minLength: _minLength, // submit-time only — RN has no minLength prop\n // Props that belong on the inner TextareaInput, not the outer wrapper.\n // Spreading nativeProps onto <Textarea> silently drops them because the\n // wrapper doesn't render text. Pull them out and forward explicitly so\n // placeholder, autoCapitalize, autoCorrect etc. actually take effect.\n placeholder,\n placeholderTextColor,\n autoCapitalize,\n autoCorrect,\n autoFocus,\n returnKeyType,\n ...rest\n } = props as IKitsInputTextarea & {\n placeholder?: string;\n placeholderTextColor?: string;\n autoCapitalize?: 'none' | 'sentences' | 'words' | 'characters';\n autoCorrect?: boolean;\n autoFocus?: boolean;\n returnKeyType?: string;\n };\n\n const resolvedKeyboardType = keyboardTypeFromKeyFilter(keyFilter as any);\n\n // Calculate height from rows: lineHeight × rows + vertical padding\n const LINE_HEIGHT = 20;\n const VERTICAL_PADDING = 16;\n const calculatedHeight = rows ? (LINE_HEIGHT * rows) + VERTICAL_PADDING : undefined;\n\n const {inputRef, navProps} = useFormFieldKeyboardNav(keyboardNavId ?? id);\n\n const isControlled = value !== undefined;\n\n const { cssProps, nativeProps } = useSeparator<any>({\n ...(rest as any),\n ...(localProps as any),\n });\n\n const fieldRef = useRef<any>(null);\n\n /** internal state for uncontrolled mode */\n const [internalValue, setInternalValue] = useState<string>(\n () => String(defaultValue ?? \"\")\n );\n\n /** sync when controlled */\n useEffect(() => {\n if (isControlled) {\n setInternalValue(String(value ?? \"\"));\n }\n }, [isControlled, value]);\n\n useImperativeHandle(ref, () => ({\n focus: () => fieldRef.current?.focus?.(),\n blur: () => fieldRef.current?.blur?.(),\n clear: () => {\n if (!isControlled) setInternalValue(\"\");\n onChange?.({ target: { value: \"\" } } as any);\n },\n }));\n\n const handleChangeText = useCallback(\n (nextRaw: string) => {\n const prev = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n const filtered = keyFilter\n ? applyKeyFilter(prev, nextRaw, keyFilter as any)\n : nextRaw;\n\n if (!isControlled) {\n setInternalValue(filtered);\n }\n\n // Prime-like event\n onChange?.({ target: { value: filtered } } as any);\n },\n [keyFilter, onChange, isControlled, internalValue, value],\n );\n\n const displayValue = isControlled\n ? String(value ?? \"\")\n : internalValue;\n\n return (\n <KitsContainer\n id={id}\n helperText={helperText}\n isFloatedLabel={isFloatedLabel}\n errors={errors}\n invalid={invalid}\n label={label}\n hideError={hideError}\n disabled={disabled}\n inputSize={inputSize}\n containerStyle={containerStyle}\n elementStyles={elementStyles}\n >\n <Textarea\n size={inputSize ?? \"md\"}\n isDisabled={!!disabled}\n isInvalid={!!invalid}\n style={{\n ...(resolvedRootStyle && Object.keys(resolvedRootStyle).length > 0 ? resolvedRootStyle : resolvedThemeStyle),\n ...(cssProps as any),\n ...(calculatedHeight ? {height: calculatedHeight, minHeight: calculatedHeight} : {}),\n }}\n {...nativeProps}\n >\n <TextareaInput\n ref={mergeRefs(inputRef, fieldRef)}\n value={displayValue}\n onChangeText={handleChangeText}\n editable={!disabled}\n numberOfLines={rows ?? 4}\n keyboardType={resolvedKeyboardType}\n maxLength={maxLength}\n textAlignVertical=\"top\"\n // Forward input-level props that were destructured off `props`\n // — these would never reach the inner input if we relied on\n // `nativeProps` because nativeProps is spread on the outer\n // <Textarea> wrapper, which doesn't render text.\n placeholder={placeholder}\n placeholderTextColor={placeholderTextColor}\n autoCapitalize={autoCapitalize}\n autoCorrect={autoCorrect}\n autoFocus={autoFocus}\n returnKeyType={returnKeyType as any}\n // Inline padding so the cursor isn't flush against the edge\n // when the consumer overrides height via `rows`. Without\n // this the height inline-style replaces Gluestack's default\n // padding and the caret renders at (0,0) of the textarea.\n style={{\n paddingHorizontal: 12,\n paddingVertical: 8,\n textAlign: isRTL ? \"right\" : \"left\",\n writingDirection: isRTL ? \"rtl\" : \"ltr\",\n color: valueColor,\n // ...(calculatedHeight ? {height: calculatedHeight - VERTICAL_PADDING} : {}),\n }}\n {...navProps}\n />\n </Textarea>\n </KitsContainer>\n );\n});\n\nKitsInputTextarea.displayName = \"KitsInputTextarea\";\nexport default KitsInputTextarea;\n"],"names":[],"mappings":"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"}
|
|
@@ -6,6 +6,7 @@ var jsxRuntime = require('react/jsx-runtime');
|
|
|
6
6
|
var React = require('react');
|
|
7
7
|
var Slider = require('@react-native-community/slider');
|
|
8
8
|
var reactNative = require('react-native');
|
|
9
|
+
var KitsThemeProvider_native = require('../../../contexts/Theme/KitsThemeProvider.cjs');
|
|
9
10
|
var index = require('../../../layout/Flex/index.cjs');
|
|
10
11
|
|
|
11
12
|
const KitsSliders = ({
|
|
@@ -21,6 +22,8 @@ const KitsSliders = ({
|
|
|
21
22
|
className
|
|
22
23
|
}) => {
|
|
23
24
|
const isControlled = value !== void 0;
|
|
25
|
+
const { resolveToken } = KitsThemeProvider_native.useKitsTheme();
|
|
26
|
+
const valueColor = resolveToken("text");
|
|
24
27
|
const [localValue, setLocalValue] = React.useState(
|
|
25
28
|
isRange ? [minValue, maxValue] : minValue
|
|
26
29
|
);
|
|
@@ -72,8 +75,8 @@ const KitsSliders = ({
|
|
|
72
75
|
}
|
|
73
76
|
),
|
|
74
77
|
/* @__PURE__ */ jsxRuntime.jsxs(index.default, { justifyContent: "space-between", children: [
|
|
75
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: prefix ? `${prefix}${start}` : start }),
|
|
76
|
-
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: prefix ? `${prefix}${end}` : end })
|
|
78
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: valueColor }, children: prefix ? `${prefix}${start}` : start }),
|
|
79
|
+
/* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: valueColor }, children: prefix ? `${prefix}${end}` : end })
|
|
77
80
|
] })
|
|
78
81
|
] });
|
|
79
82
|
}
|
|
@@ -97,7 +100,7 @@ const KitsSliders = ({
|
|
|
97
100
|
}
|
|
98
101
|
}
|
|
99
102
|
),
|
|
100
|
-
/* @__PURE__ */ jsxRuntime.jsx(index.default, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { children: prefix ? `${prefix}${numericValue}` : numericValue }) })
|
|
103
|
+
/* @__PURE__ */ jsxRuntime.jsx(index.default, { justifyContent: "flex-end", children: /* @__PURE__ */ jsxRuntime.jsx(reactNative.Text, { style: { color: valueColor }, children: prefix ? `${prefix}${numericValue}` : numericValue }) })
|
|
101
104
|
] });
|
|
102
105
|
};
|
|
103
106
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/Slider/index.native.tsx"],"sourcesContent":["import React, { type FC, useEffect, useState } from \"react\";\nimport Slider from \"@react-native-community/slider\";\nimport { Text } from \"react-native\";\nimport type { ISliderProps } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex } from \"../../../_compat\";\n\nconst KitsSliders: FC<ISliderProps> = ({\n minValue = 0,\n maxValue = 100,\n prefix,\n step,\n disabled,\n value,\n isRange = false,\n onChange,\n onSlideEnd,\n className,\n }) => {\n const isControlled = value !== undefined;\n\n const [localValue, setLocalValue] = useState<number | [number, number]>(\n isRange ? [minValue, maxValue] : minValue\n );\n\n const currentValue = isControlled ? value : localValue;\n\n useEffect(() => {\n if (!isControlled) {\n setLocalValue(isRange ? [minValue, maxValue] : minValue);\n }\n }, [minValue, maxValue, isRange, isControlled]);\n\n /* ---------------------------- RANGE MODE --------------------------- */\n\n if (isRange) {\n const [start, end] = Array.isArray(currentValue)\n ? currentValue\n : [minValue, maxValue];\n\n return (\n <Flex w=\"full\" flexDirection=\"column\" gap={2} className={className}>\n {/* Start thumb */}\n <Slider\n minimumValue={minValue}\n maximumValue={end}\n value={start}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [v, end];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [v, end],\n });\n }}\n />\n\n {/* End thumb */}\n <Slider\n minimumValue={start}\n maximumValue={maxValue}\n value={end}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [start, v];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [start, v],\n });\n }}\n />\n\n <Flex justifyContent=\"space-between\">\n <Text>{prefix ? `${prefix}${start}` : start}</Text>\n <Text>{prefix ? `${prefix}${end}` : end}</Text>\n </Flex>\n </Flex>\n );\n }\n\n /* --------------------------- SINGLE MODE ---------------------------- */\n\n const numericValue =\n typeof currentValue === \"number\" ? currentValue : minValue;\n\n return (\n <Flex w={'full'} flexDirection=\"column\" gap={2} className={className}>\n <Slider\n minimumValue={minValue}\n maximumValue={maxValue}\n step={step}\n disabled={disabled}\n value={numericValue}\n onValueChange={(v: number) => {\n isControlled ? onChange?.({value:v}) : setLocalValue(v);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: v,\n });\n }}\n />\n\n <Flex justifyContent=\"flex-end\">\n <Text>{prefix ? `${prefix}${numericValue}` : numericValue}</Text>\n </Flex>\n </Flex>\n );\n};\n\nexport default KitsSliders;\n"],"names":["useState","useEffect","jsxs","Flex","jsx","Text"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../../../../../src/form/inputs/Slider/index.native.tsx"],"sourcesContent":["import React, { type FC, useEffect, useState } from \"react\";\nimport Slider from \"@react-native-community/slider\";\nimport { Text } from \"react-native\";\nimport type { ISliderProps } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\nconst KitsSliders: FC<ISliderProps> = ({\n minValue = 0,\n maxValue = 100,\n prefix,\n step,\n disabled,\n value,\n isRange = false,\n onChange,\n onSlideEnd,\n className,\n }) => {\n const isControlled = value !== undefined;\n /*\n * ⛔ THESE THREE LABELS HAD NO COLOUR AT ALL — the only file in the\n * whole native form tree importing RAW RN `Text` instead of the themed\n * primitive, found sweeping every native input for the same dark-mode\n * fault as the Textarea (22 Sep 2026). Native drew them in the platform\n * default (black), invisible on the dark background.\n */\n const { resolveToken } = useKitsTheme();\n const valueColor = resolveToken('text');\n\n const [localValue, setLocalValue] = useState<number | [number, number]>(\n isRange ? [minValue, maxValue] : minValue\n );\n\n const currentValue = isControlled ? value : localValue;\n\n useEffect(() => {\n if (!isControlled) {\n setLocalValue(isRange ? [minValue, maxValue] : minValue);\n }\n }, [minValue, maxValue, isRange, isControlled]);\n\n /* ---------------------------- RANGE MODE --------------------------- */\n\n if (isRange) {\n const [start, end] = Array.isArray(currentValue)\n ? currentValue\n : [minValue, maxValue];\n\n return (\n <Flex w=\"full\" flexDirection=\"column\" gap={2} className={className}>\n {/* Start thumb */}\n <Slider\n minimumValue={minValue}\n maximumValue={end}\n value={start}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [v, end];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [v, end],\n });\n }}\n />\n\n {/* End thumb */}\n <Slider\n minimumValue={start}\n maximumValue={maxValue}\n value={end}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [start, v];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [start, v],\n });\n }}\n />\n\n <Flex justifyContent=\"space-between\">\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${start}` : start}</Text>\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${end}` : end}</Text>\n </Flex>\n </Flex>\n );\n }\n\n /* --------------------------- SINGLE MODE ---------------------------- */\n\n const numericValue =\n typeof currentValue === \"number\" ? currentValue : minValue;\n\n return (\n <Flex w={'full'} flexDirection=\"column\" gap={2} className={className}>\n <Slider\n minimumValue={minValue}\n maximumValue={maxValue}\n step={step}\n disabled={disabled}\n value={numericValue}\n onValueChange={(v: number) => {\n isControlled ? onChange?.({value:v}) : setLocalValue(v);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: v,\n });\n }}\n />\n\n <Flex justifyContent=\"flex-end\">\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${numericValue}` : numericValue}</Text>\n </Flex>\n </Flex>\n );\n};\n\nexport default KitsSliders;\n"],"names":["useKitsTheme","useState","useEffect","jsxs","Flex","jsx","Text"],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { jsxs, jsx } from 'react/jsx-runtime';
|
|
|
2
2
|
import { useState, useEffect } from 'react';
|
|
3
3
|
import Slider from '@react-native-community/slider';
|
|
4
4
|
import { Text } from 'react-native';
|
|
5
|
+
import { useKitsTheme } from '../../../contexts/Theme/KitsThemeProvider.js';
|
|
5
6
|
import Flex from '../../../layout/Flex/index.js';
|
|
6
7
|
|
|
7
8
|
const KitsSliders = ({
|
|
@@ -17,6 +18,8 @@ const KitsSliders = ({
|
|
|
17
18
|
className
|
|
18
19
|
}) => {
|
|
19
20
|
const isControlled = value !== void 0;
|
|
21
|
+
const { resolveToken } = useKitsTheme();
|
|
22
|
+
const valueColor = resolveToken("text");
|
|
20
23
|
const [localValue, setLocalValue] = useState(
|
|
21
24
|
isRange ? [minValue, maxValue] : minValue
|
|
22
25
|
);
|
|
@@ -68,8 +71,8 @@ const KitsSliders = ({
|
|
|
68
71
|
}
|
|
69
72
|
),
|
|
70
73
|
/* @__PURE__ */ jsxs(Flex, { justifyContent: "space-between", children: [
|
|
71
|
-
/* @__PURE__ */ jsx(Text, { children: prefix ? `${prefix}${start}` : start }),
|
|
72
|
-
/* @__PURE__ */ jsx(Text, { children: prefix ? `${prefix}${end}` : end })
|
|
74
|
+
/* @__PURE__ */ jsx(Text, { style: { color: valueColor }, children: prefix ? `${prefix}${start}` : start }),
|
|
75
|
+
/* @__PURE__ */ jsx(Text, { style: { color: valueColor }, children: prefix ? `${prefix}${end}` : end })
|
|
73
76
|
] })
|
|
74
77
|
] });
|
|
75
78
|
}
|
|
@@ -93,7 +96,7 @@ const KitsSliders = ({
|
|
|
93
96
|
}
|
|
94
97
|
}
|
|
95
98
|
),
|
|
96
|
-
/* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { children: prefix ? `${prefix}${numericValue}` : numericValue }) })
|
|
99
|
+
/* @__PURE__ */ jsx(Flex, { justifyContent: "flex-end", children: /* @__PURE__ */ jsx(Text, { style: { color: valueColor }, children: prefix ? `${prefix}${numericValue}` : numericValue }) })
|
|
97
100
|
] });
|
|
98
101
|
};
|
|
99
102
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/Slider/index.native.tsx"],"sourcesContent":["import React, { type FC, useEffect, useState } from \"react\";\nimport Slider from \"@react-native-community/slider\";\nimport { Text } from \"react-native\";\nimport type { ISliderProps } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex } from \"../../../_compat\";\n\nconst KitsSliders: FC<ISliderProps> = ({\n minValue = 0,\n maxValue = 100,\n prefix,\n step,\n disabled,\n value,\n isRange = false,\n onChange,\n onSlideEnd,\n className,\n }) => {\n const isControlled = value !== undefined;\n\n const [localValue, setLocalValue] = useState<number | [number, number]>(\n isRange ? [minValue, maxValue] : minValue\n );\n\n const currentValue = isControlled ? value : localValue;\n\n useEffect(() => {\n if (!isControlled) {\n setLocalValue(isRange ? [minValue, maxValue] : minValue);\n }\n }, [minValue, maxValue, isRange, isControlled]);\n\n /* ---------------------------- RANGE MODE --------------------------- */\n\n if (isRange) {\n const [start, end] = Array.isArray(currentValue)\n ? currentValue\n : [minValue, maxValue];\n\n return (\n <Flex w=\"full\" flexDirection=\"column\" gap={2} className={className}>\n {/* Start thumb */}\n <Slider\n minimumValue={minValue}\n maximumValue={end}\n value={start}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [v, end];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [v, end],\n });\n }}\n />\n\n {/* End thumb */}\n <Slider\n minimumValue={start}\n maximumValue={maxValue}\n value={end}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [start, v];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [start, v],\n });\n }}\n />\n\n <Flex justifyContent=\"space-between\">\n <Text>{prefix ? `${prefix}${start}` : start}</Text>\n <Text>{prefix ? `${prefix}${end}` : end}</Text>\n </Flex>\n </Flex>\n );\n }\n\n /* --------------------------- SINGLE MODE ---------------------------- */\n\n const numericValue =\n typeof currentValue === \"number\" ? currentValue : minValue;\n\n return (\n <Flex w={'full'} flexDirection=\"column\" gap={2} className={className}>\n <Slider\n minimumValue={minValue}\n maximumValue={maxValue}\n step={step}\n disabled={disabled}\n value={numericValue}\n onValueChange={(v: number) => {\n isControlled ? onChange?.({value:v}) : setLocalValue(v);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: v,\n });\n }}\n />\n\n <Flex justifyContent=\"flex-end\">\n <Text>{prefix ? `${prefix}${numericValue}` : numericValue}</Text>\n </Flex>\n </Flex>\n );\n};\n\nexport default KitsSliders;\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../../../../src/form/inputs/Slider/index.native.tsx"],"sourcesContent":["import React, { type FC, useEffect, useState } from \"react\";\nimport Slider from \"@react-native-community/slider\";\nimport { Text } from \"react-native\";\nimport type { ISliderProps } from \"@lmb-it/kitsconcerto-types\";\nimport { Flex } from \"../../../_compat\";\nimport { useKitsTheme } from \"../../../contexts/Theme\";\n\nconst KitsSliders: FC<ISliderProps> = ({\n minValue = 0,\n maxValue = 100,\n prefix,\n step,\n disabled,\n value,\n isRange = false,\n onChange,\n onSlideEnd,\n className,\n }) => {\n const isControlled = value !== undefined;\n /*\n * ⛔ THESE THREE LABELS HAD NO COLOUR AT ALL — the only file in the\n * whole native form tree importing RAW RN `Text` instead of the themed\n * primitive, found sweeping every native input for the same dark-mode\n * fault as the Textarea (22 Sep 2026). Native drew them in the platform\n * default (black), invisible on the dark background.\n */\n const { resolveToken } = useKitsTheme();\n const valueColor = resolveToken('text');\n\n const [localValue, setLocalValue] = useState<number | [number, number]>(\n isRange ? [minValue, maxValue] : minValue\n );\n\n const currentValue = isControlled ? value : localValue;\n\n useEffect(() => {\n if (!isControlled) {\n setLocalValue(isRange ? [minValue, maxValue] : minValue);\n }\n }, [minValue, maxValue, isRange, isControlled]);\n\n /* ---------------------------- RANGE MODE --------------------------- */\n\n if (isRange) {\n const [start, end] = Array.isArray(currentValue)\n ? currentValue\n : [minValue, maxValue];\n\n return (\n <Flex w=\"full\" flexDirection=\"column\" gap={2} className={className}>\n {/* Start thumb */}\n <Slider\n minimumValue={minValue}\n maximumValue={end}\n value={start}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [v, end];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [v, end],\n });\n }}\n />\n\n {/* End thumb */}\n <Slider\n minimumValue={start}\n maximumValue={maxValue}\n value={end}\n step={step}\n disabled={disabled}\n onValueChange={(v: number) => {\n const next: [number, number] = [start, v];\n isControlled ? onChange?.({value:next}) : setLocalValue(next);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: [start, v],\n });\n }}\n />\n\n <Flex justifyContent=\"space-between\">\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${start}` : start}</Text>\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${end}` : end}</Text>\n </Flex>\n </Flex>\n );\n }\n\n /* --------------------------- SINGLE MODE ---------------------------- */\n\n const numericValue =\n typeof currentValue === \"number\" ? currentValue : minValue;\n\n return (\n <Flex w={'full'} flexDirection=\"column\" gap={2} className={className}>\n <Slider\n minimumValue={minValue}\n maximumValue={maxValue}\n step={step}\n disabled={disabled}\n value={numericValue}\n onValueChange={(v: number) => {\n isControlled ? onChange?.({value:v}) : setLocalValue(v);\n }}\n onSlidingComplete={(v: number) => {\n onSlideEnd?.({\n value: v,\n });\n }}\n />\n\n <Flex justifyContent=\"flex-end\">\n <Text style={{ color: valueColor }}>{prefix ? `${prefix}${numericValue}` : numericValue}</Text>\n </Flex>\n </Flex>\n );\n};\n\nexport default KitsSliders;\n"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -869,10 +869,21 @@ const defaultTheme = {
|
|
|
869
869
|
},
|
|
870
870
|
// ─── Checkbox / Radio ──────────────────────────────────
|
|
871
871
|
Checkbox: {
|
|
872
|
-
container: { style: { backgroundColor: "transparent" } }
|
|
872
|
+
container: { style: { backgroundColor: "transparent" } },
|
|
873
|
+
// ⛔ THE ITEM LABEL NEEDS A COLOUR — the Radio label's twin (21 Sep
|
|
874
|
+
// 2026, 9c002a5b), found sweeping every native input for the same
|
|
875
|
+
// fault (22 Sep 2026): with no `item` slot, `checkbox.native.tsx`
|
|
876
|
+
// resolved an empty style and native drew the label black on the
|
|
877
|
+
// dark background. 'text-primary' is dark-aware.
|
|
878
|
+
item: { style: { color: "text-primary" } }
|
|
873
879
|
},
|
|
874
880
|
Radio: {
|
|
875
|
-
container: { style: { backgroundColor: "transparent" } }
|
|
881
|
+
container: { style: { backgroundColor: "transparent" } },
|
|
882
|
+
// ⛔ THE LABEL AND THE OPTION TEXT NEED A COLOUR — fixed 21 Sep 2026, the
|
|
883
|
+
// Switch label's twin: with no slot colour, native drew both black on a
|
|
884
|
+
// dark background. 'text-primary' is dark-aware.
|
|
885
|
+
label: { style: { color: "text-primary", fontWeight: "600" } },
|
|
886
|
+
item: { style: { color: "text-primary" } }
|
|
876
887
|
},
|
|
877
888
|
// ─── Card ──────────────────────────────────────────────
|
|
878
889
|
// Slightly larger radius and softer shadow than `theme.ts` —
|