@sincpro/mobile-ui 2.0.1 → 3.0.0

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.
Files changed (198) hide show
  1. package/README.md +7 -2
  2. package/dist/Actions/Actions.Button.d.ts +2 -1
  3. package/dist/Actions/Actions.Button.js +31 -37
  4. package/dist/Actions/Actions.Dock.d.ts +6 -6
  5. package/dist/Actions/Actions.Dock.js +14 -72
  6. package/dist/Actions/Actions.FAB.d.ts +2 -1
  7. package/dist/Actions/Actions.FilterButton.js +1 -1
  8. package/dist/Actions/Actions.IconButton.d.ts +3 -4
  9. package/dist/Actions/Actions.IconButton.js +2 -2
  10. package/dist/Dialog/Confirmation.context.d.ts +5 -14
  11. package/dist/Dialog/Confirmation.context.js +11 -51
  12. package/dist/Dialog/Dialog.ActionSheet.d.ts +8 -7
  13. package/dist/Dialog/Dialog.ActionSheet.js +45 -19
  14. package/dist/Dialog/Dialog.Confirmation.d.ts +14 -11
  15. package/dist/Dialog/Dialog.Confirmation.js +38 -14
  16. package/dist/Dialog/Dialog.EditValue.d.ts +21 -16
  17. package/dist/Dialog/Dialog.EditValue.js +73 -14
  18. package/dist/Dialog/Dialog.Sheet.d.ts +8 -24
  19. package/dist/Dialog/Dialog.Sheet.js +15 -60
  20. package/dist/Dialog/index.d.ts +14 -14
  21. package/dist/Dialog/index.js +5 -3
  22. package/dist/Dialog/requestConfirmation.d.ts +3 -0
  23. package/dist/Dialog/requestConfirmation.js +13 -0
  24. package/dist/Display/Display.Accordion.js +1 -1
  25. package/dist/Display/Display.Avatar.d.ts +6 -6
  26. package/dist/Display/Display.Avatar.js +2 -2
  27. package/dist/Display/Display.Badge.js +4 -4
  28. package/dist/Display/Display.Card.js +5 -2
  29. package/dist/Display/Display.Carousel.js +1 -1
  30. package/dist/Display/Display.CircleButton.d.ts +3 -8
  31. package/dist/Display/Display.CircleButton.js +2 -2
  32. package/dist/Display/Display.CopyableText.js +1 -5
  33. package/dist/Display/Display.Date.d.ts +3 -2
  34. package/dist/Display/Display.Date.js +3 -3
  35. package/dist/Display/Display.GradientSurface.d.ts +52 -9
  36. package/dist/Display/Display.GradientSurface.js +9 -14
  37. package/dist/Display/Display.Icon.d.ts +7 -11
  38. package/dist/Display/Display.Icon.js +15 -30
  39. package/dist/Display/Display.Image.d.ts +2 -1
  40. package/dist/Display/Display.Image.js +1 -1
  41. package/dist/Display/Display.KeyValue.js +1 -1
  42. package/dist/Display/Display.ListItem.js +1 -1
  43. package/dist/Display/Display.MenuButton.js +4 -4
  44. package/dist/Display/Display.MenuCard.d.ts +3 -8
  45. package/dist/Display/Display.MenuCard.js +2 -2
  46. package/dist/Display/Display.MenuGrid.d.ts +2 -7
  47. package/dist/Display/Display.MenuGrid.js +1 -1
  48. package/dist/Display/Display.Monetary.d.ts +2 -6
  49. package/dist/Display/Display.Monetary.js +2 -2
  50. package/dist/Display/Display.PriceTag.js +1 -1
  51. package/dist/Display/Display.Rating.js +1 -1
  52. package/dist/Display/Display.SearchHistory.d.ts +2 -1
  53. package/dist/Display/Display.SearchHistory.js +1 -1
  54. package/dist/Display/Display.StatCard.d.ts +2 -1
  55. package/dist/Display/Display.StatCard.js +1 -1
  56. package/dist/Display/Display.StoryViewer.js +10 -6
  57. package/dist/Display/Display.SwipeableRow.d.ts +2 -1
  58. package/dist/Display/Display.Timeline.js +1 -1
  59. package/dist/Display/icon-map.d.ts +344 -0
  60. package/dist/Display/icon-map.js +86 -0
  61. package/dist/Display/index.d.ts +2 -0
  62. package/dist/Display/index.js +1 -0
  63. package/dist/Feedback/Feedback.Banner.js +13 -12
  64. package/dist/Feedback/Feedback.Empty.js +1 -1
  65. package/dist/Feedback/Feedback.EmptyState.d.ts +2 -1
  66. package/dist/Feedback/Feedback.EmptyState.js +1 -1
  67. package/dist/Feedback/Feedback.Error.js +1 -1
  68. package/dist/Feedback/Feedback.PermissionCard.d.ts +2 -1
  69. package/dist/Feedback/Feedback.PermissionCard.js +2 -2
  70. package/dist/Feedback/Toast.context.js +3 -3
  71. package/dist/Form/Form.ControlledDropdown.d.ts +5 -11
  72. package/dist/Form/Form.ControlledDropdown.js +5 -2
  73. package/dist/Form/Form.DatePicker.d.ts +5 -9
  74. package/dist/Form/Form.DatePicker.js +116 -21
  75. package/dist/Form/Form.Dropdown.d.ts +11 -16
  76. package/dist/Form/Form.Dropdown.js +54 -90
  77. package/dist/Form/Form.FractionalQuantityInput.js +4 -11
  78. package/dist/Form/Form.Input.d.ts +3 -3
  79. package/dist/Form/Form.KeyboardForm.d.ts +2 -2
  80. package/dist/Form/Form.KeyboardForm.js +2 -2
  81. package/dist/Form/Form.KeyboardToolbar.d.ts +2 -1
  82. package/dist/Form/Form.KeyboardToolbar.js +3 -7
  83. package/dist/Form/Form.PasswordInput.js +1 -1
  84. package/dist/Form/Form.QuantitySelector.js +1 -1
  85. package/dist/Form/Form.Select.d.ts +12 -8
  86. package/dist/Form/Form.Select.js +64 -31
  87. package/dist/Form/Form.Slider.d.ts +4 -7
  88. package/dist/Form/Form.Slider.js +11 -10
  89. package/dist/Form/Form.Switch.js +2 -1
  90. package/dist/Form/index.d.ts +6 -14
  91. package/dist/Form/index.js +0 -11
  92. package/dist/Navigation/Navigation.AppBar.d.ts +2 -1
  93. package/dist/Navigation/Navigation.AppBar.js +2 -2
  94. package/dist/Navigation/Navigation.BottomNav.d.ts +4 -8
  95. package/dist/Navigation/Navigation.BottomNav.js +2 -2
  96. package/dist/Navigation/Navigation.CollapsingHeader.js +3 -2
  97. package/dist/Navigation/Navigation.Menu.d.ts +16 -11
  98. package/dist/Navigation/Navigation.Menu.js +97 -42
  99. package/dist/Navigation/Navigation.Search.js +2 -2
  100. package/dist/Navigation/Navigation.SearchBar.js +3 -4
  101. package/dist/Navigation/Navigation.SegmentedControl.d.ts +7 -25
  102. package/dist/Navigation/Navigation.SegmentedControl.js +18 -39
  103. package/dist/Navigation/Navigation.Steps.js +1 -1
  104. package/dist/Navigation/Navigation.Tabs.d.ts +2 -1
  105. package/dist/Navigation/index.d.ts +0 -6
  106. package/dist/Navigation/index.js +0 -8
  107. package/dist/Typography/Typography.SelectableText.js +3 -7
  108. package/dist/Typography/Typography.Text.d.ts +1 -6
  109. package/dist/Typography/Typography.Text.js +3 -6
  110. package/dist/index.d.ts +1 -4
  111. package/dist/index.js +1 -4
  112. package/dist/layouts/AuthContainer.d.ts +4 -2
  113. package/dist/layouts/AuthContainer.js +3 -4
  114. package/dist/layouts/Container.d.ts +0 -4
  115. package/dist/layouts/Container.js +3 -4
  116. package/dist/layouts/ScrollContainer.d.ts +7 -3
  117. package/dist/layouts/ScrollContainer.js +5 -4
  118. package/dist/primitives/BaseButton.d.ts +2 -1
  119. package/dist/theme/build.js +0 -4
  120. package/dist/theme/css-vars.js +0 -4
  121. package/dist/theme/dark.js +2 -6
  122. package/dist/theme/default.js +1 -5
  123. package/dist/theme/index.d.ts +1 -1
  124. package/dist/theme/index.js +1 -1
  125. package/dist/theme/types.d.ts +0 -11
  126. package/dist/theme/typography.d.ts +8 -7
  127. package/dist/theme/typography.js +25 -4
  128. package/dist/utils/timezone.d.ts +0 -5
  129. package/dist/views/AuthFormView.d.ts +3 -1
  130. package/dist/views/AuthFormView.js +2 -2
  131. package/dist/views/FormViewV2.d.ts +6 -13
  132. package/dist/views/FormViewV2.js +29 -25
  133. package/dist/views/ListViewV2.context.d.ts +5 -5
  134. package/dist/views/ListViewV2.d.ts +23 -18
  135. package/dist/views/ListViewV2.js +45 -48
  136. package/dist/views/types/IListView.d.ts +5 -4
  137. package/dist/views/types/IListView.js +18 -15
  138. package/dist/widgets/CollectionOptions.d.ts +2 -2
  139. package/dist/widgets/CollectionOptions.js +92 -65
  140. package/dist/widgets/FilterBar.js +1 -1
  141. package/dist/widgets/PromoModal.js +10 -4
  142. package/dist/widgets/QuickActions.d.ts +2 -7
  143. package/dist/widgets/QuickActions.js +1 -1
  144. package/dist/widgets/ReorderableList.js +3 -3
  145. package/dist/widgets/TimeZoneSelectorModal.d.ts +1 -6
  146. package/dist/widgets/TimeZoneSelectorModal.js +17 -12
  147. package/dist/widgets/index.d.ts +0 -11
  148. package/dist/widgets/index.js +0 -7
  149. package/package.json +35 -38
  150. package/tailwind.preset.js +0 -4
  151. package/dist/Dialog/BottomSheet/BottomSheet.Root.d.ts +0 -324
  152. package/dist/Dialog/BottomSheet/BottomSheet.Root.js +0 -373
  153. package/dist/Dialog/BottomSheet/index.d.ts +0 -1
  154. package/dist/Dialog/BottomSheet/index.js +0 -1
  155. package/dist/Dialog/Dialog.NativeSheet.d.ts +0 -10
  156. package/dist/Dialog/Dialog.NativeSheet.js +0 -21
  157. package/dist/Form/Form.Button.d.ts +0 -3
  158. package/dist/Form/Form.Button.js +0 -1
  159. package/dist/Form/Form.FAB.d.ts +0 -3
  160. package/dist/Form/Form.FAB.js +0 -1
  161. package/dist/Form/Form.FilterButton.d.ts +0 -3
  162. package/dist/Form/Form.FilterButton.js +0 -1
  163. package/dist/Form/Form.IconButton.d.ts +0 -3
  164. package/dist/Form/Form.IconButton.js +0 -1
  165. package/dist/Form/Form.SearchBar.d.ts +0 -13
  166. package/dist/Form/Form.SearchBar.js +0 -26
  167. package/dist/Navigation/Navigation.Header.d.ts +0 -16
  168. package/dist/Navigation/Navigation.Header.js +0 -17
  169. package/dist/Navigation/Navigation.HeaderToolbar.d.ts +0 -15
  170. package/dist/Navigation/Navigation.HeaderToolbar.js +0 -18
  171. package/dist/Navigation/Navigation.TabIcon.d.ts +0 -18
  172. package/dist/Navigation/Navigation.TabIcon.js +0 -12
  173. package/dist/Navigation/Navigation.TabItem.d.ts +0 -19
  174. package/dist/Navigation/Navigation.TabItem.js +0 -13
  175. package/dist/icons/OdooIcon.d.ts +0 -11
  176. package/dist/icons/OdooIcon.js +0 -11
  177. package/dist/icons/PrinterIcon.d.ts +0 -9
  178. package/dist/icons/PrinterIcon.js +0 -9
  179. package/dist/layouts/TabNavigatorLayout.d.ts +0 -26
  180. package/dist/layouts/TabNavigatorLayout.js +0 -60
  181. package/dist/utils/icon.d.ts +0 -1
  182. package/dist/utils/icon.js +0 -1
  183. package/dist/widgets/CircleButton.d.ts +0 -3
  184. package/dist/widgets/CircleButton.js +0 -1
  185. package/dist/widgets/GeoPermissionCard.d.ts +0 -13
  186. package/dist/widgets/GeoPermissionCard.js +0 -24
  187. package/dist/widgets/HomeHeader.d.ts +0 -15
  188. package/dist/widgets/HomeHeader.js +0 -13
  189. package/dist/widgets/MenuCard.d.ts +0 -3
  190. package/dist/widgets/MenuCard.js +0 -1
  191. package/dist/widgets/MenuGrid.d.ts +0 -5
  192. package/dist/widgets/MenuGrid.js +0 -1
  193. package/dist/widgets/MenuSection.d.ts +0 -3
  194. package/dist/widgets/MenuSection.js +0 -1
  195. package/dist/widgets/ScreenHeader.d.ts +0 -25
  196. package/dist/widgets/ScreenHeader.js +0 -32
  197. package/dist/widgets/TimeZoneSelector.d.ts +0 -12
  198. package/dist/widgets/TimeZoneSelector.js +0 -24
