@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.
- package/CHANGELOG.md +70 -0
- package/README.md +35 -1
- package/dist/index.cjs +596 -545
- package/dist/index.d.cts +17 -1
- package/dist/index.d.ts +17 -1
- package/dist/index.js +488 -437
- package/package.json +1 -1
- package/src/components/interaction/Button/Button.mdx +13 -1
- package/src/components/interaction/Button/Button.spec.tsx +83 -0
- package/src/components/interaction/Button/Button.tsx +9 -8
- package/src/components/interaction/form/Combobox/Combobox.spec.tsx +22 -0
- package/src/components/interaction/form/Combobox/Combobox.tsx +4 -3
- package/src/components/interaction/form/FileInput/FileInput.spec.tsx +18 -0
- package/src/components/interaction/form/FileInput/FileInput.tsx +3 -3
- package/src/components/interaction/form/FormInput/FormInput.spec.tsx +20 -0
- package/src/components/interaction/form/FormInput/FormInput.tsx +5 -4
- package/src/components/interaction/form/NumberInput/NumberInput.spec.tsx +21 -0
- package/src/components/interaction/form/NumberInput/NumberInput.tsx +7 -6
- package/src/components/interaction/form/Select/Select.mdx +2 -1
- package/src/components/interaction/form/Select/Select.spec.tsx +35 -1
- package/src/components/interaction/form/Select/Select.tsx +8 -7
- package/src/components/interaction/form/Textarea/Textarea.spec.tsx +18 -0
- package/src/components/interaction/form/Textarea/Textarea.tsx +3 -3
- package/src/components/ui/Collapsible/Collapsible.spec.tsx +1 -1
- package/src/components/ui/Collapsible/Collapsible.tsx +5 -10
- package/src/index.ts +1 -1
- package/src/native/Chevron.spec.tsx +34 -0
- package/src/native/Chevron.tsx +50 -0
- package/src/native/ThemeContext.spec.tsx +81 -1
- package/src/native/ThemeContext.tsx +32 -3
- 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 {
|
|
26
|
-
|
|
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
|
|
1067
|
-
|
|
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
|
|
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
|
|
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
|
-
|
|
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: [
|
|
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 }) => [
|
|
1195
|
+
style: ({ pressed }) => [styles16.header, pressed && styles16.pressed],
|
|
1154
1196
|
children: [
|
|
1155
|
-
/* @__PURE__ */
|
|
1156
|
-
/* @__PURE__ */
|
|
1157
|
-
|
|
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
|
-
|
|
1161
|
-
|
|
1162
|
-
|
|
1202
|
+
color: colors2.colorOnBgSubtle,
|
|
1203
|
+
rotate,
|
|
1204
|
+
style: styles16.chevron
|
|
1163
1205
|
}
|
|
1164
1206
|
)
|
|
1165
1207
|
]
|
|
1166
1208
|
}
|
|
1167
1209
|
),
|
|
1168
|
-
isOpen && /* @__PURE__ */
|
|
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
|
|
1177
|
-
import { jsx as
|
|
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
|
|
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__ */
|
|
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
|
-
|
|
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
|
-
|
|
1256
|
-
item.disabled &&
|
|
1257
|
-
pressed && !item.disabled &&
|
|
1297
|
+
styles17.header,
|
|
1298
|
+
item.disabled && styles17.disabled,
|
|
1299
|
+
pressed && !item.disabled && styles17.pressed
|
|
1258
1300
|
],
|
|
1259
1301
|
children: [
|
|
1260
|
-
/* @__PURE__ */
|
|
1261
|
-
/* @__PURE__ */
|
|
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: [
|
|
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__ */
|
|
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
|
|
1284
|
-
import { jsx as
|
|
1285
|
-
var
|
|
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: [
|
|
1325
|
-
/* @__PURE__ */
|
|
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: [
|
|
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__ */
|
|
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
|
-
|
|
1388
|
+
styles18.tabButton,
|
|
1347
1389
|
{
|
|
1348
1390
|
borderBottomColor: isActive ? colors2.colorInteractive : "transparent"
|
|
1349
1391
|
},
|
|
1350
|
-
tab.disabled &&
|
|
1351
|
-
pressed && !tab.disabled &&
|
|
1392
|
+
tab.disabled && styles18.disabled,
|
|
1393
|
+
pressed && !tab.disabled && styles18.pressed
|
|
1352
1394
|
],
|
|
1353
|
-
children: /* @__PURE__ */
|
|
1395
|
+
children: /* @__PURE__ */ jsx21(
|
|
1354
1396
|
ScaledText,
|
|
1355
1397
|
{
|
|
1356
1398
|
style: [
|
|
1357
|
-
|
|
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__ */
|
|
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
|
|
1382
|
-
import { jsx as
|
|
1383
|
-
var
|
|
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__ */
|
|
1501
|
+
return /* @__PURE__ */ jsx22(
|
|
1460
1502
|
ScrollView2,
|
|
1461
1503
|
{
|
|
1462
1504
|
horizontal: true,
|
|
1463
1505
|
showsHorizontalScrollIndicator: true,
|
|
1464
|
-
style: [
|
|
1506
|
+
style: [styles19.wrapper, { backgroundColor: colors2.colorBg }, style],
|
|
1465
1507
|
children: /* @__PURE__ */ jsxs12(View15, { children: [
|
|
1466
|
-
caption && /* @__PURE__ */
|
|
1467
|
-
/* @__PURE__ */
|
|
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 }) => [
|
|
1516
|
+
style: ({ pressed }) => [styles19.headerCell, pressed && styles19.pressed],
|
|
1475
1517
|
children: [
|
|
1476
|
-
/* @__PURE__ */
|
|
1477
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
1538
|
+
rows.map((row, rowIndex) => /* @__PURE__ */ jsx22(
|
|
1497
1539
|
View15,
|
|
1498
1540
|
{
|
|
1499
1541
|
style: [
|
|
1500
|
-
|
|
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__ */
|
|
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
|
|
1517
|
-
import { jsx as
|
|
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
|
|
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: [
|
|
1717
|
+
style: [styles20.container, style],
|
|
1676
1718
|
accessibilityRole: "none",
|
|
1677
1719
|
accessibilityLabel: `${MONTHS[viewMonth]} ${viewYear} calendar`,
|
|
1678
1720
|
children: [
|
|
1679
|
-
/* @__PURE__ */ jsxs13(View16, { style:
|
|
1680
|
-
/* @__PURE__ */
|
|
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 }) => [
|
|
1687
|
-
children: /* @__PURE__ */
|
|
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: [
|
|
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__ */
|
|
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 }) => [
|
|
1710
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
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: [
|
|
1759
|
+
style: [styles20.weekdayText, { color: colors2.colorOnBgSubtle }],
|
|
1718
1760
|
accessibilityLabel: DAY_LABELS[d],
|
|
1719
1761
|
children: d
|
|
1720
1762
|
}
|
|
1721
1763
|
) }, d)) }),
|
|
1722
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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__ */
|
|
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
|
-
|
|
1788
|
+
styles20.dayCell,
|
|
1747
1789
|
isSelected && {
|
|
1748
1790
|
backgroundColor: colors2.colorInteractive
|
|
1749
1791
|
},
|
|
1750
1792
|
isToday && !isSelected && [
|
|
1751
|
-
|
|
1793
|
+
styles20.today,
|
|
1752
1794
|
{ borderColor: colors2.colorInteractive }
|
|
1753
1795
|
],
|
|
1754
|
-
disabled &&
|
|
1755
|
-
pressed && !disabled &&
|
|
1796
|
+
disabled && styles20.disabled,
|
|
1797
|
+
pressed && !disabled && styles20.pressed
|
|
1756
1798
|
],
|
|
1757
|
-
children: /* @__PURE__ */
|
|
1799
|
+
children: /* @__PURE__ */ jsx23(
|
|
1758
1800
|
ScaledText,
|
|
1759
1801
|
{
|
|
1760
1802
|
style: [
|
|
1761
|
-
|
|
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
|
|
1782
|
-
import { jsx as
|
|
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
|
|
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: [
|
|
1903
|
+
style: [styles21.container, style],
|
|
1862
1904
|
accessibilityRole: "none",
|
|
1863
1905
|
accessibilityLabel: label,
|
|
1864
1906
|
children: [
|
|
1865
|
-
/* @__PURE__ */
|
|
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:
|
|
1876
|
-
children: items.map((item, index) => /* @__PURE__ */
|
|
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:
|
|
1880
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
1931
|
+
styles21.navButton,
|
|
1890
1932
|
activeIndex <= 0 && { opacity: 0.4 },
|
|
1891
|
-
pressed &&
|
|
1933
|
+
pressed && styles21.pressed
|
|
1892
1934
|
],
|
|
1893
|
-
children: /* @__PURE__ */
|
|
1935
|
+
children: /* @__PURE__ */ jsx24(ScaledText, { style: [styles21.navText, { color: colors2.colorOnBg }], children: "\u2039" })
|
|
1894
1936
|
}
|
|
1895
1937
|
),
|
|
1896
|
-
/* @__PURE__ */
|
|
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:
|
|
1904
|
-
children: /* @__PURE__ */
|
|
1945
|
+
style: styles21.dotWrapper,
|
|
1946
|
+
children: /* @__PURE__ */ jsx24(
|
|
1905
1947
|
View17,
|
|
1906
1948
|
{
|
|
1907
1949
|
style: [
|
|
1908
|
-
|
|
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__ */
|
|
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
|
-
|
|
1969
|
+
styles21.navButton,
|
|
1928
1970
|
activeIndex >= items.length - 1 && { opacity: 0.4 },
|
|
1929
|
-
pressed &&
|
|
1971
|
+
pressed && styles21.pressed
|
|
1930
1972
|
],
|
|
1931
|
-
children: /* @__PURE__ */
|
|
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
|
|
1942
|
-
import { jsx as
|
|
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
|
|
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__ */
|
|
2031
|
+
return /* @__PURE__ */ jsx25(
|
|
1990
2032
|
Pressable13,
|
|
1991
2033
|
{
|
|
1992
2034
|
onPress,
|
|
1993
2035
|
accessibilityRole: "button",
|
|
1994
2036
|
accessibilityLabel,
|
|
1995
|
-
style: ({ pressed }) => [
|
|
2037
|
+
style: ({ pressed }) => [styles22.card, variantStyle, inner, pressed && { opacity: 0.8 }, style],
|
|
1996
2038
|
children
|
|
1997
2039
|
}
|
|
1998
2040
|
);
|
|
1999
2041
|
}
|
|
2000
|
-
return /* @__PURE__ */
|
|
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
|
|
2005
|
-
import { jsx as
|
|
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 =
|
|
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
|
|
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: [
|
|
2051
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
|
2107
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
2066
2108
|
function IconWrapper({ children, style, accessibilityElementsHidden }) {
|
|
2067
|
-
return /* @__PURE__ */
|
|
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
|
|
2080
|
-
import { jsx as
|
|
2081
|
-
var
|
|
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__ */
|
|
2136
|
+
return /* @__PURE__ */ jsx28(
|
|
2095
2137
|
View21,
|
|
2096
2138
|
{
|
|
2097
2139
|
accessibilityLabel,
|
|
2098
|
-
style: [isColumn ?
|
|
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
|
|
2107
|
-
import { jsx as
|
|
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
|
|
2110
|
-
medium: { height: 48, px: spacing.m, fontSize: font.size.body
|
|
2111
|
-
large: { height: 56, px: spacing.xxl, fontSize: font.size.heading3
|
|
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
|
|
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
|
|
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
|
|
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 }) => [
|
|
2216
|
+
style: ({ pressed }) => [styles25.pressable, containerStyle, pressed && { opacity: 0.75 }, style],
|
|
2174
2217
|
children: [
|
|
2175
|
-
iconStart && /* @__PURE__ */
|
|
2176
|
-
children && (isIconOnly ? children : /* @__PURE__ */
|
|
2177
|
-
iconEnd && /* @__PURE__ */
|
|
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
|
|
2185
|
-
import { jsx as
|
|
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
|
|
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__ */
|
|
2243
|
+
return /* @__PURE__ */ jsx30(
|
|
2201
2244
|
View23,
|
|
2202
2245
|
{
|
|
2203
|
-
style: [
|
|
2246
|
+
style: [styles26.container, style],
|
|
2204
2247
|
accessibilityRole: "image",
|
|
2205
2248
|
accessibilityLabel: label,
|
|
2206
|
-
children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */
|
|
2249
|
+
children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ jsx30(
|
|
2207
2250
|
ScaledText,
|
|
2208
2251
|
{
|
|
2209
2252
|
style: [
|
|
2210
|
-
|
|
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
|
|
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
|
|
2270
|
+
import { jsx as jsx31 } from "react/jsx-runtime";
|
|
2228
2271
|
function Label({ label, style }) {
|
|
2229
2272
|
const { colors: colors2 } = useTheme();
|
|
2230
|
-
return /* @__PURE__ */
|
|
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
|
|
2250
|
-
import { jsx as
|
|
2251
|
-
var
|
|
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__ */
|
|
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: [
|
|
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
|
|
2275
|
-
var
|
|
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: [
|
|
2296
|
-
/* @__PURE__ */ jsxs17(View24, { style:
|
|
2297
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2353
|
+
/* @__PURE__ */ jsx33(Label, { label })
|
|
2311
2354
|
] }),
|
|
2312
|
-
/* @__PURE__ */
|
|
2313
|
-
/* @__PURE__ */
|
|
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
|
|
2319
|
-
import { jsx as
|
|
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
|
|
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: [
|
|
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 }) => [
|
|
2410
|
+
style: ({ pressed }) => [styles29.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
|
|
2368
2411
|
children: [
|
|
2369
|
-
/* @__PURE__ */
|
|
2370
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2375
|
-
/* @__PURE__ */
|
|
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
|
|
2381
|
-
import { jsx as
|
|
2382
|
-
var
|
|
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: [
|
|
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: [
|
|
2459
|
+
/* @__PURE__ */ jsxs19(ScaledText, { style: [styles30.legend, { color: colors2.colorOnBg }], children: [
|
|
2417
2460
|
legend,
|
|
2418
|
-
required && /* @__PURE__ */
|
|
2461
|
+
required && /* @__PURE__ */ jsx35(ScaledText, { style: [styles30.required, { color: colors2.colorOnBgSubtle }], children: " *" })
|
|
2419
2462
|
] }),
|
|
2420
|
-
/* @__PURE__ */
|
|
2421
|
-
/* @__PURE__ */
|
|
2422
|
-
/* @__PURE__ */
|
|
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
|
|
2430
|
-
import { jsx as
|
|
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
|
|
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: [
|
|
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 }) => [
|
|
2521
|
+
style: ({ pressed }) => [styles31.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
|
|
2479
2522
|
children: [
|
|
2480
|
-
/* @__PURE__ */
|
|
2481
|
-
/* @__PURE__ */
|
|
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__ */
|
|
2486
|
-
/* @__PURE__ */
|
|
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
|
|
2492
|
-
import { jsx as
|
|
2493
|
-
var
|
|
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: [
|
|
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: [
|
|
2570
|
+
/* @__PURE__ */ jsxs21(ScaledText, { style: [styles32.legend, { color: colors2.colorOnBg }], children: [
|
|
2528
2571
|
legend,
|
|
2529
|
-
required && /* @__PURE__ */
|
|
2572
|
+
required && /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.required, { color: colors2.colorOnBgSubtle }], children: " *" })
|
|
2530
2573
|
] }),
|
|
2531
|
-
/* @__PURE__ */
|
|
2532
|
-
/* @__PURE__ */
|
|
2533
|
-
/* @__PURE__ */
|
|
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
|
|
2541
|
-
import { jsx as
|
|
2542
|
-
var
|
|
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: [
|
|
2598
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
2623
|
-
/* @__PURE__ */
|
|
2624
|
-
fileNames.length > 0 && /* @__PURE__ */
|
|
2625
|
-
accept && /* @__PURE__ */
|
|
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__ */
|
|
2630
|
-
/* @__PURE__ */
|
|
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
|
|
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
|
|
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
|
|
2688
|
+
var styles34 = StyleSheet35.create({
|
|
2646
2689
|
container: {
|
|
2647
2690
|
gap: spacing.xxs
|
|
2648
2691
|
},
|
|
2649
2692
|
/**
|
|
2650
|
-
* Draws the
|
|
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: [
|
|
2742
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
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
|
-
|
|
2813
|
+
styles34.input,
|
|
2770
2814
|
{ color: colors2.colorOnBg }
|
|
2771
2815
|
]
|
|
2772
2816
|
}
|
|
2773
2817
|
),
|
|
2774
|
-
isOpen && filtered.length > 0 && /* @__PURE__ */
|
|
2818
|
+
isOpen && filtered.length > 0 && /* @__PURE__ */ jsx39(
|
|
2775
2819
|
ScrollView4,
|
|
2776
2820
|
{
|
|
2777
2821
|
style: [
|
|
2778
|
-
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
2847
|
+
children: /* @__PURE__ */ jsx39(
|
|
2804
2848
|
ScaledText,
|
|
2805
2849
|
{
|
|
2806
2850
|
style: [
|
|
2807
|
-
|
|
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__ */
|
|
2826
|
-
/* @__PURE__ */
|
|
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
|
|
2833
|
-
import { jsx as
|
|
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
|
|
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__ */
|
|
2927
|
+
return /* @__PURE__ */ jsx40(
|
|
2884
2928
|
View31,
|
|
2885
2929
|
{
|
|
2886
|
-
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__ */
|
|
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
|
-
|
|
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__ */
|
|
2957
|
+
children: label !== null ? /* @__PURE__ */ jsx40(
|
|
2914
2958
|
ScaledText,
|
|
2915
2959
|
{
|
|
2916
|
-
style: [
|
|
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
|
|
2934
|
-
import { jsx as
|
|
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
|
|
2989
|
+
var styles36 = StyleSheet37.create({
|
|
2946
2990
|
container: {
|
|
2947
2991
|
gap: spacing.xxs
|
|
2948
2992
|
},
|
|
2949
2993
|
/**
|
|
2950
|
-
* The wrapper draws the
|
|
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: [
|
|
2994
|
-
/* @__PURE__ */
|
|
2995
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
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
|
-
|
|
3076
|
+
styles36.input,
|
|
3032
3077
|
{ color: colors2.colorOnBg }
|
|
3033
3078
|
]
|
|
3034
3079
|
}
|
|
3035
3080
|
)
|
|
3036
3081
|
}
|
|
3037
3082
|
),
|
|
3038
|
-
/* @__PURE__ */
|
|
3039
|
-
/* @__PURE__ */
|
|
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
|
|
3046
|
-
import { jsx as
|
|
3047
|
-
var
|
|
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: [
|
|
3082
|
-
/* @__PURE__ */
|
|
3083
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
3117
|
-
/* @__PURE__ */
|
|
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
|
|
3124
|
-
import { jsx as
|
|
3125
|
-
var
|
|
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: [
|
|
3214
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
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__ */
|
|
3276
|
+
/* @__PURE__ */ jsx43(
|
|
3234
3277
|
ScaledText,
|
|
3235
3278
|
{
|
|
3236
3279
|
style: [
|
|
3237
|
-
|
|
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__ */
|
|
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__ */
|
|
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__ */
|
|
3306
|
+
children: /* @__PURE__ */ jsx43(
|
|
3257
3307
|
Pressable20,
|
|
3258
3308
|
{
|
|
3259
|
-
style:
|
|
3309
|
+
style: styles38.overlay,
|
|
3260
3310
|
onPress: () => setOpen(false),
|
|
3261
3311
|
accessibilityRole: "button",
|
|
3262
3312
|
accessibilityLabel: "Close options",
|
|
3263
|
-
children: /* @__PURE__ */
|
|
3313
|
+
children: /* @__PURE__ */ jsx43(
|
|
3264
3314
|
Pressable20,
|
|
3265
3315
|
{
|
|
3266
|
-
style: [
|
|
3316
|
+
style: [styles38.sheet, { backgroundColor: colors2.colorBg }],
|
|
3267
3317
|
onPress: () => {
|
|
3268
3318
|
},
|
|
3269
3319
|
children: /* @__PURE__ */ jsxs26(SafeAreaView, { children: [
|
|
3270
|
-
/* @__PURE__ */ jsxs26(View34, { style:
|
|
3271
|
-
/* @__PURE__ */
|
|
3272
|
-
/* @__PURE__ */
|
|
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__ */
|
|
3329
|
+
children: /* @__PURE__ */ jsx43(ScaledText, { style: [styles38.closeText, { color: colors2.colorInteractive }], children: "Done" })
|
|
3280
3330
|
}
|
|
3281
3331
|
)
|
|
3282
3332
|
] }),
|
|
3283
|
-
/* @__PURE__ */
|
|
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__ */
|
|
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
|
-
|
|
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__ */
|
|
3357
|
+
children: /* @__PURE__ */ jsx43(
|
|
3308
3358
|
ScaledText,
|
|
3309
3359
|
{
|
|
3310
3360
|
style: [
|
|
3311
|
-
|
|
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__ */
|
|
3333
|
-
/* @__PURE__ */
|
|
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
|
|
3340
|
-
import { jsx as
|
|
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
|
|
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: [
|
|
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:
|
|
3447
|
-
/* @__PURE__ */
|
|
3448
|
-
showValue && /* @__PURE__ */
|
|
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: [
|
|
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__ */
|
|
3510
|
+
/* @__PURE__ */ jsx44(View35, { style: [styles39.track, { backgroundColor: colors2.colorBgSubtle }], children: /* @__PURE__ */ jsx44(
|
|
3461
3511
|
View35,
|
|
3462
3512
|
{
|
|
3463
3513
|
style: [
|
|
3464
|
-
|
|
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__ */
|
|
3522
|
+
/* @__PURE__ */ jsx44(
|
|
3473
3523
|
View35,
|
|
3474
3524
|
{
|
|
3475
3525
|
style: [
|
|
3476
|
-
|
|
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__ */
|
|
3490
|
-
/* @__PURE__ */
|
|
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
|
|
3499
|
-
import { jsx as
|
|
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
|
|
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: [
|
|
3591
|
-
/* @__PURE__ */
|
|
3592
|
-
/* @__PURE__ */ jsxs28(View36, { style: [
|
|
3593
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
3603
|
-
|
|
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__ */
|
|
3660
|
+
children: /* @__PURE__ */ jsx45(
|
|
3612
3661
|
ScaledText,
|
|
3613
3662
|
{
|
|
3614
|
-
style: [
|
|
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__ */
|
|
3670
|
+
/* @__PURE__ */ jsx45(
|
|
3622
3671
|
View36,
|
|
3623
3672
|
{
|
|
3624
3673
|
style: [
|
|
3625
|
-
|
|
3674
|
+
styles40.inputWrapper,
|
|
3626
3675
|
{
|
|
3627
3676
|
borderColor,
|
|
3628
3677
|
backgroundColor: colors2.colorBg
|
|
3629
3678
|
}
|
|
3630
3679
|
],
|
|
3631
|
-
children: /* @__PURE__ */
|
|
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
|
-
|
|
3700
|
+
styles40.input,
|
|
3652
3701
|
{ color: colors2.colorOnBg }
|
|
3653
3702
|
]
|
|
3654
3703
|
}
|
|
3655
3704
|
)
|
|
3656
3705
|
}
|
|
3657
3706
|
),
|
|
3658
|
-
/* @__PURE__ */
|
|
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
|
-
|
|
3668
|
-
|
|
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__ */
|
|
3727
|
+
children: /* @__PURE__ */ jsx45(
|
|
3677
3728
|
ScaledText,
|
|
3678
3729
|
{
|
|
3679
|
-
style: [
|
|
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__ */
|
|
3688
|
-
/* @__PURE__ */
|
|
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
|
|
3694
|
-
import { jsx as
|
|
3695
|
-
var
|
|
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__ */
|
|
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:
|
|
3759
|
-
/* @__PURE__ */
|
|
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:
|
|
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: [
|
|
3823
|
+
style: [styles41.panel, { backgroundColor: colors2.colorGreySubtle }, style],
|
|
3773
3824
|
accessibilityViewIsModal: true,
|
|
3774
3825
|
onAccessibilityEscape: onClose,
|
|
3775
3826
|
children: [
|
|
3776
|
-
/* @__PURE__ */
|
|
3827
|
+
/* @__PURE__ */ jsx46(
|
|
3777
3828
|
Pressable22,
|
|
3778
3829
|
{
|
|
3779
|
-
style:
|
|
3830
|
+
style: styles41.closeButton,
|
|
3780
3831
|
onPress: onClose,
|
|
3781
3832
|
accessibilityRole: "button",
|
|
3782
3833
|
accessibilityLabel: "Close dialog",
|
|
3783
3834
|
hitSlop: 8,
|
|
3784
|
-
children: /* @__PURE__ */
|
|
3835
|
+
children: /* @__PURE__ */ jsx46(
|
|
3785
3836
|
ScaledText,
|
|
3786
3837
|
{
|
|
3787
|
-
style: [
|
|
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__ */
|
|
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
|
|
3807
|
-
import { jsx as
|
|
3808
|
-
var
|
|
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
|
|
3867
|
-
const backdropAnim = useRef4(new
|
|
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
|
-
|
|
3871
|
-
|
|
3921
|
+
Animated4.parallel([
|
|
3922
|
+
Animated4.timing(slideAnim, {
|
|
3872
3923
|
toValue: 0,
|
|
3873
3924
|
duration: 250,
|
|
3874
3925
|
useNativeDriver: true
|
|
3875
3926
|
}),
|
|
3876
|
-
|
|
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
|
-
|
|
3884
|
-
|
|
3934
|
+
Animated4.parallel([
|
|
3935
|
+
Animated4.timing(slideAnim, {
|
|
3885
3936
|
toValue: screenHeight,
|
|
3886
3937
|
duration: 200,
|
|
3887
3938
|
useNativeDriver: true
|
|
3888
3939
|
}),
|
|
3889
|
-
|
|
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__ */
|
|
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:
|
|
3905
|
-
/* @__PURE__ */
|
|
3906
|
-
|
|
3955
|
+
children: /* @__PURE__ */ jsxs30(View38, { style: styles42.overlay, children: [
|
|
3956
|
+
/* @__PURE__ */ jsx47(
|
|
3957
|
+
Animated4.View,
|
|
3907
3958
|
{
|
|
3908
3959
|
style: [
|
|
3909
|
-
|
|
3960
|
+
StyleSheet43.absoluteFill,
|
|
3910
3961
|
{ backgroundColor: "rgba(0, 0, 0, 0.5)", opacity: backdropAnim }
|
|
3911
3962
|
],
|
|
3912
|
-
children: /* @__PURE__ */
|
|
3963
|
+
children: /* @__PURE__ */ jsx47(
|
|
3913
3964
|
Pressable23,
|
|
3914
3965
|
{
|
|
3915
|
-
style:
|
|
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
|
-
|
|
3976
|
+
Animated4.View,
|
|
3926
3977
|
{
|
|
3927
3978
|
style: [
|
|
3928
|
-
|
|
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: [
|
|
3992
|
+
style: [styles42.header, { borderBottomColor: colors2.colorBgSubtle }],
|
|
3942
3993
|
children: [
|
|
3943
|
-
!!title && /* @__PURE__ */
|
|
3944
|
-
/* @__PURE__ */
|
|
3994
|
+
!!title && /* @__PURE__ */ jsx47(ScaledText, { style: [styles42.title, { color: colors2.colorOnBg }], children: title }),
|
|
3995
|
+
/* @__PURE__ */ jsx47(
|
|
3945
3996
|
Pressable23,
|
|
3946
3997
|
{
|
|
3947
|
-
style:
|
|
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__ */
|
|
4003
|
+
children: /* @__PURE__ */ jsx47(
|
|
3953
4004
|
ScaledText,
|
|
3954
4005
|
{
|
|
3955
|
-
style: [
|
|
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__ */
|
|
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
|
|
3985
|
-
import { jsx as
|
|
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
|
|
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
|
|
4033
|
-
const opacityAnim = useRef5(new
|
|
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
|
-
|
|
4044
|
-
|
|
4094
|
+
Animated5.parallel([
|
|
4095
|
+
Animated5.timing(slideAnim, {
|
|
4045
4096
|
toValue: 0,
|
|
4046
4097
|
duration: 200,
|
|
4047
4098
|
useNativeDriver: true
|
|
4048
4099
|
}),
|
|
4049
|
-
|
|
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
|
-
|
|
4113
|
+
Animated5.View,
|
|
4063
4114
|
{
|
|
4064
4115
|
style: [
|
|
4065
|
-
|
|
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__ */
|
|
4076
|
-
/* @__PURE__ */
|
|
4126
|
+
/* @__PURE__ */ jsx48(ScaledText, { style: [styles43.message, { color: text }], children: toast.message }),
|
|
4127
|
+
/* @__PURE__ */ jsx48(
|
|
4077
4128
|
Pressable24,
|
|
4078
4129
|
{
|
|
4079
|
-
style:
|
|
4130
|
+
style: styles43.closeButton,
|
|
4080
4131
|
onPress: onRemove,
|
|
4081
4132
|
accessibilityRole: "button",
|
|
4082
4133
|
accessibilityLabel: "Dismiss",
|
|
4083
4134
|
hitSlop: 8,
|
|
4084
|
-
children: /* @__PURE__ */
|
|
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__ */
|
|
4155
|
+
return /* @__PURE__ */ jsx48(ToastContext.Provider, { value, children: /* @__PURE__ */ jsxs31(View39, { style: [{ flex: 1 }, style], children: [
|
|
4105
4156
|
children,
|
|
4106
|
-
toasts.length > 0 && /* @__PURE__ */
|
|
4157
|
+
toasts.length > 0 && /* @__PURE__ */ jsx48(
|
|
4107
4158
|
View39,
|
|
4108
4159
|
{
|
|
4109
|
-
style:
|
|
4160
|
+
style: styles43.container,
|
|
4110
4161
|
accessibilityRole: "summary",
|
|
4111
4162
|
accessibilityLabel: "Notifications",
|
|
4112
|
-
children: toasts.map((toast) => /* @__PURE__ */
|
|
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
|
|
4135
|
-
import { Fragment as Fragment2, jsx as
|
|
4136
|
-
var
|
|
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
|
|
4196
|
-
const backdropAnim = useRef6(new
|
|
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
|
-
|
|
4200
|
-
|
|
4250
|
+
Animated6.parallel([
|
|
4251
|
+
Animated6.timing(slideAnim, {
|
|
4201
4252
|
toValue: 0,
|
|
4202
4253
|
duration: 250,
|
|
4203
4254
|
useNativeDriver: true
|
|
4204
4255
|
}),
|
|
4205
|
-
|
|
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
|
-
|
|
4213
|
-
|
|
4263
|
+
Animated6.parallel([
|
|
4264
|
+
Animated6.timing(slideAnim, {
|
|
4214
4265
|
toValue: screenHeight,
|
|
4215
4266
|
duration: 200,
|
|
4216
4267
|
useNativeDriver: true
|
|
4217
4268
|
}),
|
|
4218
|
-
|
|
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__ */
|
|
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:
|
|
4244
|
-
/* @__PURE__ */
|
|
4245
|
-
|
|
4294
|
+
children: /* @__PURE__ */ jsxs32(View40, { style: styles44.overlay, children: [
|
|
4295
|
+
/* @__PURE__ */ jsx49(
|
|
4296
|
+
Animated6.View,
|
|
4246
4297
|
{
|
|
4247
4298
|
style: [
|
|
4248
|
-
|
|
4299
|
+
StyleSheet45.absoluteFill,
|
|
4249
4300
|
{ backgroundColor: "rgba(0, 0, 0, 0.5)", opacity: backdropAnim }
|
|
4250
4301
|
],
|
|
4251
|
-
children: /* @__PURE__ */
|
|
4302
|
+
children: /* @__PURE__ */ jsx49(
|
|
4252
4303
|
Pressable25,
|
|
4253
4304
|
{
|
|
4254
|
-
style:
|
|
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__ */
|
|
4264
|
-
|
|
4314
|
+
/* @__PURE__ */ jsx49(
|
|
4315
|
+
Animated6.View,
|
|
4265
4316
|
{
|
|
4266
4317
|
style: [
|
|
4267
|
-
|
|
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
|
-
|
|
4331
|
+
styles44.sheetHeader,
|
|
4281
4332
|
{ borderBottomColor: colors2.colorBgSubtle }
|
|
4282
4333
|
],
|
|
4283
4334
|
children: [
|
|
4284
|
-
/* @__PURE__ */
|
|
4285
|
-
/* @__PURE__ */
|
|
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__ */
|
|
4343
|
+
children: /* @__PURE__ */ jsx49(
|
|
4293
4344
|
ScaledText,
|
|
4294
4345
|
{
|
|
4295
4346
|
style: [
|
|
4296
|
-
|
|
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__ */
|
|
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__ */
|
|
4364
|
+
item.separator && /* @__PURE__ */ jsx49(
|
|
4314
4365
|
View40,
|
|
4315
4366
|
{
|
|
4316
4367
|
style: [
|
|
4317
|
-
|
|
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
|
-
|
|
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__ */
|
|
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__ */
|
|
4396
|
+
/* @__PURE__ */ jsx49(
|
|
4346
4397
|
ScaledText,
|
|
4347
4398
|
{
|
|
4348
4399
|
style: [
|
|
4349
|
-
|
|
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
|
|
4427
|
+
StyleSheet as StyleSheet46
|
|
4377
4428
|
} from "react-native";
|
|
4378
|
-
import { jsx as
|
|
4379
|
-
var
|
|
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: [
|
|
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__ */
|
|
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:
|
|
4425
|
-
/* @__PURE__ */
|
|
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:
|
|
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__ */
|
|
4487
|
+
/* @__PURE__ */ jsx50(
|
|
4437
4488
|
View41,
|
|
4438
4489
|
{
|
|
4439
|
-
style: [
|
|
4490
|
+
style: [styles45.panel, { backgroundColor: colors2.colorBg }],
|
|
4440
4491
|
accessibilityLabel,
|
|
4441
4492
|
children: content
|
|
4442
4493
|
}
|