@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.
- package/README.md +3 -2
- package/build/components/Button/Button.js +1 -1
- package/build/components/Button/Button.js.map +1 -1
- package/build/components/ButtonMenu/ButtonMenu.js +2 -2
- package/build/components/ButtonMenu/ButtonMenu.js.map +1 -1
- package/build/components/Calendar/Calendar.js +1 -1
- package/build/components/Calendar/Calendar.js.map +1 -1
- package/build/components/Calendar/Calendar.styles.d.ts +11 -8
- package/build/components/Calendar/Calendar.styles.d.ts.map +1 -1
- package/build/components/Calendar/Calendar.styles.js +13 -10
- package/build/components/Calendar/Calendar.styles.js.map +1 -1
- package/build/components/Calendar/CalendarLegend.js +1 -1
- package/build/components/Calendar/CalendarLegend.js.map +1 -1
- package/build/components/Checkbox/Checkbox.d.ts +2 -2
- package/build/components/Checkbox/Checkbox.d.ts.map +1 -1
- package/build/components/Checkbox/Checkbox.js +4 -5
- package/build/components/Checkbox/Checkbox.js.map +1 -1
- package/build/components/FilterChip/FilterChip.d.ts.map +1 -1
- package/build/components/FilterChip/FilterChip.js +45 -16
- package/build/components/FilterChip/FilterChip.js.map +1 -1
- package/build/components/Input/Input.d.ts.map +1 -1
- package/build/components/Input/Input.js +5 -6
- package/build/components/Input/Input.js.map +1 -1
- package/build/components/Input/Input.styles.d.ts +6 -1
- package/build/components/Input/Input.styles.d.ts.map +1 -1
- package/build/components/Input/Input.styles.js +6 -1
- package/build/components/Input/Input.styles.js.map +1 -1
- package/build/components/ListGroup/ListGroup.d.ts +24 -0
- package/build/components/ListGroup/ListGroup.d.ts.map +1 -0
- package/build/components/ListGroup/ListGroup.js +44 -0
- package/build/components/ListGroup/ListGroup.js.map +1 -0
- package/build/components/ListGroup/index.d.ts +3 -0
- package/build/components/ListGroup/index.d.ts.map +1 -0
- package/build/components/ListGroup/index.js +2 -0
- package/build/components/ListGroup/index.js.map +1 -0
- package/build/components/ListItem/ListItem.d.ts +3 -1
- package/build/components/ListItem/ListItem.d.ts.map +1 -1
- package/build/components/ListItem/ListItem.js +6 -3
- package/build/components/ListItem/ListItem.js.map +1 -1
- package/build/components/Switch/Switch.d.ts.map +1 -1
- package/build/components/Switch/Switch.js +9 -3
- package/build/components/Switch/Switch.js.map +1 -1
- package/build/components/Tab/Tab.d.ts +4 -2
- package/build/components/Tab/Tab.d.ts.map +1 -1
- package/build/components/Tab/Tab.js +14 -10
- package/build/components/Tab/Tab.js.map +1 -1
- package/build/components/Tag/Tag.js +2 -2
- package/build/components/Tag/Tag.js.map +1 -1
- package/build/components/Tag/Tag.styles.d.ts +4 -2
- package/build/components/Tag/Tag.styles.d.ts.map +1 -1
- package/build/components/Tag/Tag.styles.js +6 -6
- package/build/components/Tag/Tag.styles.js.map +1 -1
- package/build/components/navigation/GeneralNav/GeneralNav.d.ts +7 -5
- package/build/components/navigation/GeneralNav/GeneralNav.d.ts.map +1 -1
- package/build/components/navigation/GeneralNav/GeneralNav.js +5 -7
- package/build/components/navigation/GeneralNav/GeneralNav.js.map +1 -1
- package/build/index.d.ts +2 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -0
- package/build/index.js.map +1 -1
- package/build/theme/tokens/dark.js +5 -5
- package/build/theme/tokens/dark.js.map +1 -1
- package/build/theme/tokens/light.js +4 -4
- package/build/theme/tokens/light.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -69,7 +69,8 @@ export default function App() {
|
|
|
69
69
|
| `Card` / `CardEquip` / `CardProfile` | Equipment and profile cards |
|
|
70
70
|
| `FilterChip` / `FilterNav` | Filter chips and filter bar |
|
|
71
71
|
| `Input` | Text field with label, icons, helper text |
|
|
72
|
-
| `ListItem` | Flexible list row with leading/trailing slots |
|
|
72
|
+
| `ListItem` | Flexible list row with leading/trailing/primaryLabel slots |
|
|
73
|
+
| `ListGroup` | Selectable list group with section title and check icon |
|
|
73
74
|
| `MapPin` / `Cluster` | Map markers for react-native-maps |
|
|
74
75
|
| `Tag` / `AssociationTag` | Labels and MAC address badges |
|
|
75
76
|
| `Calendar` | Date picker with range selection |
|
|
@@ -79,7 +80,7 @@ export default function App() {
|
|
|
79
80
|
| `Checkbox` / `RadioButton` / `Switch` | Form controls |
|
|
80
81
|
| `Spinner` / `ProgressStep` / `Stepper` | Progress indicators |
|
|
81
82
|
| `GeneralNav` / `PageNav` | Navigation headers |
|
|
82
|
-
| `Tab` / `TabBar` | Tab navigation |
|
|
83
|
+
| `Tab` / `TabBar` | Tab navigation — line & button variants, showContainerBorder |
|
|
83
84
|
| `ColorPicker` / `ColorSwatch` | Color selection |
|
|
84
85
|
|
|
85
86
|
## Stack
|
|
@@ -41,7 +41,7 @@ export function Button({ variant = 'primary', size = 'M', content = 'icon-both',
|
|
|
41
41
|
fontSize: sizeTokens.fontSize,
|
|
42
42
|
lineHeight: sizeTokens.lineHeight,
|
|
43
43
|
fontFamily,
|
|
44
|
-
fontWeight: '500',
|
|
44
|
+
fontWeight: (variant === 'ghost' ? '600' : '500'),
|
|
45
45
|
};
|
|
46
46
|
// Clone icon elements to inject size and color from active theme state
|
|
47
47
|
const cloneIcon = (icon) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Button.js","sourceRoot":"","sources":["../../../src/components/Button/Button.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Button component for Traq[UI]ste Mobile.\n * Supports four variants, four sizes and three content layouts.\n */\nimport React, { useState } from 'react';\nimport { Pressable, Text } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\n\nexport type ButtonVariant = 'primary' | 'tertiary' | 'ghost' | 'destructive';\nexport type ButtonSize = 'S' | 'M' | 'L' | 'XL';\nexport type ButtonContent = 'icon-only' | 'icon-only-rounded' | 'icon-both';\n\nexport interface ButtonProps {\n /** Button visual variant */\n variant?: ButtonVariant;\n /** Button size */\n size?: ButtonSize;\n /** Content layout */\n content?: ButtonContent;\n /** Label text — required when content is 'icon-both' */\n label?: string;\n /** Left icon component (Phosphor icon) */\n iconLeft?: React.ReactElement;\n /** Right icon component (Phosphor icon) */\n iconRight?: React.ReactElement;\n /** Disabled state */\n disabled?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Additional container styles */\n style?: StyleProp<ViewStyle>;\n /** Accessibility label for screen readers — defaults to label when omitted */\n accessibilityLabel?: string;\n /** Test identifier */\n testID?: string;\n}\n\n// --- Size tokens (static, theme-independent) ---\n\nconst SIZE_TOKENS = {\n S: { height: 36, paddingVertical: 10, paddingHorizontal: 10, gap: 8, borderRadius: 8, iconSize: 16, fontSize: 12, lineHeight: 16 },\n M: { height: 40, paddingVertical: 10, paddingHorizontal: 16, gap: 4, borderRadius: 8, iconSize: 18, fontSize: 14, lineHeight: 20 },\n L: { height: 48, paddingVertical: 12, paddingHorizontal: 12, gap: 10, borderRadius: 8, iconSize: 20, fontSize: 16, lineHeight: 24 },\n XL: { height: 60, paddingVertical: 16, paddingHorizontal: 32, gap: 12, borderRadius: 8, iconSize: 24, fontSize: 18, lineHeight: 26 },\n} as const;\n\n// --- Component ---\n\nexport function Button({\n variant = 'primary',\n size = 'M',\n content = 'icon-both',\n label,\n iconLeft,\n iconRight,\n disabled = false,\n onPress,\n style,\n accessibilityLabel,\n testID,\n}: ButtonProps) {\n const [pressed, setPressed] = useState(false);\n const { colors, fontFamily } = useTheme();\n\n const sizeTokens = SIZE_TOKENS[size];\n const state = disabled ? 'disabled' : pressed ? 'pressed' : 'default';\n const colorTokens = colors.button[variant][state];\n\n const isIconOnly = content === 'icon-only' || content === 'icon-only-rounded';\n const borderRadius = content === 'icon-only-rounded' ? 9999 : sizeTokens.borderRadius;\n const hasBorder = colorTokens.border !== 'transparent';\n\n const containerStyle: ViewStyle = {\n height: sizeTokens.height,\n paddingVertical: isIconOnly ? undefined : sizeTokens.paddingVertical,\n paddingHorizontal: isIconOnly ? undefined : sizeTokens.paddingHorizontal,\n width: isIconOnly ? sizeTokens.height : undefined,\n borderRadius,\n gap: sizeTokens.gap,\n backgroundColor: colorTokens.background,\n borderWidth: hasBorder ? 1 : undefined,\n borderColor: hasBorder ? colorTokens.border : undefined,\n alignItems: 'center',\n justifyContent: 'center',\n flexDirection: 'row',\n };\n\n const textStyle = {\n color: colorTokens.text,\n fontSize: sizeTokens.fontSize,\n lineHeight: sizeTokens.lineHeight,\n fontFamily,\n fontWeight: (variant === 'ghost' ? '600' : '500') as '600' | '500',\n };\n\n // Clone icon elements to inject size and color from active theme state\n const cloneIcon = (icon: React.ReactElement | undefined) => {\n if (!icon) return null;\n return React.cloneElement(icon, {\n size: sizeTokens.iconSize,\n color: colorTokens.icon,\n ...(icon.props as Record<string, unknown>),\n } as object);\n };\n\n const sharedA11y = {\n accessibilityRole: 'button' as const,\n accessibilityLabel: accessibilityLabel ?? label,\n accessibilityState: { disabled },\n testID,\n };\n\n if (isIconOnly) {\n return (\n <Pressable\n pointerEvents={disabled ? 'none' : 'auto'}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n onPress={disabled ? undefined : onPress}\n style={[containerStyle, style]}\n {...sharedA11y}\n >\n {cloneIcon(iconLeft)}\n </Pressable>\n );\n }\n\n return (\n <Pressable\n pointerEvents={disabled ? 'none' : 'auto'}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n onPress={disabled ? undefined : onPress}\n style={[containerStyle, style]}\n {...sharedA11y}\n >\n {cloneIcon(iconLeft)}\n {label != null && <Text style={textStyle}>{label}</Text>}\n {cloneIcon(iconRight)}\n </Pressable>\n );\n}"]}
|
|
@@ -29,8 +29,8 @@ export function ButtonMenu({ icon, state = 'default', notif = false, onPress, st
|
|
|
29
29
|
padding: 10,
|
|
30
30
|
borderRadius: 8,
|
|
31
31
|
backgroundColor: background,
|
|
32
|
-
borderWidth:
|
|
33
|
-
borderColor: borderColor ??
|
|
32
|
+
borderWidth: 1,
|
|
33
|
+
borderColor: borderColor ?? 'transparent',
|
|
34
34
|
alignItems: 'center',
|
|
35
35
|
justifyContent: 'center',
|
|
36
36
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ButtonMenu.js","sourceRoot":"","sources":["../../../src/components/ButtonMenu/ButtonMenu.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAExC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAqBtD,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,SAAS,GAAG,CAAC,CAAC;AAEpB,MAAM,UAAU,UAAU,CAAC,EACzB,IAAI,EACJ,KAAK,GAAG,SAAS,EACjB,KAAK,GAAG,KAAK,EACb,OAAO,EACP,KAAK,EACL,kBAAkB,EAClB,MAAM,GACU;IAChB,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC9C,MAAM,EAAE,MAAM,EAAE,GAAG,QAAQ,EAAE,CAAC;IAE9B,MAAM,UAAU,GAAoC;QAClD,OAAO,EAAG,aAAa;QACvB,MAAM,EAAI,MAAM,CAAC,MAAM,CAAC,gBAAgB;QACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,UAAU;KACrD,CAAC;IAEF,MAAM,YAAY,GAAgD;QAChE,OAAO,EAAG,SAAS;QACnB,MAAM,EAAI,MAAM,CAAC,MAAM,CAAC,OAAO;QAC/B,QAAQ,EAAE,SAAS;KACpB,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,KAAK,UAAU,CAAC;IACxC,MAAM,UAAU,GAAG,OAAO,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IAC1G,MAAM,WAAW,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC;IAExC,MAAM,cAAc,GAAc;QAChC,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,OAAO,EAAE,EAAE;QACX,YAAY,EAAE,CAAC;QACf,eAAe,EAAE,UAAU;QAC3B,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"ButtonMenu.js","sourceRoot":"","sources":["../../../src/components/ButtonMenu/ButtonMenu.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * ButtonMenu component — icon-only toggle button for navigation/menu bars.\n * Supports default, active and disabled states with an optional notification dot.\n */\nimport React, { useState } from 'react';\nimport type { ReactElement } from 'react';\nimport { Pressable, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\n\nexport type ButtonMenuState = 'default' | 'active' | 'disabled';\n\nexport interface ButtonMenuProps {\n /** Icon component (Phosphor Duotone icon) */\n icon: ReactElement;\n /** Toggle state */\n state?: ButtonMenuState;\n /** Show notification dot */\n notif?: boolean;\n /** Press handler */\n onPress?: () => void;\n /** Additional container styles */\n style?: StyleProp<ViewStyle>;\n /** Accessibility label for screen readers */\n accessibilityLabel?: string;\n /** Test identifier */\n testID?: string;\n}\n\nconst ICON_SIZE = 28;\nconst NOTIF_DOT = 8;\n\nexport function ButtonMenu({\n icon,\n state = 'default',\n notif = false,\n onPress,\n style,\n accessibilityLabel,\n testID,\n}: ButtonMenuProps) {\n const [pressed, setPressed] = useState(false);\n const { colors } = useTheme();\n\n const BACKGROUND: Record<ButtonMenuState, string> = {\n default: 'transparent',\n active: colors.tabBar.activeBackground,\n disabled: colors.button.tertiary.disabled.background,\n };\n\n const BORDER_COLOR: Record<ButtonMenuState, string | undefined> = {\n default: undefined,\n active: colors.border.default,\n disabled: undefined,\n };\n\n const isDisabled = state === 'disabled';\n const background = pressed && !isDisabled ? colors.button.tertiary.pressed.background : BACKGROUND[state];\n const borderColor = BORDER_COLOR[state];\n\n const containerStyle: ViewStyle = {\n width: 48,\n height: 48,\n padding: 10,\n borderRadius: 8,\n backgroundColor: background,\n borderWidth: 1,\n borderColor: borderColor ?? 'transparent',\n alignItems: 'center',\n justifyContent: 'center',\n };\n\n const clonedIcon = React.cloneElement(icon, {\n size: ICON_SIZE,\n weight: 'duotone',\n color: isDisabled ? colors.text.disabled : undefined,\n ...(icon.props as Record<string, unknown>),\n } as object);\n\n return (\n <Pressable\n pointerEvents={isDisabled ? 'none' : 'auto'}\n onPressIn={() => setPressed(true)}\n onPressOut={() => setPressed(false)}\n onPress={isDisabled ? undefined : onPress}\n style={[containerStyle, style]}\n accessibilityRole=\"button\"\n accessibilityLabel={accessibilityLabel}\n accessibilityState={{ disabled: isDisabled, selected: state === 'active' }}\n testID={testID}\n >\n {clonedIcon}\n {notif && (\n <View\n style={{\n position: 'absolute',\n top: 6,\n left: 34,\n width: NOTIF_DOT,\n height: NOTIF_DOT,\n borderRadius: 9999,\n backgroundColor: colors.tabBar.badgeBackground,\n }}\n />\n )}\n </Pressable>\n );\n}"]}
|
|
@@ -124,7 +124,7 @@ export function Calendar({ selectedDate, rangeStart, rangeEnd, mode = 'day', sho
|
|
|
124
124
|
calendarStyles.tab,
|
|
125
125
|
active && [calendarStyles.tabActive, { backgroundColor: colors.background.primary, borderColor: cal.header.border }],
|
|
126
126
|
]} onPress={() => onModeChange?.(m)}>
|
|
127
|
-
<Text style={[calendarStyles.tabText, { color: cal.day.default.text, fontFamily }]}>
|
|
127
|
+
<Text style={[calendarStyles.tabText, { color: cal.day.default.text, fontFamily }]} numberOfLines={1}>
|
|
128
128
|
{m === 'day' ? i18n.modeDay : i18n.modeRange}
|
|
129
129
|
</Text>
|
|
130
130
|
</Pressable>);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Calendar component — monthly date picker with day and range selection modes.\n * Supports data dots, mode tabs, today highlight and range band visualization.\n */\nimport { useState } from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { BottomSheetProvider } from '../../context/BottomSheetContext';\nimport { Button } from '../Button';\nimport type { CalendarProps, DayState } from './Calendar.types';\nimport { CALENDAR_FR } from './Calendar.i18n';\nimport { CalendarYearPicker } from './CalendarYearPicker';\nimport { calendarStyles } from './Calendar.styles';\nimport { CalendarDay } from './CalendarDay';\nimport { CalendarHeader } from './CalendarHeader';\nimport { CalendarLegend } from './CalendarLegend';\n\n// --- Constants ---\n\n\n// --- Helpers ---\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction stripTime(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\n\n\nfunction formatRangeDate(d: Date, showYear: boolean, monthsShort: string[]): string {\n const day = d.getDate();\n const month = monthsShort[d.getMonth()];\n return showYear ? `${day} ${month} ${d.getFullYear()}` : `${day} ${month}`;\n}\n\ninterface GridDay {\n day: number;\n date: Date;\n isCurrentMonth: boolean;\n}\n\nfunction buildMonthGrid(year: number, month: number): GridDay[] {\n const firstDay = new Date(year, month, 1);\n const lastDate = new Date(year, month + 1, 0).getDate();\n const startOffset = (firstDay.getDay() + 6) % 7; // Mon-based offset\n const days: GridDay[] = [];\n\n for (let i = startOffset; i > 0; i--) {\n const date = new Date(year, month, 1 - i);\n days.push({ day: date.getDate(), date, isCurrentMonth: false });\n }\n for (let d = 1; d <= lastDate; d++) {\n days.push({ day: d, date: new Date(year, month, d), isCurrentMonth: true });\n }\n const total = days.length <= 35 ? 35 : 42;\n let next = 1;\n while (days.length < total) {\n days.push({ day: next, date: new Date(year, month + 1, next++), isCurrentMonth: false });\n }\n return days;\n}\n\nfunction getDayState(\n date: Date,\n isCurrentMonth: boolean,\n today: Date,\n mode: 'day' | 'range',\n selectedDate?: Date,\n rangeStart?: Date,\n rangeEnd?: Date,\n dataDates?: Date[],\n): DayState {\n if (!isCurrentMonth) return 'outside';\n const t = stripTime(date);\n\n if (mode === 'day') {\n if (selectedDate && isSameDay(date, selectedDate)) return 'selected-start';\n if (isSameDay(date, today)) return 'today';\n if (dataDates?.length && !dataDates.some(d => isSameDay(d, date))) return 'nodata';\n return 'default';\n }\n\n if (rangeStart && isSameDay(date, rangeStart)) return 'selected-start';\n if (rangeEnd && isSameDay(date, rangeEnd)) return 'selected-end';\n if (rangeStart && rangeEnd) {\n if (t > stripTime(rangeStart) && t < stripTime(rangeEnd)) return 'in-range';\n }\n if (isSameDay(date, today)) return 'today';\n if (dataDates?.length && !dataDates.some(d => isSameDay(d, date))) return 'nodata';\n return 'default';\n}\n\nfunction chunkArray<T>(arr: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < arr.length; i += size) chunks.push(arr.slice(i, i + size));\n return chunks;\n}\n\nfunction getDisplayDate(mode: 'day' | 'range', monthsShort: string[], selectedDate?: Date, rangeStart?: Date, rangeEnd?: Date): string {\n if (mode === 'day') return selectedDate ? formatRangeDate(selectedDate, true, monthsShort) : '—';\n if (rangeStart && rangeEnd) {\n return `${formatRangeDate(rangeStart, false, monthsShort)} → ${formatRangeDate(rangeEnd, true, monthsShort)}`;\n }\n if (rangeStart) return formatRangeDate(rangeStart, true, monthsShort);\n return '—';\n}\n\n// --- Component ---\n\nexport function Calendar({\n selectedDate,\n rangeStart,\n rangeEnd,\n mode = 'day',\n showModeTabs = false,\n dataDates,\n onDayPress,\n onModeChange,\n onClear,\n onConfirm,\n minYear,\n maxYear,\n i18n: i18nProp,\n}: CalendarProps) {\n const i18n = { ...CALENDAR_FR, ...i18nProp };\n const { colors, fontFamily } = useTheme();\n const cal = colors.calendar;\n const today = new Date();\n\n const [showYearPicker, setShowYearPicker] = useState(false);\n\n const [currentMonth, setCurrentMonth] = useState<Date>(() => {\n const base = selectedDate ?? rangeStart ?? today;\n return new Date(base.getFullYear(), base.getMonth(), 1);\n });\n\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n const monthLabel = `${i18n.months[month]} ${year}`;\n const displayDate = getDisplayDate(mode, i18n.monthsShort, selectedDate, rangeStart, rangeEnd);\n const weeks = chunkArray(buildMonthGrid(year, month), 7);\n\n const handlePrev = () => setCurrentMonth(new Date(year, month - 1, 1));\n const handleNext = () => setCurrentMonth(new Date(year, month + 1, 1));\n\n return (\n <BottomSheetProvider>\n <View style={[calendarStyles.card, { backgroundColor: colors.background.primary, shadowColor: colors.shadow.lowest }]}>\n {/* Top bar */}\n <View style={calendarStyles.topBar}>\n <View>\n <Text style={[calendarStyles.topBarLabel, { color: cal.day.default.secondary, fontFamily }]}>{i18n.dateLabel}</Text>\n <Text style={[calendarStyles.topBarDate, { color: cal.day.default.text, fontFamily }]}>{displayDate}</Text>\n </View>\n\n {showModeTabs && (\n <View style={[calendarStyles.tabsContainer, { backgroundColor: cal.legend.background, borderColor: cal.header.border }]}>\n {(['day', 'range'] as const).map(m => {\n const active = mode === m;\n return (\n <Pressable\n key={m}\n style={[\n calendarStyles.tab,\n active && [calendarStyles.tabActive, { backgroundColor: colors.background.primary, borderColor: cal.header.border }],\n ]}\n onPress={() => onModeChange?.(m)}\n >\n <Text style={[calendarStyles.tabText, { color: cal.day.default.text, fontFamily }]}>\n {m === 'day' ? i18n.modeDay : i18n.modeRange}\n </Text>\n </Pressable>\n );\n })}\n </View>\n )}\n </View>\n\n <View style={[calendarStyles.divider, { backgroundColor: cal.header.border }]} />\n\n {/* Grid */}\n <View style={calendarStyles.gridContainer}>\n <CalendarHeader\n label={monthLabel}\n onPrev={handlePrev}\n onNext={handleNext}\n onLabelPress={() => setShowYearPicker(true)}\n />\n\n <View style={calendarStyles.weekLabelsRow}>\n {i18n.weekDays.map(d => (\n <View key={d} style={calendarStyles.weekLabelCell}>\n <Text style={[calendarStyles.weekLabelText, { color: cal.day.default.secondary, fontFamily }]}>{d}</Text>\n </View>\n ))}\n </View>\n\n {weeks.map((week, wi) => (\n <View key={wi} style={calendarStyles.weekRow}>\n {week.map((gd, di) => {\n const state = getDayState(gd.date, gd.isCurrentMonth, today, mode, selectedDate, rangeStart, rangeEnd, dataDates);\n const hasData = gd.isCurrentMonth && (dataDates?.some(d => isSameDay(d, gd.date)) ?? false);\n return (\n <CalendarDay\n key={di}\n day={gd.day}\n state={state}\n mode={mode}\n hasRange={!!(rangeStart && rangeEnd)}\n hasData={hasData}\n onPress={() => !gd.isCurrentMonth ? undefined : onDayPress?.(gd.date)}\n />\n );\n })}\n </View>\n ))}\n </View>\n\n <CalendarLegend mode={mode} i18n={i18n} />\n\n {/* Footer */}\n <View style={calendarStyles.footer}>\n <Button variant=\"tertiary\" label={i18n.clear} onPress={onClear} style={{ flex: 1 }} />\n <Button variant=\"primary\" label={i18n.confirm} onPress={onConfirm} style={{ flex: 1 }} />\n </View>\n\n <CalendarYearPicker\n visible={showYearPicker}\n currentYear={year}\n minYear={minYear}\n maxYear={maxYear}\n i18n={i18n}\n onSelect={selectedYear => {\n setCurrentMonth(new Date(selectedYear, month, 1));\n setShowYearPicker(false);\n }}\n onClose={() => setShowYearPicker(false)}\n />\n </View>\n </BottomSheetProvider>\n );\n}\n\nexport default Calendar;"]}
|
|
1
|
+
{"version":3,"file":"Calendar.js","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Calendar component — monthly date picker with day and range selection modes.\n * Supports data dots, mode tabs, today highlight and range band visualization.\n */\nimport { useState } from 'react';\nimport { Pressable, Text, View } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport { BottomSheetProvider } from '../../context/BottomSheetContext';\nimport { Button } from '../Button';\nimport type { CalendarProps, DayState } from './Calendar.types';\nimport { CALENDAR_FR } from './Calendar.i18n';\nimport { CalendarYearPicker } from './CalendarYearPicker';\nimport { calendarStyles } from './Calendar.styles';\nimport { CalendarDay } from './CalendarDay';\nimport { CalendarHeader } from './CalendarHeader';\nimport { CalendarLegend } from './CalendarLegend';\n\n// --- Constants ---\n\n\n// --- Helpers ---\n\nfunction isSameDay(a: Date, b: Date): boolean {\n return (\n a.getFullYear() === b.getFullYear() &&\n a.getMonth() === b.getMonth() &&\n a.getDate() === b.getDate()\n );\n}\n\nfunction stripTime(d: Date): number {\n return new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime();\n}\n\n\n\nfunction formatRangeDate(d: Date, showYear: boolean, monthsShort: string[]): string {\n const day = d.getDate();\n const month = monthsShort[d.getMonth()];\n return showYear ? `${day} ${month} ${d.getFullYear()}` : `${day} ${month}`;\n}\n\ninterface GridDay {\n day: number;\n date: Date;\n isCurrentMonth: boolean;\n}\n\nfunction buildMonthGrid(year: number, month: number): GridDay[] {\n const firstDay = new Date(year, month, 1);\n const lastDate = new Date(year, month + 1, 0).getDate();\n const startOffset = (firstDay.getDay() + 6) % 7; // Mon-based offset\n const days: GridDay[] = [];\n\n for (let i = startOffset; i > 0; i--) {\n const date = new Date(year, month, 1 - i);\n days.push({ day: date.getDate(), date, isCurrentMonth: false });\n }\n for (let d = 1; d <= lastDate; d++) {\n days.push({ day: d, date: new Date(year, month, d), isCurrentMonth: true });\n }\n const total = days.length <= 35 ? 35 : 42;\n let next = 1;\n while (days.length < total) {\n days.push({ day: next, date: new Date(year, month + 1, next++), isCurrentMonth: false });\n }\n return days;\n}\n\nfunction getDayState(\n date: Date,\n isCurrentMonth: boolean,\n today: Date,\n mode: 'day' | 'range',\n selectedDate?: Date,\n rangeStart?: Date,\n rangeEnd?: Date,\n dataDates?: Date[],\n): DayState {\n if (!isCurrentMonth) return 'outside';\n const t = stripTime(date);\n\n if (mode === 'day') {\n if (selectedDate && isSameDay(date, selectedDate)) return 'selected-start';\n if (isSameDay(date, today)) return 'today';\n if (dataDates?.length && !dataDates.some(d => isSameDay(d, date))) return 'nodata';\n return 'default';\n }\n\n if (rangeStart && isSameDay(date, rangeStart)) return 'selected-start';\n if (rangeEnd && isSameDay(date, rangeEnd)) return 'selected-end';\n if (rangeStart && rangeEnd) {\n if (t > stripTime(rangeStart) && t < stripTime(rangeEnd)) return 'in-range';\n }\n if (isSameDay(date, today)) return 'today';\n if (dataDates?.length && !dataDates.some(d => isSameDay(d, date))) return 'nodata';\n return 'default';\n}\n\nfunction chunkArray<T>(arr: T[], size: number): T[][] {\n const chunks: T[][] = [];\n for (let i = 0; i < arr.length; i += size) chunks.push(arr.slice(i, i + size));\n return chunks;\n}\n\nfunction getDisplayDate(mode: 'day' | 'range', monthsShort: string[], selectedDate?: Date, rangeStart?: Date, rangeEnd?: Date): string {\n if (mode === 'day') return selectedDate ? formatRangeDate(selectedDate, true, monthsShort) : '—';\n if (rangeStart && rangeEnd) {\n return `${formatRangeDate(rangeStart, false, monthsShort)} → ${formatRangeDate(rangeEnd, true, monthsShort)}`;\n }\n if (rangeStart) return formatRangeDate(rangeStart, true, monthsShort);\n return '—';\n}\n\n// --- Component ---\n\nexport function Calendar({\n selectedDate,\n rangeStart,\n rangeEnd,\n mode = 'day',\n showModeTabs = false,\n dataDates,\n onDayPress,\n onModeChange,\n onClear,\n onConfirm,\n minYear,\n maxYear,\n i18n: i18nProp,\n}: CalendarProps) {\n const i18n = { ...CALENDAR_FR, ...i18nProp };\n const { colors, fontFamily } = useTheme();\n const cal = colors.calendar;\n const today = new Date();\n\n const [showYearPicker, setShowYearPicker] = useState(false);\n\n const [currentMonth, setCurrentMonth] = useState<Date>(() => {\n const base = selectedDate ?? rangeStart ?? today;\n return new Date(base.getFullYear(), base.getMonth(), 1);\n });\n\n const year = currentMonth.getFullYear();\n const month = currentMonth.getMonth();\n const monthLabel = `${i18n.months[month]} ${year}`;\n const displayDate = getDisplayDate(mode, i18n.monthsShort, selectedDate, rangeStart, rangeEnd);\n const weeks = chunkArray(buildMonthGrid(year, month), 7);\n\n const handlePrev = () => setCurrentMonth(new Date(year, month - 1, 1));\n const handleNext = () => setCurrentMonth(new Date(year, month + 1, 1));\n\n return (\n <BottomSheetProvider>\n <View style={[calendarStyles.card, { backgroundColor: colors.background.primary, shadowColor: colors.shadow.lowest }]}>\n {/* Top bar */}\n <View style={calendarStyles.topBar}>\n <View>\n <Text style={[calendarStyles.topBarLabel, { color: cal.day.default.secondary, fontFamily }]}>{i18n.dateLabel}</Text>\n <Text style={[calendarStyles.topBarDate, { color: cal.day.default.text, fontFamily }]}>{displayDate}</Text>\n </View>\n\n {showModeTabs && (\n <View style={[calendarStyles.tabsContainer, { backgroundColor: cal.legend.background, borderColor: cal.header.border }]}>\n {(['day', 'range'] as const).map(m => {\n const active = mode === m;\n return (\n <Pressable\n key={m}\n style={[\n calendarStyles.tab,\n active && [calendarStyles.tabActive, { backgroundColor: colors.background.primary, borderColor: cal.header.border }],\n ]}\n onPress={() => onModeChange?.(m)}\n >\n <Text style={[calendarStyles.tabText, { color: cal.day.default.text, fontFamily }]} numberOfLines={1}>\n {m === 'day' ? i18n.modeDay : i18n.modeRange}\n </Text>\n </Pressable>\n );\n })}\n </View>\n )}\n </View>\n\n <View style={[calendarStyles.divider, { backgroundColor: cal.header.border }]} />\n\n {/* Grid */}\n <View style={calendarStyles.gridContainer}>\n <CalendarHeader\n label={monthLabel}\n onPrev={handlePrev}\n onNext={handleNext}\n onLabelPress={() => setShowYearPicker(true)}\n />\n\n <View style={calendarStyles.weekLabelsRow}>\n {i18n.weekDays.map(d => (\n <View key={d} style={calendarStyles.weekLabelCell}>\n <Text style={[calendarStyles.weekLabelText, { color: cal.day.default.secondary, fontFamily }]}>{d}</Text>\n </View>\n ))}\n </View>\n\n {weeks.map((week, wi) => (\n <View key={wi} style={calendarStyles.weekRow}>\n {week.map((gd, di) => {\n const state = getDayState(gd.date, gd.isCurrentMonth, today, mode, selectedDate, rangeStart, rangeEnd, dataDates);\n const hasData = gd.isCurrentMonth && (dataDates?.some(d => isSameDay(d, gd.date)) ?? false);\n return (\n <CalendarDay\n key={di}\n day={gd.day}\n state={state}\n mode={mode}\n hasRange={!!(rangeStart && rangeEnd)}\n hasData={hasData}\n onPress={() => !gd.isCurrentMonth ? undefined : onDayPress?.(gd.date)}\n />\n );\n })}\n </View>\n ))}\n </View>\n\n <CalendarLegend mode={mode} i18n={i18n} />\n\n {/* Footer */}\n <View style={calendarStyles.footer}>\n <Button variant=\"tertiary\" label={i18n.clear} onPress={onClear} style={{ flex: 1 }} />\n <Button variant=\"primary\" label={i18n.confirm} onPress={onConfirm} style={{ flex: 1 }} />\n </View>\n\n <CalendarYearPicker\n visible={showYearPicker}\n currentYear={year}\n minYear={minYear}\n maxYear={maxYear}\n i18n={i18n}\n onSelect={selectedYear => {\n setCurrentMonth(new Date(selectedYear, month, 1));\n setShowYearPicker(false);\n }}\n onClose={() => setShowYearPicker(false)}\n />\n </View>\n </BottomSheetProvider>\n );\n}\n\nexport default Calendar;"]}
|
|
@@ -23,8 +23,8 @@ export declare const CALENDAR_TOKENS: {
|
|
|
23
23
|
readonly btnBorderRadius: 8;
|
|
24
24
|
readonly btnGap: 4;
|
|
25
25
|
readonly tabsContainerPad: 2;
|
|
26
|
-
readonly tabsContainerWidth:
|
|
27
|
-
readonly tabsPaddingH:
|
|
26
|
+
readonly tabsContainerWidth: 148;
|
|
27
|
+
readonly tabsPaddingH: 8;
|
|
28
28
|
readonly tabsPaddingV: 6;
|
|
29
29
|
readonly tabsBorderRadius: 4;
|
|
30
30
|
readonly tabsContainerBorderRadius: 6;
|
|
@@ -65,7 +65,7 @@ export declare const TYPO: {
|
|
|
65
65
|
};
|
|
66
66
|
export declare const dayStyles: {
|
|
67
67
|
cell: {
|
|
68
|
-
|
|
68
|
+
width: 44;
|
|
69
69
|
height: 44;
|
|
70
70
|
alignItems: "center";
|
|
71
71
|
justifyContent: "center";
|
|
@@ -147,10 +147,11 @@ export declare const calendarStyles: {
|
|
|
147
147
|
};
|
|
148
148
|
weekLabelsRow: {
|
|
149
149
|
flexDirection: "row";
|
|
150
|
+
marginTop: number;
|
|
150
151
|
marginBottom: number;
|
|
151
152
|
};
|
|
152
153
|
weekLabelCell: {
|
|
153
|
-
|
|
154
|
+
width: 44;
|
|
154
155
|
alignItems: "center";
|
|
155
156
|
paddingVertical: number;
|
|
156
157
|
};
|
|
@@ -190,6 +191,8 @@ export declare const calendarStyles: {
|
|
|
190
191
|
gap: number;
|
|
191
192
|
};
|
|
192
193
|
legendText: {
|
|
194
|
+
includeFontPadding: false;
|
|
195
|
+
textAlignVertical: "center";
|
|
193
196
|
fontFamily: "Urbanist";
|
|
194
197
|
fontWeight: "600";
|
|
195
198
|
fontSize: 11;
|
|
@@ -231,19 +234,19 @@ export declare const calendarStyles: {
|
|
|
231
234
|
borderRadius: 6;
|
|
232
235
|
padding: 2;
|
|
233
236
|
gap: 4;
|
|
234
|
-
width:
|
|
237
|
+
width: 148;
|
|
235
238
|
};
|
|
236
239
|
tab: {
|
|
237
240
|
flex: number;
|
|
238
241
|
alignItems: "center";
|
|
239
242
|
justifyContent: "center";
|
|
240
|
-
paddingHorizontal:
|
|
243
|
+
paddingHorizontal: 8;
|
|
241
244
|
paddingVertical: 6;
|
|
242
245
|
borderRadius: 4;
|
|
243
|
-
};
|
|
244
|
-
tabActive: {
|
|
245
246
|
borderWidth: number;
|
|
247
|
+
borderColor: string;
|
|
246
248
|
};
|
|
249
|
+
tabActive: {};
|
|
247
250
|
tabText: {
|
|
248
251
|
fontFamily: "Urbanist";
|
|
249
252
|
fontWeight: "600";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.styles.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB,CAAC;AAIX,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BP,CAAC;AAMX,eAAO,MAAM,SAAS;;;;;;;;;;;;;eAYyB,MAAM;;;;eACP,MAAM;;;;eACN,MAAM;;;;;;;;;;;;;;;;;;CAgBlD,CAAC;AAIH,eAAO,MAAM,cAAc
|
|
1
|
+
{"version":3,"file":"Calendar.styles.d.ts","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.styles.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAqClB,CAAC;AAIX,eAAO,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BP,CAAC;AAMX,eAAO,MAAM,SAAS;;;;;;;;;;;;;eAYyB,MAAM;;;;eACP,MAAM;;;;eACN,MAAM;;;;;;;;;;;;;;;;;;CAgBlD,CAAC;AAIH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiIzB,CAAC"}
|
|
@@ -26,8 +26,8 @@ export const CALENDAR_TOKENS = {
|
|
|
26
26
|
btnBorderRadius: 8,
|
|
27
27
|
btnGap: 4,
|
|
28
28
|
tabsContainerPad: 2,
|
|
29
|
-
tabsContainerWidth:
|
|
30
|
-
tabsPaddingH:
|
|
29
|
+
tabsContainerWidth: 148,
|
|
30
|
+
tabsPaddingH: 8,
|
|
31
31
|
tabsPaddingV: 6,
|
|
32
32
|
tabsBorderRadius: 4,
|
|
33
33
|
tabsContainerBorderRadius: 6,
|
|
@@ -71,7 +71,7 @@ const T = CALENDAR_TOKENS;
|
|
|
71
71
|
// --- Day cell static layout ---
|
|
72
72
|
export const dayStyles = StyleSheet.create({
|
|
73
73
|
cell: {
|
|
74
|
-
|
|
74
|
+
width: T.dayTouchTarget,
|
|
75
75
|
height: T.dayTouchTarget,
|
|
76
76
|
alignItems: 'center',
|
|
77
77
|
justifyContent: 'center',
|
|
@@ -135,10 +135,11 @@ export const calendarStyles = StyleSheet.create({
|
|
|
135
135
|
},
|
|
136
136
|
weekLabelsRow: {
|
|
137
137
|
flexDirection: 'row',
|
|
138
|
+
marginTop: 8,
|
|
138
139
|
marginBottom: 4,
|
|
139
140
|
},
|
|
140
141
|
weekLabelCell: {
|
|
141
|
-
|
|
142
|
+
width: T.dayTouchTarget,
|
|
142
143
|
alignItems: 'center',
|
|
143
144
|
paddingVertical: 4,
|
|
144
145
|
},
|
|
@@ -175,6 +176,8 @@ export const calendarStyles = StyleSheet.create({
|
|
|
175
176
|
},
|
|
176
177
|
legendText: {
|
|
177
178
|
...TYPO.labelSmallest,
|
|
179
|
+
includeFontPadding: false,
|
|
180
|
+
textAlignVertical: 'center',
|
|
178
181
|
},
|
|
179
182
|
legendDot: {
|
|
180
183
|
width: 4,
|
|
@@ -182,8 +185,8 @@ export const calendarStyles = StyleSheet.create({
|
|
|
182
185
|
borderRadius: 9999,
|
|
183
186
|
},
|
|
184
187
|
legendTodayCircle: {
|
|
185
|
-
width:
|
|
186
|
-
height:
|
|
188
|
+
width: 13,
|
|
189
|
+
height: 13,
|
|
187
190
|
borderRadius: 9999,
|
|
188
191
|
borderWidth: 1.5,
|
|
189
192
|
},
|
|
@@ -194,8 +197,8 @@ export const calendarStyles = StyleSheet.create({
|
|
|
194
197
|
borderWidth: 1,
|
|
195
198
|
},
|
|
196
199
|
legendSelectionDot: {
|
|
197
|
-
width:
|
|
198
|
-
height:
|
|
200
|
+
width: 13,
|
|
201
|
+
height: 13,
|
|
199
202
|
borderRadius: 9999,
|
|
200
203
|
},
|
|
201
204
|
footer: {
|
|
@@ -220,10 +223,10 @@ export const calendarStyles = StyleSheet.create({
|
|
|
220
223
|
paddingHorizontal: T.tabsPaddingH,
|
|
221
224
|
paddingVertical: T.tabsPaddingV,
|
|
222
225
|
borderRadius: T.tabsBorderRadius,
|
|
223
|
-
},
|
|
224
|
-
tabActive: {
|
|
225
226
|
borderWidth: 1,
|
|
227
|
+
borderColor: 'transparent',
|
|
226
228
|
},
|
|
229
|
+
tabActive: {},
|
|
227
230
|
tabText: {
|
|
228
231
|
...TYPO.textSemiBoldSmall,
|
|
229
232
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Calendar.styles.js","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.styles.ts"],"names":[],"mappings":"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","sourcesContent":["/** Layout tokens and static styles for the Calendar component family — colors come from useTheme() */\nimport { StyleSheet } from 'react-native';\n\n// --- Dimension tokens ---\n\nexport const CALENDAR_TOKENS = {\n dayTouchTarget: 44,\n dayCircleSize: 36,\n dayCirclePaddingTop: 2,\n dayCircleBorderR: 9999,\n dayDotSize: 4,\n dayDotLeft: 16,\n dayDotTop: 27,\n rangeBarHeight: 32,\n gridPaddingH: 16,\n gridPaddingTop: 16,\n gridPaddingBottom: 20,\n gridGap: 8,\n headerHeight: 52,\n legendPaddingH: 32,\n legendPaddingV: 10,\n footerPaddingH: 16,\n footerPaddingTop: 12,\n footerPaddingBottom: 16,\n footerGap: 8,\n btnPaddingH: 16,\n btnPaddingV: 10,\n btnBorderRadius: 8,\n btnGap: 4,\n tabsContainerPad: 2,\n tabsContainerWidth: 118,\n tabsPaddingH: 12,\n tabsPaddingV: 6,\n tabsBorderRadius: 4,\n tabsContainerBorderRadius: 6,\n tabsGap: 4,\n topBarPaddingLeft: 20,\n topBarPaddingRight: 16,\n topBarPaddingTop: 16,\n topBarPaddingBottom: 12,\n cardBorderRadius: 16,\n yearItemBorderRadius: 12,\n} as const;\n\n// --- Typography presets (no color) ---\n\nexport const TYPO = {\n labelSmallest: {\n fontFamily: 'Urbanist',\n fontWeight: '600' as const,\n fontSize: 11,\n lineHeight: 14,\n letterSpacing: 0.66,\n },\n textSmall: {\n fontFamily: 'Urbanist',\n fontWeight: '500' as const,\n fontSize: 14,\n lineHeight: 20,\n },\n textSemiBoldSmall: {\n fontFamily: 'Urbanist',\n fontWeight: '600' as const,\n fontSize: 14,\n lineHeight: 20,\n },\n textSemiBoldLarge: {\n fontFamily: 'Urbanist',\n fontWeight: '600' as const,\n fontSize: 18,\n lineHeight: 26,\n },\n} as const;\n\nconst T = CALENDAR_TOKENS;\n\n// --- Day cell static layout ---\n\nexport const dayStyles = StyleSheet.create({\n cell: {\n flex: 1,\n height: T.dayTouchTarget,\n alignItems: 'center',\n justifyContent: 'center',\n },\n rangeBarBase: {\n position: 'absolute',\n height: T.rangeBarHeight,\n top: (T.dayTouchTarget - T.rangeBarHeight) / 2,\n },\n rangeBarFull: { width: '100%' as unknown as number, left: 0 },\n rangeBarStart: { width: '50%' as unknown as number, right: 0 },\n rangeBarEnd: { width: '50%' as unknown as number, left: 0 },\n circle: {\n width: T.dayCircleSize,\n height: T.dayCircleSize,\n borderRadius: T.dayCircleBorderR,\n alignItems: 'center',\n justifyContent: 'center',\n },\n dot: {\n position: 'absolute',\n width: T.dayDotSize,\n height: T.dayDotSize,\n borderRadius: 9999,\n left: T.dayDotLeft,\n top: T.dayDotTop,\n },\n});\n\n// --- Calendar layout ---\n\nexport const calendarStyles = StyleSheet.create({\n card: {\n borderRadius: T.cardBorderRadius,\n overflow: 'hidden',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 16,\n elevation: 4,\n },\n topBar: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingLeft: T.topBarPaddingLeft,\n paddingRight: T.topBarPaddingRight,\n paddingTop: T.topBarPaddingTop,\n paddingBottom: T.topBarPaddingBottom,\n },\n topBarLabel: {\n ...TYPO.labelSmallest,\n },\n topBarDate: {\n ...TYPO.textSmall,\n },\n divider: {\n height: 1,\n },\n gridContainer: {\n paddingHorizontal: T.gridPaddingH,\n paddingTop: T.gridPaddingTop,\n paddingBottom: T.gridPaddingBottom,\n },\n weekLabelsRow: {\n flexDirection: 'row',\n marginBottom: 4,\n },\n weekLabelCell: {\n flex: 1,\n alignItems: 'center',\n paddingVertical: 4,\n },\n weekLabelText: {\n ...TYPO.labelSmallest,\n },\n weekRow: {\n flexDirection: 'row',\n marginTop: T.gridGap,\n },\n header: {\n height: T.headerHeight,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n headerArrow: {\n padding: 10,\n },\n legend: {\n borderTopWidth: 1,\n borderBottomWidth: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: T.legendPaddingH,\n paddingVertical: T.legendPaddingV,\n gap: 16,\n },\n legendItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n legendText: {\n ...TYPO.labelSmallest,\n },\n legendDot: {\n width: 4,\n height: 4,\n borderRadius: 9999,\n },\n legendTodayCircle: {\n width: 10,\n height: 10,\n borderRadius: 9999,\n borderWidth: 1.5,\n },\n legendRangeBar: {\n width: 20,\n height: 8,\n borderRadius: 2,\n borderWidth: 1,\n },\n legendSelectionDot: {\n width: 10,\n height: 10,\n borderRadius: 9999,\n },\n footer: {\n paddingHorizontal: T.footerPaddingH,\n paddingTop: T.footerPaddingTop,\n paddingBottom: T.footerPaddingBottom,\n flexDirection: 'row',\n gap: T.footerGap,\n },\n tabsContainer: {\n flexDirection: 'row',\n borderWidth: 1,\n borderRadius: T.tabsContainerBorderRadius,\n padding: T.tabsContainerPad,\n gap: T.tabsGap,\n width: T.tabsContainerWidth,\n },\n tab: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: T.tabsPaddingH,\n paddingVertical: T.tabsPaddingV,\n borderRadius: T.tabsBorderRadius,\n },\n tabActive: {\n borderWidth: 1,\n },\n tabText: {\n ...TYPO.textSemiBoldSmall,\n },\n});"]}
|
|
1
|
+
{"version":3,"file":"Calendar.styles.js","sourceRoot":"","sources":["../../../src/components/Calendar/Calendar.styles.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAE1C,2BAA2B;AAE3B,MAAM,CAAC,MAAM,eAAe,GAAG;IAC7B,cAAc,EAAO,EAAE;IACvB,aAAa,EAAQ,EAAE;IACvB,mBAAmB,EAAE,CAAC;IACtB,gBAAgB,EAAK,IAAI;IACzB,UAAU,EAAW,CAAC;IACtB,UAAU,EAAW,EAAE;IACvB,SAAS,EAAY,EAAE;IACvB,cAAc,EAAO,EAAE;IACvB,YAAY,EAAS,EAAE;IACvB,cAAc,EAAO,EAAE;IACvB,iBAAiB,EAAI,EAAE;IACvB,OAAO,EAAc,CAAC;IACtB,YAAY,EAAS,EAAE;IACvB,cAAc,EAAO,EAAE;IACvB,cAAc,EAAO,EAAE;IACvB,cAAc,EAAO,EAAE;IACvB,gBAAgB,EAAK,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,SAAS,EAAY,CAAC;IACtB,WAAW,EAAU,EAAE;IACvB,WAAW,EAAU,EAAE;IACvB,eAAe,EAAM,CAAC;IACtB,MAAM,EAAe,CAAC;IACtB,gBAAgB,EAAK,CAAC;IACtB,kBAAkB,EAAG,GAAG;IACxB,YAAY,EAAS,CAAC;IACtB,YAAY,EAAS,CAAC;IACtB,gBAAgB,EAAK,CAAC;IACtB,yBAAyB,EAAE,CAAC;IAC5B,OAAO,EAAc,CAAC;IACtB,iBAAiB,EAAI,EAAE;IACvB,kBAAkB,EAAG,EAAE;IACvB,gBAAgB,EAAK,EAAE;IACvB,mBAAmB,EAAE,EAAE;IACvB,gBAAgB,EAAM,EAAE;IACxB,oBAAoB,EAAE,EAAE;CAChB,CAAC;AAEX,wCAAwC;AAExC,MAAM,CAAC,MAAM,IAAI,GAAG;IAClB,aAAa,EAAE;QACb,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,KAAc;QAC1B,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;QACd,aAAa,EAAE,IAAI;KACpB;IACD,SAAS,EAAE;QACT,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,KAAc;QAC1B,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;IACD,iBAAiB,EAAE;QACjB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,KAAc;QAC1B,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;IACD,iBAAiB,EAAE;QACjB,UAAU,EAAE,UAAU;QACtB,UAAU,EAAE,KAAc;QAC1B,QAAQ,EAAE,EAAE;QACZ,UAAU,EAAE,EAAE;KACf;CACO,CAAC;AAEX,MAAM,CAAC,GAAG,eAAe,CAAC;AAE1B,iCAAiC;AAEjC,MAAM,CAAC,MAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE;QACJ,KAAK,EAAE,CAAC,CAAC,cAAc;QACvB,MAAM,EAAE,CAAC,CAAC,cAAc;QACxB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,YAAY,EAAE;QACZ,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,CAAC,CAAC,cAAc;QACxB,GAAG,EAAE,CAAC,CAAC,CAAC,cAAc,GAAG,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC;KAC/C;IACD,YAAY,EAAG,EAAE,KAAK,EAAE,MAA2B,EAAE,IAAI,EAAE,CAAC,EAAE;IAC9D,aAAa,EAAE,EAAE,KAAK,EAAE,KAA0B,EAAE,KAAK,EAAE,CAAC,EAAE;IAC9D,WAAW,EAAI,EAAE,KAAK,EAAE,KAA0B,EAAE,IAAI,EAAE,CAAC,EAAE;IAC7D,MAAM,EAAE;QACN,KAAK,EAAE,CAAC,CAAC,aAAa;QACtB,MAAM,EAAE,CAAC,CAAC,aAAa;QACvB,YAAY,EAAE,CAAC,CAAC,gBAAgB;QAChC,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;KACzB;IACD,GAAG,EAAE;QACH,QAAQ,EAAE,UAAU;QACpB,KAAK,EAAE,CAAC,CAAC,UAAU;QACnB,MAAM,EAAE,CAAC,CAAC,UAAU;QACpB,YAAY,EAAE,IAAI;QAClB,IAAI,EAAE,CAAC,CAAC,UAAU;QAClB,GAAG,EAAE,CAAC,CAAC,SAAS;KACjB;CACF,CAAC,CAAC;AAEH,0BAA0B;AAE1B,MAAM,CAAC,MAAM,cAAc,GAAG,UAAU,CAAC,MAAM,CAAC;IAC9C,IAAI,EAAE;QACJ,YAAY,EAAE,CAAC,CAAC,gBAAgB;QAChC,QAAQ,EAAE,QAAQ;QAClB,YAAY,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE;QACrC,aAAa,EAAE,CAAC;QAChB,YAAY,EAAE,EAAE;QAChB,SAAS,EAAE,CAAC;KACb;IACD,MAAM,EAAE;QACN,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,CAAC,CAAC,iBAAiB;QAChC,YAAY,EAAE,CAAC,CAAC,kBAAkB;QAClC,UAAU,EAAE,CAAC,CAAC,gBAAgB;QAC9B,aAAa,EAAE,CAAC,CAAC,mBAAmB;KACrC;IACD,WAAW,EAAE;QACX,GAAG,IAAI,CAAC,aAAa;KACtB;IACD,UAAU,EAAE;QACV,GAAG,IAAI,CAAC,SAAS;KAClB;IACD,OAAO,EAAE;QACP,MAAM,EAAE,CAAC;KACV;IACD,aAAa,EAAE;QACb,iBAAiB,EAAE,CAAC,CAAC,YAAY;QACjC,UAAU,EAAE,CAAC,CAAC,cAAc;QAC5B,aAAa,EAAE,CAAC,CAAC,iBAAiB;KACnC;IACD,aAAa,EAAE;QACb,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,CAAC;QACZ,YAAY,EAAE,CAAC;KAChB;IACD,aAAa,EAAE;QACb,KAAK,EAAE,CAAC,CAAC,cAAc;QACvB,UAAU,EAAE,QAAQ;QACpB,eAAe,EAAE,CAAC;KACnB;IACD,aAAa,EAAE;QACb,GAAG,IAAI,CAAC,aAAa;KACtB;IACD,OAAO,EAAE;QACP,aAAa,EAAE,KAAK;QACpB,SAAS,EAAE,CAAC,CAAC,OAAO;KACrB;IACD,MAAM,EAAE;QACN,MAAM,EAAE,CAAC,CAAC,YAAY;QACtB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,eAAe;KAChC;IACD,WAAW,EAAE;QACX,OAAO,EAAE,EAAE;KACZ;IACD,MAAM,EAAE;QACN,cAAc,EAAE,CAAC;QACjB,iBAAiB,EAAE,CAAC;QACpB,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,CAAC,CAAC,cAAc;QACnC,eAAe,EAAE,CAAC,CAAC,cAAc;QACjC,GAAG,EAAE,EAAE;KACR;IACD,UAAU,EAAE;QACV,aAAa,EAAE,KAAK;QACpB,UAAU,EAAE,QAAQ;QACpB,GAAG,EAAE,CAAC;KACP;IACD,UAAU,EAAE;QACV,GAAG,IAAI,CAAC,aAAa;QACrB,kBAAkB,EAAE,KAAK;QACzB,iBAAiB,EAAE,QAAQ;KAC5B;IACD,SAAS,EAAE;QACT,KAAK,EAAE,CAAC;QACR,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,IAAI;KACnB;IACD,iBAAiB,EAAE;QACjB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,IAAI;QAClB,WAAW,EAAE,GAAG;KACjB;IACD,cAAc,EAAE;QACd,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,CAAC;QACT,YAAY,EAAE,CAAC;QACf,WAAW,EAAE,CAAC;KACf;IACD,kBAAkB,EAAE;QAClB,KAAK,EAAE,EAAE;QACT,MAAM,EAAE,EAAE;QACV,YAAY,EAAE,IAAI;KACnB;IACD,MAAM,EAAE;QACN,iBAAiB,EAAE,CAAC,CAAC,cAAc;QACnC,UAAU,EAAE,CAAC,CAAC,gBAAgB;QAC9B,aAAa,EAAE,CAAC,CAAC,mBAAmB;QACpC,aAAa,EAAE,KAAK;QACpB,GAAG,EAAE,CAAC,CAAC,SAAS;KACjB;IACD,aAAa,EAAE;QACb,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,CAAC;QACd,YAAY,EAAE,CAAC,CAAC,yBAAyB;QACzC,OAAO,EAAE,CAAC,CAAC,gBAAgB;QAC3B,GAAG,EAAE,CAAC,CAAC,OAAO;QACd,KAAK,EAAE,CAAC,CAAC,kBAAkB;KAC5B;IACD,GAAG,EAAE;QACH,IAAI,EAAE,CAAC;QACP,UAAU,EAAE,QAAQ;QACpB,cAAc,EAAE,QAAQ;QACxB,iBAAiB,EAAE,CAAC,CAAC,YAAY;QACjC,eAAe,EAAE,CAAC,CAAC,YAAY;QAC/B,YAAY,EAAE,CAAC,CAAC,gBAAgB;QAChC,WAAW,EAAE,CAAC;QACd,WAAW,EAAE,aAAa;KAC3B;IACD,SAAS,EAAE,EAAE;IACb,OAAO,EAAE;QACP,GAAG,IAAI,CAAC,iBAAiB;KAC1B;CACF,CAAC,CAAC","sourcesContent":["/** Layout tokens and static styles for the Calendar component family — colors come from useTheme() */\nimport { StyleSheet } from 'react-native';\n\n// --- Dimension tokens ---\n\nexport const CALENDAR_TOKENS = {\n dayTouchTarget: 44,\n dayCircleSize: 36,\n dayCirclePaddingTop: 2,\n dayCircleBorderR: 9999,\n dayDotSize: 4,\n dayDotLeft: 16,\n dayDotTop: 27,\n rangeBarHeight: 32,\n gridPaddingH: 16,\n gridPaddingTop: 16,\n gridPaddingBottom: 20,\n gridGap: 8,\n headerHeight: 52,\n legendPaddingH: 32,\n legendPaddingV: 10,\n footerPaddingH: 16,\n footerPaddingTop: 12,\n footerPaddingBottom: 16,\n footerGap: 8,\n btnPaddingH: 16,\n btnPaddingV: 10,\n btnBorderRadius: 8,\n btnGap: 4,\n tabsContainerPad: 2,\n tabsContainerWidth: 148,\n tabsPaddingH: 8,\n tabsPaddingV: 6,\n tabsBorderRadius: 4,\n tabsContainerBorderRadius: 6,\n tabsGap: 4,\n topBarPaddingLeft: 20,\n topBarPaddingRight: 16,\n topBarPaddingTop: 16,\n topBarPaddingBottom: 12,\n cardBorderRadius: 16,\n yearItemBorderRadius: 12,\n} as const;\n\n// --- Typography presets (no color) ---\n\nexport const TYPO = {\n labelSmallest: {\n fontFamily: 'Urbanist',\n fontWeight: '600' as const,\n fontSize: 11,\n lineHeight: 14,\n letterSpacing: 0.66,\n },\n textSmall: {\n fontFamily: 'Urbanist',\n fontWeight: '500' as const,\n fontSize: 14,\n lineHeight: 20,\n },\n textSemiBoldSmall: {\n fontFamily: 'Urbanist',\n fontWeight: '600' as const,\n fontSize: 14,\n lineHeight: 20,\n },\n textSemiBoldLarge: {\n fontFamily: 'Urbanist',\n fontWeight: '600' as const,\n fontSize: 18,\n lineHeight: 26,\n },\n} as const;\n\nconst T = CALENDAR_TOKENS;\n\n// --- Day cell static layout ---\n\nexport const dayStyles = StyleSheet.create({\n cell: {\n width: T.dayTouchTarget,\n height: T.dayTouchTarget,\n alignItems: 'center',\n justifyContent: 'center',\n },\n rangeBarBase: {\n position: 'absolute',\n height: T.rangeBarHeight,\n top: (T.dayTouchTarget - T.rangeBarHeight) / 2,\n },\n rangeBarFull: { width: '100%' as unknown as number, left: 0 },\n rangeBarStart: { width: '50%' as unknown as number, right: 0 },\n rangeBarEnd: { width: '50%' as unknown as number, left: 0 },\n circle: {\n width: T.dayCircleSize,\n height: T.dayCircleSize,\n borderRadius: T.dayCircleBorderR,\n alignItems: 'center',\n justifyContent: 'center',\n },\n dot: {\n position: 'absolute',\n width: T.dayDotSize,\n height: T.dayDotSize,\n borderRadius: 9999,\n left: T.dayDotLeft,\n top: T.dayDotTop,\n },\n});\n\n// --- Calendar layout ---\n\nexport const calendarStyles = StyleSheet.create({\n card: {\n borderRadius: T.cardBorderRadius,\n overflow: 'hidden',\n shadowOffset: { width: 0, height: 4 },\n shadowOpacity: 1,\n shadowRadius: 16,\n elevation: 4,\n },\n topBar: {\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n paddingLeft: T.topBarPaddingLeft,\n paddingRight: T.topBarPaddingRight,\n paddingTop: T.topBarPaddingTop,\n paddingBottom: T.topBarPaddingBottom,\n },\n topBarLabel: {\n ...TYPO.labelSmallest,\n },\n topBarDate: {\n ...TYPO.textSmall,\n },\n divider: {\n height: 1,\n },\n gridContainer: {\n paddingHorizontal: T.gridPaddingH,\n paddingTop: T.gridPaddingTop,\n paddingBottom: T.gridPaddingBottom,\n },\n weekLabelsRow: {\n flexDirection: 'row',\n marginTop: 8,\n marginBottom: 4,\n },\n weekLabelCell: {\n width: T.dayTouchTarget,\n alignItems: 'center',\n paddingVertical: 4,\n },\n weekLabelText: {\n ...TYPO.labelSmallest,\n },\n weekRow: {\n flexDirection: 'row',\n marginTop: T.gridGap,\n },\n header: {\n height: T.headerHeight,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'space-between',\n },\n headerArrow: {\n padding: 10,\n },\n legend: {\n borderTopWidth: 1,\n borderBottomWidth: 1,\n flexDirection: 'row',\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: T.legendPaddingH,\n paddingVertical: T.legendPaddingV,\n gap: 16,\n },\n legendItem: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 6,\n },\n legendText: {\n ...TYPO.labelSmallest,\n includeFontPadding: false,\n textAlignVertical: 'center',\n },\n legendDot: {\n width: 4,\n height: 4,\n borderRadius: 9999,\n },\n legendTodayCircle: {\n width: 13,\n height: 13,\n borderRadius: 9999,\n borderWidth: 1.5,\n },\n legendRangeBar: {\n width: 20,\n height: 8,\n borderRadius: 2,\n borderWidth: 1,\n },\n legendSelectionDot: {\n width: 13,\n height: 13,\n borderRadius: 9999,\n },\n footer: {\n paddingHorizontal: T.footerPaddingH,\n paddingTop: T.footerPaddingTop,\n paddingBottom: T.footerPaddingBottom,\n flexDirection: 'row',\n gap: T.footerGap,\n },\n tabsContainer: {\n flexDirection: 'row',\n borderWidth: 1,\n borderRadius: T.tabsContainerBorderRadius,\n padding: T.tabsContainerPad,\n gap: T.tabsGap,\n width: T.tabsContainerWidth,\n },\n tab: {\n flex: 1,\n alignItems: 'center',\n justifyContent: 'center',\n paddingHorizontal: T.tabsPaddingH,\n paddingVertical: T.tabsPaddingV,\n borderRadius: T.tabsBorderRadius,\n borderWidth: 1,\n borderColor: 'transparent',\n },\n tabActive: {},\n tabText: {\n ...TYPO.textSemiBoldSmall,\n },\n});"]}
|
|
@@ -7,7 +7,7 @@ export function CalendarLegend({ mode, i18n }) {
|
|
|
7
7
|
const cal = colors.calendar;
|
|
8
8
|
return (<View style={[
|
|
9
9
|
calendarStyles.legend,
|
|
10
|
-
{ borderTopColor: cal.header.border, borderBottomColor: cal.header.border
|
|
10
|
+
{ borderTopColor: cal.header.border, borderBottomColor: cal.header.border },
|
|
11
11
|
]}>
|
|
12
12
|
<View style={calendarStyles.legendItem}>
|
|
13
13
|
<View style={[calendarStyles.legendDot, { backgroundColor: cal.day.data.dot }]}/>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CalendarLegend.js","sourceRoot":"","sources":["../../../src/components/Calendar/CalendarLegend.tsx"],"names":[],"mappings":"AAAA,0DAA0D;AAC1D,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AAEtD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,MAAM,UAAU,cAAc,CAAC,EAAE,IAAI,EAAE,IAAI,EAAuB;IAChE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,CAAC,QAAQ,CAAC;IAE5B,OAAO,CACL,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACX,cAAc,CAAC,MAAM;YACrB,EAAE,cAAc,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE
|
|
1
|
+
{"version":3,"file":"CalendarLegend.js","sourceRoot":"","sources":["../../../src/components/Calendar/CalendarLegend.tsx"],"names":[],"mappings":"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","sourcesContent":["/** Calendar legend — three items explaining day states */\nimport { Text, View } from 'react-native';\nimport { useTheme } from '../../context/ThemeContext';\nimport type { CalendarLegendProps } from './Calendar.types';\nimport { calendarStyles } from './Calendar.styles';\n\nexport function CalendarLegend({ mode, i18n }: CalendarLegendProps) {\n const { colors, fontFamily } = useTheme();\n const cal = colors.calendar;\n\n return (\n <View style={[\n calendarStyles.legend,\n { borderTopColor: cal.header.border, borderBottomColor: cal.header.border },\n ]}>\n <View style={calendarStyles.legendItem}>\n <View style={[calendarStyles.legendDot, { backgroundColor: cal.day.data.dot }]} />\n <Text style={[calendarStyles.legendText, { color: cal.day.default.secondary, fontFamily }]}>{i18n.legendData}</Text>\n </View>\n\n <View style={calendarStyles.legendItem}>\n <View style={[calendarStyles.legendTodayCircle, { borderColor: cal.day.today.border }]} />\n <Text style={[calendarStyles.legendText, { color: cal.day.default.secondary, fontFamily }]}>{i18n.legendToday}</Text>\n </View>\n\n {mode === 'range' ? (\n <View style={calendarStyles.legendItem}>\n <View style={{ flexDirection: 'row', alignItems: 'center' }}>\n {/* Cercle start */}\n <View style={{ width: 13, height: 13, borderRadius: 9999, backgroundColor: cal.day.selected.background, zIndex: 1 }} />\n {/* Barre centrale — passe sous les dots jusqu'à leur milieu */}\n <View style={{ width: 18, height: 13, backgroundColor: cal.range.background, marginHorizontal: -6 }} />\n {/* Cercle end */}\n <View style={{ width: 13, height: 13, borderRadius: 9999, backgroundColor: cal.day.selected.background, zIndex: 1 }} />\n </View>\n <Text style={[calendarStyles.legendText, { color: cal.day.default.secondary, fontFamily }]}>{i18n.legendRange}</Text>\n </View>\n ) : (\n <View style={calendarStyles.legendItem}>\n <View style={[calendarStyles.legendSelectionDot, { backgroundColor: cal.day.selected.background }]} />\n <Text style={[calendarStyles.legendText, { color: cal.day.default.secondary, fontFamily }]}>{i18n.legendSelection}</Text>\n </View>\n )}\n </View>\n );\n}"]}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import React from 'react';
|
|
7
7
|
import type { StyleProp, ViewStyle } from 'react-native';
|
|
8
|
-
export type CheckboxSize = 'm' | '
|
|
8
|
+
export type CheckboxSize = 'm' | 'xl';
|
|
9
9
|
export interface CheckboxProps {
|
|
10
10
|
/** Whether the checkbox is checked — required (controlled) */
|
|
11
11
|
checked: boolean;
|
|
@@ -17,7 +17,7 @@ export interface CheckboxProps {
|
|
|
17
17
|
helperText?: string;
|
|
18
18
|
/** Disabled state */
|
|
19
19
|
disabled?: boolean;
|
|
20
|
-
/** Box size — m: 24×24,
|
|
20
|
+
/** Box size — m: 24×24, xl: 32×32 */
|
|
21
21
|
size?: CheckboxSize;
|
|
22
22
|
/** Press handler — required for controlled usage */
|
|
23
23
|
onPress: () => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzD,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,
|
|
1
|
+
{"version":3,"file":"Checkbox.d.ts","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAmB,MAAM,OAAO,CAAC;AAExC,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAQzD,MAAM,MAAM,YAAY,GAAG,GAAG,GAAG,IAAI,CAAC;AAEtC,MAAM,WAAW,aAAa;IAC5B,8DAA8D;IAC9D,OAAO,EAAE,OAAO,CAAC;IACjB,2EAA2E;IAC3E,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,8EAA8E;IAC9E,QAAQ,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC;IAC3B,qDAAqD;IACrD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,oDAAoD;IACpD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,gCAAgC;IAChC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;CAC9B;AAiBD,wBAAgB,QAAQ,CAAC,EACvB,OAAO,EACP,aAAqB,EACrB,QAAQ,EACR,UAAU,EACV,QAAgB,EAChB,IAAU,EACV,OAAO,EACP,KAAK,GACN,EAAE,aAAa,qBAoDf"}
|
|
@@ -11,10 +11,9 @@ import { useTheme } from '../../context/ThemeContext';
|
|
|
11
11
|
// Size config
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
const BOX_BORDER_WIDTH = 1.5;
|
|
14
|
-
const BOX_BORDER_RADIUS = 4;
|
|
15
14
|
const SIZE_CONFIG = {
|
|
16
|
-
m: { box: 24, icon:
|
|
17
|
-
|
|
15
|
+
m: { box: 24, icon: 18, borderRadius: 4 },
|
|
16
|
+
xl: { box: 32, icon: 22, borderRadius: 8 },
|
|
18
17
|
};
|
|
19
18
|
// ---------------------------------------------------------------------------
|
|
20
19
|
// Component
|
|
@@ -23,7 +22,7 @@ export function Checkbox({ checked, indeterminate = false, children, helperText,
|
|
|
23
22
|
const [pressed, setPressed] = useState(false);
|
|
24
23
|
const { colors, fontFamily } = useTheme();
|
|
25
24
|
const t = colors.checkbox;
|
|
26
|
-
const { box: boxSize, icon: iconSize } = SIZE_CONFIG[size];
|
|
25
|
+
const { box: boxSize, icon: iconSize, borderRadius } = SIZE_CONFIG[size] ?? SIZE_CONFIG['m'];
|
|
27
26
|
// indeterminate + checked share the same filled token group
|
|
28
27
|
const variantTokens = indeterminate || checked ? t.checked : t.unchecked;
|
|
29
28
|
const stateKey = disabled ? 'disabled' : pressed ? 'pressed' : 'default';
|
|
@@ -39,6 +38,7 @@ export function Checkbox({ checked, indeterminate = false, children, helperText,
|
|
|
39
38
|
backgroundColor: tokens.background,
|
|
40
39
|
borderColor: tokens.border,
|
|
41
40
|
borderWidth: BOX_BORDER_WIDTH,
|
|
41
|
+
borderRadius,
|
|
42
42
|
},
|
|
43
43
|
]}>
|
|
44
44
|
{indeterminate ? (<Minus size={iconSize} color={tokens.icon} weight="bold"/>) : checked ? (<Check size={iconSize} color={tokens.icon} weight="bold"/>) : null}
|
|
@@ -61,7 +61,6 @@ const styles = StyleSheet.create({
|
|
|
61
61
|
gap: 8,
|
|
62
62
|
},
|
|
63
63
|
box: {
|
|
64
|
-
borderRadius: BOX_BORDER_RADIUS,
|
|
65
64
|
alignItems: 'center',
|
|
66
65
|
justifyContent: 'center',
|
|
67
66
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,KAAK,EAAE,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACxC,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AAEjE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,4BAA4B,CAAC;AA2BtD,8EAA8E;AAC9E,cAAc;AACd,8EAA8E;AAE9E,MAAM,gBAAgB,GAAG,GAAG,CAAC;
|
|
1
|
+
{"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../src/components/Checkbox/Checkbox.tsx"],"names":[],"mappings":"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","sourcesContent":["/**\n * Checkbox component for Traq[UI]ste Mobile.\n * Controlled component supporting checked, indeterminate, and disabled states,\n * with an optional label and helper text.\n */\nimport React, { useState } from 'react';\nimport { Pressable, StyleSheet, Text, View } from 'react-native';\nimport type { StyleProp, ViewStyle } from 'react-native';\nimport { Check, Minus } from 'phosphor-react-native';\nimport { useTheme } from '../../context/ThemeContext';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type CheckboxSize = 'm' | 'xl';\n\nexport interface CheckboxProps {\n /** Whether the checkbox is checked — required (controlled) */\n checked: boolean;\n /** Indeterminate state — visually overrides checked, shows a minus icon */\n indeterminate?: boolean;\n /** Content displayed to the right of the box — use Text, tags, links, etc. */\n children?: React.ReactNode;\n /** Helper or error text displayed below the label */\n helperText?: string;\n /** Disabled state */\n disabled?: boolean;\n /** Box size — m: 24×24, xl: 32×32 */\n size?: CheckboxSize;\n /** Press handler — required for controlled usage */\n onPress: () => void;\n /** Additional wrapper styles */\n style?: StyleProp<ViewStyle>;\n}\n\n// ---------------------------------------------------------------------------\n// Size config\n// ---------------------------------------------------------------------------\n\nconst BOX_BORDER_WIDTH = 1.5;\n\nconst SIZE_CONFIG: Record<CheckboxSize, { box: number; icon: number; borderRadius: number }> = {\n m: { box: 24, icon: 18, borderRadius: 4 },\n xl: { box: 32, icon: 22, borderRadius: 8 },\n};\n\n// ---------------------------------------------------------------------------\n// Component\n// ---------------------------------------------------------------------------\n\nexport function Checkbox({\n checked,\n indeterminate = false,\n children,\n helperText,\n disabled = false,\n size = 'm',\n onPress,\n style,\n}: CheckboxProps) {\n const [pressed, setPressed] = useState(false);\n const { colors, fontFamily } = useTheme();\n const t = colors.checkbox;\n const { box: boxSize, icon: iconSize, borderRadius } = SIZE_CONFIG[size] ?? SIZE_CONFIG['m'];\n\n // indeterminate + checked share the same filled token group\n const variantTokens = indeterminate || checked ? t.checked : t.unchecked;\n const stateKey = disabled ? 'disabled' : pressed ? 'pressed' : 'default';\n const tokens = variantTokens[stateKey];\n\n return (\n <Pressable\n accessibilityRole=\"checkbox\"\n accessibilityState={{ checked: indeterminate ? 'mixed' : checked, disabled }}\n onPressIn={() => { if (!disabled) setPressed(true); }}\n onPressOut={() => setPressed(false)}\n onPress={disabled ? undefined : onPress}\n style={[styles.wrapper, style]}\n >\n {/* Box */}\n <View\n style={[\n styles.box,\n {\n width: boxSize,\n height: boxSize,\n backgroundColor: tokens.background,\n borderColor: tokens.border,\n borderWidth: BOX_BORDER_WIDTH,\n borderRadius,\n },\n ]}\n >\n {indeterminate ? (\n <Minus size={iconSize} color={tokens.icon} weight=\"bold\" />\n ) : checked ? (\n <Check size={iconSize} color={tokens.icon} weight=\"bold\" />\n ) : null}\n </View>\n\n {/* Content + helper text */}\n {(children != null || helperText != null) && (\n <View style={styles.textContainer}>\n {children}\n {helperText != null && (\n <Text style={[styles.helper, { color: t.helper, fontFamily }]}>{helperText}</Text>\n )}\n </View>\n )}\n </Pressable>\n );\n}\n\n// ---------------------------------------------------------------------------\n// Styles\n// ---------------------------------------------------------------------------\n\nconst styles = StyleSheet.create({\n wrapper: {\n flexDirection: 'row',\n alignItems: 'center',\n gap: 8,\n },\n box: {\n alignItems: 'center',\n justifyContent: 'center',\n },\n textContainer: {\n flex: 1,\n gap: 2,\n },\n helper: {\n fontSize: 12,\n lineHeight: 16,\n fontWeight: '400',\n },\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FilterChip.d.ts","sourceRoot":"","sources":["../../../src/components/FilterChip/FilterChip.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,
|
|
1
|
+
{"version":3,"file":"FilterChip.d.ts","sourceRoot":"","sources":["../../../src/components/FilterChip/FilterChip.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAA2B,MAAM,OAAO,CAAC;AAEhD,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAGzD,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,GAAG,UAAU,CAAC;AAC9E,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,WAAW,CAAC;AAElD,MAAM,WAAW,eAAe;IAC9B,qBAAqB;IACrB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,iCAAiC;IACjC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mDAAmD;IACnD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,mCAAmC;IACnC,QAAQ,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC9B,mDAAmD;IACnD,SAAS,CAAC,EAAE,KAAK,CAAC,YAAY,CAAC;IAC/B,oBAAoB;IACpB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,kCAAkC;IAClC,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B,8EAA8E;IAC9E,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,sBAAsB;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAcD,wBAAgB,UAAU,CAAC,EACzB,IAAkB,EAClB,QAAgB,EAChB,QAAgB,EAChB,KAAK,EACL,QAAQ,EACR,SAAS,EACT,OAAO,EACP,KAAK,EACL,kBAAkB,EAClB,MAAM,GACP,EAAE,eAAe,qBAkGjB"}
|