@situaction/traquiste-mobile 1.1.0 → 1.2.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 (65) hide show
  1. package/README.md +3 -2
  2. package/build/components/Button/Button.js +1 -1
  3. package/build/components/Button/Button.js.map +1 -1
  4. package/build/components/ButtonMenu/ButtonMenu.js +2 -2
  5. package/build/components/ButtonMenu/ButtonMenu.js.map +1 -1
  6. package/build/components/Calendar/Calendar.js +1 -1
  7. package/build/components/Calendar/Calendar.js.map +1 -1
  8. package/build/components/Calendar/Calendar.styles.d.ts +11 -8
  9. package/build/components/Calendar/Calendar.styles.d.ts.map +1 -1
  10. package/build/components/Calendar/Calendar.styles.js +13 -10
  11. package/build/components/Calendar/Calendar.styles.js.map +1 -1
  12. package/build/components/Calendar/CalendarLegend.js +1 -1
  13. package/build/components/Calendar/CalendarLegend.js.map +1 -1
  14. package/build/components/Checkbox/Checkbox.d.ts +2 -2
  15. package/build/components/Checkbox/Checkbox.d.ts.map +1 -1
  16. package/build/components/Checkbox/Checkbox.js +4 -5
  17. package/build/components/Checkbox/Checkbox.js.map +1 -1
  18. package/build/components/FilterChip/FilterChip.d.ts.map +1 -1
  19. package/build/components/FilterChip/FilterChip.js +45 -16
  20. package/build/components/FilterChip/FilterChip.js.map +1 -1
  21. package/build/components/Input/Input.d.ts.map +1 -1
  22. package/build/components/Input/Input.js +5 -6
  23. package/build/components/Input/Input.js.map +1 -1
  24. package/build/components/Input/Input.styles.d.ts +6 -1
  25. package/build/components/Input/Input.styles.d.ts.map +1 -1
  26. package/build/components/Input/Input.styles.js +6 -1
  27. package/build/components/Input/Input.styles.js.map +1 -1
  28. package/build/components/ListGroup/ListGroup.d.ts +24 -0
  29. package/build/components/ListGroup/ListGroup.d.ts.map +1 -0
  30. package/build/components/ListGroup/ListGroup.js +44 -0
  31. package/build/components/ListGroup/ListGroup.js.map +1 -0
  32. package/build/components/ListGroup/index.d.ts +3 -0
  33. package/build/components/ListGroup/index.d.ts.map +1 -0
  34. package/build/components/ListGroup/index.js +2 -0
  35. package/build/components/ListGroup/index.js.map +1 -0
  36. package/build/components/ListItem/ListItem.d.ts +3 -1
  37. package/build/components/ListItem/ListItem.d.ts.map +1 -1
  38. package/build/components/ListItem/ListItem.js +6 -3
  39. package/build/components/ListItem/ListItem.js.map +1 -1
  40. package/build/components/Switch/Switch.d.ts.map +1 -1
  41. package/build/components/Switch/Switch.js +9 -3
  42. package/build/components/Switch/Switch.js.map +1 -1
  43. package/build/components/Tab/Tab.d.ts +4 -2
  44. package/build/components/Tab/Tab.d.ts.map +1 -1
  45. package/build/components/Tab/Tab.js +14 -10
  46. package/build/components/Tab/Tab.js.map +1 -1
  47. package/build/components/Tag/Tag.js +2 -2
  48. package/build/components/Tag/Tag.js.map +1 -1
  49. package/build/components/Tag/Tag.styles.d.ts +4 -2
  50. package/build/components/Tag/Tag.styles.d.ts.map +1 -1
  51. package/build/components/Tag/Tag.styles.js +6 -6
  52. package/build/components/Tag/Tag.styles.js.map +1 -1
  53. package/build/components/navigation/GeneralNav/GeneralNav.d.ts +7 -5
  54. package/build/components/navigation/GeneralNav/GeneralNav.d.ts.map +1 -1
  55. package/build/components/navigation/GeneralNav/GeneralNav.js +5 -7
  56. package/build/components/navigation/GeneralNav/GeneralNav.js.map +1 -1
  57. package/build/index.d.ts +2 -0
  58. package/build/index.d.ts.map +1 -1
  59. package/build/index.js +1 -0
  60. package/build/index.js.map +1 -1
  61. package/build/theme/tokens/dark.js +5 -5
  62. package/build/theme/tokens/dark.js.map +1 -1
  63. package/build/theme/tokens/light.js +4 -4
  64. package/build/theme/tokens/light.js.map +1 -1
  65. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"Switch.js","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Switch — controlled on/off toggle.\n * Custom implementation (not the RN native Switch) to match the Figma pixel-perfect.\n * 4 sizes: s / m / l / xl. Animated thumb translation via Animated.timing.\n * Track color changes instantly; thumb slides with ease-out cubic.\n */\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing, Pressable, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Switch.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type SwitchSize = 's' | 'm' | 'l' | 'xl';\n\nexport interface SwitchProps {\n /** Current on/off value — controlled */\n value: boolean;\n /** Toggle handler */\n onValueChange: (value: boolean) => void;\n /** Content displayed to the left of the switch */\n childrenLeft?: React.ReactNode;\n /** Content displayed to the right of the switch */\n childrenRight?: React.ReactNode;\n /** Switch size — s: 28×16, m: 36×20, l: 44×24, xl: 52×28 */\n size?: SwitchSize;\n /** Disabled — no interaction, muted colors */\n disabled?: boolean;\n /** Additional styles on the wrapper */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Size config — derived from Figma measurements (2px thumb padding)\n// ---------------------------------------------------------------------------\n\nconst THUMB_PADDING = 2;\n\nconst SIZE_CONFIG: Record<SwitchSize, {\n trackWidth: number;\n trackHeight: number;\n thumbSize: number;\n}> = {\n s: { trackWidth: 28, trackHeight: 16, thumbSize: 12 },\n m: { trackWidth: 36, trackHeight: 20, thumbSize: 16 },\n l: { trackWidth: 44, trackHeight: 24, thumbSize: 20 },\n xl: { trackWidth: 52, trackHeight: 28, thumbSize: 24 },\n};\n\nconst ANIMATION_DURATION = 200;\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Switch = ({\n value,\n onValueChange,\n childrenLeft,\n childrenRight,\n size = 'm',\n disabled = false,\n style,\n testID,\n}: SwitchProps) => {\n const { colors } = useTheme();\n const cfg = SIZE_CONFIG[size];\n const animValue = useRef(new Animated.Value(value ? 1 : 0)).current;\n\n // Animate thumb on value change\n useEffect(() => {\n const anim = Animated.timing(animValue, {\n toValue: value ? 1 : 0,\n duration: ANIMATION_DURATION,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n });\n anim.start();\n return () => anim.stop();\n }, [value, animValue]);\n\n // Max translation: from left edge + padding to right edge - padding - thumbSize\n const travelX = cfg.trackWidth - cfg.thumbSize - THUMB_PADDING * 2;\n const thumbTranslateX = animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, travelX],\n });\n\n const t = colors.toggle;\n const trackColor = disabled\n ? (value ? t.trackOnDisabled : t.trackOffDisabled)\n : (value ? t.trackOn : t.trackOff);\n const thumbColor = disabled\n ? t.thumbDisabled\n : (value ? t.thumbOn : t.thumbOff);\n\n const track = (\n <View\n style={[\n styles.track,\n {\n width: cfg.trackWidth,\n height: cfg.trackHeight,\n borderRadius: cfg.trackHeight / 2,\n backgroundColor: trackColor,\n shadowColor: colors.shadow.minimal,\n },\n ]}\n >\n <Animated.View\n style={[\n styles.thumb,\n {\n width: cfg.thumbSize,\n height: cfg.thumbSize,\n borderRadius: cfg.thumbSize / 2,\n top: THUMB_PADDING,\n left: THUMB_PADDING,\n backgroundColor: thumbColor,\n transform: [{ translateX: thumbTranslateX }],\n shadowColor: colors.shadow.minimal,\n },\n ]}\n />\n </View>\n );\n\n return (\n <Pressable\n onPress={disabled ? undefined : () => onValueChange(!value)}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: value, disabled }}\n style={[styles.wrapper, style]}\n testID={testID}\n >\n {childrenLeft}\n {track}\n {childrenRight}\n </Pressable>\n );\n};\n\n"]}