@@ -4,7 +4,7 @@ import SearchSuggestions from "./Navigation.SearchSuggestions.js";
4
4
  import Pressable from "../primitives/Pressable.js";
5
5
  import { useTheme } from "../theme/index.js";
6
6
  import { cn } from "../theme/tw.js";
7
- import { resolveTextFontFamily, typographyVariants, } from "../theme/typography.js";
7
+ import { appliedTextStyle } from "../theme/typography.js";
8
8
  import { Typography } from "../Typography/index.js";
9
9
  import { useState } from "react";
10
10
  import { Keyboard, TextInput, View } from "react-native";
@@ -21,8 +21,7 @@ function SearchBar({ value, onChangeText, placeholder = "Buscar", onSubmit, onCl
21
21
  borderWidth: 1,
22
22
  borderColor: focused ? theme.border.focus : "transparent",
23
23
  }, children: [_jsx(View, { accessibilityElementsHidden: true, importantForAccessibility: "no-hide-descendants", children: _jsx(Icon, { color: focused ? theme.border.focus : theme.icon.tertiary, name: "search", size: 18 }) }), editable ? (_jsx(TextInput, { accessibilityLabel: accessibilityLabel ?? placeholder, autoFocus: autoFocus, className: "flex-1 text-text-primary", onBlur: () => setFocused(false), onChangeText: onChangeText, onFocus: () => setFocused(true), onSubmitEditing: (e) => onSubmit?.(e.nativeEvent.text), placeholder: placeholder, placeholderTextColor: theme.text.tertiary, returnKeyType: "search", selectionColor: theme.primary, style: {
24
- ...typographyVariants.bodyReadable,
25
- fontFamily: resolveTextFontFamily("bodyReadable"),
24
+ ...appliedTextStyle("bodyReadable"),
26
25
  minHeight: 48,
27
26
  paddingVertical: 8,
28
27
  }, testID: testID ? `${testID}-input` : undefined, underlineColorAndroid: "transparent", value: value })) : (_jsx(Typography.Text, { className: "flex-1 text-text-tertiary", variant: "bodyReadable", children: value || placeholder })), editable && value.length > 0 ? (_jsx(Pressable, { accessibilityLabel: clearAccessibilityLabel, hitSlop: 8, onPress: () => {
@@ -33,7 +32,7 @@ function SearchBar({ value, onChangeText, placeholder = "Buscar", onSubmit, onCl
33
32
  minWidth: 48,
34
33
  alignItems: "center",
35
34
  justifyContent: "center",
36
- }, children: _jsx(Icon, { color: theme.icon.tertiary, name: "close-circle", size: 18 }) })) : null] }));
35
+ }, children: _jsx(Icon, { color: theme.icon.tertiary, name: "dismiss", size: 18 }) })) : null] }));
37
36
  if (!editable && onPress) {
38
37
  return (_jsx(Pressable, { accessibilityLabel: accessibilityLabel ?? placeholder, accessibilityRole: "search", onPress: onPress, style: { minHeight: 48, minWidth: 48 }, testID: testID, children: body }));
39
38
  }
