@boostdev/design-system-react-native 0.5.0 → 0.6.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 (31) hide show
  1. package/CHANGELOG.md +70 -0
  2. package/README.md +35 -1
  3. package/dist/index.cjs +596 -545
  4. package/dist/index.d.cts +17 -1
  5. package/dist/index.d.ts +17 -1
  6. package/dist/index.js +488 -437
  7. package/package.json +1 -1
  8. package/src/components/interaction/Button/Button.mdx +13 -1
  9. package/src/components/interaction/Button/Button.spec.tsx +83 -0
  10. package/src/components/interaction/Button/Button.tsx +9 -8
  11. package/src/components/interaction/form/Combobox/Combobox.spec.tsx +22 -0
  12. package/src/components/interaction/form/Combobox/Combobox.tsx +4 -3
  13. package/src/components/interaction/form/FileInput/FileInput.spec.tsx +18 -0
  14. package/src/components/interaction/form/FileInput/FileInput.tsx +3 -3
  15. package/src/components/interaction/form/FormInput/FormInput.spec.tsx +20 -0
  16. package/src/components/interaction/form/FormInput/FormInput.tsx +5 -4
  17. package/src/components/interaction/form/NumberInput/NumberInput.spec.tsx +21 -0
  18. package/src/components/interaction/form/NumberInput/NumberInput.tsx +7 -6
  19. package/src/components/interaction/form/Select/Select.mdx +2 -1
  20. package/src/components/interaction/form/Select/Select.spec.tsx +35 -1
  21. package/src/components/interaction/form/Select/Select.tsx +8 -7
  22. package/src/components/interaction/form/Textarea/Textarea.spec.tsx +18 -0
  23. package/src/components/interaction/form/Textarea/Textarea.tsx +3 -3
  24. package/src/components/ui/Collapsible/Collapsible.spec.tsx +1 -1
  25. package/src/components/ui/Collapsible/Collapsible.tsx +5 -10
  26. package/src/index.ts +1 -1
  27. package/src/native/Chevron.spec.tsx +34 -0
  28. package/src/native/Chevron.tsx +50 -0
  29. package/src/native/ThemeContext.spec.tsx +81 -1
  30. package/src/native/ThemeContext.tsx +32 -3
  31. package/src/test/cornerRadii.ts +15 -0
package/dist/index.js CHANGED
@@ -15,15 +15,25 @@ var lineHeight = {
15
15
 
16
16
  // src/native/ThemeContext.tsx
17
17
  import { jsx } from "react/jsx-runtime";
18
+ var defaultRadius = {
19
+ button: border.radius.m,
20
+ iconButton: border.radius.full,
21
+ field: border.radius.m
22
+ };
18
23
  var ThemeContext = createContext(null);
19
24
  function ThemeProvider({ children, colorScheme, tokens }) {
20
25
  const systemScheme = useColorScheme();
21
26
  const isDark = (colorScheme ?? systemScheme) === "dark";
27
+ const parentRadius = useContext(ThemeContext)?.radius ?? defaultRadius;
22
28
  const value = useMemo(() => {
23
29
  const base = isDark ? colors.dark : colors.light;
24
30
  const overrides = isDark ? tokens?.dark : tokens?.light;
25
- return { colors: { ...base, ...overrides }, isDark };
26
- }, [isDark, tokens]);
31
+ return {
32
+ colors: { ...base, ...overrides },
33
+ isDark,
34
+ radius: { ...parentRadius, ...tokens?.radius }
35
+ };
36
+ }, [isDark, tokens, parentRadius]);
27
37
  return /* @__PURE__ */ jsx(ThemeContext.Provider, { value, children });
28
38
  }