1
+ {"version":3,"file":"Switch.js","sourceRoot":"","sources":["../../../src/components/Switch/Switch.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Switch — controlled on/off toggle.\n * Custom implementation (not the RN native Switch) to match the Figma pixel-perfect.\n * 4 sizes: s / m / l / xl. Animated thumb translation via Animated.timing.\n * Track color changes instantly; thumb slides with ease-out cubic.\n */\nimport React, { useEffect, useRef } from 'react';\nimport { Animated, Easing, Pressable, Text, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Switch.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type SwitchSize = 's' | 'm' | 'l' | 'xl';\n\nexport interface SwitchProps {\n /** Current on/off value — controlled */\n value: boolean;\n /** Toggle handler */\n onValueChange: (value: boolean) => void;\n /** Content displayed to the left of the switch */\n childrenLeft?: React.ReactNode;\n /** Content displayed to the right of the switch */\n childrenRight?: React.ReactNode;\n /** Switch size — s: 28×16, m: 36×20, l: 44×24, xl: 52×28 */\n size?: SwitchSize;\n /** Disabled — no interaction, muted colors */\n disabled?: boolean;\n /** Additional styles on the wrapper */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Size config — derived from Figma measurements (2px thumb padding)\n// ---------------------------------------------------------------------------\n\nconst THUMB_PADDING = 2;\n\nconst SIZE_CONFIG: Record<SwitchSize, {\n trackWidth: number;\n trackHeight: number;\n thumbSize: number;\n}> = {\n s: { trackWidth: 28, trackHeight: 16, thumbSize: 12 },\n m: { trackWidth: 36, trackHeight: 20, thumbSize: 16 },\n l: { trackWidth: 44, trackHeight: 24, thumbSize: 20 },\n xl: { trackWidth: 52, trackHeight: 28, thumbSize: 24 },\n};\n\nconst ANIMATION_DURATION = 200;\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Switch = ({\n value,\n onValueChange,\n childrenLeft,\n childrenRight,\n size = 'm',\n disabled = false,\n style,\n testID,\n}: SwitchProps) => {\n const { colors } = useTheme();\n const cfg = SIZE_CONFIG[size];\n const animValue = useRef(new Animated.Value(value ? 1 : 0)).current;\n\n // Animate thumb on value change\n useEffect(() => {\n const anim = Animated.timing(animValue, {\n toValue: value ? 1 : 0,\n duration: ANIMATION_DURATION,\n easing: Easing.out(Easing.cubic),\n useNativeDriver: true,\n });\n anim.start();\n return () => anim.stop();\n }, [value, animValue]);\n\n // Max translation: from left edge + padding to right edge - padding - thumbSize\n const travelX = cfg.trackWidth - cfg.thumbSize - THUMB_PADDING * 2;\n const thumbTranslateX = animValue.interpolate({\n inputRange: [0, 1],\n outputRange: [0, travelX],\n });\n\n const t = colors.toggle;\n const { fontFamily } = useTheme();\n const labelColor = disabled ? t.labelDisabled : t.label;\n\n // Render string children as styled Text; ReactNode children pass through as-is\n const renderChild = (child: React.ReactNode) =>\n typeof child === 'string'\n ? <Text style={{ color: labelColor, fontFamily }}>{child}</Text>\n : child;\n\n const trackColor = disabled\n ? (value ? t.trackOnDisabled : t.trackOffDisabled)\n : (value ? t.trackOn : t.trackOff);\n const thumbColor = disabled\n ? t.thumbDisabled\n : (value ? t.thumbOn : t.thumbOff);\n\n const track = (\n <View\n style={[\n styles.track,\n {\n width: cfg.trackWidth,\n height: cfg.trackHeight,\n borderRadius: cfg.trackHeight / 2,\n backgroundColor: trackColor,\n shadowColor: colors.shadow.minimal,\n },\n ]}\n >\n <Animated.View\n style={[\n styles.thumb,\n {\n width: cfg.thumbSize,\n height: cfg.thumbSize,\n borderRadius: cfg.thumbSize / 2,\n top: THUMB_PADDING,\n left: THUMB_PADDING,\n backgroundColor: thumbColor,\n transform: [{ translateX: thumbTranslateX }],\n shadowColor: colors.shadow.minimal,\n },\n ]}\n />\n </View>\n );\n\n return (\n <Pressable\n onPress={disabled ? undefined : () => onValueChange(!value)}\n accessibilityRole=\"switch\"\n accessibilityState={{ checked: value, disabled }}\n style={[styles.wrapper, style]}\n testID={testID}\n >\n {renderChild(childrenLeft)}\n {track}\n {renderChild(childrenRight)}\n </Pressable>\n );\n};\n\n"]}
@@ -13,7 +13,7 @@ import type { StyleProp, ViewStyle } from 'react-native';
13
13
  export interface TabItem {
14
14
  /** Tab label text — optional when icon is provided */
15
15
  label?: string;
16
- /** Optional Phosphor icon — rendered at 24px (line) or 20px (button) */
16
+ /** Optional Phosphor icon — rendered at 20px */
17
17
  icon?: React.ReactElement;
18
18
  /** Disabled — no interaction, muted color */
19
19
  disabled?: boolean;
@@ -33,6 +33,8 @@ export interface TabProps {
33
33
  variant?: 'line' | 'button';
34
34
  /** When true, wraps tabs in a horizontal ScrollView (for many tabs) */
35
35
  scrollable?: boolean;
36
+ /** Hides the container border/background — line: only active indicator visible, button: only active pill visible */
37
+ showContainerBorder?: boolean;
36
38
  /** When true, truncates labels with "…" — defaults to false (full text, no wrap) */
37
39
  truncateLabels?: boolean;
38
40
  /** Forces the container to fill 100% of its parent width */
@@ -46,5 +48,5 @@ export interface TabProps {
46
48
  /** Test ID for automated testing */
47
49
  testID?: string;
48
50
  }
49
- export declare const Tab: ({ items, activeIndex, onChange, variant, scrollable, truncateLabels, fullWidth, stretchItems, align, style, testID, }: TabProps) => React.JSX.Element;
51
+ export declare const Tab: ({ items, activeIndex, onChange, variant, scrollable, showContainerBorder, truncateLabels, fullWidth, stretchItems, align, style, testID, }: TabProps) => React.JSX.Element;
50
52
  //# sourceMappingURL=Tab.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/components/Tab/Tab.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzD,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,GAAG,GAAI,uHAYjB,QAAQ,sBA8JV,CAAC"}
1
+ {"version":3,"file":"Tab.d.ts","sourceRoot":"","sources":["../../../src/components/Tab/Tab.tsx"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,KAAK,MAAM,OAAO,CAAC;AAO1B,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzD,MAAM,WAAW,OAAO;IACtB,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,IAAI,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC1B,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,QAAQ;IACvB,sBAAsB;IACtB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,qDAAqD;IACrD,WAAW,EAAE,MAAM,CAAC;IACpB,yDAAyD;IACzD,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;;;OAIG;IACH,OAAO,CAAC,EAAE,MAAM,GAAG,QAAQ,CAAC;IAC5B,uEAAuE;IACvE,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,oHAAoH;IACpH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B,oFAAoF;IACpF,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sFAAsF;IACtF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,6EAA6E;IAC7E,KAAK,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAC;IACpC,6CAA6C;IAC7C,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAMD,eAAO,MAAM,GAAG,GAAI,4IAajB,QAAQ,sBAkKV,CAAC"}
@@ -15,7 +15,7 @@ import { styles } from './Tab.styles';
15
15
  // ---------------------------------------------------------------------------
16
16
  // Component
17
17
  // ---------------------------------------------------------------------------
18
- export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable = false, truncateLabels = false, fullWidth = false, stretchItems = false, align = 'left', style, testID, }) => {
18
+ export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable = false, showContainerBorder = true, truncateLabels = false, fullWidth = false, stretchItems = false, align = 'left', style, testID, }) => {
19
19
  const { colors } = useTheme();
20
20
  const t = colors.tabs;
21
21
  const justifyContent = align === 'center' ? 'center' :
@@ -42,15 +42,16 @@ export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable
42
42
  const iconElement = item.icon
43
43
  ? React.cloneElement(item.icon, {
44
44
  color: textColor,
45
- size: 24,
45
+ size: 20,
46
46
  })
47
47
  : null;
48
48
  return (<Pressable key={index} onPress={isDisabled ? undefined : () => onChange(index)} accessibilityRole="tab" accessibilityState={{ selected: isActive, disabled: isDisabled }} style={[
49
49
  styles.lineTab,
50
50
  itemFlex && styles.lineTabFlex,
51
- isActive && {
51
+ {
52
52
  borderBottomWidth: 2,
53
- borderBottomColor: t.line.active.indicator,
53
+ borderBottomColor: isActive ? t.line.active.indicator : 'transparent',
54
+ marginBottom: -1,
54
55
  },
55
56
  ]}>
56
57
  {iconElement}
@@ -59,7 +60,10 @@ export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable
59
60
  });
60
61
  const container = (<View style={[
61
62
  styles.lineContainer,
62
- { borderBottomColor: t.line.containerBorder, justifyContent },
63
+ {
64
+ borderBottomColor: showContainerBorder ? t.line.containerBorder : 'transparent',
65
+ justifyContent,
66
+ },
63
67
  sizeStyle,
64
68
  style,
65
69
  ]} testID={testID}>
@@ -89,10 +93,10 @@ export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable
89
93
  return (<Pressable key={index} onPress={isDisabled ? undefined : () => onChange(index)} accessibilityRole="tab" accessibilityState={{ selected: isActive, disabled: isDisabled }} style={[
90
94
  styles.buttonTab,
91
95
  itemFlex && styles.buttonTabFlex,
92
- isActive && {
93
- backgroundColor: t.button.active.background,
96
+ {
94
97
  borderWidth: 1,
95
- borderColor: t.button.active.border,
98
+ borderColor: isActive ? t.button.active.border : 'transparent',
99
+ backgroundColor: isActive ? t.button.active.background : 'transparent',
96
100
  },
97
101
  ]}>
98
102
  {iconElement}
@@ -102,8 +106,8 @@ export const Tab = ({ items, activeIndex, onChange, variant = 'line', scrollable
102
106
  return (<View style={[
103
107
  styles.buttonContainer,
104
108
  {
105
- backgroundColor: t.button.container.background,
106
- borderColor: t.button.container.border,
109
+ backgroundColor: showContainerBorder ? t.button.container.background : 'transparent',
110
+ borderColor: showContainerBorder ? t.button.container.border : 'transparent',
107
111
  justifyContent,
108
112
  },
109
113
  sizeStyle,
@@ -1 +1 @@
1
- {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../src/components/Tab/Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tab — horizontal tab navigation bar.\n *\n * Two visual variants:\n * - 'line' → underline indicator. Full-width strip, each tab flex:1.\n * - 'button' → pill/segmented container. Active tab gets a card background.\n *\n * Controlled: activeIndex + onChange always required.\n * Optional horizontal ScrollView when `scrollable` is true.\n */\nimport React from 'react';\nimport {\n Pressable,\n ScrollView,\n Text,\n View,\n} from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Tab.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TabItem {\n /** Tab label text — optional when icon is provided */\n label?: string;\n /** Optional Phosphor icon — rendered at 24px (line) or 20px (button) */\n icon?: React.ReactElement;\n /** Disabled — no interaction, muted color */\n disabled?: boolean;\n}\n\nexport interface TabProps {\n /** Tab definitions */\n items: TabItem[];\n /** Index of the currently active tab — controlled */\n activeIndex: number;\n /** Called with the new index when the user taps a tab */\n onChange: (index: number) => void;\n /**\n * Visual variant:\n * - 'line' → underline indicator, tabs stretch to fill width\n * - 'button' → pill/segmented container\n */\n variant?: 'line' | 'button';\n /** When true, wraps tabs in a horizontal ScrollView (for many tabs) */\n scrollable?: boolean;\n /** When true, truncates labels with \"…\" — defaults to false (full text, no wrap) */\n truncateLabels?: boolean;\n /** Forces the container to fill 100% of its parent width */\n fullWidth?: boolean;\n /** Each tab gets flex:1 and shares the container width equally — implies fullWidth */\n stretchItems?: boolean;\n /** Horizontal alignment of tabs within the container — defaults to 'left' */\n align?: 'left' | 'center' | 'right';\n /** Additional styles on the outer wrapper */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Tab = ({\n items,\n activeIndex,\n onChange,\n variant = 'line',\n scrollable = false,\n truncateLabels = false,\n fullWidth = false,\n stretchItems = false,\n align = 'left',\n style,\n testID,\n}: TabProps) => {\n const { colors } = useTheme();\n const t = colors.tabs;\n\n const justifyContent =\n align === 'center' ? 'center' :\n align === 'right' ? 'flex-end' :\n 'flex-start';\n\n // stretchItems implies full-width container\n const effectiveFullWidth = fullWidth || stretchItems;\n // items get flex:1 when stretchItems or truncateLabels (truncation needs a bounded width)\n const itemFlex = !scrollable && (stretchItems || truncateLabels);\n // autoSize: shrink to content when items are intrinsic width and container not forced full\n const sizeStyle = !itemFlex && !effectiveFullWidth ? styles.autoSize : undefined;\n\n // -----------------------------------------------------------------------\n // Line variant\n // -----------------------------------------------------------------------\n if (variant === 'line') {\n const tabs = items.map((item, index) => {\n const isActive = index === activeIndex;\n const isDisabled = item.disabled ?? false;\n\n const textColor = isDisabled\n ? t.line.disabled.text\n : isActive\n ? t.line.active.text\n : t.line.inactive.text;\n\n const iconElement = item.icon\n ? React.cloneElement(item.icon as React.ReactElement<{ color?: string; size?: number }>, {\n color: textColor,\n size: 24,\n })\n : null;\n\n return (\n <Pressable\n key={index}\n onPress={isDisabled ? undefined : () => onChange(index)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n style={[\n styles.lineTab,\n itemFlex && styles.lineTabFlex,\n isActive && {\n borderBottomWidth: 2,\n borderBottomColor: t.line.active.indicator,\n },\n ]}\n >\n {iconElement}\n {item.label != null && (\n <Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>\n )}\n </Pressable>\n );\n });\n\n const container = (\n <View\n style={[\n styles.lineContainer,\n { borderBottomColor: t.line.containerBorder, justifyContent },\n sizeStyle,\n style,\n ]}\n testID={testID}\n >\n {scrollable ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.lineScrollContent}\n >\n {tabs}\n </ScrollView>\n ) : (\n tabs\n )}\n </View>\n );\n\n return container;\n }\n\n // -----------------------------------------------------------------------\n // Button variant\n // -----------------------------------------------------------------------\n const tabs = items.map((item, index) => {\n const isActive = index === activeIndex;\n const isDisabled = item.disabled ?? false;\n\n const textColor = isDisabled\n ? t.button.disabled.text\n : isActive\n ? t.button.active.text\n : t.button.default.text;\n\n const iconElement = item.icon\n ? React.cloneElement(item.icon as React.ReactElement<{ color?: string; size?: number }>, {\n color: textColor,\n size: 20,\n })\n : null;\n\n return (\n <Pressable\n key={index}\n onPress={isDisabled ? undefined : () => onChange(index)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n style={[\n styles.buttonTab,\n itemFlex && styles.buttonTabFlex,\n isActive && {\n backgroundColor: t.button.active.background,\n borderWidth: 1,\n borderColor: t.button.active.border,\n },\n ]}\n >\n {iconElement}\n {item.label != null && (\n <Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>\n )}\n </Pressable>\n );\n });\n\n return (\n <View\n style={[\n styles.buttonContainer,\n {\n backgroundColor: t.button.container.background,\n borderColor: t.button.container.border,\n justifyContent,\n },\n sizeStyle,\n style,\n ]}\n testID={testID}\n >\n {scrollable ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.buttonScrollContent}\n >\n {tabs}\n </ScrollView>\n ) : (\n tabs\n )}\n </View>\n );\n};\n\n"]}
1
+ {"version":3,"file":"Tab.js","sourceRoot":"","sources":["../../../src/components/Tab/Tab.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tab — horizontal tab navigation bar.\n *\n * Two visual variants:\n * - 'line' → underline indicator. Full-width strip, each tab flex:1.\n * - 'button' → pill/segmented container. Active tab gets a card background.\n *\n * Controlled: activeIndex + onChange always required.\n * Optional horizontal ScrollView when `scrollable` is true.\n */\nimport React from 'react';\nimport {\n Pressable,\n ScrollView,\n Text,\n View,\n} from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { styles } from './Tab.styles';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport interface TabItem {\n /** Tab label text — optional when icon is provided */\n label?: string;\n /** Optional Phosphor icon — rendered at 20px */\n icon?: React.ReactElement;\n /** Disabled — no interaction, muted color */\n disabled?: boolean;\n}\n\nexport interface TabProps {\n /** Tab definitions */\n items: TabItem[];\n /** Index of the currently active tab — controlled */\n activeIndex: number;\n /** Called with the new index when the user taps a tab */\n onChange: (index: number) => void;\n /**\n * Visual variant:\n * - 'line' → underline indicator, tabs stretch to fill width\n * - 'button' → pill/segmented container\n */\n variant?: 'line' | 'button';\n /** When true, wraps tabs in a horizontal ScrollView (for many tabs) */\n scrollable?: boolean;\n /** Hides the container border/background — line: only active indicator visible, button: only active pill visible */\n showContainerBorder?: boolean;\n /** When true, truncates labels with \"…\" — defaults to false (full text, no wrap) */\n truncateLabels?: boolean;\n /** Forces the container to fill 100% of its parent width */\n fullWidth?: boolean;\n /** Each tab gets flex:1 and shares the container width equally — implies fullWidth */\n stretchItems?: boolean;\n /** Horizontal alignment of tabs within the container — defaults to 'left' */\n align?: 'left' | 'center' | 'right';\n /** Additional styles on the outer wrapper */\n style?: StyleProp<ViewStyle>;\n /** Test ID for automated testing */\n testID?: string;\n}\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport const Tab = ({\n items,\n activeIndex,\n onChange,\n variant = 'line',\n scrollable = false,\n showContainerBorder = true,\n truncateLabels = false,\n fullWidth = false,\n stretchItems = false,\n align = 'left',\n style,\n testID,\n}: TabProps) => {\n const { colors } = useTheme();\n const t = colors.tabs;\n\n const justifyContent =\n align === 'center' ? 'center' :\n align === 'right' ? 'flex-end' :\n 'flex-start';\n\n // stretchItems implies full-width container\n const effectiveFullWidth = fullWidth || stretchItems;\n // items get flex:1 when stretchItems or truncateLabels (truncation needs a bounded width)\n const itemFlex = !scrollable && (stretchItems || truncateLabels);\n // autoSize: shrink to content when items are intrinsic width and container not forced full\n const sizeStyle = !itemFlex && !effectiveFullWidth ? styles.autoSize : undefined;\n\n // -----------------------------------------------------------------------\n // Line variant\n // -----------------------------------------------------------------------\n if (variant === 'line') {\n const tabs = items.map((item, index) => {\n const isActive = index === activeIndex;\n const isDisabled = item.disabled ?? false;\n\n const textColor = isDisabled\n ? t.line.disabled.text\n : isActive\n ? t.line.active.text\n : t.line.inactive.text;\n\n const iconElement = item.icon\n ? React.cloneElement(item.icon as React.ReactElement<{ color?: string; size?: number }>, {\n color: textColor,\n size: 20,\n })\n : null;\n\n return (\n <Pressable\n key={index}\n onPress={isDisabled ? undefined : () => onChange(index)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n style={[\n styles.lineTab,\n itemFlex && styles.lineTabFlex,\n {\n borderBottomWidth: 2,\n borderBottomColor: isActive ? t.line.active.indicator : 'transparent',\n marginBottom: -1,\n },\n ]}\n >\n {iconElement}\n {item.label != null && (\n <Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>\n )}\n </Pressable>\n );\n });\n\n const container = (\n <View\n style={[\n styles.lineContainer,\n {\n borderBottomColor: showContainerBorder ? t.line.containerBorder : 'transparent',\n justifyContent,\n },\n sizeStyle,\n style,\n ]}\n testID={testID}\n >\n {scrollable ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.lineScrollContent}\n >\n {tabs}\n </ScrollView>\n ) : (\n tabs\n )}\n </View>\n );\n\n return container;\n }\n\n // -----------------------------------------------------------------------\n // Button variant\n // -----------------------------------------------------------------------\n const tabs = items.map((item, index) => {\n const isActive = index === activeIndex;\n const isDisabled = item.disabled ?? false;\n\n const textColor = isDisabled\n ? t.button.disabled.text\n : isActive\n ? t.button.active.text\n : t.button.default.text;\n\n const iconElement = item.icon\n ? React.cloneElement(item.icon as React.ReactElement<{ color?: string; size?: number }>, {\n color: textColor,\n size: 20,\n })\n : null;\n\n return (\n <Pressable\n key={index}\n onPress={isDisabled ? undefined : () => onChange(index)}\n accessibilityRole=\"tab\"\n accessibilityState={{ selected: isActive, disabled: isDisabled }}\n style={[\n styles.buttonTab,\n itemFlex && styles.buttonTabFlex,\n {\n borderWidth: 1,\n borderColor: isActive ? t.button.active.border : 'transparent',\n backgroundColor: isActive ? t.button.active.background : 'transparent',\n },\n ]}\n >\n {iconElement}\n {item.label != null && (\n <Text numberOfLines={truncateLabels ? 1 : undefined} style={[styles.label, { color: textColor }]}>{item.label}</Text>\n )}\n </Pressable>\n );\n });\n\n return (\n <View\n style={[\n styles.buttonContainer,\n {\n backgroundColor: showContainerBorder ? t.button.container.background : 'transparent',\n borderColor: showContainerBorder ? t.button.container.border : 'transparent',\n justifyContent,\n },\n sizeStyle,\n style,\n ]}\n testID={testID}\n >\n {scrollable ? (\n <ScrollView\n horizontal\n showsHorizontalScrollIndicator={false}\n contentContainerStyle={styles.buttonScrollContent}\n >\n {tabs}\n </ScrollView>\n ) : (\n tabs\n )}\n </View>\n );\n};\n\n"]}
@@ -27,11 +27,11 @@ export function Tag({ label, size = 'md', shape = 'pill', disabled = false, colo
27
27
  {iconLeft}
28
28
  </View>)}
29
29
 
30
- <Text style={[styles.label, { fontSize: sizeTokens.fontSize, color: resolvedText, fontFamily }]} numberOfLines={1}>
30
+ <Text style={[styles.label, { fontSize: sizeTokens.fontSize, lineHeight: sizeTokens.lineHeight, color: resolvedText, fontFamily }]} numberOfLines={1}>
31
31
  {label}
32
32
  </Text>
33
33
 
34
- {onClose != null && (<Pressable style={styles.closeHitZone} onPress={disabled ? undefined : onClose} accessibilityRole="button" accessibilityLabel="Remove tag" pointerEvents={disabled ? 'none' : 'auto'}>
34
+ {onClose != null && (<Pressable style={[styles.closeHitZone, { width: sizeTokens.closeHitZone, height: sizeTokens.closeHitZone }]} onPress={disabled ? undefined : onClose} accessibilityRole="button" accessibilityLabel="Remove tag" pointerEvents={disabled ? 'none' : 'auto'}>
35
35
  <X size={sizeTokens.closeSize} color={resolvedIcon} weight="bold"/>
36
36
  </Pressable>)}
37
37
  </View>);
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.js","sourceRoot":"","sources":["../../../src/components/Tag/Tag.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tag component — compact label badge with optional icon slot and close button.\n * Colors come from colors.tag.purple / colors.tag.disabled via useTheme().\n */\nimport { Pressable, Text, View } from 'react-native';\nimport { X } from 'phosphor-react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport type { TagProps } from './Tag.types';\nimport { getBorderRadius, getSizeTokens, styles } from './Tag.styles';\n\nexport function Tag({\n label,\n size = 'md',\n shape = 'pill',\n disabled = false,\n color,\n textColor,\n iconLeft,\n onClose,\n}: TagProps) {\n const { colors, fontFamily } = useTheme();\n const tagColors = disabled ? colors.tag.disabled : colors.tag.purple;\n\n const sizeTokens = getSizeTokens(size);\n const borderRadius = getBorderRadius(size, shape);\n\n // Custom color prop overrides background; textColor overrides text/icon\n const resolvedBg = !disabled && color ? color : tagColors.background;\n const resolvedText = !disabled && textColor ? textColor : tagColors.text;\n const resolvedIcon = !disabled && textColor ? textColor : tagColors.icon;\n\n const containerStyle = {\n paddingHorizontal: sizeTokens.paddingHorizontal,\n paddingVertical: sizeTokens.paddingVertical,\n gap: sizeTokens.gap,\n borderRadius,\n backgroundColor: resolvedBg,\n };\n\n return (\n <View style={[styles.row, containerStyle]}>\n {iconLeft != null && (\n <View style={{ width: sizeTokens.iconSize, height: sizeTokens.iconSize, alignItems: 'center', justifyContent: 'center' }}>\n {iconLeft}\n </View>\n )}\n\n <Text style={[styles.label, { fontSize: sizeTokens.fontSize, color: resolvedText, fontFamily }]} numberOfLines={1}>\n {label}\n </Text>\n\n {onClose != null && (\n <Pressable\n style={styles.closeHitZone}\n onPress={disabled ? undefined : onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Remove tag\"\n pointerEvents={disabled ? 'none' : 'auto'}\n >\n <X size={sizeTokens.closeSize} color={resolvedIcon} weight=\"bold\" />\n </Pressable>\n )}\n </View>\n );\n}\n\nexport default Tag;"]}
1
+ {"version":3,"file":"Tag.js","sourceRoot":"","sources":["../../../src/components/Tag/Tag.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Tag component — compact label badge with optional icon slot and close button.\n * Colors come from colors.tag.purple / colors.tag.disabled via useTheme().\n */\nimport { Pressable, Text, View } from 'react-native';\nimport { X } from 'phosphor-react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport type { TagProps } from './Tag.types';\nimport { getBorderRadius, getSizeTokens, styles } from './Tag.styles';\n\nexport function Tag({\n label,\n size = 'md',\n shape = 'pill',\n disabled = false,\n color,\n textColor,\n iconLeft,\n onClose,\n}: TagProps) {\n const { colors, fontFamily } = useTheme();\n const tagColors = disabled ? colors.tag.disabled : colors.tag.purple;\n\n const sizeTokens = getSizeTokens(size);\n const borderRadius = getBorderRadius(size, shape);\n\n // Custom color prop overrides background; textColor overrides text/icon\n const resolvedBg = !disabled && color ? color : tagColors.background;\n const resolvedText = !disabled && textColor ? textColor : tagColors.text;\n const resolvedIcon = !disabled && textColor ? textColor : tagColors.icon;\n\n const containerStyle = {\n paddingHorizontal: sizeTokens.paddingHorizontal,\n paddingVertical: sizeTokens.paddingVertical,\n gap: sizeTokens.gap,\n borderRadius,\n backgroundColor: resolvedBg,\n };\n\n return (\n <View style={[styles.row, containerStyle]}>\n {iconLeft != null && (\n <View style={{ width: sizeTokens.iconSize, height: sizeTokens.iconSize, alignItems: 'center', justifyContent: 'center' }}>\n {iconLeft}\n </View>\n )}\n\n <Text style={[styles.label, { fontSize: sizeTokens.fontSize, lineHeight: sizeTokens.lineHeight, color: resolvedText, fontFamily }]} numberOfLines={1}>\n {label}\n </Text>\n\n {onClose != null && (\n <Pressable\n style={[styles.closeHitZone, { width: sizeTokens.closeHitZone, height: sizeTokens.closeHitZone }]}\n onPress={disabled ? undefined : onClose}\n accessibilityRole=\"button\"\n accessibilityLabel=\"Remove tag\"\n pointerEvents={disabled ? 'none' : 'auto'}\n >\n <X size={sizeTokens.closeSize} color={resolvedIcon} weight=\"bold\" />\n </Pressable>\n )}\n </View>\n );\n}\n\nexport default Tag;"]}
@@ -3,8 +3,10 @@ interface SizeTokens {
3
3
  paddingHorizontal: number;
4
4
  paddingVertical: number;
5
5
  fontSize: number;
6
+ lineHeight: number;
6
7
  iconSize: number;
7
8
  closeSize: number;
9
+ closeHitZone: number;
8
10
  gap: number;
9
11
  }
10
12
  export declare function getSizeTokens(size: TagSize): SizeTokens;
@@ -21,10 +23,10 @@ export declare const styles: {
21
23
  fontFamily: string;
22
24
  fontWeight: "600";
23
25
  flexShrink: number;
26
+ includeFontPadding: false;
27
+ textAlignVertical: "center";
24
28
  };
25
29
  closeHitZone: {
26
- width: number;
27
- height: number;
28
30
  alignItems: "center";
29
31
  justifyContent: "center";
30
32
  };
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Tag/Tag.styles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,UAAU,UAAU;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,EAAE,MAAM,CAAC;CACb;AAkBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAEvD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAEtE;AAID,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CAmBjB,CAAC"}
1
+ {"version":3,"file":"Tag.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Tag/Tag.styles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAIrD,UAAU,UAAU;IAClB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;CACb;AAkBD,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAEvD;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,GAAG,MAAM,CAEtE;AAID,eAAO,MAAM,MAAM;;;;;;;;;;;;;;;;;;;CAmBjB,CAAC"}
@@ -1,10 +1,10 @@
1
1
  /** Layout tokens and static styles for the Tag component — colors come from useTheme() */
2
2
  import { StyleSheet } from 'react-native';
3
3
  const SIZE_TOKENS = {
4
- xs: { paddingHorizontal: 6, paddingVertical: 4, fontSize: 10, iconSize: 12, closeSize: 8, gap: 4 },
5
- sm: { paddingHorizontal: 8, paddingVertical: 4, fontSize: 12, iconSize: 14, closeSize: 10, gap: 4 },
6
- md: { paddingHorizontal: 10, paddingVertical: 6, fontSize: 13, iconSize: 16, closeSize: 12, gap: 4 },
7
- lg: { paddingHorizontal: 12, paddingVertical: 8, fontSize: 14, iconSize: 18, closeSize: 14, gap: 6 },
4
+ xs: { paddingHorizontal: 6, paddingVertical: 4, fontSize: 10, lineHeight: 12, iconSize: 12, closeSize: 8, closeHitZone: 12, gap: 4 },
5
+ sm: { paddingHorizontal: 8, paddingVertical: 4, fontSize: 12, lineHeight: 14, iconSize: 14, closeSize: 10, closeHitZone: 14, gap: 4 },
6
+ md: { paddingHorizontal: 10, paddingVertical: 6, fontSize: 13, lineHeight: 16, iconSize: 16, closeSize: 12, closeHitZone: 16, gap: 4 },
7
+ lg: { paddingHorizontal: 12, paddingVertical: 8, fontSize: 14, lineHeight: 18, iconSize: 18, closeSize: 14, closeHitZone: 18, gap: 6 },
8
8
  };
9
9
  const BORDER_RADIUS_ROUNDED = {
10
10
  xs: 2,
@@ -32,10 +32,10 @@ export const styles = StyleSheet.create({
32
32
  fontFamily: 'Urbanist',
33
33
  fontWeight: '600',
34
34
  flexShrink: 1,
35
+ includeFontPadding: false,
36
+ textAlignVertical: 'center',
35
37
  },
36
38
  closeHitZone: {
37
- width: 20,
38
- height: 20,
39
39
  alignItems: 'center',
40
40
  justifyContent: 'center',
41
41
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Tag.styles.js","sourceRoot":"","sources":["../../../src/components/Tag/Tag.styles.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAc1C,MAAM,WAAW,GAAgC;IAC/C,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAG,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAG,GAAG,EAAE,CAAC,EAAE;IACpG,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAG,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACpG,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACpG,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;CACrG,CAAC;AAEF,MAAM,qBAAqB,GAA4B;IACrD,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;CACN,CAAC;AAEF,kBAAkB;AAElB,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,KAAe;IAC5D,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,wBAAwB;AAExB,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE;QACH,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,aAAa;KAC3B;IACD,KAAK,EAAE;QACL,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,CAAC;KACd;IACD,YAAY,EAAE;QACZ,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CAAC","sourcesContent":["/** Layout tokens and static styles for the Tag component — colors come from useTheme() */\nimport { StyleSheet } from 'react-native';\nimport type { TagSize, TagShape } from './Tag.types';\n\n// --- Size tokens ---\n\ninterface SizeTokens {\n paddingHorizontal: number;\n paddingVertical: number;\n fontSize: number;\n iconSize: number;\n closeSize: number;\n gap: number;\n}\n\nconst SIZE_TOKENS: Record<TagSize, SizeTokens> = {\n xs: { paddingHorizontal: 6, paddingVertical: 4, fontSize: 10, iconSize: 12, closeSize: 8, gap: 4 },\n sm: { paddingHorizontal: 8, paddingVertical: 4, fontSize: 12, iconSize: 14, closeSize: 10, gap: 4 },\n md: { paddingHorizontal: 10, paddingVertical: 6, fontSize: 13, iconSize: 16, closeSize: 12, gap: 4 },\n lg: { paddingHorizontal: 12, paddingVertical: 8, fontSize: 14, iconSize: 18, closeSize: 14, gap: 6 },\n};\n\nconst BORDER_RADIUS_ROUNDED: Record<TagSize, number> = {\n xs: 2,\n sm: 4,\n md: 6,\n lg: 8,\n};\n\n// --- Helpers ---\n\nexport function getSizeTokens(size: TagSize): SizeTokens {\n return SIZE_TOKENS[size];\n}\n\nexport function getBorderRadius(size: TagSize, shape: TagShape): number {\n return shape === 'pill' ? 9999 : BORDER_RADIUS_ROUNDED[size];\n}\n\n// --- Static styles ---\n\nexport const styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n borderWidth: 1,\n borderColor: 'transparent',\n },\n label: {\n fontFamily: 'Urbanist',\n fontWeight: '600',\n flexShrink: 1,\n },\n closeHitZone: {\n width: 20,\n height: 20,\n alignItems: 'center',\n justifyContent: 'center',\n },\n});"]}
1
+ {"version":3,"file":"Tag.styles.js","sourceRoot":"","sources":["../../../src/components/Tag/Tag.styles.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAgB1C,MAAM,WAAW,GAAgC;IAC/C,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAG,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,CAAC,EAAG,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACtI,EAAE,EAAE,EAAE,iBAAiB,EAAE,CAAC,EAAG,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACtI,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;IACtI,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,eAAe,EAAE,CAAC,EAAE,QAAQ,EAAE,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,GAAG,EAAE,CAAC,EAAE;CACvI,CAAC;AAEF,MAAM,qBAAqB,GAA4B;IACrD,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;IACL,EAAE,EAAE,CAAC;CACN,CAAC;AAEF,kBAAkB;AAElB,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAa,EAAE,KAAe;IAC5D,OAAO,KAAK,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC;AAC/D,CAAC;AAED,wBAAwB;AAExB,MAAM,CAAC,MAAM,MAAM,GAAG,UAAU,CAAC,MAAM,CAAC;IACtC,GAAG,EAAE;QACH,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,SAAS,EAAE,YAAY;QACvB,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,aAAa;KAC3B;IACD,KAAK,EAAE;QACL,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,KAAK;QACjB,UAAU,EAAE,CAAC;QACb,kBAAkB,EAAE,KAAK;QACzB,iBAAiB,EAAE,QAAQ;KAC5B;IACD,YAAY,EAAE;QACZ,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;CACF,CAAC,CAAC","sourcesContent":["/** Layout tokens and static styles for the Tag component — colors come from useTheme() */\nimport { StyleSheet } from 'react-native';\nimport type { TagSize, TagShape } from './Tag.types';\n\n// --- Size tokens ---\n\ninterface SizeTokens {\n paddingHorizontal: number;\n paddingVertical: number;\n fontSize: number;\n lineHeight: number;\n iconSize: number;\n closeSize: number;\n closeHitZone: number;\n gap: number;\n}\n\nconst SIZE_TOKENS: Record<TagSize, SizeTokens> = {\n xs: { paddingHorizontal: 6, paddingVertical: 4, fontSize: 10, lineHeight: 12, iconSize: 12, closeSize: 8, closeHitZone: 12, gap: 4 },\n sm: { paddingHorizontal: 8, paddingVertical: 4, fontSize: 12, lineHeight: 14, iconSize: 14, closeSize: 10, closeHitZone: 14, gap: 4 },\n md: { paddingHorizontal: 10, paddingVertical: 6, fontSize: 13, lineHeight: 16, iconSize: 16, closeSize: 12, closeHitZone: 16, gap: 4 },\n lg: { paddingHorizontal: 12, paddingVertical: 8, fontSize: 14, lineHeight: 18, iconSize: 18, closeSize: 14, closeHitZone: 18, gap: 6 },\n};\n\nconst BORDER_RADIUS_ROUNDED: Record<TagSize, number> = {\n xs: 2,\n sm: 4,\n md: 6,\n lg: 8,\n};\n\n// --- Helpers ---\n\nexport function getSizeTokens(size: TagSize): SizeTokens {\n return SIZE_TOKENS[size];\n}\n\nexport function getBorderRadius(size: TagSize, shape: TagShape): number {\n return shape === 'pill' ? 9999 : BORDER_RADIUS_ROUNDED[size];\n}\n\n// --- Static styles ---\n\nexport const styles = StyleSheet.create({\n row: {\n flexDirection: 'row',\n alignItems: 'center',\n alignSelf: 'flex-start',\n borderWidth: 1,\n borderColor: 'transparent',\n },\n label: {\n fontFamily: 'Urbanist',\n fontWeight: '600',\n flexShrink: 1,\n includeFontPadding: false,\n textAlignVertical: 'center',\n },\n closeHitZone: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n});"]}
@@ -1,19 +1,21 @@
1
- /** Top navigation bar — left icon (display only) + title grouped left, right Button pushed to the far right */
1
+ /** Top navigation bar — left ghost button + title grouped left, right Buttons pushed to the far right */
2
2
  import React from 'react';
3
- import { type Icon } from 'phosphor-react-native';
3
+ import type { ButtonVariant } from '../../Button';
4
4
  export type GeneralNavAction = {
5
5
  /** Icon element to pass to Button's iconLeft prop */
6
6
  icon: React.ReactElement;
7
7
  onPress: () => void;
8
+ /** Button variant — defaults to 'ghost' for left, 'ghost' for right */
9
+ variant?: ButtonVariant;
8
10
  accessibilityLabel?: string;
9
11
  };
10
12
  export interface GeneralNavProps {
11
13
  /** Page title — always required */
12
14
  title: string;
13
- /** Optional left icondisplay only, no press handler */
14
- leftIcon?: Icon;
15
+ /** Optional left actionrendered as a ghost icon-only Button */
16
+ leftIcon?: GeneralNavAction;
15
17
  /** One or two right actions — each rendered as a ghost icon-only Button */
16
18
  rightActions?: GeneralNavAction[];
17
19
  }
18
- export declare function GeneralNav({ title, leftIcon: LeftIconProp, rightActions, }: GeneralNavProps): React.JSX.Element;
20
+ export declare function GeneralNav({ title, leftIcon, rightActions, }: GeneralNavProps): React.JSX.Element;
19
21
  //# sourceMappingURL=GeneralNav.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralNav.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/GeneralNav/GeneralNav.tsx"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAiB,KAAK,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAKjE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,IAAI,CAAC;IAChB,2EAA2E;IAC3E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EAAE,YAAY,EACtB,YAAY,GACb,EAAE,eAAe,qBAoCjB"}
1
+ {"version":3,"file":"GeneralNav.d.ts","sourceRoot":"","sources":["../../../../src/components/navigation/GeneralNav/GeneralNav.tsx"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,KAAK,MAAM,OAAO,CAAC;AAI1B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAGlD,MAAM,MAAM,gBAAgB,GAAG;IAC7B,qDAAqD;IACrD,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC;IACzB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,uEAAuE;IACvE,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF,MAAM,WAAW,eAAe;IAC9B,mCAAmC;IACnC,KAAK,EAAE,MAAM,CAAC;IACd,kEAAkE;IAClE,QAAQ,CAAC,EAAE,gBAAgB,CAAC;IAC5B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,gBAAgB,EAAE,CAAC;CACnC;AAED,wBAAgB,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,YAAY,GACb,EAAE,eAAe,qBAyCjB"}
@@ -1,18 +1,16 @@
1
- /** Top navigation bar — left icon (display only) + title grouped left, right Button pushed to the far right */
1
+ /** Top navigation bar — left ghost button + title grouped left, right Buttons pushed to the far right */
2
2
  import React from 'react';
3
3
  import { View, Text } from 'react-native';
4
- import { CaretLeftIcon } from 'phosphor-react-native';
5
4
  import { useTheme } from '../../../context/ThemeContext';
6
5
  import { Button } from '../../Button';
7
6
  import { styles } from './GeneralNav.styles';
8
- export function GeneralNav({ title, leftIcon: LeftIconProp, rightActions, }) {
7
+ export function GeneralNav({ title, leftIcon, rightActions, }) {
9
8
  const { colors, fontFamily } = useTheme();
10
9
  const nav = colors.generalNav;
11
- const LeftIcon = LeftIconProp ?? CaretLeftIcon;
12
10
  return (<View style={[styles.container, { backgroundColor: colors.background.primary }]}>
13
- {/* Left group: icon (display only) + title — takes all available space */}
11
+ {/* Left group: ghost button + title — takes all available space */}
14
12
  <View style={styles.leftGroup}>
15
- {LeftIconProp && (<LeftIcon size={24} weight="bold" color={nav.navTextIcons}/>)}
13
+ {leftIcon && (<Button variant={leftIcon.variant ?? 'ghost'} content="icon-only-rounded" size="M" iconLeft={leftIcon.icon} onPress={leftIcon.onPress} accessibilityLabel={leftIcon.accessibilityLabel}/>)}
16
14
  <Text style={[styles.title, { color: nav.navTextIcons, fontFamily }]} numberOfLines={1}>
17
15
  {title}
18
16
  </Text>
@@ -20,7 +18,7 @@ export function GeneralNav({ title, leftIcon: LeftIconProp, rightActions, }) {
20
18
 
21
19
  {/* Right actions — ghost icon-only Buttons, pushed to far right by leftGroup flex: 1 */}
22
20
  {rightActions && rightActions.length > 0 && (<View style={styles.rightGroup}>
23
- {rightActions.map((action, index) => (<Button key={index} variant="tertiary" content="icon-only-rounded" size="M" iconLeft={action.icon} onPress={action.onPress} accessibilityLabel={action.accessibilityLabel}/>))}
21
+ {rightActions.map((action, index) => (<Button key={index} variant={action.variant ?? 'ghost'} content="icon-only-rounded" size="M" iconLeft={action.icon} onPress={action.onPress} accessibilityLabel={action.accessibilityLabel}/>))}
24
22
  </View>)}
25
23
  </View>);
26
24
  }
@@ -1 +1 @@
1
- {"version":3,"file":"GeneralNav.js","sourceRoot":"","sources":["../../../../src/components/navigation/GeneralNav/GeneralNav.tsx"],"names":[],"mappings":"AAAA,+GAA+G;AAC/G,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAa,MAAM,uBAAuB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAkB7C,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EAAE,YAAY,EACtB,YAAY,GACI;IAChB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;IAE9B,MAAM,QAAQ,GAAG,YAAY,IAAI,aAAa,CAAC;IAE/C,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAC9E;MAAA,CAAC,yEAAyE,CAC1E;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;QAAA,CAAC,YAAY,IAAI,CACf,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,EAAG,CAC9D,CACD;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACrF;UAAA,CAAC,KAAK,CACR;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,IAAI,CAEN;;MAAA,CAAC,uFAAuF,CACxF;MAAA,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAC1C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAC7B;UAAA,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACnC,CAAC,MAAM,CACL,GAAG,CAAC,CAAC,KAAK,CAAC,CACX,OAAO,CAAC,UAAU,CAClB,OAAO,CAAC,mBAAmB,CAC3B,IAAI,CAAC,GAAG,CACR,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CACtB,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACxB,kBAAkB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAC9C,CACH,CAAC,CACJ;QAAA,EAAE,IAAI,CAAC,CACR,CACH;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["/** Top navigation bar — left icon (display only) + title grouped left, right Button pushed to the far right */\nimport React from 'react';\nimport { View, Text } from 'react-native';\nimport { CaretLeftIcon, type Icon } from 'phosphor-react-native';\nimport { useTheme } from '../../../context/ThemeContext';\nimport { Button } from '../../Button';\nimport { styles } from './GeneralNav.styles';\n\nexport type GeneralNavAction = {\n /** Icon element to pass to Button's iconLeft prop */\n icon: React.ReactElement;\n onPress: () => void;\n accessibilityLabel?: string;\n};\n\nexport interface GeneralNavProps {\n /** Page title — always required */\n title: string;\n /** Optional left icondisplay only, no press handler */\n leftIcon?: Icon;\n /** One or two right actions — each rendered as a ghost icon-only Button */\n rightActions?: GeneralNavAction[];\n}\n\nexport function GeneralNav({\n title,\n leftIcon: LeftIconProp,\n rightActions,\n}: GeneralNavProps) {\n const { colors, fontFamily } = useTheme();\n const nav = colors.generalNav;\n\n const LeftIcon = LeftIconProp ?? CaretLeftIcon;\n\n return (\n <View style={[styles.container, { backgroundColor: colors.background.primary }]}>\n {/* Left group: icon (display only) + title — takes all available space */}\n <View style={styles.leftGroup}>\n {LeftIconProp && (\n <LeftIcon size={24} weight=\"bold\" color={nav.navTextIcons} />\n )}\n <Text style={[styles.title, { color: nav.navTextIcons, fontFamily }]} numberOfLines={1}>\n {title}\n </Text>\n </View>\n\n {/* Right actions — ghost icon-only Buttons, pushed to far right by leftGroup flex: 1 */}\n {rightActions && rightActions.length > 0 && (\n <View style={styles.rightGroup}>\n {rightActions.map((action, index) => (\n <Button\n key={index}\n variant=\"tertiary\"\n content=\"icon-only-rounded\"\n size=\"M\"\n iconLeft={action.icon}\n onPress={action.onPress}\n accessibilityLabel={action.accessibilityLabel}\n />\n ))}\n </View>\n )}\n </View>\n );\n}"]}
1
+ {"version":3,"file":"GeneralNav.js","sourceRoot":"","sources":["../../../../src/components/navigation/GeneralNav/GeneralNav.tsx"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAoB7C,MAAM,UAAU,UAAU,CAAC,EACzB,KAAK,EACL,QAAQ,EACR,YAAY,GACI;IAChB,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;IAE9B,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,eAAe,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAC9E;MAAA,CAAC,kEAAkE,CACnE;MAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAC5B;QAAA,CAAC,QAAQ,IAAI,CACX,CAAC,MAAM,CACL,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,IAAI,OAAO,CAAC,CACrC,OAAO,CAAC,mBAAmB,CAC3B,IAAI,CAAC,GAAG,CACR,QAAQ,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CACxB,OAAO,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAC1B,kBAAkB,CAAC,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAChD,CACH,CACD;QAAA,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,YAAY,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CACrF;UAAA,CAAC,KAAK,CACR;QAAA,EAAE,IAAI,CACR;MAAA,EAAE,IAAI,CAEN;;MAAA,CAAC,uFAAuF,CACxF;MAAA,CAAC,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,IAAI,CAC1C,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAC7B;UAAA,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC,CACnC,CAAC,MAAM,CACL,GAAG,CAAC,CAAC,KAAK,CAAC,CACX,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,IAAI,OAAO,CAAC,CACnC,OAAO,CAAC,mBAAmB,CAC3B,IAAI,CAAC,GAAG,CACR,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CACtB,OAAO,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACxB,kBAAkB,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,EAC9C,CACH,CAAC,CACJ;QAAA,EAAE,IAAI,CAAC,CACR,CACH;IAAA,EAAE,IAAI,CAAC,CACR,CAAC;AACJ,CAAC","sourcesContent":["/** Top navigation bar — left ghost button + title grouped left, right Buttons pushed to the far right */\nimport React from 'react';\nimport { View, Text } from 'react-native';\nimport { useTheme } from '../../../context/ThemeContext';\nimport { Button } from '../../Button';\nimport type { ButtonVariant } from '../../Button';\nimport { styles } from './GeneralNav.styles';\n\nexport type GeneralNavAction = {\n /** Icon element to pass to Button's iconLeft prop */\n icon: React.ReactElement;\n onPress: () => void;\n /** Button variant — defaults to 'ghost' for left, 'ghost' for right */\n variant?: ButtonVariant;\n accessibilityLabel?: string;\n};\n\nexport interface GeneralNavProps {\n /** Page title — always required */\n title: string;\n /** Optional left actionrendered as a ghost icon-only Button */\n leftIcon?: GeneralNavAction;\n /** One or two right actions — each rendered as a ghost icon-only Button */\n rightActions?: GeneralNavAction[];\n}\n\nexport function GeneralNav({\n title,\n leftIcon,\n rightActions,\n}: GeneralNavProps) {\n const { colors, fontFamily } = useTheme();\n const nav = colors.generalNav;\n\n return (\n <View style={[styles.container, { backgroundColor: colors.background.primary }]}>\n {/* Left group: ghost button + title — takes all available space */}\n <View style={styles.leftGroup}>\n {leftIcon && (\n <Button\n variant={leftIcon.variant ?? 'ghost'}\n content=\"icon-only-rounded\"\n size=\"M\"\n iconLeft={leftIcon.icon}\n onPress={leftIcon.onPress}\n accessibilityLabel={leftIcon.accessibilityLabel}\n />\n )}\n <Text style={[styles.title, { color: nav.navTextIcons, fontFamily }]} numberOfLines={1}>\n {title}\n </Text>\n </View>\n\n {/* Right actions — ghost icon-only Buttons, pushed to far right by leftGroup flex: 1 */}\n {rightActions && rightActions.length > 0 && (\n <View style={styles.rightGroup}>\n {rightActions.map((action, index) => (\n <Button\n key={index}\n variant={action.variant ?? 'ghost'}\n content=\"icon-only-rounded\"\n size=\"M\"\n iconLeft={action.icon}\n onPress={action.onPress}\n accessibilityLabel={action.accessibilityLabel}\n />\n ))}\n </View>\n )}\n </View>\n );\n}"]}
package/build/index.d.ts CHANGED
@@ -62,6 +62,8 @@ export { ColorPicker } from './components/ColorPicker';
62
62
  export type { ColorPickerProps } from './components/ColorPicker';
63
63
  export { ListItem } from './components/ListItem';
64
64
  export type { ListItemProps } from './components/ListItem';
65
+ export { ListGroup } from './components/ListGroup';
66
+ export type { ListGroupProps, ListGroupItem } from './components/ListGroup';
65
67
  export { FilterNav } from './components/FilterNav';
66
68
  export type { FilterNavProps, FilterNavItem } from './components/FilterNav';
67
69
  export { ImgPicker } from './components/ImgPicker';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -34,6 +34,7 @@ export { Switch } from './components/Switch';
34
34
  export { Tab } from './components/Tab';
35
35
  export { ColorPicker } from './components/ColorPicker';
36
36
  export { ListItem } from './components/ListItem';
37
+ export { ListGroup } from './components/ListGroup';
37
38
  export { FilterNav } from './components/FilterNav';
38
39
  export { ImgPicker } from './components/ImgPicker';
39
40
  export { PhotoCard } from './components/PhotoCard';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAsChD,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAGzD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAOtD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA","sourcesContent":["// Public API — re-export all components, types, and utilities from this file\n\n// Theme\nexport { ThemeProvider, useTheme } from './context/ThemeContext'\nexport { lightTokens } from './theme/tokens/light'\nexport { darkTokens } from './theme/tokens/dark'\nexport type {\n ColorMode,\n ColorSchemeTokens,\n ColorTheme,\n BackgroundTokens,\n TextTokens,\n BorderTokens,\n ShadowTokens,\n StatusTokens,\n ButtonTokens,\n InteractiveVariantTokens,\n InteractiveStateTokens,\n InputTokens,\n InputStateTokens,\n FilterChipTokens,\n FilterChipStateTokens,\n TabBarTokens,\n CanvaTokens,\n GeneralNavTokens,\n BottomSheetTokens,\n ProgressStepTokens,\n CheckboxTokens,\n CheckboxVariantTokens,\n CheckboxStateTokens,\n SwatchTokens,\n SpinnerTokens,\n SearchBarTokens,\n SearchBarStateTokens,\n ListItemTokens,\n ListItemStateTokens,\n MediaPickerTokens,\n MediaPickerPhotoCardTokens,\n MediaPickerFileCardTokens,\n MapPinTokens,\n MapPinStateTokens,\n} from './theme/type'\n\n// Components\nexport { Card } from './components/Card'\nexport type { CardProps } from './components/Card'\n\nexport { InlineInfo } from './components/InlineInfo'\nexport type { InlineInfoProps, InlineInfoVariant, InlineInfoAction } from './components/InlineInfo'\n\nexport { CardEquip } from './components/CardEquip'\nexport type { CardEquipProps, CardEquipTag } from './components/CardEquip'\n\nexport { CardProfile } from './components/CardProfile'\nexport type { CardProfileProps, CardProfileLocationType } from './components/CardProfile'\n\nexport { RadioButton } from './components/RadioButton'\nexport type { RadioButtonProps, RadioButtonSize } from './components/RadioButton'\n\nexport { AssociationTag } from './components/AssociationTag'\nexport type { AssociationTagProps } from './components/AssociationTag'\n\nexport { Button } from './components/Button'\nexport type { ButtonProps, ButtonVariant, ButtonSize, ButtonContent } from './components/Button'\n\nexport { ButtonAction } from './components/ButtonAction'\nexport type { ButtonActionProps, ButtonActionSize } from './components/ButtonAction'\n\nexport { ButtonMap } from './components/ButtonMap'\nexport type { ButtonMapProps } from './components/ButtonMap'\n\nexport { ButtonMenu } from './components/ButtonMenu'\nexport type { ButtonMenuProps, ButtonMenuState } from './components/ButtonMenu'\n\nexport { FilterChip } from './components/FilterChip'\nexport type { FilterChipProps, FilterChipState, FilterChipType } from './components/FilterChip'\n\nexport { Input } from './components/Input'\nexport type { InputProps, InputVariant, InputSize, InputState } from './components/Input'\n\nexport { Tag } from './components/Tag'\nexport type { TagProps, TagSize, TagShape } from './components/Tag'\n\nexport { Calendar, CALENDAR_FR, CALENDAR_EN } from './components/Calendar'\nexport type { CalendarProps, CalendarDayProps, DayState, CalendarI18n } from './components/Calendar'\n\nexport { PageNav } from './components/navigation/PageNav'\nexport type { PageNavProps } from './components/navigation/PageNav'\n\nexport { TabBar } from './components/navigation/TabBar'\nexport type { TabBarProps, TabBarItem } from './components/navigation/TabBar'\n\nexport { MobileCanva } from './components/navigation/MobileCanva'\nexport type { MobileCanvaProps } from './components/navigation/MobileCanva'\n\nexport { GeneralNav } from './components/navigation/GeneralNav'\nexport type { GeneralNavProps } from './components/navigation/GeneralNav'\n\nexport { BottomSheet } from './components/BottomSheet'\nexport type { BottomSheetProps } from './components/BottomSheet'\n\nexport { ProgressStep } from './components/ProgressStep'\nexport type { ProgressStepProps } from './components/ProgressStep'\n\nexport { Stepper } from './components/Stepper'\nexport type { StepperProps } from './components/Stepper'\n\nexport { StepSheet } from './components/StepSheet'\nexport type { StepSheetProps } from './components/StepSheet'\n\nexport { Checkbox } from './components/Checkbox'\nexport type { CheckboxProps, CheckboxSize } from './components/Checkbox'\n\nexport { ColorSwatch } from './components/ColorSwatch'\nexport type { ColorSwatchProps } from './components/ColorSwatch'\n\nexport { Spinner } from './components/Spinner'\nexport type { SpinnerProps, SpinnerSize } from './components/Spinner'\n\nexport { SearchBar } from './components/SearchBar'\nexport type { SearchBarProps } from './components/SearchBar'\nexport { Switch } from './components/Switch'\nexport type { SwitchProps, SwitchSize } from './components/Switch'\nexport { Tab } from './components/Tab'\nexport type { TabProps, TabItem } from './components/Tab'\nexport { ColorPicker } from './components/ColorPicker'\nexport type { ColorPickerProps } from './components/ColorPicker'\nexport { ListItem } from './components/ListItem'\nexport type { ListItemProps } from './components/ListItem'\nexport { FilterNav } from './components/FilterNav'\nexport type { FilterNavProps, FilterNavItem } from './components/FilterNav'\nexport { ImgPicker } from './components/ImgPicker'\nexport type { ImgPickerProps, ImgPickerImageItem } from './components/ImgPicker'\nexport { PhotoCard } from './components/PhotoCard'\nexport type { PhotoCardProps } from './components/PhotoCard'\nexport { FileCard } from './components/FileCard'\nexport type { FileCardProps } from './components/FileCard'\nexport { MediaPicker } from './components/MediaPicker'\nexport type {\n MediaPickerProps,\n MediaPickerMode,\n MediaPickerImageItem,\n MediaPickerFileItem,\n} from './components/MediaPicker'\nexport { MapPin, MAP_PIN_HEIGHT, MAP_PIN_SIMPLE_WIDTH } from './components/MapPin'\nexport type { MapPinProps, MapPinState, MapPinType, MapPinLabelVariant } from './components/MapPin'\nexport { Cluster } from './components/Cluster'\nexport type { ClusterProps, ClusterSize } from './components/Cluster'\n\nexport { BottomSheetProvider, useBottomSheet } from './context/BottomSheetContext'\nexport type { BottomSheetOptions, BottomSheetContextValue } from './context/BottomSheetContext'\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAE7E,QAAQ;AACR,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAA;AAChE,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAsChD,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAA;AAGxC,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAG5D,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAG5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAA;AAGpD,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAA;AAG1C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAGtC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAG1E,OAAO,EAAE,OAAO,EAAE,MAAM,iCAAiC,CAAA;AAGzD,OAAO,EAAE,MAAM,EAAE,MAAM,gCAAgC,CAAA;AAGvD,OAAO,EAAE,WAAW,EAAE,MAAM,qCAAqC,CAAA;AAGjE,OAAO,EAAE,UAAU,EAAE,MAAM,oCAAoC,CAAA;AAG/D,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAGxD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAGlD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAGhD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9C,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAA;AAE5C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAEtC,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAEtD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAA;AAElD,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAA;AAEhD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAA;AAOtD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAA;AAElF,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAG9C,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA","sourcesContent":["// Public API — re-export all components, types, and utilities from this file\n\n// Theme\nexport { ThemeProvider, useTheme } from './context/ThemeContext'\nexport { lightTokens } from './theme/tokens/light'\nexport { darkTokens } from './theme/tokens/dark'\nexport type {\n ColorMode,\n ColorSchemeTokens,\n ColorTheme,\n BackgroundTokens,\n TextTokens,\n BorderTokens,\n ShadowTokens,\n StatusTokens,\n ButtonTokens,\n InteractiveVariantTokens,\n InteractiveStateTokens,\n InputTokens,\n InputStateTokens,\n FilterChipTokens,\n FilterChipStateTokens,\n TabBarTokens,\n CanvaTokens,\n GeneralNavTokens,\n BottomSheetTokens,\n ProgressStepTokens,\n CheckboxTokens,\n CheckboxVariantTokens,\n CheckboxStateTokens,\n SwatchTokens,\n SpinnerTokens,\n SearchBarTokens,\n SearchBarStateTokens,\n ListItemTokens,\n ListItemStateTokens,\n MediaPickerTokens,\n MediaPickerPhotoCardTokens,\n MediaPickerFileCardTokens,\n MapPinTokens,\n MapPinStateTokens,\n} from './theme/type'\n\n// Components\nexport { Card } from './components/Card'\nexport type { CardProps } from './components/Card'\n\nexport { InlineInfo } from './components/InlineInfo'\nexport type { InlineInfoProps, InlineInfoVariant, InlineInfoAction } from './components/InlineInfo'\n\nexport { CardEquip } from './components/CardEquip'\nexport type { CardEquipProps, CardEquipTag } from './components/CardEquip'\n\nexport { CardProfile } from './components/CardProfile'\nexport type { CardProfileProps, CardProfileLocationType } from './components/CardProfile'\n\nexport { RadioButton } from './components/RadioButton'\nexport type { RadioButtonProps, RadioButtonSize } from './components/RadioButton'\n\nexport { AssociationTag } from './components/AssociationTag'\nexport type { AssociationTagProps } from './components/AssociationTag'\n\nexport { Button } from './components/Button'\nexport type { ButtonProps, ButtonVariant, ButtonSize, ButtonContent } from './components/Button'\n\nexport { ButtonAction } from './components/ButtonAction'\nexport type { ButtonActionProps, ButtonActionSize } from './components/ButtonAction'\n\nexport { ButtonMap } from './components/ButtonMap'\nexport type { ButtonMapProps } from './components/ButtonMap'\n\nexport { ButtonMenu } from './components/ButtonMenu'\nexport type { ButtonMenuProps, ButtonMenuState } from './components/ButtonMenu'\n\nexport { FilterChip } from './components/FilterChip'\nexport type { FilterChipProps, FilterChipState, FilterChipType } from './components/FilterChip'\n\nexport { Input } from './components/Input'\nexport type { InputProps, InputVariant, InputSize, InputState } from './components/Input'\n\nexport { Tag } from './components/Tag'\nexport type { TagProps, TagSize, TagShape } from './components/Tag'\n\nexport { Calendar, CALENDAR_FR, CALENDAR_EN } from './components/Calendar'\nexport type { CalendarProps, CalendarDayProps, DayState, CalendarI18n } from './components/Calendar'\n\nexport { PageNav } from './components/navigation/PageNav'\nexport type { PageNavProps } from './components/navigation/PageNav'\n\nexport { TabBar } from './components/navigation/TabBar'\nexport type { TabBarProps, TabBarItem } from './components/navigation/TabBar'\n\nexport { MobileCanva } from './components/navigation/MobileCanva'\nexport type { MobileCanvaProps } from './components/navigation/MobileCanva'\n\nexport { GeneralNav } from './components/navigation/GeneralNav'\nexport type { GeneralNavProps } from './components/navigation/GeneralNav'\n\nexport { BottomSheet } from './components/BottomSheet'\nexport type { BottomSheetProps } from './components/BottomSheet'\n\nexport { ProgressStep } from './components/ProgressStep'\nexport type { ProgressStepProps } from './components/ProgressStep'\n\nexport { Stepper } from './components/Stepper'\nexport type { StepperProps } from './components/Stepper'\n\nexport { StepSheet } from './components/StepSheet'\nexport type { StepSheetProps } from './components/StepSheet'\n\nexport { Checkbox } from './components/Checkbox'\nexport type { CheckboxProps, CheckboxSize } from './components/Checkbox'\n\nexport { ColorSwatch } from './components/ColorSwatch'\nexport type { ColorSwatchProps } from './components/ColorSwatch'\n\nexport { Spinner } from './components/Spinner'\nexport type { SpinnerProps, SpinnerSize } from './components/Spinner'\n\nexport { SearchBar } from './components/SearchBar'\nexport type { SearchBarProps } from './components/SearchBar'\nexport { Switch } from './components/Switch'\nexport type { SwitchProps, SwitchSize } from './components/Switch'\nexport { Tab } from './components/Tab'\nexport type { TabProps, TabItem } from './components/Tab'\nexport { ColorPicker } from './components/ColorPicker'\nexport type { ColorPickerProps } from './components/ColorPicker'\nexport { ListItem } from './components/ListItem'\nexport type { ListItemProps } from './components/ListItem'\nexport { ListGroup } from './components/ListGroup'\nexport type { ListGroupProps, ListGroupItem } from './components/ListGroup'\nexport { FilterNav } from './components/FilterNav'\nexport type { FilterNavProps, FilterNavItem } from './components/FilterNav'\nexport { ImgPicker } from './components/ImgPicker'\nexport type { ImgPickerProps, ImgPickerImageItem } from './components/ImgPicker'\nexport { PhotoCard } from './components/PhotoCard'\nexport type { PhotoCardProps } from './components/PhotoCard'\nexport { FileCard } from './components/FileCard'\nexport type { FileCardProps } from './components/FileCard'\nexport { MediaPicker } from './components/MediaPicker'\nexport type {\n MediaPickerProps,\n MediaPickerMode,\n MediaPickerImageItem,\n MediaPickerFileItem,\n} from './components/MediaPicker'\nexport { MapPin, MAP_PIN_HEIGHT, MAP_PIN_SIMPLE_WIDTH } from './components/MapPin'\nexport type { MapPinProps, MapPinState, MapPinType, MapPinLabelVariant } from './components/MapPin'\nexport { Cluster } from './components/Cluster'\nexport type { ClusterProps, ClusterSize } from './components/Cluster'\n\nexport { BottomSheetProvider, useBottomSheet } from './context/BottomSheetContext'\nexport type { BottomSheetOptions, BottomSheetContextValue } from './context/BottomSheetContext'\n"]}
@@ -258,13 +258,13 @@ export const darkTokens = {
258
258
  // Add new component tokens below
259
259
  // -------------------------------------------------------------------------
260
260
  toggle: {
261
- trackOff: 'rgba(255,255,255,0.2)',
261
+ trackOff: 'rgba(115,116,153,0.7)',
262
262
  trackOn: '#ffffff',
263
- thumbOff: '#ffffff',
263
+ thumbOff: '#28242e',
264
264
  thumbOn: '#28242e',
265
- trackOffDisabled: 'rgba(255,255,255,0.08)',
266
- trackOnDisabled: 'rgba(255,255,255,0.18)',
267
- thumbDisabled: 'rgba(255,255,255,0.4)',
265
+ trackOffDisabled: 'rgba(255,255,255,0.3)',
266
+ trackOnDisabled: 'rgba(255,255,255,0.3)',
267
+ thumbDisabled: '#28242e',
268
268
  label: '#ffffff',
269
269
  labelDisabled: '#ffffff4d',
270
270
  },