@@ -1,38 +1,20 @@
1
- import { Typography } from "../Typography/index.js";
2
- import { ComponentType } from "react";
3
1
  import { type StyleProp, type ViewStyle } from "react-native";
4
- export interface SegmentedOption<T extends string> {
2
+ export type SegmentedOption<T extends string> = {
5
3
  label: string;
6
4
  value: T;
7
- /** Ionicon name rendered above (or before) the label. */
8
- icon?: string;
9
- /** Custom icon component — takes precedence over `icon`. */
10
- customIcon?: ComponentType<{
11
- size?: number;
12
- color?: string;
13
- }>;
14
5
  disabled?: boolean;
15
- accessibilityLabel?: string;
16
- accessibilityHint?: string;
17
- }
18
- export interface SegmentedControlProps<T extends string> {
19
- options: SegmentedOption<T>[];
6
+ };
7
+ export type SegmentedControlProps<T extends string> = {
8
+ options: readonly SegmentedOption<T>[];
20
9
  value: T;
21
10
  onChange: (value: T) => void;
22
- /**
23
- * Icon layout when options have icons:
24
- * - `"top"` (default) — icon stacked above the label (taller pill).
25
- * - `"left"` — icon inline left of the label (compact, single-line).
26
- */
27
- iconLayout?: "top" | "left";
28
11
  disabled?: boolean;
12
+ readOnly?: boolean;
29
13
  accessibilityLabel?: string;
30
14
  style?: StyleProp<ViewStyle>;
31
- optionStyle?: StyleProp<ViewStyle>;
32
- labelTextProps?: Partial<React.ComponentProps<typeof Typography.Text>>;
33
15
  className?: string;
34
16
  testID?: string;
35
- }
36
- declare function SegmentedControl<T extends string>({ options, value, onChange, iconLayout, disabled, accessibilityLabel, style, optionStyle, labelTextProps, className, testID, }: SegmentedControlProps<T>): import("react").JSX.Element;
17
+ };
18
+ declare function SegmentedControl<T extends string>({ options, value, onChange, disabled, readOnly, accessibilityLabel, style, className, testID, }: SegmentedControlProps<T>): import("react").JSX.Element;
37
19
  export default SegmentedControl;
38
20
  export { SegmentedControl };
@@ -1,45 +1,24 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
2
- import Icon from "../Display/Display.Icon.js";
3
- import { useTheme } from "../theme/index.js";
4
- import { cn } from "../theme/tw.js";
2
+ import NativeSegmentedControl from "@expo/ui/community/segmented-control";
3
+ import { relativeLuminance, useTheme } from "../theme/index.js";
5
4
  import { Typography } from "../Typography/index.js";