29
39
  function useTheme() {
@@ -1063,12 +1073,50 @@ function Pagination({
1063
1073
 
1064
1074
  // src/components/ui/Collapsible/Collapsible.tsx
1065
1075
  import { useCallback, useRef as useRef2, useState as useState2 } from "react";
1066
- import { StyleSheet as StyleSheet16, View as View12, Pressable as Pressable7, Animated as Animated2, LayoutAnimation, Platform, UIManager } from "react-native";
1067
- import { jsx as jsx18, jsxs as jsxs9 } from "react/jsx-runtime";
1076
+ import { StyleSheet as StyleSheet17, View as View12, Pressable as Pressable7, Animated as Animated3, LayoutAnimation, Platform, UIManager } from "react-native";
1077
+
1078
+ // src/native/Chevron.tsx
1079
+ import { Animated as Animated2, StyleSheet as StyleSheet16 } from "react-native";
1080
+ import { jsx as jsx18 } from "react/jsx-runtime";
1081
+ var SIZE = 8;
1082
+ var STROKE = 1.5;
1083
+ var CENTRE_SHIFT = -(SIZE - STROKE) / 4;
1084
+ var styles15 = StyleSheet16.create({
1085
+ chevron: {
1086
+ // Border-box chevron (no glyph font dependency): a small square with two
1087
+ // adjacent borders, rotated to form a crisp "›" / "⌄" indicator.
1088
+ width: SIZE,
1089
+ height: SIZE,
1090
+ borderRightWidth: STROKE,
1091
+ borderBottomWidth: STROKE
1092
+ }
1093
+ });
1094
+ function Chevron({ color, rotate = "45deg", testID, style }) {
1095
+ return /* @__PURE__ */ jsx18(
1096
+ Animated2.View,
1097
+ {
1098
+ testID,
1099
+ style: [
1100
+ styles15.chevron,
1101
+ {
1102
+ borderColor: color,
1103
+ transform: [{ rotate }, { translateX: CENTRE_SHIFT }, { translateY: CENTRE_SHIFT }]
1104
+ },
1105
+ style
1106
+ ],
1107
+ "aria-hidden": true,
1108
+ importantForAccessibility: "no-hide-descendants",
1109
+ accessibilityElementsHidden: true
1110
+ }
1111
+ );
1112
+ }
1113
+
1114
+ // src/components/ui/Collapsible/Collapsible.tsx
1115
+ import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
1068
1116
  if (Platform.OS === "android" && UIManager.setLayoutAnimationEnabledExperimental) {
1069
1117
  UIManager.setLayoutAnimationEnabledExperimental(true);
1070
1118
  }
1071
- var styles15 = StyleSheet16.create({
1119
+ var styles16 = StyleSheet17.create({
1072
1120
  container: {
1073
1121
  borderRadius: border.radius.m,
1074
1122
  overflow: "hidden"
@@ -1089,12 +1137,6 @@ var styles15 = StyleSheet16.create({
1089
1137
  lineHeight: lineHeight.body
1090
1138
  },
1091
1139
  chevron: {
1092
- // Border-box chevron (no glyph font dependency): a small square with two
1093
- // adjacent borders, rotated to form a crisp "›" / "⌄" disclosure indicator.
1094
- width: 8,
1095
- height: 8,
1096
- borderRightWidth: 2,
1097
- borderBottomWidth: 2,
1098
1140
  marginStart: spacing.xs
1099
1141
  },
1100
1142
  content: {
@@ -1119,11 +1161,11 @@ function Collapsible({
1119
1161
  const [internalOpen, setInternalOpen] = useState2(defaultOpen);
1120
1162
  const isControlled = controlledOpen !== void 0;
1121
1163
  const isOpen = isControlled ? controlledOpen : internalOpen;
1122
- const rotation = useRef2(new Animated2.Value(isOpen ? 1 : 0)).current;
1164
+ const rotation = useRef2(new Animated3.Value(isOpen ? 1 : 0)).current;
1123
1165
  const toggle = useCallback(() => {
1124
1166
  const next = !isOpen;
1125
1167
  LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
1126
- Animated2.timing(rotation, {
1168
+ Animated3.timing(rotation, {
1127
1169
  toValue: next ? 1 : 0,
1128
1170
  duration: 200,
1129
1171
  useNativeDriver: true
@@ -1140,7 +1182,7 @@ function Collapsible({
1140
1182
  return /* @__PURE__ */ jsxs9(
1141
1183
  View12,
1142
1184
  {
1143
- style: [styles15.container, { borderBottomWidth: 1, borderBottomColor: colors2.colorBgSubtle }, style],
1185
+ style: [styles16.container, { borderBottomWidth: 1, borderBottomColor: colors2.colorBgSubtle }, style],
1144
1186
  accessibilityRole: "summary",
1145
1187
  children: [
1146
1188
  /* @__PURE__ */ jsxs9(
@@ -1150,22 +1192,22 @@ function Collapsible({
1150
1192
  accessibilityRole: "button",
1151
1193
  accessibilityLabel: summary,
1152
1194
  accessibilityState: { expanded: isOpen },
1153
- style: ({ pressed }) => [styles15.header, pressed && styles15.pressed],
1195
+ style: ({ pressed }) => [styles16.header, pressed && styles16.pressed],
1154
1196
  children: [
1155
- /* @__PURE__ */ jsx18(ScaledText, { style: [styles15.summaryText, { color: colors2.colorOnBg }], children: summary }),
1156
- /* @__PURE__ */ jsx18(
1157
- Animated2.View,
1197
+ /* @__PURE__ */ jsx19(ScaledText, { style: [styles16.summaryText, { color: colors2.colorOnBg }], children: summary }),
1198
+ /* @__PURE__ */ jsx19(
1199
+ Chevron,
1158
1200
  {
1159
1201
  testID: "bds-collapsible-chevron",
1160
- style: [styles15.chevron, { borderColor: colors2.colorOnBgSubtle, transform: [{ rotate }] }],
1161
- importantForAccessibility: "no",
1162
- accessibilityElementsHidden: true
1202
+ color: colors2.colorOnBgSubtle,
1203
+ rotate,
1204
+ style: styles16.chevron
1163
1205
  }
1164
1206
  )
1165
1207
  ]
1166
1208
  }
1167
1209
  ),
1168
- isOpen && /* @__PURE__ */ jsx18(View12, { style: styles15.content, children })
1210
+ isOpen && /* @__PURE__ */ jsx19(View12, { style: styles16.content, children })
1169
1211
  ]
1170
1212
  }
1171
1213
  );
@@ -1173,12 +1215,12 @@ function Collapsible({
1173
1215
 
1174
1216
  // src/components/ui/Accordion/Accordion.tsx
1175
1217
  import { useState as useState3 } from "react";
1176
- import { StyleSheet as StyleSheet17, View as View13, Pressable as Pressable8, LayoutAnimation as LayoutAnimation2, Platform as Platform2, UIManager as UIManager2 } from "react-native";
1177
- import { jsx as jsx19, jsxs as jsxs10 } from "react/jsx-runtime";
1218
+ import { StyleSheet as StyleSheet18, View as View13, Pressable as Pressable8, LayoutAnimation as LayoutAnimation2, Platform as Platform2, UIManager as UIManager2 } from "react-native";
1219
+ import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
1178
1220
  if (Platform2.OS === "android" && UIManager2.setLayoutAnimationEnabledExperimental) {
1179
1221
  UIManager2.setLayoutAnimationEnabledExperimental(true);
1180
1222
  }
1181
- var styles16 = StyleSheet17.create({
1223
+ var styles17 = StyleSheet18.create({
1182
1224
  container: {
1183
1225
  overflow: "hidden",
1184
1226
  borderRadius: border.radius.s
@@ -1232,14 +1274,14 @@ function Accordion({
1232
1274
  return allowMultiple ? [...prev, id] : [id];
1233
1275
  });
1234
1276
  };
1235
- return /* @__PURE__ */ jsx19(View13, { style: [styles16.container, style], children: items.map((item, index) => {
1277
+ return /* @__PURE__ */ jsx20(View13, { style: [styles17.container, style], children: items.map((item, index) => {
1236
1278
  const isOpen = openIds.includes(item.id);
1237
1279
  const isLast = index === items.length - 1;
1238
1280
  return /* @__PURE__ */ jsxs10(
1239
1281
  View13,
1240
1282
  {
1241
1283
  style: [
1242
- styles16.item,
1284
+ styles17.item,
1243
1285
  { borderBottomColor: colors2.colorBgSubtle },
1244
1286
  isLast && { borderBottomWidth: 0 }
1245
1287
  ],
@@ -1252,16 +1294,16 @@ function Accordion({
1252
1294
  accessibilityRole: "button",
1253
1295
  accessibilityState: { expanded: isOpen, disabled: item.disabled },
1254
1296
  style: ({ pressed }) => [
1255
- styles16.header,
1256
- item.disabled && styles16.disabled,
1257
- pressed && !item.disabled && styles16.pressed
1297
+ styles17.header,
1298
+ item.disabled && styles17.disabled,
1299
+ pressed && !item.disabled && styles17.pressed
1258
1300
  ],
1259
1301
  children: [
1260
- /* @__PURE__ */ jsx19(ScaledText, { style: [styles16.titleText, { color: colors2.colorOnBg }], children: typeof item.title === "string" ? item.title : item.title }),
1261
- /* @__PURE__ */ jsx19(
1302
+ /* @__PURE__ */ jsx20(ScaledText, { style: [styles17.titleText, { color: colors2.colorOnBg }], children: typeof item.title === "string" ? item.title : item.title }),
1303
+ /* @__PURE__ */ jsx20(
1262
1304
  ScaledText,
1263
1305
  {
1264
- style: [styles16.chevron, { color: colors2.colorOnBgSubtle }],
1306
+ style: [styles17.chevron, { color: colors2.colorOnBgSubtle }],
1265
1307
  importantForAccessibility: "no",
1266
1308
  accessibilityElementsHidden: true,
1267
1309
  children: isOpen ? "\u25BE" : "\u25B8"
@@ -1270,7 +1312,7 @@ function Accordion({
1270
1312
  ]
1271
1313
  }
1272
1314
  ),
1273
- isOpen && /* @__PURE__ */ jsx19(View13, { style: styles16.panel, accessibilityRole: "summary", children: item.content })
1315
+ isOpen && /* @__PURE__ */ jsx20(View13, { style: styles17.panel, accessibilityRole: "summary", children: item.content })
1274
1316
  ]
1275
1317
  },
1276
1318
  item.id
@@ -1280,9 +1322,9 @@ function Accordion({
1280
1322
 
1281
1323
  // src/components/ui/Tabs/Tabs.tsx
1282
1324
  import { useState as useState4 } from "react";
1283
- import { StyleSheet as StyleSheet18, View as View14, Pressable as Pressable9, ScrollView } from "react-native";
1284
- import { jsx as jsx20, jsxs as jsxs11 } from "react/jsx-runtime";
1285
- var styles17 = StyleSheet18.create({
1325
+ import { StyleSheet as StyleSheet19, View as View14, Pressable as Pressable9, ScrollView } from "react-native";
1326
+ import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
1327
+ var styles18 = StyleSheet19.create({
1286
1328
  container: {
1287
1329
  overflow: "hidden"
1288
1330
  },
@@ -1321,17 +1363,17 @@ function Tabs({
1321
1363
  }) {
1322
1364
  const { colors: colors2 } = useTheme();
1323
1365
  const [activeTab, setActiveTab] = useState4(defaultTab ?? tabs[0]?.id);
1324
- return /* @__PURE__ */ jsxs11(View14, { style: [styles17.container, style], children: [
1325
- /* @__PURE__ */ jsx20(
1366
+ return /* @__PURE__ */ jsxs11(View14, { style: [styles18.container, style], children: [
1367
+ /* @__PURE__ */ jsx21(
1326
1368
  ScrollView,
1327
1369
  {
1328
1370
  horizontal: true,
1329
1371
  showsHorizontalScrollIndicator: false,
1330
- contentContainerStyle: [styles17.tabList, { borderBottomColor: colors2.colorBgSubtle }],
1372
+ contentContainerStyle: [styles18.tabList, { borderBottomColor: colors2.colorBgSubtle }],
1331
1373
  accessibilityRole: "tabbar",
1332
1374
  children: tabs.map((tab) => {
1333
1375
  const isActive = activeTab === tab.id;
1334
- return /* @__PURE__ */ jsx20(
1376
+ return /* @__PURE__ */ jsx21(
1335
1377
  Pressable9,
1336
1378
  {
1337
1379
  onPress: () => setActiveTab(tab.id),
@@ -1343,18 +1385,18 @@ function Tabs({
1343
1385
  },
1344
1386
  accessibilityLabel: typeof tab.label === "string" ? tab.label : void 0,
1345
1387
  style: ({ pressed }) => [
1346
- styles17.tabButton,
1388
+ styles18.tabButton,
1347
1389
  {
1348
1390
  borderBottomColor: isActive ? colors2.colorInteractive : "transparent"
1349
1391
  },
1350
- tab.disabled && styles17.disabled,
1351
- pressed && !tab.disabled && styles17.pressed
1392
+ tab.disabled && styles18.disabled,
1393
+ pressed && !tab.disabled && styles18.pressed
1352
1394
  ],
1353
- children: /* @__PURE__ */ jsx20(
1395
+ children: /* @__PURE__ */ jsx21(
1354
1396
  ScaledText,
1355
1397
  {
1356
1398
  style: [
1357
- styles17.tabLabel,
1399
+ styles18.tabLabel,
1358
1400
  {
1359
1401
  color: isActive ? colors2.colorInteractive : colors2.colorOnBgSubtle,
1360
1402
  fontWeight: isActive ? font.weight.semibold : font.weight.body
@@ -1372,15 +1414,15 @@ function Tabs({
1372
1414
  tabs.map((tab) => {
1373
1415
  const isActive = activeTab === tab.id;
1374
1416
  if (!isActive) return null;
1375
- return /* @__PURE__ */ jsx20(View14, { style: styles17.panel, accessibilityRole: "tabpanel", children: tab.content }, tab.id);
1417
+ return /* @__PURE__ */ jsx21(View14, { style: styles18.panel, accessibilityRole: "tabpanel", children: tab.content }, tab.id);
1376
1418
  })
1377
1419
  ] });
1378
1420
  }
1379
1421
 
1380
1422
  // src/components/ui/Table/Table.tsx
1381
- import { StyleSheet as StyleSheet19, View as View15, ScrollView as ScrollView2, Pressable as Pressable10 } from "react-native";
1382
- import { jsx as jsx21, jsxs as jsxs12 } from "react/jsx-runtime";
1383
- var styles18 = StyleSheet19.create({
1423
+ import { StyleSheet as StyleSheet20, View as View15, ScrollView as ScrollView2, Pressable as Pressable10 } from "react-native";
1424
+ import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
1425
+ var styles19 = StyleSheet20.create({
1384
1426
  wrapper: {
1385
1427
  borderRadius: border.radius.s,
1386
1428
  overflow: "hidden"
@@ -1456,29 +1498,29 @@ function Table({
1456
1498
  if (sortKey !== col.key) return base;
1457
1499
  return `${base}, currently ${sortDirection === "asc" ? "ascending" : "descending"}`;
1458
1500
  };
1459
- return /* @__PURE__ */ jsx21(
1501
+ return /* @__PURE__ */ jsx22(
1460
1502
  ScrollView2,
1461
1503
  {
1462
1504
  horizontal: true,
1463
1505
  showsHorizontalScrollIndicator: true,
1464
- style: [styles18.wrapper, { backgroundColor: colors2.colorBg }, style],
1506
+ style: [styles19.wrapper, { backgroundColor: colors2.colorBg }, style],
1465
1507
  children: /* @__PURE__ */ jsxs12(View15, { children: [
1466
- caption && /* @__PURE__ */ jsx21(ScaledText, { style: [styles18.caption, { color: colors2.colorOnBgSubtle }], children: caption }),
1467
- /* @__PURE__ */ jsx21(View15, { style: [styles18.headerRow, { backgroundColor: colors2.colorBgSubtle }], children: columns.map(
1508
+ caption && /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.caption, { color: colors2.colorOnBgSubtle }], children: caption }),
1509
+ /* @__PURE__ */ jsx22(View15, { style: [styles19.headerRow, { backgroundColor: colors2.colorBgSubtle }], children: columns.map(
1468
1510
  (col) => col.sortable ? /* @__PURE__ */ jsxs12(
1469
1511
  Pressable10,
1470
1512
  {
1471
1513
  onPress: () => handleSort(col.key),
1472
1514
  accessibilityRole: "button",
1473
1515
  accessibilityLabel: getSortLabel(col),
1474
- style: ({ pressed }) => [styles18.headerCell, pressed && styles18.pressed],
1516
+ style: ({ pressed }) => [styles19.headerCell, pressed && styles19.pressed],
1475
1517
  children: [
1476
- /* @__PURE__ */ jsx21(ScaledText, { style: [styles18.headerText, { color: colors2.colorOnBg }], children: col.header }),
1477
- /* @__PURE__ */ jsx21(
1518
+ /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.headerText, { color: colors2.colorOnBg }], children: col.header }),
1519
+ /* @__PURE__ */ jsx22(
1478
1520
  ScaledText,
1479
1521
  {
1480
1522
  style: [
1481
- styles18.sortIndicator,
1523
+ styles19.sortIndicator,
1482
1524
  {
1483
1525
  color: sortKey === col.key ? colors2.colorInteractive : colors2.colorOnBgSubtle
1484
1526
  }
@@ -1491,18 +1533,18 @@ function Table({
1491
1533
  ]
1492
1534
  },
1493
1535
  col.key
1494
- ) : /* @__PURE__ */ jsx21(View15, { style: styles18.headerCell, children: /* @__PURE__ */ jsx21(ScaledText, { style: [styles18.headerText, { color: colors2.colorOnBg }], children: col.header }) }, col.key)
1536
+ ) : /* @__PURE__ */ jsx22(View15, { style: styles19.headerCell, children: /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.headerText, { color: colors2.colorOnBg }], children: col.header }) }, col.key)
1495
1537
  ) }),
1496
- rows.map((row, rowIndex) => /* @__PURE__ */ jsx21(
1538
+ rows.map((row, rowIndex) => /* @__PURE__ */ jsx22(
1497
1539
  View15,
1498
1540
  {
1499
1541
  style: [
1500
- styles18.row,
1542
+ styles19.row,
1501
1543
  { borderTopColor: colors2.colorBgSubtle },
1502
1544
  rowIndex % 2 === 1 && { backgroundColor: colors2.colorBgSubtle }
1503
1545
  ],
1504
1546
  accessibilityRole: "none",
1505
- children: columns.map((col) => /* @__PURE__ */ jsx21(View15, { style: styles18.cell, children: col.render ? typeof col.render(row) === "string" ? /* @__PURE__ */ jsx21(ScaledText, { style: [styles18.cellText, { color: colors2.colorOnBg }], children: col.render(row) }) : col.render(row) : /* @__PURE__ */ jsx21(ScaledText, { style: [styles18.cellText, { color: colors2.colorOnBg }], children: String(row[col.key] ?? "") }) }, col.key))
1547
+ children: columns.map((col) => /* @__PURE__ */ jsx22(View15, { style: styles19.cell, children: col.render ? typeof col.render(row) === "string" ? /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.cellText, { color: colors2.colorOnBg }], children: col.render(row) }) : col.render(row) : /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.cellText, { color: colors2.colorOnBg }], children: String(row[col.key] ?? "") }) }, col.key))
1506
1548
  },
1507
1549
  rowIndex
1508
1550
  ))
@@ -1513,8 +1555,8 @@ function Table({
1513
1555
 
1514
1556
  // src/components/ui/Calendar/Calendar.tsx
1515
1557
  import { useState as useState5 } from "react";
1516
- import { StyleSheet as StyleSheet20, View as View16, Pressable as Pressable11 } from "react-native";
1517
- import { jsx as jsx22, jsxs as jsxs13 } from "react/jsx-runtime";
1558
+ import { StyleSheet as StyleSheet21, View as View16, Pressable as Pressable11 } from "react-native";
1559
+ import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
1518
1560
  var DAYS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
1519
1561
  var DAY_LABELS = {
1520
1562
  Su: "Sunday",
@@ -1557,7 +1599,7 @@ function getFirstDayOfMonth(year, month) {
1557
1599
  return new Date(year, month, 1).getDay();
1558
1600
  }
1559
1601
  var DAY_SIZE = 44;
1560
- var styles19 = StyleSheet20.create({
1602
+ var styles20 = StyleSheet21.create({
1561
1603
  container: {
1562
1604
  alignSelf: "flex-start"
1563
1605
  },
@@ -1672,25 +1714,25 @@ function Calendar({
1672
1714
  return /* @__PURE__ */ jsxs13(
1673
1715
  View16,
1674
1716
  {
1675
- style: [styles19.container, style],
1717
+ style: [styles20.container, style],
1676
1718
  accessibilityRole: "none",
1677
1719
  accessibilityLabel: `${MONTHS[viewMonth]} ${viewYear} calendar`,
1678
1720
  children: [
1679
- /* @__PURE__ */ jsxs13(View16, { style: styles19.header, children: [
1680
- /* @__PURE__ */ jsx22(
1721
+ /* @__PURE__ */ jsxs13(View16, { style: styles20.header, children: [
1722
+ /* @__PURE__ */ jsx23(
1681
1723
  Pressable11,
1682
1724
  {
1683
1725
  onPress: () => navigate(-1),
1684
1726
  accessibilityRole: "button",
1685
1727
  accessibilityLabel: "Previous month",
1686
- style: ({ pressed }) => [styles19.navButton, pressed && styles19.pressed],
1687
- children: /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1728
+ style: ({ pressed }) => [styles20.navButton, pressed && styles20.pressed],
1729
+ children: /* @__PURE__ */ jsx23(ScaledText, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1688
1730
  }
1689
1731
  ),
1690
1732
  /* @__PURE__ */ jsxs13(
1691
1733
  ScaledText,
1692
1734
  {
1693
- style: [styles19.monthYear, { color: colors2.colorOnBg }],
1735
+ style: [styles20.monthYear, { color: colors2.colorOnBg }],
1694
1736
  accessibilityRole: "text",
1695
1737
  accessibilityLiveRegion: "polite",
1696
1738
  children: [
@@ -1700,34 +1742,34 @@ function Calendar({
1700
1742
  ]
1701
1743
  }
1702
1744
  ),
1703
- /* @__PURE__ */ jsx22(
1745
+ /* @__PURE__ */ jsx23(
1704
1746
  Pressable11,
1705
1747
  {
1706
1748
  onPress: () => navigate(1),
1707
1749
  accessibilityRole: "button",
1708
1750
  accessibilityLabel: "Next month",
1709
- style: ({ pressed }) => [styles19.navButton, pressed && styles19.pressed],
1710
- children: /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1751
+ style: ({ pressed }) => [styles20.navButton, pressed && styles20.pressed],
1752
+ children: /* @__PURE__ */ jsx23(ScaledText, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1711
1753
  }
1712
1754
  )
1713
1755
  ] }),
1714
- /* @__PURE__ */ jsx22(View16, { style: styles19.weekRow, children: DAYS.map((d) => /* @__PURE__ */ jsx22(View16, { style: styles19.weekday, children: /* @__PURE__ */ jsx22(
1756
+ /* @__PURE__ */ jsx23(View16, { style: styles20.weekRow, children: DAYS.map((d) => /* @__PURE__ */ jsx23(View16, { style: styles20.weekday, children: /* @__PURE__ */ jsx23(
1715
1757
  ScaledText,
1716
1758
  {
1717
- style: [styles19.weekdayText, { color: colors2.colorOnBgSubtle }],
1759
+ style: [styles20.weekdayText, { color: colors2.colorOnBgSubtle }],
1718
1760
  accessibilityLabel: DAY_LABELS[d],
1719
1761
  children: d
1720
1762
  }
1721
1763
  ) }, d)) }),
1722
- /* @__PURE__ */ jsx22(View16, { style: styles19.grid, children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx22(View16, { style: styles19.dayRow, children: row.map((cell, colIndex) => {
1764
+ /* @__PURE__ */ jsx23(View16, { style: styles20.grid, children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx23(View16, { style: styles20.dayRow, children: row.map((cell, colIndex) => {
1723
1765
  if (!cell) {
1724
- return /* @__PURE__ */ jsx22(View16, { style: styles19.dayCell }, colIndex);
1766
+ return /* @__PURE__ */ jsx23(View16, { style: styles20.dayCell }, colIndex);
1725
1767
  }
1726
1768
  const date = new Date(viewYear, viewMonth, cell.day);
1727
1769
  const isSelected = selected ? isSameDay(date, selected) : false;
1728
1770
  const isToday = isSameDay(date, today);
1729
1771
  const disabled = isOutOfRange(date, min, max);
1730
- return /* @__PURE__ */ jsx22(
1772
+ return /* @__PURE__ */ jsx23(
1731
1773
  Pressable11,
1732
1774
  {
1733
1775
  onPress: () => selectDay(cell.day),
@@ -1743,22 +1785,22 @@ function Calendar({
1743
1785
  disabled
1744
1786
  },
1745
1787
  style: ({ pressed }) => [
1746
- styles19.dayCell,
1788
+ styles20.dayCell,
1747
1789
  isSelected && {
1748
1790
  backgroundColor: colors2.colorInteractive
1749
1791
  },
1750
1792
  isToday && !isSelected && [
1751
- styles19.today,
1793
+ styles20.today,
1752
1794
  { borderColor: colors2.colorInteractive }
1753
1795
  ],
1754
- disabled && styles19.disabled,
1755
- pressed && !disabled && styles19.pressed
1796
+ disabled && styles20.disabled,
1797
+ pressed && !disabled && styles20.pressed
1756
1798
  ],
1757
- children: /* @__PURE__ */ jsx22(
1799
+ children: /* @__PURE__ */ jsx23(
1758
1800
  ScaledText,
1759
1801
  {
1760
1802
  style: [
1761
- styles19.dayText,
1803
+ styles20.dayText,
1762
1804
  {
1763
1805
  color: isSelected ? colors2.colorOnInteractive : colors2.colorOnBg,
1764
1806
  fontWeight: isToday ? font.weight.semibold : font.weight.body
@@ -1778,11 +1820,11 @@ function Calendar({
1778
1820
 
1779
1821
  // src/components/ui/Carousel/Carousel.tsx
1780
1822
  import { useCallback as useCallback2, useRef as useRef3, useState as useState6 } from "react";
1781
- import { StyleSheet as StyleSheet21, View as View17, Pressable as Pressable12, ScrollView as ScrollView3, Dimensions } from "react-native";
1782
- import { jsx as jsx23, jsxs as jsxs14 } from "react/jsx-runtime";
1823
+ import { StyleSheet as StyleSheet22, View as View17, Pressable as Pressable12, ScrollView as ScrollView3, Dimensions } from "react-native";
1824
+ import { jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
1783
1825
  var DOT_SIZE = 8;
1784
1826
  var DOT_HIT_SIZE = 44;
1785
- var styles20 = StyleSheet21.create({
1827
+ var styles21 = StyleSheet22.create({
1786
1828
  container: {
1787
1829
  width: "100%"
1788
1830
  },
@@ -1858,11 +1900,11 @@ function Carousel({
1858
1900
  return /* @__PURE__ */ jsxs14(
1859
1901
  View17,
1860
1902
  {
1861
- style: [styles20.container, style],
1903
+ style: [styles21.container, style],
1862
1904
  accessibilityRole: "none",
1863
1905
  accessibilityLabel: label,
1864
1906
  children: [
1865
- /* @__PURE__ */ jsx23(
1907
+ /* @__PURE__ */ jsx24(
1866
1908
  ScrollView3,
1867
1909
  {
1868
1910
  ref: scrollRef,
@@ -1872,12 +1914,12 @@ function Carousel({
1872
1914
  onScroll: handleScroll,
1873
1915
  scrollEventThrottle: 16,
1874
1916
  onLayout: (e) => setSlideWidth(e.nativeEvent.layout.width),
1875
- style: styles20.scrollView,
1876
- children: items.map((item, index) => /* @__PURE__ */ jsx23(View17, { style: [styles20.slide, { width: slideWidth }], children: item }, index))
1917
+ style: styles21.scrollView,
1918
+ children: items.map((item, index) => /* @__PURE__ */ jsx24(View17, { style: [styles21.slide, { width: slideWidth }], children: item }, index))
1877
1919
  }
1878
1920
  ),
1879
- /* @__PURE__ */ jsxs14(View17, { style: styles20.nav, children: [
1880
- /* @__PURE__ */ jsx23(
1921
+ /* @__PURE__ */ jsxs14(View17, { style: styles21.nav, children: [
1922
+ /* @__PURE__ */ jsx24(
1881
1923
  Pressable12,
1882
1924
  {
1883
1925
  onPress: () => scrollTo(activeIndex - 1),
@@ -1886,26 +1928,26 @@ function Carousel({
1886
1928
  accessibilityLabel: "Previous",
1887
1929
  accessibilityState: { disabled: activeIndex <= 0 },
1888
1930
  style: ({ pressed }) => [
1889
- styles20.navButton,
1931
+ styles21.navButton,
1890
1932
  activeIndex <= 0 && { opacity: 0.4 },
1891
- pressed && styles20.pressed
1933
+ pressed && styles21.pressed
1892
1934
  ],
1893
- children: /* @__PURE__ */ jsx23(ScaledText, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1935
+ children: /* @__PURE__ */ jsx24(ScaledText, { style: [styles21.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1894
1936
  }
1895
1937
  ),
1896
- /* @__PURE__ */ jsx23(View17, { style: styles20.dots, children: items.map((_, index) => /* @__PURE__ */ jsx23(
1938
+ /* @__PURE__ */ jsx24(View17, { style: styles21.dots, children: items.map((_, index) => /* @__PURE__ */ jsx24(
1897
1939
  Pressable12,
1898
1940
  {
1899
1941
  onPress: () => scrollTo(index),
1900
1942
  accessibilityRole: "button",
1901
1943
  accessibilityLabel: `Go to slide ${index + 1}`,
1902
1944
  accessibilityState: { selected: activeIndex === index },
1903
- style: styles20.dotWrapper,
1904
- children: /* @__PURE__ */ jsx23(
1945
+ style: styles21.dotWrapper,
1946
+ children: /* @__PURE__ */ jsx24(
1905
1947
  View17,
1906
1948
  {
1907
1949
  style: [
1908
- styles20.dot,
1950
+ styles21.dot,
1909
1951
  {
1910
1952
  backgroundColor: activeIndex === index ? colors2.colorInteractive : colors2.colorBgSubtle
1911
1953
  }
@@ -1915,7 +1957,7 @@ function Carousel({
1915
1957
  },
1916
1958
  index
1917
1959
  )) }),
1918
- /* @__PURE__ */ jsx23(
1960
+ /* @__PURE__ */ jsx24(
1919
1961
  Pressable12,
1920
1962
  {
1921
1963
  onPress: () => scrollTo(activeIndex + 1),
@@ -1924,11 +1966,11 @@ function Carousel({
1924
1966
  accessibilityLabel: "Next",
1925
1967
  accessibilityState: { disabled: activeIndex >= items.length - 1 },
1926
1968
  style: ({ pressed }) => [
1927
- styles20.navButton,
1969
+ styles21.navButton,
1928
1970
  activeIndex >= items.length - 1 && { opacity: 0.4 },
1929
- pressed && styles20.pressed
1971
+ pressed && styles21.pressed
1930
1972
  ],
1931
- children: /* @__PURE__ */ jsx23(ScaledText, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1973
+ children: /* @__PURE__ */ jsx24(ScaledText, { style: [styles21.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1932
1974
  }
1933
1975
  )
1934
1976
  ] })
@@ -1938,8 +1980,8 @@ function Carousel({
1938
1980
  }
1939
1981
 
1940
1982
  // src/components/layout/Card/Card.tsx
1941
- import { StyleSheet as StyleSheet22, View as View18, Pressable as Pressable13 } from "react-native";
1942
- import { jsx as jsx24 } from "react/jsx-runtime";
1983
+ import { StyleSheet as StyleSheet23, View as View18, Pressable as Pressable13 } from "react-native";
1984
+ import { jsx as jsx25 } from "react/jsx-runtime";
1943
1985
  var paddingMap = {
1944
1986
  none: 0,
1945
1987
  small: spacing.s,
@@ -1951,7 +1993,7 @@ var alignMap = {
1951
1993
  center: "center",
1952
1994
  end: "flex-end"
1953
1995
  };
1954
- var styles21 = StyleSheet22.create({
1996
+ var styles22 = StyleSheet23.create({
1955
1997
  card: {
1956
1998
  borderRadius: border.radius.m,
1957
1999
  overflow: "hidden"
@@ -1986,29 +2028,29 @@ function Card({
1986
2028
  alignItems: alignMap[textAlign]
1987
2029
  };
1988
2030
  if (onPress) {
1989
- return /* @__PURE__ */ jsx24(
2031
+ return /* @__PURE__ */ jsx25(
1990
2032
  Pressable13,
1991
2033
  {
1992
2034
  onPress,
1993
2035
  accessibilityRole: "button",
1994
2036
  accessibilityLabel,
1995
- style: ({ pressed }) => [styles21.card, variantStyle, inner, pressed && { opacity: 0.8 }, style],
2037
+ style: ({ pressed }) => [styles22.card, variantStyle, inner, pressed && { opacity: 0.8 }, style],
1996
2038
  children
1997
2039
  }
1998
2040
  );
1999
2041
  }
2000
- return /* @__PURE__ */ jsx24(View18, { style: [styles21.card, variantStyle, inner, style], children });
2042
+ return /* @__PURE__ */ jsx25(View18, { style: [styles22.card, variantStyle, inner, style], children });
2001
2043
  }
2002
2044
 
2003
2045
  // src/components/layout/SectionHeader/SectionHeader.tsx
2004
- import { StyleSheet as StyleSheet23, View as View19 } from "react-native";
2005
- import { jsx as jsx25, jsxs as jsxs15 } from "react/jsx-runtime";
2046
+ import { StyleSheet as StyleSheet24, View as View19 } from "react-native";
2047
+ import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
2006
2048
  var alignMap2 = {
2007
2049
  start: "flex-start",
2008
2050
  center: "center",
2009
2051
  end: "flex-end"
2010
2052
  };
2011
- var titleStyles = StyleSheet23.create({
2053
+ var titleStyles = StyleSheet24.create({
2012
2054
  small: {
2013
2055
  fontSize: font.size.heading3,
2014
2056
  fontFamily: font.family.heading,
@@ -2028,7 +2070,7 @@ var titleStyles = StyleSheet23.create({
2028
2070
  lineHeight: lineHeight.heading1
2029
2071
  }
2030
2072
  });
2031
- var styles22 = StyleSheet23.create({
2073
+ var styles23 = StyleSheet24.create({
2032
2074
  container: {
2033
2075
  gap: spacing.xxs
2034
2076
  },
@@ -2047,8 +2089,8 @@ function SectionHeader({
2047
2089
  }) {
2048
2090
  const { colors: colors2 } = useTheme();
2049
2091
  const align = alignMap2[alignment];
2050
- return /* @__PURE__ */ jsxs15(View19, { style: [styles22.container, { alignItems: align }, style], children: [
2051
- /* @__PURE__ */ jsx25(
2092
+ return /* @__PURE__ */ jsxs15(View19, { style: [styles23.container, { alignItems: align }, style], children: [
2093
+ /* @__PURE__ */ jsx26(
2052
2094
  ScaledText,
2053
2095
  {
2054
2096
  accessibilityRole: "header",
@@ -2056,15 +2098,15 @@ function SectionHeader({
2056
2098
  children: title
2057
2099
  }
2058
2100
  ),
2059
- subtitle && /* @__PURE__ */ jsx25(ScaledText, { style: [styles22.subtitle, { color: colors2.colorOnBgSubtle }], children: subtitle })
2101
+ subtitle && /* @__PURE__ */ jsx26(ScaledText, { style: [styles23.subtitle, { color: colors2.colorOnBgSubtle }], children: subtitle })
2060
2102
  ] });
2061
2103
  }
2062
2104
 
2063
2105
  // src/components/layout/IconWrapper/IconWrapper.tsx
2064
2106
  import { View as View20 } from "react-native";
2065
- import { jsx as jsx26 } from "react/jsx-runtime";
2107
+ import { jsx as jsx27 } from "react/jsx-runtime";
2066
2108
  function IconWrapper({ children, style, accessibilityElementsHidden }) {
2067
- return /* @__PURE__ */ jsx26(
2109
+ return /* @__PURE__ */ jsx27(
2068
2110
  View20,
2069
2111
  {
2070
2112
  style: [{ alignItems: "center", justifyContent: "center" }, style],
@@ -2076,9 +2118,9 @@ function IconWrapper({ children, style, accessibilityElementsHidden }) {
2076
2118
  }
2077
2119
 
2078
2120
  // src/components/layout/ButtonGroup/ButtonGroup.tsx
2079
- import { StyleSheet as StyleSheet24, View as View21 } from "react-native";
2080
- import { jsx as jsx27 } from "react/jsx-runtime";
2081
- var styles23 = StyleSheet24.create({
2121
+ import { StyleSheet as StyleSheet25, View as View21 } from "react-native";
2122
+ import { jsx as jsx28 } from "react/jsx-runtime";
2123
+ var styles24 = StyleSheet25.create({
2082
2124
  group: {
2083
2125
  flexDirection: "row",
2084
2126
  flexWrap: "wrap",
@@ -2091,11 +2133,11 @@ var styles23 = StyleSheet24.create({
2091
2133
  });
2092
2134
  function ButtonContainer({ children, variant, accessibilityLabel, style }) {
2093
2135
  const isColumn = variant === "card" || variant === "modal";
2094
- return /* @__PURE__ */ jsx27(
2136
+ return /* @__PURE__ */ jsx28(
2095
2137
  View21,
2096
2138
  {
2097
2139
  accessibilityLabel,
2098
- style: [isColumn ? styles23.column : styles23.group, style],
2140
+ style: [isColumn ? styles24.column : styles24.group, style],
2099
2141
  children
2100
2142
  }
2101
2143
  );
@@ -2103,14 +2145,14 @@ function ButtonContainer({ children, variant, accessibilityLabel, style }) {
2103
2145
  var ButtonGroup = ButtonContainer;
2104
2146
 
2105
2147
  // src/components/interaction/Button/Button.tsx
2106
- import { StyleSheet as StyleSheet25, Pressable as Pressable14, View as View22 } from "react-native";
2107
- import { jsx as jsx28, jsxs as jsxs16 } from "react/jsx-runtime";
2148
+ import { StyleSheet as StyleSheet26, Pressable as Pressable14, View as View22 } from "react-native";
2149
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
2108
2150
  var sizeTokens = {
2109
- small: { height: 36, px: spacing.m, fontSize: font.size.bodyS, radius: border.radius.full },
2110
- medium: { height: 48, px: spacing.m, fontSize: font.size.body, radius: border.radius.full },
2111
- large: { height: 56, px: spacing.xxl, fontSize: font.size.heading3, radius: border.radius.full }
2151
+ small: { height: 36, px: spacing.m, fontSize: font.size.bodyS },
2152
+ medium: { height: 48, px: spacing.m, fontSize: font.size.body },
2153
+ large: { height: 56, px: spacing.xxl, fontSize: font.size.heading3 }
2112
2154
  };
2113
- var styles24 = StyleSheet25.create({
2155
+ var styles25 = StyleSheet26.create({
2114
2156
  pressable: {
2115
2157
  flexDirection: "row",
2116
2158
  alignItems: "center",
@@ -2138,8 +2180,8 @@ function Button({
2138
2180
  accessibilityLabel,
2139
2181
  style
2140
2182
  }) {
2141
- const { colors: colors2 } = useTheme();
2142
- const { height, px, fontSize, radius } = sizeTokens[size];
2183
+ const { colors: colors2, radius } = useTheme();
2184
+ const { height, px, fontSize } = sizeTokens[size];
2143
2185
  const primaryColor = colors2.colorInteractive;
2144
2186
  const onPrimaryColor = colors2.colorOnInteractive;
2145
2187
  const outlineTextColor = colors2.colorInteractiveOnBg;
@@ -2147,7 +2189,8 @@ function Button({
2147
2189
  const containerStyle = {
2148
2190
  minHeight: height,
2149
2191
  paddingHorizontal: isIconOnly ? spacing.xs : px,
2150
- borderRadius: radius,
2192
+ // Corners come from the theme (`tokens.radius`); a borderRadius in `style` still wins.
2193
+ borderRadius: isIconOnly ? radius.iconButton : radius.button,
2151
2194
  opacity: disabled ? 0.4 : 1,
2152
2195
  // Icon-only: square with equal xs padding on both axes.
2153
2196
  ...isIconOnly && { aspectRatio: 1, paddingVertical: spacing.xs },
@@ -2170,21 +2213,21 @@ function Button({
2170
2213
  accessibilityRole: "button",
2171
2214
  accessibilityLabel,
2172
2215
  accessibilityState: { disabled },
2173
- style: ({ pressed }) => [styles24.pressable, containerStyle, pressed && { opacity: 0.75 }, style],
2216
+ style: ({ pressed }) => [styles25.pressable, containerStyle, pressed && { opacity: 0.75 }, style],
2174
2217
  children: [
2175
- iconStart && /* @__PURE__ */ jsx28(View22, { importantForAccessibility: "no-hide-descendants", accessibilityElementsHidden: true, children: iconStart }),
2176
- children && (isIconOnly ? children : /* @__PURE__ */ jsx28(ScaledText, { style: [styles24.label, { fontSize, color: textColor }], children })),
2177
- iconEnd && /* @__PURE__ */ jsx28(View22, { importantForAccessibility: "no-hide-descendants", children: iconEnd })
2218
+ iconStart && /* @__PURE__ */ jsx29(View22, { importantForAccessibility: "no-hide-descendants", accessibilityElementsHidden: true, children: iconStart }),
2219
+ children && (isIconOnly ? children : /* @__PURE__ */ jsx29(ScaledText, { style: [styles25.label, { fontSize, color: textColor }], children })),
2220
+ iconEnd && /* @__PURE__ */ jsx29(View22, { importantForAccessibility: "no-hide-descendants", children: iconEnd })
2178
2221
  ]
2179
2222
  }
2180
2223
  );
2181
2224
  }
2182
2225
 
2183
2226
  // src/components/interaction/Rating/Rating.tsx
2184
- import { StyleSheet as StyleSheet26, View as View23 } from "react-native";
2185
- import { jsx as jsx29 } from "react/jsx-runtime";
2227
+ import { StyleSheet as StyleSheet27, View as View23 } from "react-native";
2228
+ import { jsx as jsx30 } from "react/jsx-runtime";
2186
2229
  var STAR_SIZE = 24;
2187
- var styles25 = StyleSheet26.create({
2230
+ var styles26 = StyleSheet27.create({
2188
2231
  container: {
2189
2232
  flexDirection: "row",
2190
2233
  alignItems: "center"
@@ -2197,17 +2240,17 @@ var styles25 = StyleSheet26.create({
2197
2240
  function Rating({ value, max = 5, style, accessibilityLabel }) {
2198
2241
  const { colors: colors2 } = useTheme();
2199
2242
  const label = accessibilityLabel ?? `${value} out of ${max} stars`;
2200
- return /* @__PURE__ */ jsx29(
2243
+ return /* @__PURE__ */ jsx30(
2201
2244
  View23,
2202
2245
  {
2203
- style: [styles25.container, style],
2246
+ style: [styles26.container, style],
2204
2247
  accessibilityRole: "image",
2205
2248
  accessibilityLabel: label,
2206
- children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ jsx29(
2249
+ children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ jsx30(
2207
2250
  ScaledText,
2208
2251
  {
2209
2252
  style: [
2210
- styles25.star,
2253
+ styles26.star,
2211
2254
  { color: i < value ? colors2.colorWarning : colors2.colorBgSubtle }
2212
2255
  ],
2213
2256
  importantForAccessibility: "no",
@@ -2221,13 +2264,13 @@ function Rating({ value, max = 5, style, accessibilityLabel }) {
2221
2264
  }
2222
2265
 
2223
2266
  // src/components/interaction/form/Switch/Switch.tsx
2224
- import { Switch as RNSwitch, View as View24, StyleSheet as StyleSheet28 } from "react-native";
2267
+ import { Switch as RNSwitch, View as View24, StyleSheet as StyleSheet29 } from "react-native";
2225
2268
 
2226
2269
  // src/components/interaction/form/atoms/Label.tsx
2227
- import { jsx as jsx30 } from "react/jsx-runtime";
2270
+ import { jsx as jsx31 } from "react/jsx-runtime";
2228
2271
  function Label({ label, style }) {
2229
2272
  const { colors: colors2 } = useTheme();
2230
- return /* @__PURE__ */ jsx30(
2273
+ return /* @__PURE__ */ jsx31(
2231
2274
  ScaledText,
2232
2275
  {
2233
2276
  style: [
@@ -2246,9 +2289,9 @@ function Label({ label, style }) {
2246
2289
  }
2247
2290
 
2248
2291
  // src/components/interaction/form/atoms/Message.tsx
2249
- import { StyleSheet as StyleSheet27 } from "react-native";
2250
- import { jsx as jsx31 } from "react/jsx-runtime";
2251
- var styles26 = StyleSheet27.create({
2292
+ import { StyleSheet as StyleSheet28 } from "react-native";
2293
+ import { jsx as jsx32 } from "react/jsx-runtime";
2294
+ var styles27 = StyleSheet28.create({
2252
2295
  base: {
2253
2296
  fontFamily: font.family.body,
2254
2297
  fontSize: font.size.bodyS,
@@ -2259,20 +2302,20 @@ function Message({ message, type, style }) {
2259
2302
  const { colors: colors2 } = useTheme();
2260
2303
  if (!message) return null;
2261
2304
  const color = type === "error" ? colors2.colorError : colors2.colorOnBgSubtle;
2262
- return /* @__PURE__ */ jsx31(
2305
+ return /* @__PURE__ */ jsx32(
2263
2306
  ScaledText,
2264
2307
  {
2265
2308
  accessibilityRole: type === "error" ? "alert" : "none",
2266
2309
  accessibilityLiveRegion: type === "error" ? "assertive" : "polite",
2267
- style: [styles26.base, { color }, style],
2310
+ style: [styles27.base, { color }, style],
2268
2311
  children: message
2269
2312
  }
2270
2313
  );
2271
2314
  }
2272
2315
 
2273
2316
  // src/components/interaction/form/Switch/Switch.tsx
2274
- import { jsx as jsx32, jsxs as jsxs17 } from "react/jsx-runtime";
2275
- var styles27 = StyleSheet28.create({
2317
+ import { jsx as jsx33, jsxs as jsxs17 } from "react/jsx-runtime";
2318
+ var styles28 = StyleSheet29.create({
2276
2319
  container: {
2277
2320
  gap: spacing.xxs
2278
2321
  },
@@ -2292,9 +2335,9 @@ function Switch({
2292
2335
  style
2293
2336
  }) {
2294
2337
  const { colors: colors2 } = useTheme();
2295
- return /* @__PURE__ */ jsxs17(View24, { style: [styles27.container, style], children: [
2296
- /* @__PURE__ */ jsxs17(View24, { style: styles27.row, children: [
2297
- /* @__PURE__ */ jsx32(
2338
+ return /* @__PURE__ */ jsxs17(View24, { style: [styles28.container, style], children: [
2339
+ /* @__PURE__ */ jsxs17(View24, { style: styles28.row, children: [
2340
+ /* @__PURE__ */ jsx33(
2298
2341
  RNSwitch,
2299
2342
  {
2300
2343
  value,
@@ -2307,18 +2350,18 @@ function Switch({
2307
2350
  trackColor: { false: colors2.colorBgSubtle, true: colors2.colorBlueSubtle }
2308
2351
  }
2309
2352
  ),
2310
- /* @__PURE__ */ jsx32(Label, { label })
2353
+ /* @__PURE__ */ jsx33(Label, { label })
2311
2354
  ] }),
2312
- /* @__PURE__ */ jsx32(Message, { type: "error", message: error }),
2313
- /* @__PURE__ */ jsx32(Message, { type: "hint", message: hint })
2355
+ /* @__PURE__ */ jsx33(Message, { type: "error", message: error }),
2356
+ /* @__PURE__ */ jsx33(Message, { type: "hint", message: hint })
2314
2357
  ] });
2315
2358
  }
2316
2359
 
2317
2360
  // src/components/interaction/form/Checkbox/Checkbox.tsx
2318
- import { StyleSheet as StyleSheet29, View as View25, Pressable as Pressable15 } from "react-native";
2319
- import { jsx as jsx33, jsxs as jsxs18 } from "react/jsx-runtime";
2361
+ import { StyleSheet as StyleSheet30, View as View25, Pressable as Pressable15 } from "react-native";
2362
+ import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
2320
2363
  var BOX = 22;
2321
- var styles28 = StyleSheet29.create({
2364
+ var styles29 = StyleSheet30.create({
2322
2365
  container: {
2323
2366
  gap: spacing.xxs
2324
2367
  },
@@ -2355,7 +2398,7 @@ function Checkbox({
2355
2398
  const { colors: colors2 } = useTheme();
2356
2399
  const borderColor = error ? colors2.colorError : checked ? colors2.colorInteractive : colors2.colorOnBg;
2357
2400
  const bgColor = checked ? colors2.colorInteractive : "transparent";
2358
- return /* @__PURE__ */ jsxs18(View25, { style: [styles28.container, style], children: [
2401
+ return /* @__PURE__ */ jsxs18(View25, { style: [styles29.container, style], children: [
2359
2402
  /* @__PURE__ */ jsxs18(
2360
2403
  Pressable15,
2361
2404
  {
@@ -2364,22 +2407,22 @@ function Checkbox({
2364
2407
  accessibilityLabel: typeof label === "string" ? label : name,
2365
2408
  accessibilityState: { checked, disabled },
2366
2409
  disabled,
2367
- style: ({ pressed }) => [styles28.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2410
+ style: ({ pressed }) => [styles29.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2368
2411
  children: [
2369
- /* @__PURE__ */ jsx33(View25, { style: [styles28.box, { borderColor, backgroundColor: bgColor }], children: checked && /* @__PURE__ */ jsx33(Label, { label: "\u2713", style: [styles28.checkmark, { color: colors2.colorOnInteractive }] }) }),
2370
- /* @__PURE__ */ jsx33(Label, { label })
2412
+ /* @__PURE__ */ jsx34(View25, { style: [styles29.box, { borderColor, backgroundColor: bgColor }], children: checked && /* @__PURE__ */ jsx34(Label, { label: "\u2713", style: [styles29.checkmark, { color: colors2.colorOnInteractive }] }) }),
2413
+ /* @__PURE__ */ jsx34(Label, { label })
2371
2414
  ]
2372
2415
  }
2373
2416
  ),
2374
- /* @__PURE__ */ jsx33(Message, { type: "error", message: error }),
2375
- /* @__PURE__ */ jsx33(Message, { type: "hint", message: hint })
2417
+ /* @__PURE__ */ jsx34(Message, { type: "error", message: error }),
2418
+ /* @__PURE__ */ jsx34(Message, { type: "hint", message: hint })
2376
2419
  ] });
2377
2420
  }
2378
2421
 
2379
2422
  // src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx
2380
- import { StyleSheet as StyleSheet30, View as View26 } from "react-native";
2381
- import { jsx as jsx34, jsxs as jsxs19 } from "react/jsx-runtime";
2382
- var styles29 = StyleSheet30.create({
2423
+ import { StyleSheet as StyleSheet31, View as View26 } from "react-native";
2424
+ import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
2425
+ var styles30 = StyleSheet31.create({
2383
2426
  container: {
2384
2427
  gap: spacing.xs
2385
2428
  },
@@ -2409,28 +2452,28 @@ function CheckboxGroup({
2409
2452
  return /* @__PURE__ */ jsxs19(
2410
2453
  View26,
2411
2454
  {
2412
- style: [styles29.container, disabled && { opacity: 0.4 }, style],
2455
+ style: [styles30.container, disabled && { opacity: 0.4 }, style],
2413
2456
  accessibilityRole: "none",
2414
2457
  accessibilityLabel: legend,
2415
2458
  children: [
2416
- /* @__PURE__ */ jsxs19(ScaledText, { style: [styles29.legend, { color: colors2.colorOnBg }], children: [
2459
+ /* @__PURE__ */ jsxs19(ScaledText, { style: [styles30.legend, { color: colors2.colorOnBg }], children: [
2417
2460
  legend,
2418
- required && /* @__PURE__ */ jsx34(ScaledText, { style: [styles29.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2461
+ required && /* @__PURE__ */ jsx35(ScaledText, { style: [styles30.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2419
2462
  ] }),
2420
- /* @__PURE__ */ jsx34(View26, { style: styles29.items, children }),
2421
- /* @__PURE__ */ jsx34(Message, { type: "error", message: error }),
2422
- /* @__PURE__ */ jsx34(Message, { type: "hint", message: hint })
2463
+ /* @__PURE__ */ jsx35(View26, { style: styles30.items, children }),
2464
+ /* @__PURE__ */ jsx35(Message, { type: "error", message: error }),
2465
+ /* @__PURE__ */ jsx35(Message, { type: "hint", message: hint })
2423
2466
  ]
2424
2467
  }
2425
2468
  );
2426
2469
  }
2427
2470
 
2428
2471
  // src/components/interaction/form/Radio/Radio.tsx
2429
- import { StyleSheet as StyleSheet31, View as View27, Pressable as Pressable16 } from "react-native";
2430
- import { jsx as jsx35, jsxs as jsxs20 } from "react/jsx-runtime";
2472
+ import { StyleSheet as StyleSheet32, View as View27, Pressable as Pressable16 } from "react-native";
2473
+ import { jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
2431
2474
  var DOT = 22;
2432
2475
  var INNER = 10;
2433
- var styles30 = StyleSheet31.create({
2476
+ var styles31 = StyleSheet32.create({
2434
2477
  container: {
2435
2478
  gap: spacing.xxs
2436
2479
  },
@@ -2466,7 +2509,7 @@ function Radio({
2466
2509
  }) {
2467
2510
  const { colors: colors2 } = useTheme();
2468
2511
  const borderColor = error ? colors2.colorError : checked ? colors2.colorInteractive : colors2.colorOnBg;
2469
- return /* @__PURE__ */ jsxs20(View27, { style: [styles30.container, style], children: [
2512
+ return /* @__PURE__ */ jsxs20(View27, { style: [styles31.container, style], children: [
2470
2513
  /* @__PURE__ */ jsxs20(
2471
2514
  Pressable16,
2472
2515
  {
@@ -2475,22 +2518,22 @@ function Radio({
2475
2518
  accessibilityLabel: typeof label === "string" ? label : name,
2476
2519
  accessibilityState: { checked, disabled },
2477
2520
  disabled,
2478
- style: ({ pressed }) => [styles30.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2521
+ style: ({ pressed }) => [styles31.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2479
2522
  children: [
2480
- /* @__PURE__ */ jsx35(View27, { style: [styles30.outer, { borderColor }], children: checked && /* @__PURE__ */ jsx35(View27, { style: [styles30.inner, { backgroundColor: colors2.colorInteractive }] }) }),
2481
- /* @__PURE__ */ jsx35(Label, { label })
2523
+ /* @__PURE__ */ jsx36(View27, { style: [styles31.outer, { borderColor }], children: checked && /* @__PURE__ */ jsx36(View27, { style: [styles31.inner, { backgroundColor: colors2.colorInteractive }] }) }),
2524
+ /* @__PURE__ */ jsx36(Label, { label })
2482
2525
  ]
2483
2526
  }
2484
2527
  ),
2485
- /* @__PURE__ */ jsx35(Message, { type: "error", message: error }),
2486
- /* @__PURE__ */ jsx35(Message, { type: "hint", message: hint })
2528
+ /* @__PURE__ */ jsx36(Message, { type: "error", message: error }),
2529
+ /* @__PURE__ */ jsx36(Message, { type: "hint", message: hint })
2487
2530
  ] });
2488
2531
  }
2489
2532
 
2490
2533
  // src/components/interaction/form/RadioGroup/RadioGroup.tsx
2491
- import { StyleSheet as StyleSheet32, View as View28 } from "react-native";
2492
- import { jsx as jsx36, jsxs as jsxs21 } from "react/jsx-runtime";
2493
- var styles31 = StyleSheet32.create({
2534
+ import { StyleSheet as StyleSheet33, View as View28 } from "react-native";
2535
+ import { jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
2536
+ var styles32 = StyleSheet33.create({
2494
2537
  container: {
2495
2538
  gap: spacing.xs
2496
2539
  },
@@ -2520,26 +2563,26 @@ function RadioGroup({
2520
2563
  return /* @__PURE__ */ jsxs21(
2521
2564
  View28,
2522
2565
  {
2523
- style: [styles31.container, disabled && { opacity: 0.4 }, style],
2566
+ style: [styles32.container, disabled && { opacity: 0.4 }, style],
2524
2567
  accessibilityRole: "radiogroup",
2525
2568
  accessibilityLabel: legend,
2526
2569
  children: [
2527
- /* @__PURE__ */ jsxs21(ScaledText, { style: [styles31.legend, { color: colors2.colorOnBg }], children: [
2570
+ /* @__PURE__ */ jsxs21(ScaledText, { style: [styles32.legend, { color: colors2.colorOnBg }], children: [
2528
2571
  legend,
2529
- required && /* @__PURE__ */ jsx36(ScaledText, { style: [styles31.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2572
+ required && /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2530
2573
  ] }),
2531
- /* @__PURE__ */ jsx36(View28, { style: styles31.items, children }),
2532
- /* @__PURE__ */ jsx36(Message, { type: "error", message: error }),
2533
- /* @__PURE__ */ jsx36(Message, { type: "hint", message: hint })
2574
+ /* @__PURE__ */ jsx37(View28, { style: styles32.items, children }),
2575
+ /* @__PURE__ */ jsx37(Message, { type: "error", message: error }),
2576
+ /* @__PURE__ */ jsx37(Message, { type: "hint", message: hint })
2534
2577
  ]
2535
2578
  }
2536
2579
  );
2537
2580
  }
2538
2581
 
2539
2582
  // src/components/interaction/form/FileInput/FileInput.tsx
2540
- import { StyleSheet as StyleSheet33, View as View29, Pressable as Pressable17 } from "react-native";
2541
- import { jsx as jsx37, jsxs as jsxs22 } from "react/jsx-runtime";
2542
- var styles32 = StyleSheet33.create({
2583
+ import { StyleSheet as StyleSheet34, View as View29, Pressable as Pressable17 } from "react-native";
2584
+ import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
2585
+ var styles33 = StyleSheet34.create({
2543
2586
  container: {
2544
2587
  gap: spacing.xxs
2545
2588
  },
@@ -2551,7 +2594,6 @@ var styles32 = StyleSheet33.create({
2551
2594
  paddingHorizontal: spacing.m,
2552
2595
  borderWidth: 2,
2553
2596
  borderStyle: "dashed",
2554
- borderRadius: border.radius.s,
2555
2597
  minHeight: 120
2556
2598
  },
2557
2599
  icon: {
@@ -2592,10 +2634,10 @@ function FileInput({
2592
2634
  fileNames = [],
2593
2635
  style
2594
2636
  }) {
2595
- const { colors: colors2 } = useTheme();
2637
+ const { colors: colors2, radius } = useTheme();
2596
2638
  const borderColor = error ? colors2.colorError : colors2.colorBgSubtle;
2597
- return /* @__PURE__ */ jsxs22(View29, { style: [styles32.container, style], testID: name, children: [
2598
- /* @__PURE__ */ jsx37(
2639
+ return /* @__PURE__ */ jsxs22(View29, { style: [styles33.container, style], testID: name, children: [
2640
+ /* @__PURE__ */ jsx38(
2599
2641
  Label,
2600
2642
  {
2601
2643
  label: required ? `${label} *` : label
@@ -2610,44 +2652,46 @@ function FileInput({
2610
2652
  accessibilityLabel: `${label}, tap to select file`,
2611
2653
  accessibilityState: { disabled },
2612
2654
  style: ({ pressed }) => [
2613
- styles32.dropZone,
2655
+ styles33.dropZone,
2614
2656
  {
2615
2657
  borderColor,
2658
+ borderRadius: radius.field,
2616
2659
  backgroundColor: "transparent"
2617
2660
  },
2618
2661
  pressed && { opacity: 0.7 },
2619
2662
  disabled && { opacity: 0.4 }
2620
2663
  ],
2621
2664
  children: [
2622
- /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.icon, { color: colors2.colorInteractive }], children: "\u2191" }),
2623
- /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.prompt, { color: colors2.colorOnBgSubtle }], children: fileNames.length > 0 ? "Selected files:" : "Tap to select file" }),
2624
- fileNames.length > 0 && /* @__PURE__ */ jsx37(View29, { style: styles32.fileList, children: fileNames.map((fileName) => /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.fileName, { color: colors2.colorOnBg }], children: fileName }, fileName)) }),
2625
- accept && /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.acceptHint, { color: colors2.colorOnBgSubtle }], children: accept })
2665
+ /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.icon, { color: colors2.colorInteractive }], children: "\u2191" }),
2666
+ /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.prompt, { color: colors2.colorOnBgSubtle }], children: fileNames.length > 0 ? "Selected files:" : "Tap to select file" }),
2667
+ fileNames.length > 0 && /* @__PURE__ */ jsx38(View29, { style: styles33.fileList, children: fileNames.map((fileName) => /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.fileName, { color: colors2.colorOnBg }], children: fileName }, fileName)) }),
2668
+ accept && /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.acceptHint, { color: colors2.colorOnBgSubtle }], children: accept })
2626
2669
  ]
2627
2670
  }
2628
2671
  ),
2629
- /* @__PURE__ */ jsx37(Message, { type: "error", message: error }),
2630
- /* @__PURE__ */ jsx37(Message, { type: "hint", message: hint })
2672
+ /* @__PURE__ */ jsx38(Message, { type: "error", message: error }),
2673
+ /* @__PURE__ */ jsx38(Message, { type: "hint", message: hint })
2631
2674
  ] });
2632
2675
  }
2633
2676
 
2634
2677
  // src/components/interaction/form/Combobox/Combobox.tsx
2635
2678
  import { useState as useState7, useMemo as useMemo2 } from "react";
2636
- import { StyleSheet as StyleSheet34, View as View30, Pressable as Pressable18, ScrollView as ScrollView4 } from "react-native";
2679
+ import { StyleSheet as StyleSheet35, View as View30, Pressable as Pressable18, ScrollView as ScrollView4 } from "react-native";
2637
2680
 
2638
2681
  // src/components/interaction/form/atoms/inputHelpers.ts
2639
2682
  var OPTICAL_TEXT_SHIFT = -1.5;
2640
2683
 
2641
2684
  // src/components/interaction/form/Combobox/Combobox.tsx
2642
- import { jsx as jsx38, jsxs as jsxs23 } from "react/jsx-runtime";
2685
+ import { jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
2643
2686
  var INPUT_HEIGHT = 44;
2644
2687
  var MAX_DROPDOWN_HEIGHT = 200;
2645
- var styles33 = StyleSheet34.create({
2688
+ var styles34 = StyleSheet35.create({
2646
2689
  container: {
2647
2690
  gap: spacing.xxs
2648
2691
  },
2649
2692
  /**
2650
- * Draws the pill border and provides the fixed 44pt touch-target height.
2693
+ * Draws the rounded border (`radius.field` from the theme) and provides the fixed
2694
+ * 44pt touch-target height.
2651
2695
  * justifyContent: 'center' vertically centers the inner TextInput.
2652
2696
  * position: 'relative' is required for the dropdown's absolute positioning.
2653
2697
  */
@@ -2655,8 +2699,7 @@ var styles33 = StyleSheet34.create({
2655
2699
  position: "relative",
2656
2700
  height: INPUT_HEIGHT,
2657
2701
  justifyContent: "center",
2658
- borderWidth: 1,
2659
- borderRadius: border.radius.full
2702
+ borderWidth: 1
2660
2703
  },
2661
2704
  /**
2662
2705
  * No vertical padding: iOS centers text automatically inside the wrapper height.
@@ -2709,7 +2752,7 @@ function Combobox({
2709
2752
  hint,
2710
2753
  style
2711
2754
  }) {
2712
- const { colors: colors2 } = useTheme();
2755
+ const { colors: colors2, radius } = useTheme();
2713
2756
  const selectedOption = useMemo2(
2714
2757
  () => options.find((o) => o.value === value),
2715
2758
  [options, value]
@@ -2738,21 +2781,22 @@ function Combobox({
2738
2781
  setTimeout(() => setIsOpen(false), 150);
2739
2782
  };
2740
2783
  const borderColor = error ? colors2.colorError : colors2.colorOnBg;
2741
- return /* @__PURE__ */ jsxs23(View30, { style: [styles33.container, style], children: [
2742
- /* @__PURE__ */ jsx38(Label, { label }),
2784
+ return /* @__PURE__ */ jsxs23(View30, { style: [styles34.container, style], children: [
2785
+ /* @__PURE__ */ jsx39(Label, { label }),
2743
2786
  /* @__PURE__ */ jsxs23(
2744
2787
  View30,
2745
2788
  {
2746
2789
  style: [
2747
- styles33.inputWrapper,
2790
+ styles34.inputWrapper,
2748
2791
  {
2749
2792
  borderColor,
2793
+ borderRadius: radius.field,
2750
2794
  backgroundColor: colors2.colorBg
2751
2795
  },
2752
2796
  disabled && { opacity: 0.4 }
2753
2797
  ],
2754
2798
  children: [
2755
- /* @__PURE__ */ jsx38(
2799
+ /* @__PURE__ */ jsx39(
2756
2800
  ScaledTextInput,
2757
2801
  {
2758
2802
  value: inputValue,
@@ -2766,16 +2810,16 @@ function Combobox({
2766
2810
  accessibilityLabel: typeof label === "string" ? label : name,
2767
2811
  accessibilityState: { disabled, expanded: isOpen },
2768
2812
  style: [
2769
- styles33.input,
2813
+ styles34.input,
2770
2814
  { color: colors2.colorOnBg }
2771
2815
  ]
2772
2816
  }
2773
2817
  ),
2774
- isOpen && filtered.length > 0 && /* @__PURE__ */ jsx38(
2818
+ isOpen && filtered.length > 0 && /* @__PURE__ */ jsx39(
2775
2819
  ScrollView4,
2776
2820
  {
2777
2821
  style: [
2778
- styles33.dropdown,
2822
+ styles34.dropdown,
2779
2823
  {
2780
2824
  borderColor: colors2.colorBgSubtle,
2781
2825
  backgroundColor: colors2.colorBg
@@ -2786,7 +2830,7 @@ function Combobox({
2786
2830
  children: filtered.map((option) => {
2787
2831
  const isSelected = option.value === value;
2788
2832
  const isDisabled = option.disabled;
2789
- return /* @__PURE__ */ jsx38(
2833
+ return /* @__PURE__ */ jsx39(
2790
2834
  Pressable18,
2791
2835
  {
2792
2836
  onPress: () => !isDisabled && selectOption(option),
@@ -2795,16 +2839,16 @@ function Combobox({
2795
2839
  accessibilityLabel: option.label,
2796
2840
  accessibilityState: { selected: isSelected, disabled: isDisabled },
2797
2841
  style: ({ pressed }) => [
2798
- styles33.option,
2842
+ styles34.option,
2799
2843
  isSelected && { backgroundColor: colors2.colorBlueSubtle },
2800
2844
  pressed && !isDisabled && { backgroundColor: colors2.colorBgSubtle },
2801
2845
  isDisabled && { opacity: 0.4 }
2802
2846
  ],
2803
- children: /* @__PURE__ */ jsx38(
2847
+ children: /* @__PURE__ */ jsx39(
2804
2848
  ScaledText,
2805
2849
  {
2806
2850
  style: [
2807
- styles33.optionText,
2851
+ styles34.optionText,
2808
2852
  {
2809
2853
  color: isSelected ? colors2.colorInteractive : colors2.colorOnBg
2810
2854
  },
@@ -2822,15 +2866,15 @@ function Combobox({
2822
2866
  ]
2823
2867
  }
2824
2868
  ),
2825
- /* @__PURE__ */ jsx38(Message, { type: "error", message: error }),
2826
- /* @__PURE__ */ jsx38(Message, { type: "hint", message: hint })
2869
+ /* @__PURE__ */ jsx39(Message, { type: "error", message: error }),
2870
+ /* @__PURE__ */ jsx39(Message, { type: "hint", message: hint })
2827
2871
  ] });
2828
2872
  }
2829
2873
 
2830
2874
  // src/components/interaction/form/SegmentedControl/SegmentedControl.tsx
2831
2875
  import { Children } from "react";
2832
- import { StyleSheet as StyleSheet35, View as View31, Pressable as Pressable19 } from "react-native";
2833
- import { jsx as jsx39 } from "react/jsx-runtime";
2876
+ import { StyleSheet as StyleSheet36, View as View31, Pressable as Pressable19 } from "react-native";
2877
+ import { jsx as jsx40 } from "react/jsx-runtime";
2834
2878
  var TRACK_PADDING = spacing.xxxs;
2835
2879
  var sizeTokens2 = {
2836
2880
  small: { minHeight: 32, fontSize: font.size.bodyS, px: spacing.s, py: spacing.xxs },
@@ -2845,7 +2889,7 @@ var thumbShadow = {
2845
2889
  shadowRadius: 2,
2846
2890
  elevation: 2
2847
2891
  };
2848
- var styles34 = StyleSheet35.create({
2892
+ var styles35 = StyleSheet36.create({
2849
2893
  track: {
2850
2894
  flexDirection: "row",
2851
2895
  borderRadius: border.radius.full,
@@ -2880,10 +2924,10 @@ function SegmentedControl({
2880
2924
  const items = Children.toArray(children);
2881
2925
  const trackBg = colors2.colorBgSubtle;
2882
2926
  const thumbBg = variant === "outline" ? colors2.colorBg : colors2.colorInteractive;
2883
- return /* @__PURE__ */ jsx39(
2927
+ return /* @__PURE__ */ jsx40(
2884
2928
  View31,
2885
2929
  {
2886
- style: [styles34.track, { backgroundColor: trackBg }, style],
2930
+ style: [styles35.track, { backgroundColor: trackBg }, style],
2887
2931
  accessibilityRole: "tablist",
2888
2932
  accessibilityLabel,
2889
2933
  children: items.map((child, index) => {
@@ -2896,7 +2940,7 @@ function SegmentedControl({
2896
2940
  paddingVertical: py,
2897
2941
  ...isActive ? { backgroundColor: thumbBg, ...thumbShadow } : { backgroundColor: "transparent" }
2898
2942
  };
2899
- return /* @__PURE__ */ jsx39(
2943
+ return /* @__PURE__ */ jsx40(
2900
2944
  Pressable19,
2901
2945
  {
2902
2946
  onPress: () => !disabled && onValueChange?.(index),
@@ -2905,15 +2949,15 @@ function SegmentedControl({
2905
2949
  accessibilityLabel: label ?? void 0,
2906
2950
  accessibilityState: { selected: isActive, disabled },
2907
2951
  style: ({ pressed }) => [
2908
- styles34.segment,
2952
+ styles35.segment,
2909
2953
  segmentStyle,
2910
2954
  pressed && !disabled && { opacity: 0.7 },
2911
2955
  disabled && { opacity: 0.4 }
2912
2956
  ],
2913
- children: label !== null ? /* @__PURE__ */ jsx39(
2957
+ children: label !== null ? /* @__PURE__ */ jsx40(
2914
2958
  ScaledText,
2915
2959
  {
2916
- style: [styles34.label, { fontSize, color: labelColor }],
2960
+ style: [styles35.label, { fontSize, color: labelColor }],
2917
2961
  numberOfLines: 1,
2918
2962
  adjustsFontSizeToFit: true,
2919
2963
  minimumFontScale: 0.5,
@@ -2930,8 +2974,8 @@ function SegmentedControl({
2930
2974
 
2931
2975
  // src/components/interaction/form/FormInput/FormInput.tsx
2932
2976
  import { useState as useState8 } from "react";
2933
- import { StyleSheet as StyleSheet36, View as View32 } from "react-native";
2934
- import { jsx as jsx40, jsxs as jsxs24 } from "react/jsx-runtime";
2977
+ import { StyleSheet as StyleSheet37, View as View32 } from "react-native";
2978
+ import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
2935
2979
  var INPUT_HEIGHT2 = 44;
2936
2980
  var keyboardTypeMap = {
2937
2981
  text: "default",
@@ -2942,19 +2986,19 @@ var keyboardTypeMap = {
2942
2986
  number: "numeric",
2943
2987
  search: "default"
2944
2988
  };
2945
- var styles35 = StyleSheet36.create({
2989
+ var styles36 = StyleSheet37.create({
2946
2990
  container: {
2947
2991
  gap: spacing.xxs
2948
2992
  },
2949
2993
  /**
2950
- * The wrapper draws the pill border and provides at least 44pt touch-target height.
2994
+ * The wrapper draws the rounded border (`radius.field` from the theme) and provides
2995
+ * at least 44pt touch-target height.
2951
2996
  * justifyContent: 'center' vertically centers the inner TextInput on both iOS and Android.
2952
2997
  */
2953
2998
  inputWrapper: {
2954
2999
  minHeight: INPUT_HEIGHT2,
2955
3000
  justifyContent: "center",
2956
- borderWidth: 1,
2957
- borderRadius: border.radius.full
3001
+ borderWidth: 1
2958
3002
  },
2959
3003
  /**
2960
3004
  * No vertical padding: iOS centers text automatically inside the wrapper height.
@@ -2987,23 +3031,24 @@ function FormInput({
2987
3031
  onFocus,
2988
3032
  style
2989
3033
  }) {
2990
- const { colors: colors2 } = useTheme();
3034
+ const { colors: colors2, radius } = useTheme();
2991
3035
  const [focused, setFocused] = useState8(false);
2992
3036
  const borderColor = error ? colors2.colorError : focused ? colors2.colorInteractive : colors2.colorOnBg;
2993
- return /* @__PURE__ */ jsxs24(View32, { style: [styles35.container, style], children: [
2994
- /* @__PURE__ */ jsx40(Label, { label }),
2995
- /* @__PURE__ */ jsx40(
3037
+ return /* @__PURE__ */ jsxs24(View32, { style: [styles36.container, style], children: [
3038
+ /* @__PURE__ */ jsx41(Label, { label }),
3039
+ /* @__PURE__ */ jsx41(
2996
3040
  View32,
2997
3041
  {
2998
3042
  style: [
2999
- styles35.inputWrapper,
3043
+ styles36.inputWrapper,
3000
3044
  {
3001
3045
  borderColor,
3046
+ borderRadius: radius.field,
3002
3047
  backgroundColor: colors2.colorBg
3003
3048
  },
3004
3049
  disabled && { opacity: 0.4 }
3005
3050
  ],
3006
- children: /* @__PURE__ */ jsx40(
3051
+ children: /* @__PURE__ */ jsx41(
3007
3052
  ScaledTextInput,
3008
3053
  {
3009
3054
  accessibilityLabel: typeof label === "string" ? label : name,
@@ -3028,23 +3073,23 @@ function FormInput({
3028
3073
  onBlur?.();
3029
3074
  },
3030
3075
  style: [
3031
- styles35.input,
3076
+ styles36.input,
3032
3077
  { color: colors2.colorOnBg }
3033
3078
  ]
3034
3079
  }
3035
3080
  )
3036
3081
  }
3037
3082
  ),
3038
- /* @__PURE__ */ jsx40(Message, { type: "error", message: error }),
3039
- /* @__PURE__ */ jsx40(Message, { type: "hint", message: hint })
3083
+ /* @__PURE__ */ jsx41(Message, { type: "error", message: error }),
3084
+ /* @__PURE__ */ jsx41(Message, { type: "hint", message: hint })
3040
3085
  ] });
3041
3086
  }
3042
3087
 
3043
3088
  // src/components/interaction/form/Textarea/Textarea.tsx
3044
3089
  import { useState as useState9 } from "react";
3045
- import { StyleSheet as StyleSheet37, View as View33 } from "react-native";
3046
- import { jsx as jsx41, jsxs as jsxs25 } from "react/jsx-runtime";
3047
- var styles36 = StyleSheet37.create({
3090
+ import { StyleSheet as StyleSheet38, View as View33 } from "react-native";
3091
+ import { jsx as jsx42, jsxs as jsxs25 } from "react/jsx-runtime";
3092
+ var styles37 = StyleSheet38.create({
3048
3093
  container: {
3049
3094
  gap: spacing.xxs
3050
3095
  },
@@ -3055,7 +3100,6 @@ var styles36 = StyleSheet37.create({
3055
3100
  paddingHorizontal: spacing.s,
3056
3101
  paddingVertical: spacing.xs,
3057
3102
  borderWidth: 1,
3058
- borderRadius: border.radius.xs,
3059
3103
  minHeight: 100,
3060
3104
  textAlignVertical: "top"
3061
3105
  }
@@ -3075,12 +3119,12 @@ function Textarea({
3075
3119
  onFocus,
3076
3120
  style
3077
3121
  }) {
3078
- const { colors: colors2 } = useTheme();
3122
+ const { colors: colors2, radius } = useTheme();
3079
3123
  const [focused, setFocused] = useState9(false);
3080
3124
  const borderColor = error ? colors2.colorError : focused ? colors2.colorInteractive : colors2.colorOnBg;
3081
- return /* @__PURE__ */ jsxs25(View33, { style: [styles36.container, style], children: [
3082
- /* @__PURE__ */ jsx41(Label, { label }),
3083
- /* @__PURE__ */ jsx41(
3125
+ return /* @__PURE__ */ jsxs25(View33, { style: [styles37.container, style], children: [
3126
+ /* @__PURE__ */ jsx42(Label, { label }),
3127
+ /* @__PURE__ */ jsx42(
3084
3128
  ScaledTextInput,
3085
3129
  {
3086
3130
  accessibilityLabel: typeof label === "string" ? label : name,
@@ -3103,9 +3147,10 @@ function Textarea({
3103
3147
  onBlur?.();
3104
3148
  },
3105
3149
  style: [
3106
- styles36.textarea,
3150
+ styles37.textarea,
3107
3151
  {
3108
3152
  borderColor,
3153
+ borderRadius: radius.field,
3109
3154
  color: colors2.colorOnBg,
3110
3155
  backgroundColor: colors2.colorBg
3111
3156
  },
@@ -3113,16 +3158,16 @@ function Textarea({
3113
3158
  ]
3114
3159
  }
3115
3160
  ),
3116
- /* @__PURE__ */ jsx41(Message, { type: "error", message: error }),
3117
- /* @__PURE__ */ jsx41(Message, { type: "hint", message: hint })
3161
+ /* @__PURE__ */ jsx42(Message, { type: "error", message: error }),
3162
+ /* @__PURE__ */ jsx42(Message, { type: "hint", message: hint })
3118
3163
  ] });
3119
3164
  }
3120
3165
 
3121
3166
  // src/components/interaction/form/Select/Select.tsx
3122
3167
  import { useState as useState10 } from "react";
3123
- import { StyleSheet as StyleSheet38, View as View34, Pressable as Pressable20, Modal, FlatList, SafeAreaView } from "react-native";
3124
- import { jsx as jsx42, jsxs as jsxs26 } from "react/jsx-runtime";
3125
- var styles37 = StyleSheet38.create({
3168
+ import { StyleSheet as StyleSheet39, View as View34, Pressable as Pressable20, Modal, FlatList, SafeAreaView } from "react-native";
3169
+ import { jsx as jsx43, jsxs as jsxs26 } from "react/jsx-runtime";
3170
+ var styles38 = StyleSheet39.create({
3126
3171
  container: {
3127
3172
  gap: spacing.xxs
3128
3173
  },
@@ -3133,7 +3178,6 @@ var styles37 = StyleSheet38.create({
3133
3178
  paddingHorizontal: spacing.s,
3134
3179
  paddingVertical: spacing.xs,
3135
3180
  borderWidth: 1,
3136
- borderRadius: border.radius.full,
3137
3181
  minHeight: 44
3138
3182
  },
3139
3183
  triggerText: {
@@ -3143,8 +3187,6 @@ var styles37 = StyleSheet38.create({
3143
3187
  flex: 1
3144
3188
  },
3145
3189
  chevron: {
3146
- fontFamily: font.family.body,
3147
- fontSize: font.size.body,
3148
3190
  marginStart: spacing.xs
3149
3191
  },
3150
3192
  overlay: {
@@ -3200,7 +3242,7 @@ function Select({
3200
3242
  onChange,
3201
3243
  style
3202
3244
  }) {
3203
- const { colors: colors2 } = useTheme();
3245
+ const { colors: colors2, radius } = useTheme();
3204
3246
  const [open, setOpen] = useState10(false);
3205
3247
  const selectedOption = options.find((o) => o.value === value);
3206
3248
  const displayText = selectedOption?.label ?? placeholder;
@@ -3210,8 +3252,8 @@ function Select({
3210
3252
  onChange?.(optionValue);
3211
3253
  setOpen(false);
3212
3254
  };
3213
- return /* @__PURE__ */ jsxs26(View34, { style: [styles37.container, style], children: [
3214
- /* @__PURE__ */ jsx42(Label, { label }),
3255
+ return /* @__PURE__ */ jsxs26(View34, { style: [styles38.container, style], children: [
3256
+ /* @__PURE__ */ jsx43(Label, { label }),
3215
3257
  /* @__PURE__ */ jsxs26(
3216
3258
  Pressable20,
3217
3259
  {
@@ -3222,19 +3264,20 @@ function Select({
3222
3264
  disabled,
3223
3265
  onPress: () => setOpen(true),
3224
3266
  style: [
3225
- styles37.trigger,
3267
+ styles38.trigger,
3226
3268
  {
3227
3269
  borderColor,
3270
+ borderRadius: radius.field,
3228
3271
  backgroundColor: colors2.colorBg
3229
3272
  },
3230
3273
  disabled && { opacity: 0.4 }
3231
3274
  ],
3232
3275
  children: [
3233
- /* @__PURE__ */ jsx42(
3276
+ /* @__PURE__ */ jsx43(
3234
3277
  ScaledText,
3235
3278
  {
3236
3279
  style: [
3237
- styles37.triggerText,
3280
+ styles38.triggerText,
3238
3281
  {
3239
3282
  color: isPlaceholder ? colors2.colorOnBgSubtle : colors2.colorOnBg
3240
3283
  }
@@ -3242,52 +3285,59 @@ function Select({
3242
3285
  children: displayText
3243
3286
  }
3244
3287
  ),
3245
- /* @__PURE__ */ jsx42(ScaledText, { style: [styles37.chevron, { color: colors2.colorOnBgSubtle }], "aria-hidden": true, children: "\u25BE" })
3288
+ /* @__PURE__ */ jsx43(
3289
+ Chevron,
3290
+ {
3291
+ testID: "bds-select-chevron",
3292
+ color: colors2.colorOnBgSubtle,
3293
+ style: styles38.chevron
3294
+ }
3295
+ )
3246
3296
  ]
3247
3297
  }
3248
3298
  ),
3249
- /* @__PURE__ */ jsx42(
3299
+ /* @__PURE__ */ jsx43(
3250
3300
  Modal,
3251
3301
  {
3252
3302
  visible: open,
3253
3303
  transparent: true,
3254
3304
  animationType: "slide",
3255
3305
  onRequestClose: () => setOpen(false),
3256
- children: /* @__PURE__ */ jsx42(
3306
+ children: /* @__PURE__ */ jsx43(
3257
3307
  Pressable20,
3258
3308
  {
3259
- style: styles37.overlay,
3309
+ style: styles38.overlay,
3260
3310
  onPress: () => setOpen(false),
3261
3311
  accessibilityRole: "button",
3262
3312
  accessibilityLabel: "Close options",
3263
- children: /* @__PURE__ */ jsx42(
3313
+ children: /* @__PURE__ */ jsx43(
3264
3314
  Pressable20,
3265
3315
  {
3266
- style: [styles37.sheet, { backgroundColor: colors2.colorBg }],
3316
+ style: [styles38.sheet, { backgroundColor: colors2.colorBg }],
3267
3317
  onPress: () => {
3268
3318
  },
3269
3319
  children: /* @__PURE__ */ jsxs26(SafeAreaView, { children: [
3270
- /* @__PURE__ */ jsxs26(View34, { style: styles37.sheetHeader, children: [
3271
- /* @__PURE__ */ jsx42(ScaledText, { style: [styles37.sheetTitle, { color: colors2.colorOnBg }], children: typeof label === "string" ? label : "Select" }),
3272
- /* @__PURE__ */ jsx42(
3320
+ /* @__PURE__ */ jsxs26(View34, { style: styles38.sheetHeader, children: [
3321
+ /* @__PURE__ */ jsx43(ScaledText, { style: [styles38.sheetTitle, { color: colors2.colorOnBg }], children: typeof label === "string" ? label : "Select" }),
3322
+ /* @__PURE__ */ jsx43(
3273
3323
  Pressable20,
3274
3324
  {
3275
3325
  accessibilityRole: "button",
3276
3326
  accessibilityLabel: "Close",
3277
3327
  onPress: () => setOpen(false),
3278
3328
  hitSlop: 8,
3279
- children: /* @__PURE__ */ jsx42(ScaledText, { style: [styles37.closeText, { color: colors2.colorInteractive }], children: "Done" })
3329
+ children: /* @__PURE__ */ jsx43(ScaledText, { style: [styles38.closeText, { color: colors2.colorInteractive }], children: "Done" })
3280
3330
  }
3281
3331
  )
3282
3332
  ] }),
3283
- /* @__PURE__ */ jsx42(
3333
+ /* @__PURE__ */ jsx43(
3284
3334
  FlatList,
3285
3335
  {
3286
3336
  data: options,
3287
3337
  keyExtractor: (item) => item.value,
3288
3338
  renderItem: ({ item }) => {
3289
3339
  const isSelected = item.value === value;
3290
- return /* @__PURE__ */ jsx42(
3340
+ return /* @__PURE__ */ jsx43(
3291
3341
  Pressable20,
3292
3342
  {
3293
3343
  accessibilityRole: "button",
@@ -3299,16 +3349,16 @@ function Select({
3299
3349
  disabled: item.disabled,
3300
3350
  onPress: () => handleSelect(item.value),
3301
3351
  style: ({ pressed }) => [
3302
- styles37.optionItem,
3352
+ styles38.optionItem,
3303
3353
  isSelected && { backgroundColor: colors2.colorBgSubtle },
3304
3354
  pressed && { opacity: 0.7 },
3305
3355
  item.disabled && { opacity: 0.4 }
3306
3356
  ],
3307
- children: /* @__PURE__ */ jsx42(
3357
+ children: /* @__PURE__ */ jsx43(
3308
3358
  ScaledText,
3309
3359
  {
3310
3360
  style: [
3311
- styles37.optionText,
3361
+ styles38.optionText,
3312
3362
  {
3313
3363
  color: isSelected ? colors2.colorInteractive : colors2.colorOnBg,
3314
3364
  fontWeight: isSelected ? font.weight.semibold : font.weight.body
@@ -3329,18 +3379,18 @@ function Select({
3329
3379
  )
3330
3380
  }
3331
3381
  ),
3332
- /* @__PURE__ */ jsx42(Message, { type: "error", message: error }),
3333
- /* @__PURE__ */ jsx42(Message, { type: "hint", message: hint })
3382
+ /* @__PURE__ */ jsx43(Message, { type: "error", message: error }),
3383
+ /* @__PURE__ */ jsx43(Message, { type: "hint", message: hint })
3334
3384
  ] });
3335
3385
  }
3336
3386
 
3337
3387
  // src/components/interaction/form/Slider/Slider.tsx
3338
3388
  import { useState as useState11 } from "react";
3339
- import { StyleSheet as StyleSheet39, View as View35 } from "react-native";
3340
- import { jsx as jsx43, jsxs as jsxs27 } from "react/jsx-runtime";
3389
+ import { StyleSheet as StyleSheet40, View as View35 } from "react-native";
3390
+ import { jsx as jsx44, jsxs as jsxs27 } from "react/jsx-runtime";
3341
3391
  var TRACK_HEIGHT = 6;
3342
3392
  var THUMB_SIZE = 24;
3343
- var styles38 = StyleSheet39.create({
3393
+ var styles39 = StyleSheet40.create({
3344
3394
  container: {
3345
3395
  gap: spacing.xxs
3346
3396
  },
@@ -3437,31 +3487,31 @@ function Slider({
3437
3487
  return /* @__PURE__ */ jsxs27(
3438
3488
  View35,
3439
3489
  {
3440
- style: [styles38.container, style],
3490
+ style: [styles39.container, style],
3441
3491
  accessibilityRole: "adjustable",
3442
3492
  accessibilityLabel: label,
3443
3493
  accessibilityValue: { min, max, now: currentValue, text: String(currentValue) },
3444
3494
  accessibilityState: { disabled },
3445
3495
  children: [
3446
- /* @__PURE__ */ jsxs27(View35, { style: styles38.labelRow, children: [
3447
- /* @__PURE__ */ jsx43(Label, { label }),
3448
- showValue && /* @__PURE__ */ jsx43(ScaledText, { style: [styles38.valueText, { color: colors2.colorOnBg }], children: currentValue })
3496
+ /* @__PURE__ */ jsxs27(View35, { style: styles39.labelRow, children: [
3497
+ /* @__PURE__ */ jsx44(Label, { label }),
3498
+ showValue && /* @__PURE__ */ jsx44(ScaledText, { style: [styles39.valueText, { color: colors2.colorOnBg }], children: currentValue })
3449
3499
  ] }),
3450
3500
  /* @__PURE__ */ jsxs27(
3451
3501
  View35,
3452
3502
  {
3453
- style: [styles38.trackContainer, disabled && { opacity: 0.4 }],
3503
+ style: [styles39.trackContainer, disabled && { opacity: 0.4 }],
3454
3504
  onLayout: handleTrackLayout,
3455
3505
  onStartShouldSetResponder: handleStartShouldSetResponder,
3456
3506
  onMoveShouldSetResponder: handleStartShouldSetResponder,
3457
3507
  onResponderGrant: handleResponderGrant,
3458
3508
  onResponderMove: handleResponderMove,
3459
3509
  children: [
3460
- /* @__PURE__ */ jsx43(View35, { style: [styles38.track, { backgroundColor: colors2.colorBgSubtle }], children: /* @__PURE__ */ jsx43(
3510
+ /* @__PURE__ */ jsx44(View35, { style: [styles39.track, { backgroundColor: colors2.colorBgSubtle }], children: /* @__PURE__ */ jsx44(
3461
3511
  View35,
3462
3512
  {
3463
3513
  style: [
3464
- styles38.fill,
3514
+ styles39.fill,
3465
3515
  {
3466
3516
  width: `${fillPct}%`,
3467
3517
  backgroundColor: error ? colors2.colorError : colors2.colorInteractive
@@ -3469,11 +3519,11 @@ function Slider({
3469
3519
  ]
3470
3520
  }
3471
3521
  ) }),
3472
- /* @__PURE__ */ jsx43(
3522
+ /* @__PURE__ */ jsx44(
3473
3523
  View35,
3474
3524
  {
3475
3525
  style: [
3476
- styles38.thumb,
3526
+ styles39.thumb,
3477
3527
  {
3478
3528
  start: `${fillPct}%`,
3479
3529
  marginStart: -(THUMB_SIZE / 2),
@@ -3486,8 +3536,8 @@ function Slider({
3486
3536
  ]
3487
3537
  }
3488
3538
  ),
3489
- /* @__PURE__ */ jsx43(Message, { type: "error", message: error }),
3490
- /* @__PURE__ */ jsx43(Message, { type: "hint", message: hint })
3539
+ /* @__PURE__ */ jsx44(Message, { type: "error", message: error }),
3540
+ /* @__PURE__ */ jsx44(Message, { type: "hint", message: hint })
3491
3541
  ]
3492
3542
  }
3493
3543
  );
@@ -3495,10 +3545,10 @@ function Slider({
3495
3545
 
3496
3546
  // src/components/interaction/form/NumberInput/NumberInput.tsx
3497
3547
  import { useState as useState12 } from "react";
3498
- import { StyleSheet as StyleSheet40, View as View36, Pressable as Pressable21 } from "react-native";
3499
- import { jsx as jsx44, jsxs as jsxs28 } from "react/jsx-runtime";
3548
+ import { StyleSheet as StyleSheet41, View as View36, Pressable as Pressable21 } from "react-native";
3549
+ import { jsx as jsx45, jsxs as jsxs28 } from "react/jsx-runtime";
3500
3550
  var STEPPER_SIZE = 44;
3501
- var styles39 = StyleSheet40.create({
3551
+ var styles40 = StyleSheet41.create({
3502
3552
  container: {
3503
3553
  gap: spacing.xxs
3504
3554
  },
@@ -3513,14 +3563,11 @@ var styles39 = StyleSheet40.create({
3513
3563
  justifyContent: "center",
3514
3564
  borderWidth: 1
3515
3565
  },
3566
+ // The steppers round only the field's outer corners, with `radius.field` from the theme.
3516
3567
  stepperStart: {
3517
- borderTopStartRadius: border.radius.full,
3518
- borderBottomStartRadius: border.radius.full,
3519
3568
  borderEndWidth: 0
3520
3569
  },
3521
3570
  stepperEnd: {
3522
- borderTopEndRadius: border.radius.full,
3523
- borderBottomEndRadius: border.radius.full,
3524
3571
  borderStartWidth: 0
3525
3572
  },
3526
3573
  stepperText: {
@@ -3571,7 +3618,7 @@ function NumberInput({
3571
3618
  onChange,
3572
3619
  style
3573
3620
  }) {
3574
- const { colors: colors2 } = useTheme();
3621
+ const { colors: colors2, radius } = useTheme();
3575
3622
  const isControlled = value !== void 0;
3576
3623
  const [internalValue, setInternalValue] = useState12(defaultValue ?? 0);
3577
3624
  const currentValue = isControlled ? value : internalValue;
@@ -3587,10 +3634,10 @@ function NumberInput({
3587
3634
  const canDecrease = min === void 0 || currentValue > min;
3588
3635
  const canIncrease = max === void 0 || currentValue < max;
3589
3636
  const borderColor = error ? colors2.colorError : colors2.colorOnBg;
3590
- return /* @__PURE__ */ jsxs28(View36, { style: [styles39.container, style], children: [
3591
- /* @__PURE__ */ jsx44(Label, { label }),
3592
- /* @__PURE__ */ jsxs28(View36, { style: [styles39.inputRow, disabled && { opacity: 0.4 }], children: [
3593
- /* @__PURE__ */ jsx44(
3637
+ return /* @__PURE__ */ jsxs28(View36, { style: [styles40.container, style], children: [
3638
+ /* @__PURE__ */ jsx45(Label, { label }),
3639
+ /* @__PURE__ */ jsxs28(View36, { style: [styles40.inputRow, disabled && { opacity: 0.4 }], children: [
3640
+ /* @__PURE__ */ jsx45(
3594
3641
  Pressable21,
3595
3642
  {
3596
3643
  accessibilityRole: "button",
@@ -3599,36 +3646,38 @@ function NumberInput({
3599
3646
  disabled: disabled || !canDecrease,
3600
3647
  onPress: () => update(currentValue - step),
3601
3648
  style: ({ pressed }) => [
3602
- styles39.stepper,
3603
- styles39.stepperStart,
3649
+ styles40.stepper,
3650
+ styles40.stepperStart,
3604
3651
  {
3605
3652
  borderColor,
3653
+ borderTopStartRadius: radius.field,
3654
+ borderBottomStartRadius: radius.field,
3606
3655
  backgroundColor: colors2.colorBgSubtle
3607
3656
  },
3608
3657
  pressed && { opacity: 0.7 },
3609
3658
  (disabled || !canDecrease) && { opacity: 0.4 }
3610
3659
  ],
3611
- children: /* @__PURE__ */ jsx44(
3660
+ children: /* @__PURE__ */ jsx45(
3612
3661
  ScaledText,
3613
3662
  {
3614
- style: [styles39.stepperText, { color: colors2.colorOnBg }],
3663
+ style: [styles40.stepperText, { color: colors2.colorOnBg }],
3615
3664
  "aria-hidden": true,
3616
3665
  children: "\u2212"
3617
3666
  }
3618
3667
  )
3619
3668
  }
3620
3669
  ),
3621
- /* @__PURE__ */ jsx44(
3670
+ /* @__PURE__ */ jsx45(
3622
3671
  View36,
3623
3672
  {
3624
3673
  style: [
3625
- styles39.inputWrapper,
3674
+ styles40.inputWrapper,
3626
3675
  {
3627
3676
  borderColor,
3628
3677
  backgroundColor: colors2.colorBg
3629
3678
  }
3630
3679
  ],
3631
- children: /* @__PURE__ */ jsx44(
3680
+ children: /* @__PURE__ */ jsx45(
3632
3681
  ScaledTextInput,
3633
3682
  {
3634
3683
  accessibilityLabel: label,
@@ -3648,14 +3697,14 @@ function NumberInput({
3648
3697
  update(safe);
3649
3698
  },
3650
3699
  style: [
3651
- styles39.input,
3700
+ styles40.input,
3652
3701
  { color: colors2.colorOnBg }
3653
3702
  ]
3654
3703
  }
3655
3704
  )
3656
3705
  }
3657
3706
  ),
3658
- /* @__PURE__ */ jsx44(
3707
+ /* @__PURE__ */ jsx45(
3659
3708
  Pressable21,
3660
3709
  {
3661
3710
  accessibilityRole: "button",
@@ -3664,19 +3713,21 @@ function NumberInput({
3664
3713
  disabled: disabled || !canIncrease,
3665
3714
  onPress: () => update(currentValue + step),
3666
3715
  style: ({ pressed }) => [
3667
- styles39.stepper,
3668
- styles39.stepperEnd,
3716
+ styles40.stepper,
3717
+ styles40.stepperEnd,
3669
3718
  {
3670
3719
  borderColor,
3720
+ borderTopEndRadius: radius.field,
3721
+ borderBottomEndRadius: radius.field,
3671
3722
  backgroundColor: colors2.colorBgSubtle
3672
3723
  },
3673
3724
  pressed && { opacity: 0.7 },
3674
3725
  (disabled || !canIncrease) && { opacity: 0.4 }
3675
3726
  ],
3676
- children: /* @__PURE__ */ jsx44(
3727
+ children: /* @__PURE__ */ jsx45(
3677
3728
  ScaledText,
3678
3729
  {
3679
- style: [styles39.stepperText, { color: colors2.colorOnBg }],
3730
+ style: [styles40.stepperText, { color: colors2.colorOnBg }],
3680
3731
  "aria-hidden": true,
3681
3732
  children: "+"
3682
3733
  }
@@ -3684,15 +3735,15 @@ function NumberInput({
3684
3735
  }
3685
3736
  )
3686
3737
  ] }),
3687
- /* @__PURE__ */ jsx44(Message, { type: "error", message: error }),
3688
- /* @__PURE__ */ jsx44(Message, { type: "hint", message: hint })
3738
+ /* @__PURE__ */ jsx45(Message, { type: "error", message: error }),
3739
+ /* @__PURE__ */ jsx45(Message, { type: "hint", message: hint })
3689
3740
  ] });
3690
3741
  }
3691
3742
 
3692
3743
  // src/components/interaction/Dialog/Dialog.tsx
3693
- import { Modal as Modal2, View as View37, Pressable as Pressable22, StyleSheet as StyleSheet41 } from "react-native";
3694
- import { jsx as jsx45, jsxs as jsxs29 } from "react/jsx-runtime";
3695
- var styles40 = StyleSheet41.create({
3744
+ import { Modal as Modal2, View as View37, Pressable as Pressable22, StyleSheet as StyleSheet42 } from "react-native";
3745
+ import { jsx as jsx46, jsxs as jsxs29 } from "react/jsx-runtime";
3746
+ var styles41 = StyleSheet42.create({
3696
3747
  overlay: {
3697
3748
  flex: 1,
3698
3749
  justifyContent: "center",
@@ -3748,19 +3799,19 @@ function Dialog({
3748
3799
  style
3749
3800
  }) {
3750
3801
  const { colors: colors2 } = useTheme();
3751
- return /* @__PURE__ */ jsx45(
3802
+ return /* @__PURE__ */ jsx46(
3752
3803
  Modal2,
3753
3804
  {
3754
3805
  visible: isOpen,
3755
3806
  transparent: true,
3756
3807
  animationType: "fade",
3757
3808
  onRequestClose: onClose,
3758
- children: /* @__PURE__ */ jsxs29(View37, { style: styles40.overlay, children: [
3759
- /* @__PURE__ */ jsx45(
3809
+ children: /* @__PURE__ */ jsxs29(View37, { style: styles41.overlay, children: [
3810
+ /* @__PURE__ */ jsx46(
3760
3811
  Pressable22,
3761
3812
  {
3762
3813
  testID: "bds-dialog-backdrop",
3763
- style: StyleSheet41.absoluteFill,
3814
+ style: StyleSheet42.absoluteFill,
3764
3815
  onPress: onClose,
3765
3816
  accessible: false,
3766
3817
  importantForAccessibility: "no"
@@ -3769,29 +3820,29 @@ function Dialog({
3769
3820
  /* @__PURE__ */ jsxs29(
3770
3821
  View37,
3771
3822
  {
3772
- style: [styles40.panel, { backgroundColor: colors2.colorGreySubtle }, style],
3823
+ style: [styles41.panel, { backgroundColor: colors2.colorGreySubtle }, style],
3773
3824
  accessibilityViewIsModal: true,
3774
3825
  onAccessibilityEscape: onClose,
3775
3826
  children: [
3776
- /* @__PURE__ */ jsx45(
3827
+ /* @__PURE__ */ jsx46(
3777
3828
  Pressable22,
3778
3829
  {
3779
- style: styles40.closeButton,
3830
+ style: styles41.closeButton,
3780
3831
  onPress: onClose,
3781
3832
  accessibilityRole: "button",
3782
3833
  accessibilityLabel: "Close dialog",
3783
3834
  hitSlop: 8,
3784
- children: /* @__PURE__ */ jsx45(
3835
+ children: /* @__PURE__ */ jsx46(
3785
3836
  ScaledText,
3786
3837
  {
3787
- style: [styles40.closeText, { color: colors2.colorOnBgSubtle }],
3838
+ style: [styles41.closeText, { color: colors2.colorOnBgSubtle }],
3788
3839
  "aria-hidden": true,
3789
3840
  children: "\u2715"
3790
3841
  }
3791
3842
  )
3792
3843
  }
3793
3844
  ),
3794
- !!title && /* @__PURE__ */ jsx45(View37, { style: styles40.header, children: /* @__PURE__ */ jsx45(ScaledText, { style: [styles40.title, { color: colors2.colorOnGreySubtle }], children: title }) }),
3845
+ !!title && /* @__PURE__ */ jsx46(View37, { style: styles41.header, children: /* @__PURE__ */ jsx46(ScaledText, { style: [styles41.title, { color: colors2.colorOnGreySubtle }], children: title }) }),
3795
3846
  children
3796
3847
  ]
3797
3848
  }
@@ -3803,9 +3854,9 @@ function Dialog({
3803
3854
 
3804
3855
  // src/components/interaction/SideSheet/SideSheet.tsx
3805
3856
  import { useEffect as useEffect2, useRef as useRef4 } from "react";
3806
- import { Modal as Modal3, View as View38, Pressable as Pressable23, Animated as Animated3, StyleSheet as StyleSheet42, Dimensions as Dimensions2 } from "react-native";
3807
- import { jsx as jsx46, jsxs as jsxs30 } from "react/jsx-runtime";
3808
- var styles41 = StyleSheet42.create({
3857
+ import { Modal as Modal3, View as View38, Pressable as Pressable23, Animated as Animated4, StyleSheet as StyleSheet43, Dimensions as Dimensions2 } from "react-native";
3858
+ import { jsx as jsx47, jsxs as jsxs30 } from "react/jsx-runtime";
3859
+ var styles42 = StyleSheet43.create({
3809
3860
  overlay: {
3810
3861
  flex: 1,
3811
3862
  justifyContent: "flex-end"
@@ -3863,30 +3914,30 @@ function SideSheet({
3863
3914
  }) {
3864
3915
  const { colors: colors2 } = useTheme();
3865
3916
  const screenHeight = Dimensions2.get("window").height;
3866
- const slideAnim = useRef4(new Animated3.Value(screenHeight)).current;
3867
- const backdropAnim = useRef4(new Animated3.Value(0)).current;
3917
+ const slideAnim = useRef4(new Animated4.Value(screenHeight)).current;
3918
+ const backdropAnim = useRef4(new Animated4.Value(0)).current;
3868
3919
  useEffect2(() => {
3869
3920
  if (isOpen) {
3870
- Animated3.parallel([
3871
- Animated3.timing(slideAnim, {
3921
+ Animated4.parallel([
3922
+ Animated4.timing(slideAnim, {
3872
3923
  toValue: 0,
3873
3924
  duration: 250,
3874
3925
  useNativeDriver: true
3875
3926
  }),
3876
- Animated3.timing(backdropAnim, {
3927
+ Animated4.timing(backdropAnim, {
3877
3928
  toValue: 1,
3878
3929
  duration: 250,
3879
3930
  useNativeDriver: true
3880
3931
  })
3881
3932
  ]).start();
3882
3933
  } else {
3883
- Animated3.parallel([
3884
- Animated3.timing(slideAnim, {
3934
+ Animated4.parallel([
3935
+ Animated4.timing(slideAnim, {
3885
3936
  toValue: screenHeight,
3886
3937
  duration: 200,
3887
3938
  useNativeDriver: true
3888
3939
  }),
3889
- Animated3.timing(backdropAnim, {
3940
+ Animated4.timing(backdropAnim, {
3890
3941
  toValue: 0,
3891
3942
  duration: 200,
3892
3943
  useNativeDriver: true
@@ -3894,25 +3945,25 @@ function SideSheet({
3894
3945
  ]).start();
3895
3946
  }
3896
3947
  }, [isOpen, slideAnim, backdropAnim, screenHeight]);
3897
- return /* @__PURE__ */ jsx46(
3948
+ return /* @__PURE__ */ jsx47(
3898
3949
  Modal3,
3899
3950
  {
3900
3951
  visible: isOpen,
3901
3952
  transparent: true,
3902
3953
  animationType: "none",
3903
3954
  onRequestClose: onClose,
3904
- children: /* @__PURE__ */ jsxs30(View38, { style: styles41.overlay, children: [
3905
- /* @__PURE__ */ jsx46(
3906
- Animated3.View,
3955
+ children: /* @__PURE__ */ jsxs30(View38, { style: styles42.overlay, children: [
3956
+ /* @__PURE__ */ jsx47(
3957
+ Animated4.View,
3907
3958
  {
3908
3959
  style: [
3909
- StyleSheet42.absoluteFill,
3960
+ StyleSheet43.absoluteFill,
3910
3961
  { backgroundColor: "rgba(0, 0, 0, 0.5)", opacity: backdropAnim }
3911
3962
  ],
3912
- children: /* @__PURE__ */ jsx46(
3963
+ children: /* @__PURE__ */ jsx47(
3913
3964
  Pressable23,
3914
3965
  {
3915
- style: StyleSheet42.absoluteFill,
3966
+ style: StyleSheet43.absoluteFill,
3916
3967
  onPress: onClose,
3917
3968
  testID: "bds-sidesheet-backdrop",
3918
3969
  accessible: false,
@@ -3922,10 +3973,10 @@ function SideSheet({
3922
3973
  }
3923
3974
  ),
3924
3975
  /* @__PURE__ */ jsxs30(
3925
- Animated3.View,
3976
+ Animated4.View,
3926
3977
  {
3927
3978
  style: [
3928
- styles41.panel,
3979
+ styles42.panel,
3929
3980
  {
3930
3981
  backgroundColor: colors2.colorBg,
3931
3982
  transform: [{ translateY: slideAnim }]
@@ -3938,21 +3989,21 @@ function SideSheet({
3938
3989
  /* @__PURE__ */ jsxs30(
3939
3990
  View38,
3940
3991
  {
3941
- style: [styles41.header, { borderBottomColor: colors2.colorBgSubtle }],
3992
+ style: [styles42.header, { borderBottomColor: colors2.colorBgSubtle }],
3942
3993
  children: [
3943
- !!title && /* @__PURE__ */ jsx46(ScaledText, { style: [styles41.title, { color: colors2.colorOnBg }], children: title }),
3944
- /* @__PURE__ */ jsx46(
3994
+ !!title && /* @__PURE__ */ jsx47(ScaledText, { style: [styles42.title, { color: colors2.colorOnBg }], children: title }),
3995
+ /* @__PURE__ */ jsx47(
3945
3996
  Pressable23,
3946
3997
  {
3947
- style: styles41.closeButton,
3998
+ style: styles42.closeButton,
3948
3999
  onPress: onClose,
3949
4000
  accessibilityRole: "button",
3950
4001
  accessibilityLabel: "Close side sheet",
3951
4002
  hitSlop: 8,
3952
- children: /* @__PURE__ */ jsx46(
4003
+ children: /* @__PURE__ */ jsx47(
3953
4004
  ScaledText,
3954
4005
  {
3955
- style: [styles41.closeText, { color: colors2.colorOnBgSubtle }],
4006
+ style: [styles42.closeText, { color: colors2.colorOnBgSubtle }],
3956
4007
  "aria-hidden": true,
3957
4008
  children: "\u2715"
3958
4009
  }
@@ -3962,7 +4013,7 @@ function SideSheet({
3962
4013
  ]
3963
4014
  }
3964
4015
  ),
3965
- /* @__PURE__ */ jsx46(View38, { style: styles41.body, testID: "bds-sidesheet-body", children })
4016
+ /* @__PURE__ */ jsx47(View38, { style: styles42.body, testID: "bds-sidesheet-body", children })
3966
4017
  ]
3967
4018
  }
3968
4019
  )
@@ -3981,10 +4032,10 @@ import {
3981
4032
  createContext as createContext2,
3982
4033
  useContext as useContext2
3983
4034
  } from "react";
3984
- import { View as View39, Pressable as Pressable24, Animated as Animated4, StyleSheet as StyleSheet43 } from "react-native";
3985
- import { jsx as jsx47, jsxs as jsxs31 } from "react/jsx-runtime";
4035
+ import { View as View39, Pressable as Pressable24, Animated as Animated5, StyleSheet as StyleSheet44 } from "react-native";
4036
+ import { jsx as jsx48, jsxs as jsxs31 } from "react/jsx-runtime";
3986
4037
  var ToastContext = createContext2(void 0);
3987
- var styles42 = StyleSheet43.create({
4038
+ var styles43 = StyleSheet44.create({
3988
4039
  container: {
3989
4040
  position: "absolute",
3990
4041
  top: 0,
@@ -4029,8 +4080,8 @@ function ToastItem({
4029
4080
  onRemove
4030
4081
  }) {
4031
4082
  const { colors: colors2 } = useTheme();
4032
- const slideAnim = useRef5(new Animated4.Value(-100)).current;
4033
- const opacityAnim = useRef5(new Animated4.Value(0)).current;
4083
+ const slideAnim = useRef5(new Animated5.Value(-100)).current;
4084
+ const opacityAnim = useRef5(new Animated5.Value(0)).current;
4034
4085
  const variantColors = useMemo3(
4035
4086
  () => ({
4036
4087
  success: { bg: colors2.colorSuccess, text: colors2.colorOnSuccess },
@@ -4040,13 +4091,13 @@ function ToastItem({
4040
4091
  [colors2]
4041
4092
  );
4042
4093
  useEffect3(() => {
4043
- Animated4.parallel([
4044
- Animated4.timing(slideAnim, {
4094
+ Animated5.parallel([
4095
+ Animated5.timing(slideAnim, {
4045
4096
  toValue: 0,
4046
4097
  duration: 200,
4047
4098
  useNativeDriver: true
4048
4099
  }),
4049
- Animated4.timing(opacityAnim, {
4100
+ Animated5.timing(opacityAnim, {
4050
4101
  toValue: 1,
4051
4102
  duration: 200,
4052
4103
  useNativeDriver: true
@@ -4059,10 +4110,10 @@ function ToastItem({
4059
4110
  }, [onRemove]);
4060
4111
  const { bg, text } = variantColors[toast.variant];
4061
4112
  return /* @__PURE__ */ jsxs31(
4062
- Animated4.View,
4113
+ Animated5.View,
4063
4114
  {
4064
4115
  style: [
4065
- styles42.toast,
4116
+ styles43.toast,
4066
4117
  {
4067
4118
  backgroundColor: bg,
4068
4119
  transform: [{ translateY: slideAnim }],
@@ -4072,16 +4123,16 @@ function ToastItem({
4072
4123
  accessibilityRole: "alert",
4073
4124
  accessibilityLiveRegion: "polite",
4074
4125
  children: [
4075
- /* @__PURE__ */ jsx47(ScaledText, { style: [styles42.message, { color: text }], children: toast.message }),
4076
- /* @__PURE__ */ jsx47(
4126
+ /* @__PURE__ */ jsx48(ScaledText, { style: [styles43.message, { color: text }], children: toast.message }),
4127
+ /* @__PURE__ */ jsx48(
4077
4128
  Pressable24,
4078
4129
  {
4079
- style: styles42.closeButton,
4130
+ style: styles43.closeButton,
4080
4131
  onPress: onRemove,
4081
4132
  accessibilityRole: "button",
4082
4133
  accessibilityLabel: "Dismiss",
4083
4134
  hitSlop: 8,
4084
- children: /* @__PURE__ */ jsx47(ScaledText, { style: [styles42.closeText, { color: text }], "aria-hidden": true, children: "\u2715" })
4135
+ children: /* @__PURE__ */ jsx48(ScaledText, { style: [styles43.closeText, { color: text }], "aria-hidden": true, children: "\u2715" })
4085
4136
  }
4086
4137
  )
4087
4138
  ]
@@ -4101,15 +4152,15 @@ function ToastProvider({
4101
4152
  setToasts((prev) => prev.filter((t) => t.id !== id));
4102
4153
  }, []);
4103
4154
  const value = useMemo3(() => ({ showToast }), [showToast]);
4104
- return /* @__PURE__ */ jsx47(ToastContext.Provider, { value, children: /* @__PURE__ */ jsxs31(View39, { style: [{ flex: 1 }, style], children: [
4155
+ return /* @__PURE__ */ jsx48(ToastContext.Provider, { value, children: /* @__PURE__ */ jsxs31(View39, { style: [{ flex: 1 }, style], children: [
4105
4156
  children,
4106
- toasts.length > 0 && /* @__PURE__ */ jsx47(
4157
+ toasts.length > 0 && /* @__PURE__ */ jsx48(
4107
4158
  View39,
4108
4159
  {
4109
- style: styles42.container,
4160
+ style: styles43.container,
4110
4161
  accessibilityRole: "summary",
4111
4162
  accessibilityLabel: "Notifications",
4112
- children: toasts.map((toast) => /* @__PURE__ */ jsx47(
4163
+ children: toasts.map((toast) => /* @__PURE__ */ jsx48(
4113
4164
  ToastItem,
4114
4165
  {
4115
4166
  toast,
@@ -4131,9 +4182,9 @@ function useToast() {
4131
4182
 
4132
4183
  // src/components/interaction/DropdownMenu/DropdownMenu.tsx
4133
4184
  import React, { useState as useState14, useEffect as useEffect4, useRef as useRef6 } from "react";
4134
- import { Modal as Modal4, View as View40, Pressable as Pressable25, FlatList as FlatList2, Animated as Animated5, StyleSheet as StyleSheet44, Dimensions as Dimensions3, SafeAreaView as SafeAreaView2 } from "react-native";
4135
- import { Fragment as Fragment2, jsx as jsx48, jsxs as jsxs32 } from "react/jsx-runtime";
4136
- var styles43 = StyleSheet44.create({
4185
+ import { Modal as Modal4, View as View40, Pressable as Pressable25, FlatList as FlatList2, Animated as Animated6, StyleSheet as StyleSheet45, Dimensions as Dimensions3, SafeAreaView as SafeAreaView2 } from "react-native";
4186
+ import { Fragment as Fragment2, jsx as jsx49, jsxs as jsxs32 } from "react/jsx-runtime";
4187
+ var styles44 = StyleSheet45.create({
4137
4188
  overlay: {
4138
4189
  flex: 1,
4139
4190
  justifyContent: "flex-end"
@@ -4192,30 +4243,30 @@ function DropdownMenu({
4192
4243
  const { colors: colors2 } = useTheme();
4193
4244
  const [open, setOpen] = useState14(false);
4194
4245
  const screenHeight = Dimensions3.get("window").height;
4195
- const slideAnim = useRef6(new Animated5.Value(screenHeight)).current;
4196
- const backdropAnim = useRef6(new Animated5.Value(0)).current;
4246
+ const slideAnim = useRef6(new Animated6.Value(screenHeight)).current;
4247
+ const backdropAnim = useRef6(new Animated6.Value(0)).current;
4197
4248
  useEffect4(() => {
4198
4249
  if (open) {
4199
- Animated5.parallel([
4200
- Animated5.timing(slideAnim, {
4250
+ Animated6.parallel([
4251
+ Animated6.timing(slideAnim, {
4201
4252
  toValue: 0,
4202
4253
  duration: 250,
4203
4254
  useNativeDriver: true
4204
4255
  }),
4205
- Animated5.timing(backdropAnim, {
4256
+ Animated6.timing(backdropAnim, {
4206
4257
  toValue: 1,
4207
4258
  duration: 250,
4208
4259
  useNativeDriver: true
4209
4260
  })
4210
4261
  ]).start();
4211
4262
  } else {
4212
- Animated5.parallel([
4213
- Animated5.timing(slideAnim, {
4263
+ Animated6.parallel([
4264
+ Animated6.timing(slideAnim, {
4214
4265
  toValue: screenHeight,
4215
4266
  duration: 200,
4216
4267
  useNativeDriver: true
4217
4268
  }),
4218
- Animated5.timing(backdropAnim, {
4269
+ Animated6.timing(backdropAnim, {
4219
4270
  toValue: 0,
4220
4271
  duration: 200,
4221
4272
  useNativeDriver: true
@@ -4233,25 +4284,25 @@ function DropdownMenu({
4233
4284
  accessibilityRole: "button",
4234
4285
  accessibilityLabel: title
4235
4286
  }),
4236
- /* @__PURE__ */ jsx48(
4287
+ /* @__PURE__ */ jsx49(
4237
4288
  Modal4,
4238
4289
  {
4239
4290
  visible: open,
4240
4291
  transparent: true,
4241
4292
  animationType: "none",
4242
4293
  onRequestClose: () => setOpen(false),
4243
- children: /* @__PURE__ */ jsxs32(View40, { style: styles43.overlay, children: [
4244
- /* @__PURE__ */ jsx48(
4245
- Animated5.View,
4294
+ children: /* @__PURE__ */ jsxs32(View40, { style: styles44.overlay, children: [
4295
+ /* @__PURE__ */ jsx49(
4296
+ Animated6.View,
4246
4297
  {
4247
4298
  style: [
4248
- StyleSheet44.absoluteFill,
4299
+ StyleSheet45.absoluteFill,
4249
4300
  { backgroundColor: "rgba(0, 0, 0, 0.5)", opacity: backdropAnim }
4250
4301
  ],
4251
- children: /* @__PURE__ */ jsx48(
4302
+ children: /* @__PURE__ */ jsx49(
4252
4303
  Pressable25,
4253
4304
  {
4254
- style: StyleSheet44.absoluteFill,
4305
+ style: StyleSheet45.absoluteFill,
4255
4306
  onPress: () => setOpen(false),
4256
4307
  testID: "bds-dropdownmenu-backdrop",
4257
4308
  accessible: false,
@@ -4260,11 +4311,11 @@ function DropdownMenu({
4260
4311
  )
4261
4312
  }
4262
4313
  ),
4263
- /* @__PURE__ */ jsx48(
4264
- Animated5.View,
4314
+ /* @__PURE__ */ jsx49(
4315
+ Animated6.View,
4265
4316
  {
4266
4317
  style: [
4267
- styles43.sheet,
4318
+ styles44.sheet,
4268
4319
  {
4269
4320
  backgroundColor: colors2.colorBg,
4270
4321
  transform: [{ translateY: slideAnim }]
@@ -4277,23 +4328,23 @@ function DropdownMenu({
4277
4328
  View40,
4278
4329
  {
4279
4330
  style: [
4280
- styles43.sheetHeader,
4331
+ styles44.sheetHeader,
4281
4332
  { borderBottomColor: colors2.colorBgSubtle }
4282
4333
  ],
4283
4334
  children: [
4284
- /* @__PURE__ */ jsx48(ScaledText, { style: [styles43.sheetTitle, { color: colors2.colorOnBg }], children: title }),
4285
- /* @__PURE__ */ jsx48(
4335
+ /* @__PURE__ */ jsx49(ScaledText, { style: [styles44.sheetTitle, { color: colors2.colorOnBg }], children: title }),
4336
+ /* @__PURE__ */ jsx49(
4286
4337
  Pressable25,
4287
4338
  {
4288
4339
  accessibilityRole: "button",
4289
4340
  accessibilityLabel: "Close",
4290
4341
  onPress: () => setOpen(false),
4291
4342
  hitSlop: 8,
4292
- children: /* @__PURE__ */ jsx48(
4343
+ children: /* @__PURE__ */ jsx49(
4293
4344
  ScaledText,
4294
4345
  {
4295
4346
  style: [
4296
- styles43.closeText,
4347
+ styles44.closeText,
4297
4348
  { color: colors2.colorInteractive }
4298
4349
  ],
4299
4350
  children: "Done"
@@ -4304,17 +4355,17 @@ function DropdownMenu({
4304
4355
  ]
4305
4356
  }
4306
4357
  ),
4307
- /* @__PURE__ */ jsx48(
4358
+ /* @__PURE__ */ jsx49(
4308
4359
  FlatList2,
4309
4360
  {
4310
4361
  data: items,
4311
4362
  keyExtractor: (item) => item.id,
4312
4363
  renderItem: ({ item }) => /* @__PURE__ */ jsxs32(Fragment2, { children: [
4313
- item.separator && /* @__PURE__ */ jsx48(
4364
+ item.separator && /* @__PURE__ */ jsx49(
4314
4365
  View40,
4315
4366
  {
4316
4367
  style: [
4317
- styles43.separator,
4368
+ styles44.separator,
4318
4369
  { backgroundColor: colors2.colorBgSubtle }
4319
4370
  ],
4320
4371
  accessibilityRole: "none"
@@ -4329,12 +4380,12 @@ function DropdownMenu({
4329
4380
  disabled: item.disabled,
4330
4381
  onPress: () => handleItemPress(item),
4331
4382
  style: ({ pressed }) => [
4332
- styles43.item,
4383
+ styles44.item,
4333
4384
  pressed && { backgroundColor: colors2.colorBgSubtle },
4334
4385
  item.disabled && { opacity: 0.4 }
4335
4386
  ],
4336
4387
  children: [
4337
- !!item.icon && /* @__PURE__ */ jsx48(
4388
+ !!item.icon && /* @__PURE__ */ jsx49(
4338
4389
  View40,
4339
4390
  {
4340
4391
  importantForAccessibility: "no-hide-descendants",
@@ -4342,11 +4393,11 @@ function DropdownMenu({
4342
4393
  children: item.icon
4343
4394
  }
4344
4395
  ),
4345
- /* @__PURE__ */ jsx48(
4396
+ /* @__PURE__ */ jsx49(
4346
4397
  ScaledText,
4347
4398
  {
4348
4399
  style: [
4349
- styles43.itemText,
4400
+ styles44.itemText,
4350
4401
  { color: colors2.colorOnBg }
4351
4402
  ],
4352
4403
  children: item.label
@@ -4373,10 +4424,10 @@ import {
4373
4424
  Modal as Modal5,
4374
4425
  View as View41,
4375
4426
  Pressable as Pressable26,
4376
- StyleSheet as StyleSheet45
4427
+ StyleSheet as StyleSheet46
4377
4428
  } from "react-native";
4378
- import { jsx as jsx49, jsxs as jsxs33 } from "react/jsx-runtime";
4379
- var styles44 = StyleSheet45.create({
4429
+ import { jsx as jsx50, jsxs as jsxs33 } from "react/jsx-runtime";
4430
+ var styles45 = StyleSheet46.create({
4380
4431
  wrapper: {
4381
4432
  alignSelf: "flex-start"
4382
4433
  },
@@ -4408,35 +4459,35 @@ function Popover({
4408
4459
  const { colors: colors2 } = useTheme();
4409
4460
  const [isOpen, setIsOpen] = useState15(false);
4410
4461
  const close = () => setIsOpen(false);
4411
- return /* @__PURE__ */ jsxs33(View41, { style: [styles44.wrapper, style], children: [
4462
+ return /* @__PURE__ */ jsxs33(View41, { style: [styles45.wrapper, style], children: [
4412
4463
  React2.cloneElement(children, {
4413
4464
  onPress: () => setIsOpen(true),
4414
4465
  accessibilityRole: "button",
4415
4466
  accessibilityLabel: accessibilityLabel ?? "Open popover"
4416
4467
  }),
4417
- /* @__PURE__ */ jsx49(
4468
+ /* @__PURE__ */ jsx50(
4418
4469
  Modal5,
4419
4470
  {
4420
4471
  visible: isOpen,
4421
4472
  transparent: true,
4422
4473
  animationType: "fade",
4423
4474
  onRequestClose: close,
4424
- children: /* @__PURE__ */ jsxs33(View41, { style: styles44.overlay, onAccessibilityEscape: close, children: [
4425
- /* @__PURE__ */ jsx49(
4475
+ children: /* @__PURE__ */ jsxs33(View41, { style: styles45.overlay, onAccessibilityEscape: close, children: [
4476
+ /* @__PURE__ */ jsx50(
4426
4477
  Pressable26,
4427
4478
  {
4428
4479
  testID: "bds-popover-backdrop",
4429
- style: StyleSheet45.absoluteFill,
4480
+ style: StyleSheet46.absoluteFill,
4430
4481
  onPress: close,
4431
4482
  onAccessibilityTap: close,
4432
4483
  accessibilityRole: "button",
4433
4484
  accessibilityLabel: "Close popover"
4434
4485
  }
4435
4486
  ),
4436
- /* @__PURE__ */ jsx49(
4487
+ /* @__PURE__ */ jsx50(
4437
4488
  View41,
4438
4489
  {
4439
- style: [styles44.panel, { backgroundColor: colors2.colorBg }],
4490
+ style: [styles45.panel, { backgroundColor: colors2.colorBg }],
4440
4491
  accessibilityLabel,
4441
4492
  children: content
4442
4493
  }