6
- import { TouchableOpacity, View } from "react-native";
7
- function SegmentedControl({ options, value, onChange, iconLayout = "top", disabled = false, accessibilityLabel, style, optionStyle, labelTextProps, className, testID, }) {
5
+ import { View } from "react-native";
6
+ function SegmentedControl({ options, value, onChange, disabled = false, readOnly = false, accessibilityLabel, style, className, testID, }) {
8
7
  const theme = useTheme();
9
- const hasIcons = options.some((o) => o.icon || o.customIcon);
10
- return (_jsx(View, { accessibilityLabel: accessibilityLabel, accessibilityRole: "tablist", className: cn("flex-row bg-bg-muted rounded-lg p-1 gap-1", className), style: style, testID: testID, children: options.map((option) => {
11
- const selected = option.value === value;
12
- const isDisabled = disabled || !!option.disabled;
13
- const iconColor = selected ? theme.text.primary : theme.text.secondary;
14
- const hasIcon = !!(option.icon || option.customIcon);
15
- const inline = hasIcons && iconLayout === "left";
16
- const baseStyle = {
17
- flex: 1,
18
- minHeight: 48,
19
- minWidth: 48,
20
- flexDirection: inline ? "row" : "column",
21
- alignItems: "center",
22
- justifyContent: "center",
23
- gap: hasIcon ? 4 : 0,
24
- paddingVertical: 8,
25
- paddingHorizontal: 4,
26
- borderRadius: 8,
27
- ...(selected ? { backgroundColor: theme.bg.card, ...theme.shadow.sm } : undefined),
28
- opacity: isDisabled ? 0.5 : 1,
29
- };
30
- return (_jsxs(TouchableOpacity, { accessibilityHint: option.accessibilityHint, accessibilityLabel: option.accessibilityLabel ?? option.label, accessibilityRole: "tab", accessibilityState: isDisabled ? { selected, disabled: true } : { selected }, activeOpacity: 0.7, disabled: isDisabled || undefined, hitSlop: 0, onPress: () => {
31
- if (!isDisabled)
32
- onChange(option.value);
33
- }, style: optionStyle ? [baseStyle, optionStyle] : baseStyle, children: [hasIcon ? (_jsx(Icon, { color: iconColor, customIcon: option.customIcon, name: option.icon, size: 16, type: option.customIcon ? "custom" : "ionicons" })) : null, _jsx(Typography.Text, { ...labelTextProps, semibold: labelTextProps?.semibold ?? selected, style: [
34
- {
35
- color: iconColor,
36
- fontSize: 14,
37
- textAlign: "center",
38
- flexShrink: 1,
39
- },
40
- labelTextProps?.style,
41
- ], variant: labelTextProps?.variant ?? "caption", children: option.label })] }, option.value));
42
- }) }));
8
+ const groups = [];
9
+ for (const option of options) {
10
+ const blocked = disabled || readOnly || !!option.disabled;
11
+ const group = groups.at(-1);
12
+ if (group?.disabled === blocked)
13
+ group.options.push(option);
14
+ else
15
+ groups.push({ disabled: blocked, options: [option] });
16
+ }
17
+ return (_jsxs(View, { className: className, style: style, testID: testID, children: [accessibilityLabel ? (_jsx(Typography.Text, { className: "pb-1 text-text-primary", variant: "bodySmall", children: accessibilityLabel })) : null, _jsx(View, { style: { flexDirection: "row", gap: 4, minHeight: 48 }, children: groups.map((group, groupIndex) => (_jsx(View, { style: { flex: group.options.length }, children: _jsx(NativeSegmentedControl, { accessibilityLabel: accessibilityLabel, appearance: relativeLuminance(theme.bg.card) < 0.179 ? "dark" : "light", enabled: !group.disabled, onChange: ({ nativeEvent }) => {
18
+ const option = group.options[nativeEvent.selectedSegmentIndex];
19
+ if (option && !group.disabled)
20
+ onChange(option.value);
21
+ }, selectedIndex: group.options.findIndex((option) => option.value === value), style: { minHeight: 48 }, testID: testID ? `${testID}-segments-${groupIndex}` : undefined, tintColor: theme.primary, values: group.options.map((option) => option.label) }) }, group.options[0].value))) })] }));
43
22
  }
44
23
  export default SegmentedControl;
45
24
  export { SegmentedControl };
@@ -11,7 +11,7 @@ function Steps({ steps, current, className, testID }) {
11
11
  const circleColor = done || active ? theme.primary : theme.bg.muted;
12
12
  const textColor = done || active ? theme.text.inverse : theme.text.tertiary;
13
13
  const isLast = index === steps.length - 1;
14
- return (_jsxs(View, { className: "flex-1 items-center", children: [_jsxs(View, { className: "flex-row items-center w-full", children: [_jsx(View, { className: "flex-1 h-0.5", style: { backgroundColor: "transparent" } }), _jsx(View, { className: "w-7 h-7 rounded-full items-center justify-center", style: { backgroundColor: circleColor }, children: done ? (_jsx(Icon, { color: theme.text.inverse, name: "checkmark", size: 16 })) : (_jsx(Typography.Text, { style: { color: textColor }, variant: "bodySmall", children: index + 1 })) }), _jsx(View, { className: "flex-1 h-0.5", style: { backgroundColor: isLast ? "transparent" : theme.border.default } })] }), _jsx(Typography.Text, { className: "mt-1 text-center", numberOfLines: 1, style: { color: active ? theme.text.accent : theme.text.tertiary }, variant: "caption", children: label })] }, label));
14
+ return (_jsxs(View, { className: "flex-1 items-center", children: [_jsxs(View, { className: "flex-row items-center w-full", children: [_jsx(View, { className: "flex-1 h-0.5", style: { backgroundColor: "transparent" } }), _jsx(View, { className: "w-7 h-7 rounded-full items-center justify-center", style: { backgroundColor: circleColor }, children: done ? (_jsx(Icon, { color: theme.text.inverse, name: "check", size: 16 })) : (_jsx(Typography.Text, { style: { color: textColor }, variant: "bodySmall", children: index + 1 })) }), _jsx(View, { className: "flex-1 h-0.5", style: { backgroundColor: isLast ? "transparent" : theme.border.default } })] }), _jsx(Typography.Text, { className: "mt-1 text-center", numberOfLines: 1, style: { color: active ? theme.text.accent : theme.text.tertiary }, variant: "caption", children: label })] }, label));
15
15
  }) }));
16
16
  }
17
17
  export default Steps;
@@ -1,3 +1,4 @@
1
+ import type { IconName } from "../Display/index.js";
1
2
  import { type ReactNode } from "react";
2
3
  type TabsVariant = "underline" | "filled";
3
4
  export interface TabsProps {
@@ -16,7 +17,7 @@ declare function TabsList({ children, className }: {
16
17
  export interface TabsTriggerProps {
17
18
  value: string;
18
19
  children: ReactNode;
19
- icon?: string;
20
+ icon?: IconName;
20
21
  iconLayout?: "top" | "left";
21
22
  }
22
23
  declare function TabsTrigger({ value, children, icon, iconLayout }: TabsTriggerProps): import("react").JSX.Element;
@@ -1,7 +1,6 @@
1
1
  import BottomNav from "./Navigation.BottomNav.js";
2
2
  import CollapsingHeader from "./Navigation.CollapsingHeader.js";
3
3
  import FloatingBar from "./Navigation.FloatingBar.js";
4
- import HeaderToolbar from "./Navigation.HeaderToolbar.js";
5
4
  import Menu from "./Navigation.Menu.js";
6
5
  import { MenuSection } from "./Navigation.MenuSection.js";
7
6
  import RowItem from "./Navigation.RowItem.js";
@@ -9,7 +8,6 @@ import SearchBar from "./Navigation.SearchBar.js";
9
8
  import SearchSuggestions from "./Navigation.SearchSuggestions.js";
10
9
  import SegmentedControl from "./Navigation.SegmentedControl.js";
11
10
  import Steps from "./Navigation.Steps.js";
12
- import TabIcon from "./Navigation.TabIcon.js";
13
11
  export type { AppBarBackground } from "./Navigation.AppBar.js";
14
12
  export type { MenuSectionProps } from "./Navigation.MenuSection.js";
15
13
  export type { SearchFilterSheetProps, SearchFiltersProps, SearchRootProps, } from "./Navigation.Search.js";
@@ -32,10 +30,6 @@ export declare const Navigation: {
32
30
  Suggestions: (props: import("./Navigation.SearchSuggestions.js").SearchSuggestionsProps) => import("react").JSX.Element;
33
31
  };
34
32
  SearchSuggestions: typeof SearchSuggestions;
35
- Header: ({ title, logo, logoSource, backButton, handleBackButton, className, }: import("./Navigation.Header.js").HeaderProps) => import("react").JSX.Element;
36
- HeaderToolbar: typeof HeaderToolbar;
37
- TabItem: import("react").FC<import("./Navigation.TabItem.js").TabIconProps>;
38
- TabIcon: typeof TabIcon;
39
33
  RowItem: typeof RowItem;
40
34
  SegmentedControl: typeof SegmentedControl;
41
35
  Tabs: (({ value, defaultValue, onValueChange, variant, className, children, }: import("./Navigation.Tabs.js").TabsProps) => import("react").JSX.Element) & {
@@ -2,8 +2,6 @@ import AppBar from "./Navigation.AppBar.js";
2
2
  import BottomNav from "./Navigation.BottomNav.js";
3
3
  import CollapsingHeader from "./Navigation.CollapsingHeader.js";
4
4
  import FloatingBar from "./Navigation.FloatingBar.js";
5
- import Header from "./Navigation.Header.js";
6
- import HeaderToolbar from "./Navigation.HeaderToolbar.js";
7
5
  import Menu from "./Navigation.Menu.js";
8
6
  import { MenuSection } from "./Navigation.MenuSection.js";
9
7
  import RowItem from "./Navigation.RowItem.js";
@@ -12,8 +10,6 @@ import SearchBar from "./Navigation.SearchBar.js";
12
10
  import SearchSuggestions from "./Navigation.SearchSuggestions.js";
13
11
  import SegmentedControl from "./Navigation.SegmentedControl.js";
14
12
  import Steps from "./Navigation.Steps.js";
15
- import TabIcon from "./Navigation.TabIcon.js";
16
- import TabItem from "./Navigation.TabItem.js";
17
13
  import Tabs from "./Navigation.Tabs.js";
18
14
  export const Navigation = {
19
15
  AppBar,
@@ -23,10 +19,6 @@ export const Navigation = {
23
19
  SearchBar,
24
20
  Search,
25
21
  SearchSuggestions,
26
- Header,
27
- HeaderToolbar,
28
- TabItem,
29
- TabIcon,
30
22
  RowItem,
31
23
  SegmentedControl,
32
24
  Tabs,
@@ -1,15 +1,11 @@
1
1
  import { jsx as _jsx } from "nativewind/jsx-runtime";
2
2
  import { cn } from "../theme/tw.js";
3
- import { resolveTextFontFamily, typographyVariants, } from "../theme/typography.js";
3
+ import { appliedTextStyle } from "../theme/typography.js";
4
4
  import { TextInput } from "react-native";
5
5
  function SelectableText({ value, variant = "body", semibold = false, className, style, ...props }) {
6
6
  return (_jsx(TextInput, { ...props, className: cn("text-text-primary", className), editable: false, multiline: true, readOnly: true, scrollEnabled: false, showSoftInputOnFocus: false, style: [
7
- typographyVariants[variant],
8
- {
9
- fontFamily: resolveTextFontFamily(variant, false, semibold),
10
- padding: 0,
11
- textAlignVertical: "top",
12
- },
7
+ appliedTextStyle(variant, false, semibold),
8
+ { padding: 0, textAlignVertical: "top" },
13
9
  style,
14
10
  ], underlineColorAndroid: "transparent", value: value }));
15
11
  }
@@ -7,14 +7,9 @@ import { type TextProps } from "react-native";
7
7
  * Uses NativeWind className for: spacing, colors, transforms, alignment
8
8
  * Uses style prop for: typography variants (fontFamily, fontSize, lineHeight)
9
9
  *
10
- * Reason: Custom fonts (Montserrat) not in Tailwind, complex typography system
11
- *
12
- * @deprecated color prop - Use className instead: e.g. className="text-text-primary" or className="text-text-accent"
13
10
  */
14
11
  interface AppTextProps extends TextProps {
15
12
  variant?: keyof typeof typographyVariants;
16
- /** @deprecated Use className="text-{color}" instead */
17
- color?: string;
18
13
  bold?: boolean;
19
14
  semibold?: boolean;
20
15
  italic?: boolean;
@@ -23,6 +18,6 @@ interface AppTextProps extends TextProps {
23
18
  transform?: "none" | "uppercase" | "lowercase" | "capitalize";
24
19
  className?: string;
25
20
  }
26
- declare function AppText({ variant, color, bold, italic, underline, align, transform, semibold, style, className, children, ...props }: AppTextProps): React.JSX.Element;
21
+ declare function AppText({ variant, bold, italic, underline, align, transform, semibold, style, className, children, ...props }: AppTextProps): React.JSX.Element;
27
22
  export default AppText;
28
23
  export { AppText };
@@ -1,14 +1,11 @@
1
1
  import { jsx as _jsx } from "nativewind/jsx-runtime";
2
2
  import { cn } from "../theme/tw.js";
3
- import { resolveTextFontFamily, Typography, } from "../theme/typography.js";
3
+ import { appliedTextStyle } from "../theme/typography.js";
4
4
  import { StyleSheet, Text } from "react-native";
5
- function AppText({ variant = "body", color, bold = false, italic = false, underline = false, align = "left", transform = "none", semibold = false, style, className, children, ...props }) {
6
- const baseStyle = Typography.variants[variant];
5
+ function AppText({ variant = "body", bold = false, italic = false, underline = false, align = "left", transform = "none", semibold = false, style, className, children, ...props }) {
7
6
  const textClassName = cn("text-text-primary", align === "center" && "text-center", align === "right" && "text-right", align === "justify" && "text-justify", transform === "uppercase" && "uppercase", transform === "lowercase" && "lowercase", transform === "capitalize" && "capitalize", underline && "underline", italic && "italic", className);
8
7
  const textStyle = {
9
- ...baseStyle,
10
- ...(color ? { color } : {}),
11
- fontFamily: resolveTextFontFamily(variant, bold, semibold),
8
+ ...appliedTextStyle(variant, bold, semibold),
12
9
  ...StyleSheet.flatten(style),
13
10
  };
14
11
  return (_jsx(Text, { className: textClassName, style: textStyle, ...props, children: children }));
package/dist/index.d.ts CHANGED
@@ -8,17 +8,14 @@ export { Typography } from "./Typography/index.js";
8
8
  export { Box, Row, Stack } from "./primitives/index.js";
9
9
  export { type BrandingConfig, getBrandingLogo, getBrandingMesh, getBrandingMeshSize, setBranding, } from "./branding.js";
10
10
  export { cn, tv, type VariantProps } from "./theme/tw.js";
11
- export { fontFamilies, fontSizes, fontWeights, letterSpacing, lineHeights, typographyVariants, } from "./theme/typography.js";
11
+ export { appliedTextStyle, fontFamilies, fontSizes, fontWeights, letterSpacing, lineHeights, typographyVariants, } from "./theme/typography.js";
12
12
  export { BottomInsetContext } from "./layouts/BottomInset.js";
13
13
  export { default as Container } from "./layouts/Container.js";
14
14
  export { default as GradientContainer } from "./layouts/GradientContainer.js";
15
15
  export { default as PlainLayout } from "./layouts/PlainLayout.js";
16
16
  export { default as ScrollContainer } from "./layouts/ScrollContainer.js";
17
- export { default as TabNavigatorLayout } from "./layouts/TabNavigatorLayout.js";
18
17
  export { default as AppSplashView } from "./views/AppSplashView.js";
19
18
  export { default as AuthFormView } from "./views/AuthFormView.js";
20
19
  export { default as FormViewV2 } from "./views/FormViewV2.js";
21
20
  export { default as ListViewV2 } from "./views/ListViewV2.js";
22
21
  export { default as JSONViewer } from "./widgets/JSONViewer.js";
23
- export { default as ScreenHeader } from "./widgets/ScreenHeader.js";
24
- export * from "./widgets/ScreenHeader.js";
package/dist/index.js CHANGED
@@ -13,14 +13,13 @@ export { Box, Row, Stack } from "./primitives/index.js";
13
13
  export { getBrandingLogo, getBrandingMesh, getBrandingMeshSize, setBranding, } from "./branding.js";
14
14
  // Theme
15
15
  export { cn, tv } from "./theme/tw.js";
16
- export { fontFamilies, fontSizes, fontWeights, letterSpacing, lineHeights, typographyVariants, } from "./theme/typography.js";
16
+ export { appliedTextStyle, fontFamilies, fontSizes, fontWeights, letterSpacing, lineHeights, typographyVariants, } from "./theme/typography.js";
17
17
  // Layouts
18
18
  export { BottomInsetContext } from "./layouts/BottomInset.js";
19
19
  export { default as Container } from "./layouts/Container.js";
20
20
  export { default as GradientContainer } from "./layouts/GradientContainer.js";
21
21
  export { default as PlainLayout } from "./layouts/PlainLayout.js";
22
22
  export { default as ScrollContainer } from "./layouts/ScrollContainer.js";
23
- export { default as TabNavigatorLayout } from "./layouts/TabNavigatorLayout.js";
24
23
  // Views
25
24
  export { default as AppSplashView } from "./views/AppSplashView.js";
26
25
  export { default as AuthFormView } from "./views/AuthFormView.js";
@@ -28,5 +27,3 @@ export { default as FormViewV2 } from "./views/FormViewV2.js";
28
27
  export { default as ListViewV2 } from "./views/ListViewV2.js";
29
28
  // Widgets
30
29
  export { default as JSONViewer } from "./widgets/JSONViewer.js";
31
- export { default as ScreenHeader } from "./widgets/ScreenHeader.js";
32
- export * from "./widgets/ScreenHeader.js";
@@ -1,18 +1,20 @@
1
1
  import { type KeyboardFormProps } from "../Form/Form.KeyboardForm.js";
2
2
  import type { AppBarBackground } from "../Navigation/Navigation.AppBar.js";
3
3
  import { ReactNode } from "react";
4
+ import { type Edge } from "react-native-safe-area-context";
4
5
  interface AuthContainerProps {
5
6
  header: ReactNode;
6
7
  children: ReactNode;
7
8
  onBackPress?: () => void;
8
9
  className?: string;
10
+ edges?: Edge[];
9
11
  keyboardToolbar?: boolean;
10
12
  keyboardFormProps?: Omit<KeyboardFormProps, "children" | "toolbar">;
11
- /** Gradient + optional texture surface for the header area. Defaults to the `warm`
13
+ /** Gradient + optional texture surface for the header area. Defaults to the `brand`
12
14
  * preset. Set `background.pattern` to opt-in a texture (`dots` / `grid` /
13
15
  * `diagonals`); compose `<Display.Pattern kind="mesh" />` outside if you want the
14
16
  * brand symbol. */
15
17
  background?: AppBarBackground;
16
18
  }
17
- declare function AuthContainer({ header, children, onBackPress, background, className, keyboardToolbar, keyboardFormProps, }: AuthContainerProps): import("react").JSX.Element;
19
+ declare function AuthContainer({ header, children, onBackPress, background, className, edges, keyboardToolbar, keyboardFormProps, }: AuthContainerProps): import("react").JSX.Element;
18
20
  export default AuthContainer;
@@ -5,11 +5,10 @@ import { Pattern } from "../Display/Display.Pattern.js";
5
5
  import KeyboardForm from "../Form/Form.KeyboardForm.js";
6
6
  import { useTheme } from "../theme/index.js";
7
7
  import { cn } from "../theme/tw.js";
8
- import { Keyboard, TouchableOpacity, TouchableWithoutFeedback, useWindowDimensions, View, } from "react-native";
8
+ import { Keyboard, TouchableOpacity, TouchableWithoutFeedback, View } from "react-native";
9
9
  import { SafeAreaView } from "react-native-safe-area-context";
10
- function AuthContainer({ header, children, onBackPress, background, className, keyboardToolbar = false, keyboardFormProps, }) {
11
- const { height: screenHeight } = useWindowDimensions();
10
+ function AuthContainer({ header, children, onBackPress, background, className, edges = ["top", "bottom", "left", "right"], keyboardToolbar = true, keyboardFormProps, }) {
12
11
  const theme = useTheme();
13
- return (_jsxs(GradientSurface, { className: cn("flex-1", className), colors: background?.colors, end: background?.end ?? (background?.colors ? { x: 0, y: 1 } : undefined), preset: background?.surface ?? "warm", radius: "none", start: background?.start ?? (background?.colors ? { x: 0, y: 0 } : undefined), style: { flex: 1 }, children: [background?.pattern ? (_jsx(Pattern, { color: background.patternColor ?? "#FFFFFF", kind: background.pattern, opacity: background.patternOpacity ?? 0.18 })) : null, _jsx(SafeAreaView, { className: "flex-1", edges: ["top"], children: _jsxs(View, { className: "flex-1", children: [_jsx(TouchableWithoutFeedback, { onPress: Keyboard.dismiss, children: _jsxs(View, { className: "justify-center items-center relative", style: { height: screenHeight * 0.3 }, children: [onBackPress && (_jsx(TouchableOpacity, { className: "absolute top-4 left-4 p-2 z-[1]", onPress: onBackPress, children: _jsx(Display.Icon, { color: background?.textColor ?? theme.text.inverse, name: "arrow-back", size: 24, type: "ionicons" }) })), header] }) }), _jsx(View, { className: "flex-1 bg-bg-card rounded-t-3xl shadow-lg", style: { minHeight: screenHeight * 0.7 }, children: _jsx(KeyboardForm, { bottomOffset: keyboardToolbar ? undefined : 50, bounces: false, className: "flex-1", contentContainerClassName: "flex-grow pb-10", keyboardShouldPersistTaps: "handled", showsVerticalScrollIndicator: false, ...keyboardFormProps, toolbar: keyboardToolbar, children: _jsx(View, { className: "p-4", children: children }) }) })] }) })] }));
12
+ return (_jsxs(GradientSurface, { className: cn("flex-1", className), colors: background?.colors, end: background?.end ?? (background?.colors ? { x: 0, y: 1 } : undefined), preset: background?.surface ?? "brand", radius: "none", start: background?.start ?? (background?.colors ? { x: 0, y: 0 } : undefined), style: { flex: 1 }, children: [background?.pattern ? (_jsx(Pattern, { color: background.patternColor ?? "#FFFFFF", kind: background.pattern, opacity: background.patternOpacity ?? 0.18 })) : null, _jsx(SafeAreaView, { className: "flex-1", edges: edges, children: _jsxs(View, { className: "flex-1", children: [_jsx(TouchableWithoutFeedback, { onPress: Keyboard.dismiss, children: _jsxs(View, { className: "justify-center items-center relative", style: { height: "30%" }, children: [onBackPress && (_jsx(TouchableOpacity, { className: "absolute top-4 left-4 p-2 z-[1]", onPress: onBackPress, children: _jsx(Display.Icon, { color: background?.textColor ?? theme.text.inverse, name: "back", size: 24 }) })), header] }) }), _jsx(View, { className: "flex-1 bg-bg-card rounded-t-3xl shadow-lg", children: _jsx(KeyboardForm, { bottomOffset: keyboardToolbar ? undefined : 50, bounces: false, className: "flex-1", contentContainerClassName: "flex-grow pb-10", keyboardShouldPersistTaps: "handled", showsVerticalScrollIndicator: false, ...keyboardFormProps, toolbar: keyboardToolbar, children: _jsx(View, { className: "p-4", children: children }) }) })] }) })] }));
14
13
  }
15
14
  export default AuthContainer;
@@ -4,10 +4,6 @@ import { Edge } from "react-native-safe-area-context";
4
4
  type ContainerProps = {
5
5
  children: ReactNode;
6
6
  style?: ViewStyle;
7
- /** @deprecated Ignored under edge-to-edge (SDK 54+): the status bar is always translucent. */
8
- statusBarColor?: string;
9
- barStyle?: "light-content" | "dark-content";
10
- statusBarHidden?: boolean;
11
7
  edges?: Edge[];
12
8
  className?: string;
13
9
  };
@@ -1,8 +1,7 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
1
+ import { jsx as _jsx } from "nativewind/jsx-runtime";
2
2
  import { cn } from "../theme/tw.js";
3
- import { StatusBar } from "react-native";
4
3
  import { SafeAreaView } from "react-native-safe-area-context";
5
- const Container = ({ children, style, barStyle = "light-content", statusBarHidden = false, edges = ["top", "bottom", "left", "right"], className, }) => {
6
- return (_jsxs(SafeAreaView, { className: cn("flex-1 bg-bg-page", className), edges: edges, style: style, children: [_jsx(StatusBar, { barStyle: barStyle, hidden: statusBarHidden }), children] }));
4
+ const Container = ({ children, style, edges = ["left", "right"], className, }) => {
5
+ return (_jsx(SafeAreaView, { className: cn("flex-1 bg-bg-page", className), edges: edges, style: style, children: children }));
7
6
  };
8
7
  export default Container;
@@ -1,8 +1,12 @@
1
1
  import React, { ReactNode } from "react";
2
- type ScrollContainerProps = {
2
+ import { type StyleProp, type ViewStyle } from "react-native";
3
+ import { type KeyboardAwareScrollViewProps } from "react-native-keyboard-controller";
4
+ import { type Edge } from "react-native-safe-area-context";
5
+ type ScrollContainerProps = Omit<KeyboardAwareScrollViewProps, "children"> & {
3
6
  children: ReactNode;
4
- contentContainerStyle?: object;
7
+ contentContainerStyle?: StyleProp<ViewStyle>;
5
8
  className?: string;
9
+ edges?: Edge[];
6
10
  };
7
- declare function ScrollContainer({ children, contentContainerStyle, className, }: ScrollContainerProps): React.JSX.Element;
11
+ declare function ScrollContainer({ children, contentContainerStyle, className, edges, bottomOffset, style, ...props }: ScrollContainerProps): React.JSX.Element;
8
12
  export default ScrollContainer;
@@ -1,8 +1,9 @@
1
- import { jsx as _jsx, jsxs as _jsxs } from "nativewind/jsx-runtime";
1
+ import { jsx as _jsx } from "nativewind/jsx-runtime";
2
2
  import { cn } from "../theme/tw.js";
3
- import { KeyboardAvoidingView, Platform, ScrollView, StatusBar, View } from "react-native";
3
+ import { View } from "react-native";
4
+ import { KeyboardAwareScrollView, } from "react-native-keyboard-controller";
4
5
  import { SafeAreaView } from "react-native-safe-area-context";
5
- function ScrollContainer({ children, contentContainerStyle = {}, className, }) {
6
- return (_jsxs(SafeAreaView, { className: cn("flex-1 bg-bg-card", className), children: [_jsx(StatusBar, { barStyle: "dark-content" }), _jsx(KeyboardAvoidingView, { behavior: Platform.OS === "ios" ? "padding" : undefined, className: "flex-1", children: _jsx(ScrollView, { contentContainerStyle: [{ flexGrow: 1, padding: 16 }, contentContainerStyle], keyboardShouldPersistTaps: "handled", showsVerticalScrollIndicator: false, children: _jsx(View, { className: "flex-1", children: children }) }) })] }));
6
+ function ScrollContainer({ children, contentContainerStyle = {}, className, edges = ["left", "right"], bottomOffset = 72, style, ...props }) {
7
+ return (_jsx(SafeAreaView, { className: cn("flex-1 bg-bg-card", className), edges: edges, children: _jsx(KeyboardAwareScrollView, { bottomOffset: bottomOffset, contentContainerStyle: [{ flexGrow: 1, padding: 16 }, contentContainerStyle], contentInsetAdjustmentBehavior: "automatic", keyboardShouldPersistTaps: "handled", showsVerticalScrollIndicator: false, style: [{ flex: 1 }, style], ...props, children: _jsx(View, { className: "flex-1", children: children }) }) }));
7
8
  }
8
9
  export default ScrollContainer;
@@ -1,3 +1,4 @@
1
+ import type { IconName } from "../Display/index.js";
1
2
  import { type VariantProps } from "../theme/tw.js";
2
3
  import type React from "react";
3
4
  import { FC } from "react";
@@ -135,7 +136,7 @@ export interface BaseButtonProps extends VariantProps<typeof button>, Accessibil
135
136
  }
136
137
  export declare const BaseButton: FC<BaseButtonProps>;
137
138
  export interface BaseButtonIconProps extends VariantProps<typeof buttonIcon>, AccessibilityProps {
138
- icon: string;
139
+ icon: IconName;
139
140
  onPress?: () => void;
140
141
  loading?: boolean;
141
142
  disabled?: boolean;
@@ -88,10 +88,6 @@ export function buildThemeFromBrand(opts) {
88
88
  warning: WARNING,
89
89
  danger: DANGER,
90
90
  info: INFO,
91
- successLight: successC.container,
92
- warningLight: warningC.container,
93
- dangerLight: dangerC.container,
94
- infoLight: infoC.container,
95
91
  container: {
96
92
  primary: primaryC.container,
97
93
  onPrimary: primaryC.onContainer,
@@ -59,10 +59,6 @@ export function themeToVars(t) {
59
59
  "--warning": rgb(t.warning),
60
60
  "--danger": rgb(t.danger),
61
61
  "--info": rgb(t.info),
62
- "--success-light": rgb(t.successLight),
63
- "--warning-light": rgb(t.warningLight),
64
- "--danger-light": rgb(t.dangerLight),
65
- "--info-light": rgb(t.infoLight),
66
62
  "--container-primary": rgb(t.container.primary),
67
63
  "--container-on-primary": rgb(t.container.onPrimary),
68
64
  "--container-secondary": rgb(t.container.secondary),
@@ -1,6 +1,6 @@
1
1
  import { containerPair } from "./color.js";
2
2
  import { resolveOnColor } from "./contrast.js";
3
- /** Web UI dark palette. The same roles, measured on #181614. */
3
+ /** Brand dark palette for iOS and Android, measured on #181614. */
4
4
  const PRIMARY = "#8FA9E8";
5
5
  const SECONDARY = "#B0C3F1";
6
6
  const ACCENT = "#C89B3C";
@@ -33,7 +33,7 @@ export const DEFAULT_DARK_THEME = {
33
33
  muted: "#302C28",
34
34
  accent: primaryC.container,
35
35
  hover: "#2A2622",
36
- disabled: "#302C28",
36
+ disabled: "#3A342F",
37
37
  inverse: "#FAF9F7",
38
38
  containerLowest: "#141210",
39
39
  container: "#221F1C",
@@ -70,10 +70,6 @@ export const DEFAULT_DARK_THEME = {
70
70
  warning: WARNING,
71
71
  danger: DANGER,
72
72
  info: INFO,
73
- successLight: successC.container,
74
- warningLight: warningC.container,
75
- dangerLight: dangerC.container,
76
- infoLight: infoC.container,
77
73
  container: {
78
74
  primary: primaryC.container,
79
75
  onPrimary: primaryC.onContainer,
@@ -1,6 +1,6 @@
1
1
  import { containerPair } from "./color.js";
2
2
  import { resolveOnColor } from "./contrast.js";
3
- /** Web UI light palette. Gold is a fill, never a border or a label. */
3
+ /** Brand light palette for iOS and Android. Gold is a fill, never a border or a label. */
4
4
  const PRIMARY = "#2A4A85";
5
5
  const SECONDARY = "#1C3765";
6
6
  const ACCENT = "#C89B3C";
@@ -70,10 +70,6 @@ export const DEFAULT_THEME = {
70
70
  warning: WARNING,
71
71
  danger: DANGER,
72
72
  info: INFO,
73
- successLight: successC.container,
74
- warningLight: warningC.container,
75
- dangerLight: dangerC.container,
76
- infoLight: infoC.container,
77
73
  container: {
78
74
  primary: primaryC.container,
79
75
  onPrimary: primaryC.onContainer,
@@ -9,6 +9,6 @@ export { DEFAULT_THEME } from "./default.js";
9
9
  export { type DeepPartial, defineTheme, extendTheme, mergeTheme, } from "./define.js";
10
10
  export { theme } from "./theme.js";
11
11
  export type { PatternMode, ShadowStyle, ThemeTokens } from "./types.js";
12
- export { configureFonts, fontFamilies, type FontRole, resetFonts, useAppFonts, variantFontRole, } from "./typography.js";
12
+ export { appliedTextStyle, configureFonts, fontFamilies, type FontRole, resetFonts, useAppFonts, variantFontRole, } from "./typography.js";
13
13
  export { useTheme } from "./useTheme.js";
14
14
  export { validateTheme } from "./validate.js";
@@ -8,6 +8,6 @@ export { DEFAULT_DARK_THEME } from "./dark.js";
8
8
  export { DEFAULT_THEME } from "./default.js";
9
9
  export { defineTheme, extendTheme, mergeTheme, } from "./define.js";
10
10
  export { theme } from "./theme.js";
11
- export { configureFonts, fontFamilies, resetFonts, useAppFonts, variantFontRole, } from "./typography.js";
11
+ export { appliedTextStyle, configureFonts, fontFamilies, resetFonts, useAppFonts, variantFontRole, } from "./typography.js";
12
12
  export { useTheme } from "./useTheme.js";
13
13
  export { validateTheme } from "./validate.js";
@@ -84,17 +84,6 @@ export interface ThemeTokens {
84
84
  warning: string;
85
85
  danger: string;
86
86
  info: string;
87
- /**
88
- * @deprecated Prefer `container.success`. Kept for NativeWind `bg-success-light`
89
- * back-compat; defaults stay in sync with container fills.
90
- */
91
- successLight: string;
92
- /** @deprecated Prefer `container.warning`. */
93
- warningLight: string;
94
- /** @deprecated Prefer `container.danger`. */
95
- dangerLight: string;
96
- /** @deprecated Prefer `container.info`. */
97
- infoLight: string;
98
87
  /**
99
88
  * Soft tonal fills + on-colors — badges, chips, tonal CTAs, selected rows.
100
89
  * Prefer these over saturated `success` + white for body-sized labels.