@boostdev/design-system-react-native 0.4.0 → 0.5.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +65 -0
  2. package/README.md +10 -0
  3. package/dist/index.cjs +854 -764
  4. package/dist/index.d.cts +35 -4
  5. package/dist/index.d.ts +35 -4
  6. package/dist/index.js +645 -659
  7. package/package.json +1 -1
  8. package/src/components/interaction/Button/Button.mdx +5 -1
  9. package/src/components/interaction/Button/Button.spec.tsx +40 -0
  10. package/src/components/interaction/Button/Button.tsx +15 -8
  11. package/src/components/interaction/Dialog/Dialog.tsx +2 -9
  12. package/src/components/interaction/DropdownMenu/DropdownMenu.tsx +2 -13
  13. package/src/components/interaction/Rating/Rating.tsx +2 -1
  14. package/src/components/interaction/SideSheet/SideSheet.tsx +2 -11
  15. package/src/components/interaction/Toast/Toast.tsx +2 -9
  16. package/src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx +2 -1
  17. package/src/components/interaction/form/Combobox/Combobox.spec.tsx +9 -0
  18. package/src/components/interaction/form/Combobox/Combobox.tsx +4 -12
  19. package/src/components/interaction/form/FileInput/FileInput.spec.tsx +6 -0
  20. package/src/components/interaction/form/FileInput/FileInput.tsx +3 -2
  21. package/src/components/interaction/form/FormInput/FormInput.spec.tsx +18 -9
  22. package/src/components/interaction/form/FormInput/FormInput.tsx +5 -11
  23. package/src/components/interaction/form/NumberInput/NumberInput.spec.tsx +8 -0
  24. package/src/components/interaction/form/NumberInput/NumberInput.tsx +6 -13
  25. package/src/components/interaction/form/RadioGroup/RadioGroup.tsx +2 -1
  26. package/src/components/interaction/form/SegmentedControl/SegmentedControl.spec.tsx +40 -0
  27. package/src/components/interaction/form/SegmentedControl/SegmentedControl.tsx +8 -2
  28. package/src/components/interaction/form/Select/Select.mdx +2 -1
  29. package/src/components/interaction/form/Select/Select.spec.tsx +22 -1
  30. package/src/components/interaction/form/Select/Select.tsx +9 -17
  31. package/src/components/interaction/form/Slider/Slider.tsx +2 -9
  32. package/src/components/interaction/form/Textarea/Textarea.spec.tsx +6 -0
  33. package/src/components/interaction/form/Textarea/Textarea.tsx +3 -8
  34. package/src/components/interaction/form/atoms/Label.tsx +2 -1
  35. package/src/components/interaction/form/atoms/Message.tsx +2 -1
  36. package/src/components/layout/SectionHeader/SectionHeader.tsx +2 -1
  37. package/src/components/ui/Accordion/Accordion.tsx +2 -11
  38. package/src/components/ui/Alert/Alert.tsx +2 -1
  39. package/src/components/ui/Avatar/Avatar.tsx +2 -1
  40. package/src/components/ui/Badge/Badge.spec.tsx +28 -0
  41. package/src/components/ui/Badge/Badge.tsx +9 -3
  42. package/src/components/ui/Breadcrumb/Breadcrumb.tsx +2 -1
  43. package/src/components/ui/Calendar/Calendar.tsx +2 -8
  44. package/src/components/ui/Carousel/Carousel.tsx +2 -12
  45. package/src/components/ui/Collapsible/Collapsible.spec.tsx +1 -1
  46. package/src/components/ui/Collapsible/Collapsible.tsx +7 -22
  47. package/src/components/ui/DescriptionList/DescriptionList.tsx +2 -1
  48. package/src/components/ui/Link/Link.tsx +2 -1
  49. package/src/components/ui/NotificationBanner/NotificationBanner.tsx +2 -1
  50. package/src/components/ui/Pagination/Pagination.tsx +2 -1
  51. package/src/components/ui/Progress/Progress.tsx +2 -1
  52. package/src/components/ui/ProgressCircle/ProgressCircle.tsx +2 -1
  53. package/src/components/ui/Table/Table.tsx +2 -9
  54. package/src/components/ui/Tabs/Tabs.tsx +2 -10
  55. package/src/components/ui/Tooltip/Tooltip.tsx +2 -1
  56. package/src/components/ui/Typography/Typography.mdx +2 -0
  57. package/src/components/ui/Typography/Typography.spec.tsx +59 -0
  58. package/src/components/ui/Typography/Typography.tsx +18 -2
  59. package/src/index.ts +2 -0
  60. package/src/native/Chevron.spec.tsx +34 -0
  61. package/src/native/Chevron.tsx +50 -0
  62. package/src/native/ScaledText.guard.spec.ts +25 -0
  63. package/src/native/ScaledText.spec.tsx +77 -0
  64. package/src/native/ScaledText.tsx +30 -0
  65. package/src/native/fontScale.spec.ts +35 -0
  66. package/src/native/fontScale.ts +15 -0
  67. package/src/test/cornerRadii.ts +15 -0
package/dist/index.js CHANGED
@@ -72,10 +72,37 @@ function useReactNavigationTheme(overrides = {}) {
72
72
  });
73
73
  }
74
74
 
75
- // src/components/ui/Typography/Typography.tsx
76
- import { StyleSheet, Text } from "react-native";
75
+ // src/native/ScaledText.tsx
76
+ import { forwardRef } from "react";
77
+ import { StyleSheet, Text, TextInput } from "react-native";
78
+
79
+ // src/native/fontScale.ts
80
+ function maxFontScaleFor(fontSize) {
81
+ if (fontSize >= 60) return 1;
82
+ if (fontSize >= 26) return 1.3;
83
+ if (fontSize >= 20) return 1.5;
84
+ return 2;
85
+ }
86
+ var DEFAULT_FONT_SIZE = 14;
87
+
88
+ // src/native/ScaledText.tsx
77
89
  import { jsx as jsx2 } from "react/jsx-runtime";
78
- var styles = StyleSheet.create({
90
+ function maxFontScaleForStyle(style, override) {
91
+ if (override !== void 0 && override !== null) return override;
92
+ const fontSize = StyleSheet.flatten(style)?.fontSize;
93
+ return maxFontScaleFor(typeof fontSize === "number" ? fontSize : DEFAULT_FONT_SIZE);
94
+ }
95
+ var ScaledText = forwardRef(function ScaledText2({ maxFontSizeMultiplier, style, ...rest }, ref) {
96
+ return /* @__PURE__ */ jsx2(Text, { ref, style, maxFontSizeMultiplier: maxFontScaleForStyle(style, maxFontSizeMultiplier), ...rest });
97
+ });
98
+ var ScaledTextInput = forwardRef(function ScaledTextInput2({ maxFontSizeMultiplier, style, ...rest }, ref) {
99
+ return /* @__PURE__ */ jsx2(TextInput, { ref, style, maxFontSizeMultiplier: maxFontScaleForStyle(style, maxFontSizeMultiplier), ...rest });
100
+ });
101
+
102
+ // src/components/ui/Typography/Typography.tsx
103
+ import { StyleSheet as StyleSheet2 } from "react-native";
104
+ import { jsx as jsx3 } from "react/jsx-runtime";
105
+ var styles = StyleSheet2.create({
79
106
  base: {
80
107
  fontFamily: font.family.body,
81
108
  fontWeight: font.weight.body
@@ -114,22 +141,30 @@ var accessibilityRoles = {
114
141
  body: "text",
115
142
  body_s: "text"
116
143
  };
117
- function Typography({ variant = "body", children, style }) {
144
+ function Typography({
145
+ variant = "body",
146
+ children,
147
+ style,
148
+ maxFontSizeMultiplier,
149
+ numberOfLines
150
+ }) {
118
151
  const { colors: colors2 } = useTheme();
119
- return /* @__PURE__ */ jsx2(
120
- Text,
152
+ return /* @__PURE__ */ jsx3(
153
+ ScaledText,
121
154
  {
122
155
  accessibilityRole: accessibilityRoles[variant],
123
156
  style: [styles.base, styles[variant], { color: colors2.colorOnBg }, style],
157
+ maxFontSizeMultiplier,
158
+ numberOfLines,
124
159
  children
125
160
  }
126
161
  );
127
162
  }
128
163
 
129
164
  // src/components/ui/Badge/Badge.tsx
130
- import { StyleSheet as StyleSheet2, View, Text as Text2 } from "react-native";
131
- import { jsx as jsx3 } from "react/jsx-runtime";
132
- var styles2 = StyleSheet2.create({
165
+ import { StyleSheet as StyleSheet3, View } from "react-native";
166
+ import { jsx as jsx4 } from "react/jsx-runtime";
167
+ var styles2 = StyleSheet3.create({
133
168
  badge: {
134
169
  alignSelf: "flex-start",
135
170
  flexDirection: "row",
@@ -146,7 +181,7 @@ var styles2 = StyleSheet2.create({
146
181
  lineHeight: font.size.bodyS
147
182
  }
148
183
  });
149
- function Badge({ children, variant = "primary", style }) {
184
+ function Badge({ children, variant = "primary", style, maxFontSizeMultiplier }) {
150
185
  const { colors: colors2 } = useTheme();
151
186
  const variantColors = {
152
187
  primary: { bg: colors2.colorInteractive, text: colors2.colorOnInteractive },
@@ -156,12 +191,12 @@ function Badge({ children, variant = "primary", style }) {
156
191
  warning: { bg: colors2.colorWarning, text: colors2.colorOnWarning }
157
192
  };
158
193
  const { bg, text } = variantColors[variant];
159
- return /* @__PURE__ */ jsx3(View, { style: [styles2.badge, { backgroundColor: bg }, style], children: /* @__PURE__ */ jsx3(Text2, { style: [styles2.text, { color: text }], children }) });
194
+ return /* @__PURE__ */ jsx4(View, { style: [styles2.badge, { backgroundColor: bg }, style], children: /* @__PURE__ */ jsx4(ScaledText, { style: [styles2.text, { color: text }], maxFontSizeMultiplier, children }) });
160
195
  }
161
196
 
162
197
  // src/components/ui/Avatar/Avatar.tsx
163
- import { StyleSheet as StyleSheet3, View as View2, Text as Text3, Image } from "react-native";
164
- import { jsx as jsx4 } from "react/jsx-runtime";
198
+ import { StyleSheet as StyleSheet4, View as View2, Image } from "react-native";
199
+ import { jsx as jsx5 } from "react/jsx-runtime";
165
200
  var sizeMap = {
166
201
  small: { container: 32, fontSize: font.size.bodyS },
167
202
  medium: { container: 48, fontSize: font.size.body },
@@ -170,7 +205,7 @@ var sizeMap = {
170
205
  function getInitials(name) {
171
206
  return name.split(" ").filter(Boolean).slice(0, 2).map((word) => word[0].toUpperCase()).join("");
172
207
  }
173
- var styles3 = StyleSheet3.create({
208
+ var styles3 = StyleSheet4.create({
174
209
  container: {
175
210
  borderRadius: border.radius.full,
176
211
  overflow: "hidden",
@@ -191,18 +226,18 @@ function Avatar({ src, alt, name, size = "medium", style }) {
191
226
  const { container, fontSize } = sizeMap[size];
192
227
  const label = alt ?? name ?? "User avatar";
193
228
  if (src) {
194
- return /* @__PURE__ */ jsx4(
229
+ return /* @__PURE__ */ jsx5(
195
230
  View2,
196
231
  {
197
232
  style: [styles3.container, { width: container, height: container }, style],
198
233
  accessibilityLabel: label,
199
234
  accessibilityRole: "image",
200
- children: /* @__PURE__ */ jsx4(Image, { source: { uri: src }, style: styles3.image })
235
+ children: /* @__PURE__ */ jsx5(Image, { source: { uri: src }, style: styles3.image })
201
236
  }
202
237
  );
203
238
  }
204
239
  const initials = name ? getInitials(name) : "";
205
- return /* @__PURE__ */ jsx4(
240
+ return /* @__PURE__ */ jsx5(
206
241
  View2,
207
242
  {
208
243
  style: [
@@ -212,8 +247,8 @@ function Avatar({ src, alt, name, size = "medium", style }) {
212
247
  ],
213
248
  accessibilityLabel: label,
214
249
  accessibilityRole: "image",
215
- children: /* @__PURE__ */ jsx4(
216
- Text3,
250
+ children: /* @__PURE__ */ jsx5(
251
+ ScaledText,
217
252
  {
218
253
  style: [styles3.initials, { fontSize, color: colors2.colorOnBlue }],
219
254
  importantForAccessibility: "no",
@@ -226,21 +261,21 @@ function Avatar({ src, alt, name, size = "medium", style }) {
226
261
  }
227
262
 
228
263
  // src/components/ui/Separator/Separator.tsx
229
- import { StyleSheet as StyleSheet4, View as View3 } from "react-native";
230
- import { jsx as jsx5 } from "react/jsx-runtime";
231
- var styles4 = StyleSheet4.create({
264
+ import { StyleSheet as StyleSheet5, View as View3 } from "react-native";
265
+ import { jsx as jsx6 } from "react/jsx-runtime";
266
+ var styles4 = StyleSheet5.create({
232
267
  horizontal: {
233
- height: StyleSheet4.hairlineWidth,
268
+ height: StyleSheet5.hairlineWidth,
234
269
  width: "100%"
235
270
  },
236
271
  vertical: {
237
- width: StyleSheet4.hairlineWidth,
272
+ width: StyleSheet5.hairlineWidth,
238
273
  alignSelf: "stretch"
239
274
  }
240
275
  });
241
276
  function Separator({ orientation = "horizontal", style }) {
242
277
  const { colors: colors2 } = useTheme();
243
- return /* @__PURE__ */ jsx5(
278
+ return /* @__PURE__ */ jsx6(
244
279
  View3,
245
280
  {
246
281
  accessibilityRole: "none",
@@ -255,7 +290,7 @@ function Separator({ orientation = "horizontal", style }) {
255
290
 
256
291
  // src/components/ui/Loading/Loading.tsx
257
292
  import { ActivityIndicator } from "react-native";
258
- import { jsx as jsx6 } from "react/jsx-runtime";
293
+ import { jsx as jsx7 } from "react/jsx-runtime";
259
294
  var rnSize = {
260
295
  small: "small",
261
296
  medium: "large",
@@ -263,7 +298,7 @@ var rnSize = {
263
298
  };
264
299
  function Loading({ size = "medium", accessibilityLabel = "Loading", style }) {
265
300
  const { colors: colors2 } = useTheme();
266
- return /* @__PURE__ */ jsx6(
301
+ return /* @__PURE__ */ jsx7(
267
302
  ActivityIndicator,
268
303
  {
269
304
  size: rnSize[size],
@@ -276,14 +311,14 @@ function Loading({ size = "medium", accessibilityLabel = "Loading", style }) {
276
311
  }
277
312
 
278
313
  // src/components/ui/Progress/Progress.tsx
279
- import { StyleSheet as StyleSheet5, View as View4, Text as Text4 } from "react-native";
280
- import { jsx as jsx7, jsxs } from "react/jsx-runtime";
314
+ import { StyleSheet as StyleSheet6, View as View4 } from "react-native";
315
+ import { jsx as jsx8, jsxs } from "react/jsx-runtime";
281
316
  var trackHeight = {
282
317
  small: 4,
283
318
  medium: 8,
284
319
  large: 12
285
320
  };
286
- var styles5 = StyleSheet5.create({
321
+ var styles5 = StyleSheet6.create({
287
322
  container: {
288
323
  width: "100%"
289
324
  },
@@ -320,20 +355,20 @@ function Progress({
320
355
  const height = trackHeight[size];
321
356
  return /* @__PURE__ */ jsxs(View4, { style: [styles5.container, style], children: [
322
357
  showLabel && /* @__PURE__ */ jsxs(View4, { style: styles5.labelRow, children: [
323
- /* @__PURE__ */ jsx7(Text4, { style: [styles5.labelText, { color: colors2.colorOnBg }], children: label }),
324
- /* @__PURE__ */ jsxs(Text4, { style: [styles5.labelText, { color: colors2.colorOnBgSubtle }], children: [
358
+ /* @__PURE__ */ jsx8(ScaledText, { style: [styles5.labelText, { color: colors2.colorOnBg }], children: label }),
359
+ /* @__PURE__ */ jsxs(ScaledText, { style: [styles5.labelText, { color: colors2.colorOnBgSubtle }], children: [
325
360
  Math.round(percentage),
326
361
  "%"
327
362
  ] })
328
363
  ] }),
329
- /* @__PURE__ */ jsx7(
364
+ /* @__PURE__ */ jsx8(
330
365
  View4,
331
366
  {
332
367
  style: [styles5.track, { height, backgroundColor: colors2.colorBgSubtle }],
333
368
  accessibilityRole: "progressbar",
334
369
  accessibilityLabel: label,
335
370
  accessibilityValue: { min: 0, max, now: value },
336
- children: /* @__PURE__ */ jsx7(
371
+ children: /* @__PURE__ */ jsx8(
337
372
  View4,
338
373
  {
339
374
  style: [
@@ -349,9 +384,9 @@ function Progress({
349
384
 
350
385
  // src/components/ui/Skeleton/Skeleton.tsx
351
386
  import { useEffect, useRef } from "react";
352
- import { Animated, StyleSheet as StyleSheet6 } from "react-native";
353
- import { jsx as jsx8 } from "react/jsx-runtime";
354
- var styles6 = StyleSheet6.create({
387
+ import { Animated, StyleSheet as StyleSheet7 } from "react-native";
388
+ import { jsx as jsx9 } from "react/jsx-runtime";
389
+ var styles6 = StyleSheet7.create({
355
390
  skeleton: {
356
391
  borderRadius: border.radius.xs,
357
392
  overflow: "hidden"
@@ -370,7 +405,7 @@ function Skeleton({ style }) {
370
405
  anim.start();
371
406
  return () => anim.stop();
372
407
  }, [opacity]);
373
- return /* @__PURE__ */ jsx8(
408
+ return /* @__PURE__ */ jsx9(
374
409
  Animated.View,
375
410
  {
376
411
  importantForAccessibility: "no-hide-descendants",
@@ -384,9 +419,9 @@ function Skeleton({ style }) {
384
419
  }
385
420
 
386
421
  // src/components/ui/Alert/Alert.tsx
387
- import { StyleSheet as StyleSheet7, View as View5, Text as Text5, Pressable } from "react-native";
388
- import { jsx as jsx9, jsxs as jsxs2 } from "react/jsx-runtime";
389
- var styles7 = StyleSheet7.create({
422
+ import { StyleSheet as StyleSheet8, View as View5, Pressable } from "react-native";
423
+ import { jsx as jsx10, jsxs as jsxs2 } from "react/jsx-runtime";
424
+ var styles7 = StyleSheet8.create({
390
425
  alert: {
391
426
  flexDirection: "row",
392
427
  alignItems: "flex-start",
@@ -443,12 +478,12 @@ function Alert({
443
478
  accessibilityLiveRegion: isUrgent ? "assertive" : "polite",
444
479
  style: [styles7.alert, { backgroundColor: bg, borderStartWidth: spacing.s, borderStartColor: borderColor }, style],
445
480
  children: [
446
- icon && /* @__PURE__ */ jsx9(View5, { style: styles7.icon, children: icon }),
481
+ icon && /* @__PURE__ */ jsx10(View5, { style: styles7.icon, children: icon }),
447
482
  /* @__PURE__ */ jsxs2(View5, { style: styles7.content, children: [
448
- title && /* @__PURE__ */ jsx9(Text5, { style: [styles7.title, { color: text }], children: title }),
449
- typeof resolvedChildren === "string" || typeof resolvedChildren === "number" ? /* @__PURE__ */ jsx9(Text5, { style: [styles7.body, { color: text }], children: resolvedChildren }) : resolvedChildren
483
+ title && /* @__PURE__ */ jsx10(ScaledText, { style: [styles7.title, { color: text }], children: title }),
484
+ typeof resolvedChildren === "string" || typeof resolvedChildren === "number" ? /* @__PURE__ */ jsx10(ScaledText, { style: [styles7.body, { color: text }], children: resolvedChildren }) : resolvedChildren
450
485
  ] }),
451
- onDismiss && /* @__PURE__ */ jsx9(
486
+ onDismiss && /* @__PURE__ */ jsx10(
452
487
  Pressable,
453
488
  {
454
489
  onPress: onDismiss,
@@ -456,7 +491,7 @@ function Alert({
456
491
  accessibilityLabel: "Dismiss alert",
457
492
  accessibilityRole: "button",
458
493
  hitSlop: 8,
459
- children: /* @__PURE__ */ jsx9(Text5, { style: { color: text, fontSize: 16 }, children: "\u2715" })
494
+ children: /* @__PURE__ */ jsx10(ScaledText, { style: { color: text, fontSize: 16 }, children: "\u2715" })
460
495
  }
461
496
  )
462
497
  ]
@@ -465,9 +500,9 @@ function Alert({
465
500
  }
466
501
 
467
502
  // src/components/ui/NotificationBanner/NotificationBanner.tsx
468
- import { StyleSheet as StyleSheet8, View as View6, Text as Text6, Pressable as Pressable2 } from "react-native";
469
- import { jsx as jsx10, jsxs as jsxs3 } from "react/jsx-runtime";
470
- var styles8 = StyleSheet8.create({
503
+ import { StyleSheet as StyleSheet9, View as View6, Pressable as Pressable2 } from "react-native";
504
+ import { jsx as jsx11, jsxs as jsxs3 } from "react/jsx-runtime";
505
+ var styles8 = StyleSheet9.create({
471
506
  banner: {
472
507
  flexDirection: "row",
473
508
  alignItems: "center",
@@ -512,9 +547,9 @@ function NotificationBanner({
512
547
  accessibilityLiveRegion: isUrgent ? "assertive" : "polite",
513
548
  style: [styles8.banner, { backgroundColor: bg, borderBottomWidth: 3, borderBottomColor: borderColor }, style],
514
549
  children: [
515
- /* @__PURE__ */ jsx10(View6, { style: styles8.body, children: typeof resolvedChildren === "string" || typeof resolvedChildren === "number" ? /* @__PURE__ */ jsx10(Text6, { style: [styles8.content, { color: text }], children: resolvedChildren }) : resolvedChildren }),
550
+ /* @__PURE__ */ jsx11(View6, { style: styles8.body, children: typeof resolvedChildren === "string" || typeof resolvedChildren === "number" ? /* @__PURE__ */ jsx11(ScaledText, { style: [styles8.content, { color: text }], children: resolvedChildren }) : resolvedChildren }),
516
551
  action,
517
- onDismiss && /* @__PURE__ */ jsx10(
552
+ onDismiss && /* @__PURE__ */ jsx11(
518
553
  Pressable2,
519
554
  {
520
555
  onPress: onDismiss,
@@ -522,7 +557,7 @@ function NotificationBanner({
522
557
  accessibilityLabel: "Dismiss notification",
523
558
  accessibilityRole: "button",
524
559
  hitSlop: 8,
525
- children: /* @__PURE__ */ jsx10(Text6, { style: { color: text, fontSize: 16 }, children: "\u2715" })
560
+ children: /* @__PURE__ */ jsx11(ScaledText, { style: { color: text, fontSize: 16 }, children: "\u2715" })
526
561
  }
527
562
  )
528
563
  ]
@@ -531,9 +566,9 @@ function NotificationBanner({
531
566
  }
532
567
 
533
568
  // src/components/ui/Link/Link.tsx
534
- import { StyleSheet as StyleSheet9, Text as Text7, Pressable as Pressable3, Linking } from "react-native";
535
- import { jsx as jsx11 } from "react/jsx-runtime";
536
- var styles9 = StyleSheet9.create({
569
+ import { StyleSheet as StyleSheet10, Pressable as Pressable3, Linking } from "react-native";
570
+ import { jsx as jsx12 } from "react/jsx-runtime";
571
+ var styles9 = StyleSheet10.create({
537
572
  text: {
538
573
  fontSize: font.size.body,
539
574
  fontFamily: font.family.body,
@@ -552,22 +587,22 @@ function Link({ href, children, accessibilityLabel, style, onPress }) {
552
587
  Linking.openURL(href);
553
588
  }
554
589
  };
555
- return /* @__PURE__ */ jsx11(
590
+ return /* @__PURE__ */ jsx12(
556
591
  Pressable3,
557
592
  {
558
593
  onPress: handlePress,
559
594
  accessibilityRole: "link",
560
595
  accessibilityLabel,
561
596
  style: ({ pressed }) => pressed && styles9.pressed,
562
- children: /* @__PURE__ */ jsx11(Text7, { style: [styles9.text, { color: colors2.colorInteractiveOnBg }, style], children })
597
+ children: /* @__PURE__ */ jsx12(ScaledText, { style: [styles9.text, { color: colors2.colorInteractiveOnBg }, style], children })
563
598
  }
564
599
  );
565
600
  }
566
601
 
567
602
  // src/components/ui/DescriptionList/DescriptionList.tsx
568
- import { StyleSheet as StyleSheet10, View as View7, Text as Text8 } from "react-native";
569
- import { jsx as jsx12, jsxs as jsxs4 } from "react/jsx-runtime";
570
- var styles10 = StyleSheet10.create({
603
+ import { StyleSheet as StyleSheet11, View as View7 } from "react-native";
604
+ import { jsx as jsx13, jsxs as jsxs4 } from "react/jsx-runtime";
605
+ var styles10 = StyleSheet11.create({
571
606
  list: {
572
607
  gap: spacing.m
573
608
  },
@@ -589,16 +624,16 @@ var styles10 = StyleSheet10.create({
589
624
  });
590
625
  function DescriptionList({ items, style }) {
591
626
  const { colors: colors2 } = useTheme();
592
- return /* @__PURE__ */ jsx12(View7, { style: [styles10.list, style], accessibilityRole: "list", children: items.map((item, i) => /* @__PURE__ */ jsxs4(View7, { style: styles10.group, accessibilityRole: "listitem", children: [
593
- /* @__PURE__ */ jsx12(Text8, { style: [styles10.term, { color: colors2.colorOnBgSubtle }], children: item.term }),
594
- typeof item.description === "string" ? /* @__PURE__ */ jsx12(Text8, { style: [styles10.description, { color: colors2.colorOnBg }], children: item.description }) : /* @__PURE__ */ jsx12(View7, { children: item.description })
627
+ return /* @__PURE__ */ jsx13(View7, { style: [styles10.list, style], accessibilityRole: "list", children: items.map((item, i) => /* @__PURE__ */ jsxs4(View7, { style: styles10.group, accessibilityRole: "listitem", children: [
628
+ /* @__PURE__ */ jsx13(ScaledText, { style: [styles10.term, { color: colors2.colorOnBgSubtle }], children: item.term }),
629
+ typeof item.description === "string" ? /* @__PURE__ */ jsx13(ScaledText, { style: [styles10.description, { color: colors2.colorOnBg }], children: item.description }) : /* @__PURE__ */ jsx13(View7, { children: item.description })
595
630
  ] }, i)) });
596
631
  }
597
632
 
598
633
  // src/components/ui/Breadcrumb/Breadcrumb.tsx
599
- import { StyleSheet as StyleSheet11, View as View8, Text as Text9, Pressable as Pressable4 } from "react-native";
600
- import { Fragment, jsx as jsx13, jsxs as jsxs5 } from "react/jsx-runtime";
601
- var styles11 = StyleSheet11.create({
634
+ import { StyleSheet as StyleSheet12, View as View8, Pressable as Pressable4 } from "react-native";
635
+ import { Fragment, jsx as jsx14, jsxs as jsxs5 } from "react/jsx-runtime";
636
+ var styles11 = StyleSheet12.create({
602
637
  container: {
603
638
  flexDirection: "row",
604
639
  flexWrap: "wrap",
@@ -621,7 +656,7 @@ var styles11 = StyleSheet11.create({
621
656
  });
622
657
  function Breadcrumb({ items, style }) {
623
658
  const { colors: colors2 } = useTheme();
624
- return /* @__PURE__ */ jsx13(
659
+ return /* @__PURE__ */ jsx14(
625
660
  View8,
626
661
  {
627
662
  style: [styles11.container, style],
@@ -629,25 +664,25 @@ function Breadcrumb({ items, style }) {
629
664
  accessibilityLabel: "Breadcrumb",
630
665
  children: items.map((item, index) => {
631
666
  const isLast = index === items.length - 1;
632
- return /* @__PURE__ */ jsx13(View8, { style: { flexDirection: "row", alignItems: "center", minHeight: 44 }, children: isLast ? /* @__PURE__ */ jsx13(
633
- Text9,
667
+ return /* @__PURE__ */ jsx14(View8, { style: { flexDirection: "row", alignItems: "center", minHeight: 44 }, children: isLast ? /* @__PURE__ */ jsx14(
668
+ ScaledText,
634
669
  {
635
670
  style: [styles11.itemText, { color: colors2.colorOnBg }],
636
671
  accessibilityRole: "text",
637
672
  children: item.label
638
673
  }
639
674
  ) : /* @__PURE__ */ jsxs5(Fragment, { children: [
640
- /* @__PURE__ */ jsx13(
675
+ /* @__PURE__ */ jsx14(
641
676
  Pressable4,
642
677
  {
643
678
  onPress: item.onPress,
644
679
  accessibilityRole: "link",
645
680
  style: ({ pressed }) => pressed && styles11.pressed,
646
- children: /* @__PURE__ */ jsx13(Text9, { style: [styles11.itemText, { color: colors2.colorInteractiveOnBg }], children: item.label })
681
+ children: /* @__PURE__ */ jsx14(ScaledText, { style: [styles11.itemText, { color: colors2.colorInteractiveOnBg }], children: item.label })
647
682
  }
648
683
  ),
649
- /* @__PURE__ */ jsx13(
650
- Text9,
684
+ /* @__PURE__ */ jsx14(
685
+ ScaledText,
651
686
  {
652
687
  style: [styles11.separator, { color: colors2.colorOnBgSubtle }],
653
688
  importantForAccessibility: "no",
@@ -662,8 +697,8 @@ function Breadcrumb({ items, style }) {
662
697
  }
663
698
 
664
699
  // src/components/ui/ProgressCircle/ProgressCircle.tsx
665
- import { StyleSheet as StyleSheet12, View as View9, Text as Text10 } from "react-native";
666
- import { jsx as jsx14, jsxs as jsxs6 } from "react/jsx-runtime";
700
+ import { StyleSheet as StyleSheet13, View as View9 } from "react-native";
701
+ import { jsx as jsx15, jsxs as jsxs6 } from "react/jsx-runtime";
667
702
  var SIZE_PX = {
668
703
  small: 40,
669
704
  medium: 64,
@@ -679,7 +714,7 @@ var FONT_SIZE = {
679
714
  medium: font.size.bodyS,
680
715
  large: font.size.body
681
716
  };
682
- var styles12 = StyleSheet12.create({
717
+ var styles12 = StyleSheet13.create({
683
718
  wrapper: {
684
719
  alignItems: "center",
685
720
  justifyContent: "center"
@@ -696,7 +731,7 @@ function HalfCircle({
696
731
  color,
697
732
  rotation
698
733
  }) {
699
- return /* @__PURE__ */ jsx14(
734
+ return /* @__PURE__ */ jsx15(
700
735
  View9,
701
736
  {
702
737
  style: {
@@ -704,7 +739,7 @@ function HalfCircle({
704
739
  height: size,
705
740
  overflow: "hidden"
706
741
  },
707
- children: /* @__PURE__ */ jsx14(
742
+ children: /* @__PURE__ */ jsx15(
708
743
  View9,
709
744
  {
710
745
  style: {
@@ -747,7 +782,7 @@ function ProgressCircle({
747
782
  accessibilityLabel: label,
748
783
  accessibilityValue: { min: 0, max, now: value },
749
784
  children: [
750
- /* @__PURE__ */ jsx14(
785
+ /* @__PURE__ */ jsx15(
751
786
  View9,
752
787
  {
753
788
  style: {
@@ -760,7 +795,7 @@ function ProgressCircle({
760
795
  }
761
796
  }
762
797
  ),
763
- /* @__PURE__ */ jsx14(
798
+ /* @__PURE__ */ jsx15(
764
799
  View9,
765
800
  {
766
801
  style: {
@@ -770,7 +805,7 @@ function ProgressCircle({
770
805
  start: px / 2,
771
806
  overflow: "hidden"
772
807
  },
773
- children: /* @__PURE__ */ jsx14(
808
+ children: /* @__PURE__ */ jsx15(
774
809
  HalfCircle,
775
810
  {
776
811
  size: px,
@@ -781,7 +816,7 @@ function ProgressCircle({
781
816
  )
782
817
  }
783
818
  ),
784
- degrees > 180 && /* @__PURE__ */ jsx14(
819
+ degrees > 180 && /* @__PURE__ */ jsx15(
785
820
  View9,
786
821
  {
787
822
  style: {
@@ -791,14 +826,14 @@ function ProgressCircle({
791
826
  start: 0,
792
827
  overflow: "hidden"
793
828
  },
794
- children: /* @__PURE__ */ jsx14(
829
+ children: /* @__PURE__ */ jsx15(
795
830
  View9,
796
831
  {
797
832
  style: {
798
833
  position: "absolute",
799
834
  end: 0
800
835
  },
801
- children: /* @__PURE__ */ jsx14(
836
+ children: /* @__PURE__ */ jsx15(
802
837
  HalfCircle,
803
838
  {
804
839
  size: px,
@@ -812,7 +847,7 @@ function ProgressCircle({
812
847
  }
813
848
  ),
814
849
  showValue && /* @__PURE__ */ jsxs6(
815
- Text10,
850
+ ScaledText,
816
851
  {
817
852
  style: [styles12.valueText, { fontSize: FONT_SIZE[size], color: colors2.colorOnBg }],
818
853
  importantForAccessibility: "no",
@@ -830,9 +865,9 @@ function ProgressCircle({
830
865
 
831
866
  // src/components/ui/Tooltip/Tooltip.tsx
832
867
  import { useState } from "react";
833
- import { StyleSheet as StyleSheet13, View as View10, Text as Text11, Pressable as Pressable5 } from "react-native";
834
- import { jsx as jsx15, jsxs as jsxs7 } from "react/jsx-runtime";
835
- var styles13 = StyleSheet13.create({
868
+ import { StyleSheet as StyleSheet14, View as View10, Pressable as Pressable5 } from "react-native";
869
+ import { jsx as jsx16, jsxs as jsxs7 } from "react/jsx-runtime";
870
+ var styles13 = StyleSheet14.create({
836
871
  wrapper: {
837
872
  position: "relative"
838
873
  },
@@ -856,7 +891,7 @@ function Tooltip({ content, children, style }) {
856
891
  const { colors: colors2 } = useTheme();
857
892
  const [visible, setVisible] = useState(false);
858
893
  return /* @__PURE__ */ jsxs7(View10, { style: [styles13.wrapper, style], children: [
859
- /* @__PURE__ */ jsx15(
894
+ /* @__PURE__ */ jsx16(
860
895
  Pressable5,
861
896
  {
862
897
  onLongPress: () => setVisible(true),
@@ -865,21 +900,21 @@ function Tooltip({ content, children, style }) {
865
900
  children
866
901
  }
867
902
  ),
868
- visible && /* @__PURE__ */ jsx15(
903
+ visible && /* @__PURE__ */ jsx16(
869
904
  View10,
870
905
  {
871
906
  style: [styles13.tooltip, { backgroundColor: colors2.colorOnBg }],
872
907
  accessibilityRole: "text",
873
908
  accessibilityLabel: content,
874
- children: /* @__PURE__ */ jsx15(Text11, { style: [styles13.text, { color: colors2.colorBg }], children: content })
909
+ children: /* @__PURE__ */ jsx16(ScaledText, { style: [styles13.text, { color: colors2.colorBg }], children: content })
875
910
  }
876
911
  )
877
912
  ] });
878
913
  }
879
914
 
880
915
  // src/components/ui/Pagination/Pagination.tsx
881
- import { StyleSheet as StyleSheet14, View as View11, Text as Text12, Pressable as Pressable6 } from "react-native";
882
- import { jsx as jsx16, jsxs as jsxs8 } from "react/jsx-runtime";
916
+ import { StyleSheet as StyleSheet15, View as View11, Pressable as Pressable6 } from "react-native";
917
+ import { jsx as jsx17, jsxs as jsxs8 } from "react/jsx-runtime";
883
918
  function getPageRange(current, total) {
884
919
  const delta = 1;
885
920
  const range = [];
@@ -892,7 +927,7 @@ function getPageRange(current, total) {
892
927
  }
893
928
  return range;
894
929
  }
895
- var styles14 = StyleSheet14.create({
930
+ var styles14 = StyleSheet15.create({
896
931
  container: {
897
932
  flexDirection: "row",
898
933
  alignItems: "center",
@@ -950,7 +985,7 @@ function Pagination({
950
985
  accessibilityRole: "navigation",
951
986
  accessibilityLabel: "Pagination",
952
987
  children: [
953
- /* @__PURE__ */ jsx16(
988
+ /* @__PURE__ */ jsx17(
954
989
  Pressable6,
955
990
  {
956
991
  onPress: () => onPageChange(currentPage - 1),
@@ -963,12 +998,12 @@ function Pagination({
963
998
  currentPage <= 1 && styles14.disabled,
964
999
  pressed && !currentPage && styles14.pressed
965
1000
  ],
966
- children: /* @__PURE__ */ jsx16(Text12, { style: [styles14.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1001
+ children: /* @__PURE__ */ jsx17(ScaledText, { style: [styles14.navText, { color: colors2.colorOnBg }], children: "\u2039" })
967
1002
  }
968
1003
  ),
969
1004
  pages.map(
970
- (page, index) => page === "..." ? /* @__PURE__ */ jsx16(
971
- Text12,
1005
+ (page, index) => page === "..." ? /* @__PURE__ */ jsx17(
1006
+ ScaledText,
972
1007
  {
973
1008
  style: [styles14.ellipsis, { color: colors2.colorOnBgSubtle }],
974
1009
  importantForAccessibility: "no",
@@ -976,7 +1011,7 @@ function Pagination({
976
1011
  children: "..."
977
1012
  },
978
1013
  `ellipsis-${index}`
979
- ) : /* @__PURE__ */ jsx16(
1014
+ ) : /* @__PURE__ */ jsx17(
980
1015
  Pressable6,
981
1016
  {
982
1017
  onPress: () => onPageChange(page),
@@ -988,8 +1023,8 @@ function Pagination({
988
1023
  currentPage === page && { backgroundColor: colors2.colorInteractive },
989
1024
  pressed && styles14.pressed
990
1025
  ],
991
- children: /* @__PURE__ */ jsx16(
992
- Text12,
1026
+ children: /* @__PURE__ */ jsx17(
1027
+ ScaledText,
993
1028
  {
994
1029
  style: [
995
1030
  styles14.buttonText,
@@ -1005,7 +1040,7 @@ function Pagination({
1005
1040
  page
1006
1041
  )
1007
1042
  ),
1008
- /* @__PURE__ */ jsx16(
1043
+ /* @__PURE__ */ jsx17(
1009
1044
  Pressable6,
1010
1045
  {
1011
1046
  onPress: () => onPageChange(currentPage + 1),
@@ -1018,7 +1053,7 @@ function Pagination({
1018
1053
  currentPage >= totalPages && styles14.disabled,
1019
1054
  pressed && styles14.pressed
1020
1055
  ],
1021
- children: /* @__PURE__ */ jsx16(Text12, { style: [styles14.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1056
+ children: /* @__PURE__ */ jsx17(ScaledText, { style: [styles14.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1022
1057
  }
1023
1058
  )
1024
1059
  ]
@@ -1028,21 +1063,50 @@ function Pagination({
1028
1063
 
1029
1064
  // src/components/ui/Collapsible/Collapsible.tsx
1030
1065
  import { useCallback, useRef as useRef2, useState as useState2 } from "react";
1031
- import {
1032
- StyleSheet as StyleSheet15,
1033
- View as View12,
1034
- Text as Text13,
1035
- Pressable as Pressable7,
1036
- Animated as Animated2,
1037
- LayoutAnimation,
1038
- Platform,
1039
- UIManager
1040
- } from "react-native";
1041
- import { jsx as jsx17, jsxs as jsxs9 } from "react/jsx-runtime";
1066
+ import { StyleSheet as StyleSheet17, View as View12, Pressable as Pressable7, Animated as Animated3, LayoutAnimation, Platform, UIManager } from "react-native";
1067
+
1068
+ // src/native/Chevron.tsx
1069
+ import { Animated as Animated2, StyleSheet as StyleSheet16 } from "react-native";
1070
+ import { jsx as jsx18 } from "react/jsx-runtime";
1071
+ var SIZE = 8;
1072
+ var STROKE = 1.5;
1073
+ var CENTRE_SHIFT = -(SIZE - STROKE) / 4;
1074
+ var styles15 = StyleSheet16.create({
1075
+ chevron: {
1076
+ // Border-box chevron (no glyph font dependency): a small square with two
1077
+ // adjacent borders, rotated to form a crisp "›" / "⌄" indicator.
1078
+ width: SIZE,
1079
+ height: SIZE,
1080
+ borderRightWidth: STROKE,
1081
+ borderBottomWidth: STROKE
1082
+ }
1083
+ });
1084
+ function Chevron({ color, rotate = "45deg", testID, style }) {
1085
+ return /* @__PURE__ */ jsx18(
1086
+ Animated2.View,
1087
+ {
1088
+ testID,
1089
+ style: [
1090
+ styles15.chevron,
1091
+ {
1092
+ borderColor: color,
1093
+ transform: [{ rotate }, { translateX: CENTRE_SHIFT }, { translateY: CENTRE_SHIFT }]
1094
+ },
1095
+ style
1096
+ ],
1097
+ "aria-hidden": true,
1098
+ importantForAccessibility: "no-hide-descendants",
1099
+ accessibilityElementsHidden: true
1100
+ }
1101
+ );
1102
+ }
1103
+
1104
+ // src/components/ui/Collapsible/Collapsible.tsx
1105
+ import { jsx as jsx19, jsxs as jsxs9 } from "react/jsx-runtime";
1042
1106
  if (Platform.OS === "android" && UIManager.setLayoutAnimationEnabledExperimental) {
1043
1107
  UIManager.setLayoutAnimationEnabledExperimental(true);
1044
1108
  }
1045
- var styles15 = StyleSheet15.create({
1109
+ var styles16 = StyleSheet17.create({
1046
1110
  container: {
1047
1111
  borderRadius: border.radius.m,
1048
1112
  overflow: "hidden"
@@ -1063,12 +1127,6 @@ var styles15 = StyleSheet15.create({
1063
1127
  lineHeight: lineHeight.body
1064
1128
  },
1065
1129
  chevron: {
1066
- // Border-box chevron (no glyph font dependency): a small square with two
1067
- // adjacent borders, rotated to form a crisp "›" / "⌄" disclosure indicator.
1068
- width: 8,
1069
- height: 8,
1070
- borderRightWidth: 2,
1071
- borderBottomWidth: 2,
1072
1130
  marginStart: spacing.xs
1073
1131
  },
1074
1132
  content: {
@@ -1093,11 +1151,11 @@ function Collapsible({
1093
1151
  const [internalOpen, setInternalOpen] = useState2(defaultOpen);
1094
1152
  const isControlled = controlledOpen !== void 0;
1095
1153
  const isOpen = isControlled ? controlledOpen : internalOpen;
1096
- const rotation = useRef2(new Animated2.Value(isOpen ? 1 : 0)).current;
1154
+ const rotation = useRef2(new Animated3.Value(isOpen ? 1 : 0)).current;
1097
1155
  const toggle = useCallback(() => {
1098
1156
  const next = !isOpen;
1099
1157
  LayoutAnimation.configureNext(LayoutAnimation.Presets.easeInEaseOut);
1100
- Animated2.timing(rotation, {
1158
+ Animated3.timing(rotation, {
1101
1159
  toValue: next ? 1 : 0,
1102
1160
  duration: 200,
1103
1161
  useNativeDriver: true
@@ -1114,7 +1172,7 @@ function Collapsible({
1114
1172
  return /* @__PURE__ */ jsxs9(
1115
1173
  View12,
1116
1174
  {
1117
- style: [styles15.container, { borderBottomWidth: 1, borderBottomColor: colors2.colorBgSubtle }, style],
1175
+ style: [styles16.container, { borderBottomWidth: 1, borderBottomColor: colors2.colorBgSubtle }, style],
1118
1176
  accessibilityRole: "summary",
1119
1177
  children: [
1120
1178
  /* @__PURE__ */ jsxs9(
@@ -1124,22 +1182,22 @@ function Collapsible({
1124
1182
  accessibilityRole: "button",
1125
1183
  accessibilityLabel: summary,
1126
1184
  accessibilityState: { expanded: isOpen },
1127
- style: ({ pressed }) => [styles15.header, pressed && styles15.pressed],
1185
+ style: ({ pressed }) => [styles16.header, pressed && styles16.pressed],
1128
1186
  children: [
1129
- /* @__PURE__ */ jsx17(Text13, { style: [styles15.summaryText, { color: colors2.colorOnBg }], children: summary }),
1130
- /* @__PURE__ */ jsx17(
1131
- Animated2.View,
1187
+ /* @__PURE__ */ jsx19(ScaledText, { style: [styles16.summaryText, { color: colors2.colorOnBg }], children: summary }),
1188
+ /* @__PURE__ */ jsx19(
1189
+ Chevron,
1132
1190
  {
1133
1191
  testID: "bds-collapsible-chevron",
1134
- style: [styles15.chevron, { borderColor: colors2.colorOnBgSubtle, transform: [{ rotate }] }],
1135
- importantForAccessibility: "no",
1136
- accessibilityElementsHidden: true
1192
+ color: colors2.colorOnBgSubtle,
1193
+ rotate,
1194
+ style: styles16.chevron
1137
1195
  }
1138
1196
  )
1139
1197
  ]
1140
1198
  }
1141
1199
  ),
1142
- isOpen && /* @__PURE__ */ jsx17(View12, { style: styles15.content, children })
1200
+ isOpen && /* @__PURE__ */ jsx19(View12, { style: styles16.content, children })
1143
1201
  ]
1144
1202
  }
1145
1203
  );
@@ -1147,20 +1205,12 @@ function Collapsible({
1147
1205
 
1148
1206
  // src/components/ui/Accordion/Accordion.tsx
1149
1207
  import { useState as useState3 } from "react";
1150
- import {
1151
- StyleSheet as StyleSheet16,
1152
- View as View13,
1153
- Text as Text14,
1154
- Pressable as Pressable8,
1155
- LayoutAnimation as LayoutAnimation2,
1156
- Platform as Platform2,
1157
- UIManager as UIManager2
1158
- } from "react-native";
1159
- import { jsx as jsx18, jsxs as jsxs10 } from "react/jsx-runtime";
1208
+ import { StyleSheet as StyleSheet18, View as View13, Pressable as Pressable8, LayoutAnimation as LayoutAnimation2, Platform as Platform2, UIManager as UIManager2 } from "react-native";
1209
+ import { jsx as jsx20, jsxs as jsxs10 } from "react/jsx-runtime";
1160
1210
  if (Platform2.OS === "android" && UIManager2.setLayoutAnimationEnabledExperimental) {
1161
1211
  UIManager2.setLayoutAnimationEnabledExperimental(true);
1162
1212
  }
1163
- var styles16 = StyleSheet16.create({
1213
+ var styles17 = StyleSheet18.create({
1164
1214
  container: {
1165
1215
  overflow: "hidden",
1166
1216
  borderRadius: border.radius.s
@@ -1214,14 +1264,14 @@ function Accordion({
1214
1264
  return allowMultiple ? [...prev, id] : [id];
1215
1265
  });
1216
1266
  };
1217
- return /* @__PURE__ */ jsx18(View13, { style: [styles16.container, style], children: items.map((item, index) => {
1267
+ return /* @__PURE__ */ jsx20(View13, { style: [styles17.container, style], children: items.map((item, index) => {
1218
1268
  const isOpen = openIds.includes(item.id);
1219
1269
  const isLast = index === items.length - 1;
1220
1270
  return /* @__PURE__ */ jsxs10(
1221
1271
  View13,
1222
1272
  {
1223
1273
  style: [
1224
- styles16.item,
1274
+ styles17.item,
1225
1275
  { borderBottomColor: colors2.colorBgSubtle },
1226
1276
  isLast && { borderBottomWidth: 0 }
1227
1277
  ],
@@ -1234,16 +1284,16 @@ function Accordion({
1234
1284
  accessibilityRole: "button",
1235
1285
  accessibilityState: { expanded: isOpen, disabled: item.disabled },
1236
1286
  style: ({ pressed }) => [
1237
- styles16.header,
1238
- item.disabled && styles16.disabled,
1239
- pressed && !item.disabled && styles16.pressed
1287
+ styles17.header,
1288
+ item.disabled && styles17.disabled,
1289
+ pressed && !item.disabled && styles17.pressed
1240
1290
  ],
1241
1291
  children: [
1242
- /* @__PURE__ */ jsx18(Text14, { style: [styles16.titleText, { color: colors2.colorOnBg }], children: typeof item.title === "string" ? item.title : item.title }),
1243
- /* @__PURE__ */ jsx18(
1244
- Text14,
1292
+ /* @__PURE__ */ jsx20(ScaledText, { style: [styles17.titleText, { color: colors2.colorOnBg }], children: typeof item.title === "string" ? item.title : item.title }),
1293
+ /* @__PURE__ */ jsx20(
1294
+ ScaledText,
1245
1295
  {
1246
- style: [styles16.chevron, { color: colors2.colorOnBgSubtle }],
1296
+ style: [styles17.chevron, { color: colors2.colorOnBgSubtle }],
1247
1297
  importantForAccessibility: "no",
1248
1298
  accessibilityElementsHidden: true,
1249
1299
  children: isOpen ? "\u25BE" : "\u25B8"
@@ -1252,7 +1302,7 @@ function Accordion({
1252
1302
  ]
1253
1303
  }
1254
1304
  ),
1255
- isOpen && /* @__PURE__ */ jsx18(View13, { style: styles16.panel, accessibilityRole: "summary", children: item.content })
1305
+ isOpen && /* @__PURE__ */ jsx20(View13, { style: styles17.panel, accessibilityRole: "summary", children: item.content })
1256
1306
  ]
1257
1307
  },
1258
1308
  item.id
@@ -1262,15 +1312,9 @@ function Accordion({
1262
1312
 
1263
1313
  // src/components/ui/Tabs/Tabs.tsx
1264
1314
  import { useState as useState4 } from "react";
1265
- import {
1266
- StyleSheet as StyleSheet17,
1267
- View as View14,
1268
- Text as Text15,
1269
- Pressable as Pressable9,
1270
- ScrollView
1271
- } from "react-native";
1272
- import { jsx as jsx19, jsxs as jsxs11 } from "react/jsx-runtime";
1273
- var styles17 = StyleSheet17.create({
1315
+ import { StyleSheet as StyleSheet19, View as View14, Pressable as Pressable9, ScrollView } from "react-native";
1316
+ import { jsx as jsx21, jsxs as jsxs11 } from "react/jsx-runtime";
1317
+ var styles18 = StyleSheet19.create({
1274
1318
  container: {
1275
1319
  overflow: "hidden"
1276
1320
  },
@@ -1309,17 +1353,17 @@ function Tabs({
1309
1353
  }) {
1310
1354
  const { colors: colors2 } = useTheme();
1311
1355
  const [activeTab, setActiveTab] = useState4(defaultTab ?? tabs[0]?.id);
1312
- return /* @__PURE__ */ jsxs11(View14, { style: [styles17.container, style], children: [
1313
- /* @__PURE__ */ jsx19(
1356
+ return /* @__PURE__ */ jsxs11(View14, { style: [styles18.container, style], children: [
1357
+ /* @__PURE__ */ jsx21(
1314
1358
  ScrollView,
1315
1359
  {
1316
1360
  horizontal: true,
1317
1361
  showsHorizontalScrollIndicator: false,
1318
- contentContainerStyle: [styles17.tabList, { borderBottomColor: colors2.colorBgSubtle }],
1362
+ contentContainerStyle: [styles18.tabList, { borderBottomColor: colors2.colorBgSubtle }],
1319
1363
  accessibilityRole: "tabbar",
1320
1364
  children: tabs.map((tab) => {
1321
1365
  const isActive = activeTab === tab.id;
1322
- return /* @__PURE__ */ jsx19(
1366
+ return /* @__PURE__ */ jsx21(
1323
1367
  Pressable9,
1324
1368
  {
1325
1369
  onPress: () => setActiveTab(tab.id),
@@ -1331,18 +1375,18 @@ function Tabs({
1331
1375
  },
1332
1376
  accessibilityLabel: typeof tab.label === "string" ? tab.label : void 0,
1333
1377
  style: ({ pressed }) => [
1334
- styles17.tabButton,
1378
+ styles18.tabButton,
1335
1379
  {
1336
1380
  borderBottomColor: isActive ? colors2.colorInteractive : "transparent"
1337
1381
  },
1338
- tab.disabled && styles17.disabled,
1339
- pressed && !tab.disabled && styles17.pressed
1382
+ tab.disabled && styles18.disabled,
1383
+ pressed && !tab.disabled && styles18.pressed
1340
1384
  ],
1341
- children: /* @__PURE__ */ jsx19(
1342
- Text15,
1385
+ children: /* @__PURE__ */ jsx21(
1386
+ ScaledText,
1343
1387
  {
1344
1388
  style: [
1345
- styles17.tabLabel,
1389
+ styles18.tabLabel,
1346
1390
  {
1347
1391
  color: isActive ? colors2.colorInteractive : colors2.colorOnBgSubtle,
1348
1392
  fontWeight: isActive ? font.weight.semibold : font.weight.body
@@ -1360,21 +1404,15 @@ function Tabs({
1360
1404
  tabs.map((tab) => {
1361
1405
  const isActive = activeTab === tab.id;
1362
1406
  if (!isActive) return null;
1363
- return /* @__PURE__ */ jsx19(View14, { style: styles17.panel, accessibilityRole: "tabpanel", children: tab.content }, tab.id);
1407
+ return /* @__PURE__ */ jsx21(View14, { style: styles18.panel, accessibilityRole: "tabpanel", children: tab.content }, tab.id);
1364
1408
  })
1365
1409
  ] });
1366
1410
  }
1367
1411
 
1368
1412
  // src/components/ui/Table/Table.tsx
1369
- import {
1370
- StyleSheet as StyleSheet18,
1371
- View as View15,
1372
- Text as Text16,
1373
- ScrollView as ScrollView2,
1374
- Pressable as Pressable10
1375
- } from "react-native";
1376
- import { jsx as jsx20, jsxs as jsxs12 } from "react/jsx-runtime";
1377
- var styles18 = StyleSheet18.create({
1413
+ import { StyleSheet as StyleSheet20, View as View15, ScrollView as ScrollView2, Pressable as Pressable10 } from "react-native";
1414
+ import { jsx as jsx22, jsxs as jsxs12 } from "react/jsx-runtime";
1415
+ var styles19 = StyleSheet20.create({
1378
1416
  wrapper: {
1379
1417
  borderRadius: border.radius.s,
1380
1418
  overflow: "hidden"
@@ -1450,29 +1488,29 @@ function Table({
1450
1488
  if (sortKey !== col.key) return base;
1451
1489
  return `${base}, currently ${sortDirection === "asc" ? "ascending" : "descending"}`;
1452
1490
  };
1453
- return /* @__PURE__ */ jsx20(
1491
+ return /* @__PURE__ */ jsx22(
1454
1492
  ScrollView2,
1455
1493
  {
1456
1494
  horizontal: true,
1457
1495
  showsHorizontalScrollIndicator: true,
1458
- style: [styles18.wrapper, { backgroundColor: colors2.colorBg }, style],
1496
+ style: [styles19.wrapper, { backgroundColor: colors2.colorBg }, style],
1459
1497
  children: /* @__PURE__ */ jsxs12(View15, { children: [
1460
- caption && /* @__PURE__ */ jsx20(Text16, { style: [styles18.caption, { color: colors2.colorOnBgSubtle }], children: caption }),
1461
- /* @__PURE__ */ jsx20(View15, { style: [styles18.headerRow, { backgroundColor: colors2.colorBgSubtle }], children: columns.map(
1498
+ caption && /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.caption, { color: colors2.colorOnBgSubtle }], children: caption }),
1499
+ /* @__PURE__ */ jsx22(View15, { style: [styles19.headerRow, { backgroundColor: colors2.colorBgSubtle }], children: columns.map(
1462
1500
  (col) => col.sortable ? /* @__PURE__ */ jsxs12(
1463
1501
  Pressable10,
1464
1502
  {
1465
1503
  onPress: () => handleSort(col.key),
1466
1504
  accessibilityRole: "button",
1467
1505
  accessibilityLabel: getSortLabel(col),
1468
- style: ({ pressed }) => [styles18.headerCell, pressed && styles18.pressed],
1506
+ style: ({ pressed }) => [styles19.headerCell, pressed && styles19.pressed],
1469
1507
  children: [
1470
- /* @__PURE__ */ jsx20(Text16, { style: [styles18.headerText, { color: colors2.colorOnBg }], children: col.header }),
1471
- /* @__PURE__ */ jsx20(
1472
- Text16,
1508
+ /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.headerText, { color: colors2.colorOnBg }], children: col.header }),
1509
+ /* @__PURE__ */ jsx22(
1510
+ ScaledText,
1473
1511
  {
1474
1512
  style: [
1475
- styles18.sortIndicator,
1513
+ styles19.sortIndicator,
1476
1514
  {
1477
1515
  color: sortKey === col.key ? colors2.colorInteractive : colors2.colorOnBgSubtle
1478
1516
  }
@@ -1485,18 +1523,18 @@ function Table({
1485
1523
  ]
1486
1524
  },
1487
1525
  col.key
1488
- ) : /* @__PURE__ */ jsx20(View15, { style: styles18.headerCell, children: /* @__PURE__ */ jsx20(Text16, { style: [styles18.headerText, { color: colors2.colorOnBg }], children: col.header }) }, col.key)
1526
+ ) : /* @__PURE__ */ jsx22(View15, { style: styles19.headerCell, children: /* @__PURE__ */ jsx22(ScaledText, { style: [styles19.headerText, { color: colors2.colorOnBg }], children: col.header }) }, col.key)
1489
1527
  ) }),
1490
- rows.map((row, rowIndex) => /* @__PURE__ */ jsx20(
1528
+ rows.map((row, rowIndex) => /* @__PURE__ */ jsx22(
1491
1529
  View15,
1492
1530
  {
1493
1531
  style: [
1494
- styles18.row,
1532
+ styles19.row,
1495
1533
  { borderTopColor: colors2.colorBgSubtle },
1496
1534
  rowIndex % 2 === 1 && { backgroundColor: colors2.colorBgSubtle }
1497
1535
  ],
1498
1536
  accessibilityRole: "none",
1499
- children: columns.map((col) => /* @__PURE__ */ jsx20(View15, { style: styles18.cell, children: col.render ? typeof col.render(row) === "string" ? /* @__PURE__ */ jsx20(Text16, { style: [styles18.cellText, { color: colors2.colorOnBg }], children: col.render(row) }) : col.render(row) : /* @__PURE__ */ jsx20(Text16, { style: [styles18.cellText, { color: colors2.colorOnBg }], children: String(row[col.key] ?? "") }) }, col.key))
1537
+ 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))
1500
1538
  },
1501
1539
  rowIndex
1502
1540
  ))
@@ -1507,13 +1545,8 @@ function Table({
1507
1545
 
1508
1546
  // src/components/ui/Calendar/Calendar.tsx
1509
1547
  import { useState as useState5 } from "react";
1510
- import {
1511
- StyleSheet as StyleSheet19,
1512
- View as View16,
1513
- Text as Text17,
1514
- Pressable as Pressable11
1515
- } from "react-native";
1516
- import { jsx as jsx21, jsxs as jsxs13 } from "react/jsx-runtime";
1548
+ import { StyleSheet as StyleSheet21, View as View16, Pressable as Pressable11 } from "react-native";
1549
+ import { jsx as jsx23, jsxs as jsxs13 } from "react/jsx-runtime";
1517
1550
  var DAYS = ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"];
1518
1551
  var DAY_LABELS = {
1519
1552
  Su: "Sunday",
@@ -1556,7 +1589,7 @@ function getFirstDayOfMonth(year, month) {
1556
1589
  return new Date(year, month, 1).getDay();
1557
1590
  }
1558
1591
  var DAY_SIZE = 44;
1559
- var styles19 = StyleSheet19.create({
1592
+ var styles20 = StyleSheet21.create({
1560
1593
  container: {
1561
1594
  alignSelf: "flex-start"
1562
1595
  },
@@ -1671,25 +1704,25 @@ function Calendar({
1671
1704
  return /* @__PURE__ */ jsxs13(
1672
1705
  View16,
1673
1706
  {
1674
- style: [styles19.container, style],
1707
+ style: [styles20.container, style],
1675
1708
  accessibilityRole: "none",
1676
1709
  accessibilityLabel: `${MONTHS[viewMonth]} ${viewYear} calendar`,
1677
1710
  children: [
1678
- /* @__PURE__ */ jsxs13(View16, { style: styles19.header, children: [
1679
- /* @__PURE__ */ jsx21(
1711
+ /* @__PURE__ */ jsxs13(View16, { style: styles20.header, children: [
1712
+ /* @__PURE__ */ jsx23(
1680
1713
  Pressable11,
1681
1714
  {
1682
1715
  onPress: () => navigate(-1),
1683
1716
  accessibilityRole: "button",
1684
1717
  accessibilityLabel: "Previous month",
1685
- style: ({ pressed }) => [styles19.navButton, pressed && styles19.pressed],
1686
- children: /* @__PURE__ */ jsx21(Text17, { style: [styles19.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1718
+ style: ({ pressed }) => [styles20.navButton, pressed && styles20.pressed],
1719
+ children: /* @__PURE__ */ jsx23(ScaledText, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1687
1720
  }
1688
1721
  ),
1689
1722
  /* @__PURE__ */ jsxs13(
1690
- Text17,
1723
+ ScaledText,
1691
1724
  {
1692
- style: [styles19.monthYear, { color: colors2.colorOnBg }],
1725
+ style: [styles20.monthYear, { color: colors2.colorOnBg }],
1693
1726
  accessibilityRole: "text",
1694
1727
  accessibilityLiveRegion: "polite",
1695
1728
  children: [
@@ -1699,34 +1732,34 @@ function Calendar({
1699
1732
  ]
1700
1733
  }
1701
1734
  ),
1702
- /* @__PURE__ */ jsx21(
1735
+ /* @__PURE__ */ jsx23(
1703
1736
  Pressable11,
1704
1737
  {
1705
1738
  onPress: () => navigate(1),
1706
1739
  accessibilityRole: "button",
1707
1740
  accessibilityLabel: "Next month",
1708
- style: ({ pressed }) => [styles19.navButton, pressed && styles19.pressed],
1709
- children: /* @__PURE__ */ jsx21(Text17, { style: [styles19.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1741
+ style: ({ pressed }) => [styles20.navButton, pressed && styles20.pressed],
1742
+ children: /* @__PURE__ */ jsx23(ScaledText, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1710
1743
  }
1711
1744
  )
1712
1745
  ] }),
1713
- /* @__PURE__ */ jsx21(View16, { style: styles19.weekRow, children: DAYS.map((d) => /* @__PURE__ */ jsx21(View16, { style: styles19.weekday, children: /* @__PURE__ */ jsx21(
1714
- Text17,
1746
+ /* @__PURE__ */ jsx23(View16, { style: styles20.weekRow, children: DAYS.map((d) => /* @__PURE__ */ jsx23(View16, { style: styles20.weekday, children: /* @__PURE__ */ jsx23(
1747
+ ScaledText,
1715
1748
  {
1716
- style: [styles19.weekdayText, { color: colors2.colorOnBgSubtle }],
1749
+ style: [styles20.weekdayText, { color: colors2.colorOnBgSubtle }],
1717
1750
  accessibilityLabel: DAY_LABELS[d],
1718
1751
  children: d
1719
1752
  }
1720
1753
  ) }, d)) }),
1721
- /* @__PURE__ */ jsx21(View16, { style: styles19.grid, children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx21(View16, { style: styles19.dayRow, children: row.map((cell, colIndex) => {
1754
+ /* @__PURE__ */ jsx23(View16, { style: styles20.grid, children: rows.map((row, rowIndex) => /* @__PURE__ */ jsx23(View16, { style: styles20.dayRow, children: row.map((cell, colIndex) => {
1722
1755
  if (!cell) {
1723
- return /* @__PURE__ */ jsx21(View16, { style: styles19.dayCell }, colIndex);
1756
+ return /* @__PURE__ */ jsx23(View16, { style: styles20.dayCell }, colIndex);
1724
1757
  }
1725
1758
  const date = new Date(viewYear, viewMonth, cell.day);
1726
1759
  const isSelected = selected ? isSameDay(date, selected) : false;
1727
1760
  const isToday = isSameDay(date, today);
1728
1761
  const disabled = isOutOfRange(date, min, max);
1729
- return /* @__PURE__ */ jsx21(
1762
+ return /* @__PURE__ */ jsx23(
1730
1763
  Pressable11,
1731
1764
  {
1732
1765
  onPress: () => selectDay(cell.day),
@@ -1742,22 +1775,22 @@ function Calendar({
1742
1775
  disabled
1743
1776
  },
1744
1777
  style: ({ pressed }) => [
1745
- styles19.dayCell,
1778
+ styles20.dayCell,
1746
1779
  isSelected && {
1747
1780
  backgroundColor: colors2.colorInteractive
1748
1781
  },
1749
1782
  isToday && !isSelected && [
1750
- styles19.today,
1783
+ styles20.today,
1751
1784
  { borderColor: colors2.colorInteractive }
1752
1785
  ],
1753
- disabled && styles19.disabled,
1754
- pressed && !disabled && styles19.pressed
1786
+ disabled && styles20.disabled,
1787
+ pressed && !disabled && styles20.pressed
1755
1788
  ],
1756
- children: /* @__PURE__ */ jsx21(
1757
- Text17,
1789
+ children: /* @__PURE__ */ jsx23(
1790
+ ScaledText,
1758
1791
  {
1759
1792
  style: [
1760
- styles19.dayText,
1793
+ styles20.dayText,
1761
1794
  {
1762
1795
  color: isSelected ? colors2.colorOnInteractive : colors2.colorOnBg,
1763
1796
  fontWeight: isToday ? font.weight.semibold : font.weight.body
@@ -1777,18 +1810,11 @@ function Calendar({
1777
1810
 
1778
1811
  // src/components/ui/Carousel/Carousel.tsx
1779
1812
  import { useCallback as useCallback2, useRef as useRef3, useState as useState6 } from "react";
1780
- import {
1781
- StyleSheet as StyleSheet20,
1782
- View as View17,
1783
- Text as Text18,
1784
- Pressable as Pressable12,
1785
- ScrollView as ScrollView3,
1786
- Dimensions
1787
- } from "react-native";
1788
- import { jsx as jsx22, jsxs as jsxs14 } from "react/jsx-runtime";
1813
+ import { StyleSheet as StyleSheet22, View as View17, Pressable as Pressable12, ScrollView as ScrollView3, Dimensions } from "react-native";
1814
+ import { jsx as jsx24, jsxs as jsxs14 } from "react/jsx-runtime";
1789
1815
  var DOT_SIZE = 8;
1790
1816
  var DOT_HIT_SIZE = 44;
1791
- var styles20 = StyleSheet20.create({
1817
+ var styles21 = StyleSheet22.create({
1792
1818
  container: {
1793
1819
  width: "100%"
1794
1820
  },
@@ -1864,11 +1890,11 @@ function Carousel({
1864
1890
  return /* @__PURE__ */ jsxs14(
1865
1891
  View17,
1866
1892
  {
1867
- style: [styles20.container, style],
1893
+ style: [styles21.container, style],
1868
1894
  accessibilityRole: "none",
1869
1895
  accessibilityLabel: label,
1870
1896
  children: [
1871
- /* @__PURE__ */ jsx22(
1897
+ /* @__PURE__ */ jsx24(
1872
1898
  ScrollView3,
1873
1899
  {
1874
1900
  ref: scrollRef,
@@ -1878,12 +1904,12 @@ function Carousel({
1878
1904
  onScroll: handleScroll,
1879
1905
  scrollEventThrottle: 16,
1880
1906
  onLayout: (e) => setSlideWidth(e.nativeEvent.layout.width),
1881
- style: styles20.scrollView,
1882
- children: items.map((item, index) => /* @__PURE__ */ jsx22(View17, { style: [styles20.slide, { width: slideWidth }], children: item }, index))
1907
+ style: styles21.scrollView,
1908
+ children: items.map((item, index) => /* @__PURE__ */ jsx24(View17, { style: [styles21.slide, { width: slideWidth }], children: item }, index))
1883
1909
  }
1884
1910
  ),
1885
- /* @__PURE__ */ jsxs14(View17, { style: styles20.nav, children: [
1886
- /* @__PURE__ */ jsx22(
1911
+ /* @__PURE__ */ jsxs14(View17, { style: styles21.nav, children: [
1912
+ /* @__PURE__ */ jsx24(
1887
1913
  Pressable12,
1888
1914
  {
1889
1915
  onPress: () => scrollTo(activeIndex - 1),
@@ -1892,26 +1918,26 @@ function Carousel({
1892
1918
  accessibilityLabel: "Previous",
1893
1919
  accessibilityState: { disabled: activeIndex <= 0 },
1894
1920
  style: ({ pressed }) => [
1895
- styles20.navButton,
1921
+ styles21.navButton,
1896
1922
  activeIndex <= 0 && { opacity: 0.4 },
1897
- pressed && styles20.pressed
1923
+ pressed && styles21.pressed
1898
1924
  ],
1899
- children: /* @__PURE__ */ jsx22(Text18, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1925
+ children: /* @__PURE__ */ jsx24(ScaledText, { style: [styles21.navText, { color: colors2.colorOnBg }], children: "\u2039" })
1900
1926
  }
1901
1927
  ),
1902
- /* @__PURE__ */ jsx22(View17, { style: styles20.dots, children: items.map((_, index) => /* @__PURE__ */ jsx22(
1928
+ /* @__PURE__ */ jsx24(View17, { style: styles21.dots, children: items.map((_, index) => /* @__PURE__ */ jsx24(
1903
1929
  Pressable12,
1904
1930
  {
1905
1931
  onPress: () => scrollTo(index),
1906
1932
  accessibilityRole: "button",
1907
1933
  accessibilityLabel: `Go to slide ${index + 1}`,
1908
1934
  accessibilityState: { selected: activeIndex === index },
1909
- style: styles20.dotWrapper,
1910
- children: /* @__PURE__ */ jsx22(
1935
+ style: styles21.dotWrapper,
1936
+ children: /* @__PURE__ */ jsx24(
1911
1937
  View17,
1912
1938
  {
1913
1939
  style: [
1914
- styles20.dot,
1940
+ styles21.dot,
1915
1941
  {
1916
1942
  backgroundColor: activeIndex === index ? colors2.colorInteractive : colors2.colorBgSubtle
1917
1943
  }
@@ -1921,7 +1947,7 @@ function Carousel({
1921
1947
  },
1922
1948
  index
1923
1949
  )) }),
1924
- /* @__PURE__ */ jsx22(
1950
+ /* @__PURE__ */ jsx24(
1925
1951
  Pressable12,
1926
1952
  {
1927
1953
  onPress: () => scrollTo(activeIndex + 1),
@@ -1930,11 +1956,11 @@ function Carousel({
1930
1956
  accessibilityLabel: "Next",
1931
1957
  accessibilityState: { disabled: activeIndex >= items.length - 1 },
1932
1958
  style: ({ pressed }) => [
1933
- styles20.navButton,
1959
+ styles21.navButton,
1934
1960
  activeIndex >= items.length - 1 && { opacity: 0.4 },
1935
- pressed && styles20.pressed
1961
+ pressed && styles21.pressed
1936
1962
  ],
1937
- children: /* @__PURE__ */ jsx22(Text18, { style: [styles20.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1963
+ children: /* @__PURE__ */ jsx24(ScaledText, { style: [styles21.navText, { color: colors2.colorOnBg }], children: "\u203A" })
1938
1964
  }
1939
1965
  )
1940
1966
  ] })
@@ -1944,8 +1970,8 @@ function Carousel({
1944
1970
  }
1945
1971
 
1946
1972
  // src/components/layout/Card/Card.tsx
1947
- import { StyleSheet as StyleSheet21, View as View18, Pressable as Pressable13 } from "react-native";
1948
- import { jsx as jsx23 } from "react/jsx-runtime";
1973
+ import { StyleSheet as StyleSheet23, View as View18, Pressable as Pressable13 } from "react-native";
1974
+ import { jsx as jsx25 } from "react/jsx-runtime";
1949
1975
  var paddingMap = {
1950
1976
  none: 0,
1951
1977
  small: spacing.s,
@@ -1957,7 +1983,7 @@ var alignMap = {
1957
1983
  center: "center",
1958
1984
  end: "flex-end"
1959
1985
  };
1960
- var styles21 = StyleSheet21.create({
1986
+ var styles22 = StyleSheet23.create({
1961
1987
  card: {
1962
1988
  borderRadius: border.radius.m,
1963
1989
  overflow: "hidden"
@@ -1992,29 +2018,29 @@ function Card({
1992
2018
  alignItems: alignMap[textAlign]
1993
2019
  };
1994
2020
  if (onPress) {
1995
- return /* @__PURE__ */ jsx23(
2021
+ return /* @__PURE__ */ jsx25(
1996
2022
  Pressable13,
1997
2023
  {
1998
2024
  onPress,
1999
2025
  accessibilityRole: "button",
2000
2026
  accessibilityLabel,
2001
- style: ({ pressed }) => [styles21.card, variantStyle, inner, pressed && { opacity: 0.8 }, style],
2027
+ style: ({ pressed }) => [styles22.card, variantStyle, inner, pressed && { opacity: 0.8 }, style],
2002
2028
  children
2003
2029
  }
2004
2030
  );
2005
2031
  }
2006
- return /* @__PURE__ */ jsx23(View18, { style: [styles21.card, variantStyle, inner, style], children });
2032
+ return /* @__PURE__ */ jsx25(View18, { style: [styles22.card, variantStyle, inner, style], children });
2007
2033
  }
2008
2034
 
2009
2035
  // src/components/layout/SectionHeader/SectionHeader.tsx
2010
- import { StyleSheet as StyleSheet22, View as View19, Text as Text19 } from "react-native";
2011
- import { jsx as jsx24, jsxs as jsxs15 } from "react/jsx-runtime";
2036
+ import { StyleSheet as StyleSheet24, View as View19 } from "react-native";
2037
+ import { jsx as jsx26, jsxs as jsxs15 } from "react/jsx-runtime";
2012
2038
  var alignMap2 = {
2013
2039
  start: "flex-start",
2014
2040
  center: "center",
2015
2041
  end: "flex-end"
2016
2042
  };
2017
- var titleStyles = StyleSheet22.create({
2043
+ var titleStyles = StyleSheet24.create({
2018
2044
  small: {
2019
2045
  fontSize: font.size.heading3,
2020
2046
  fontFamily: font.family.heading,
@@ -2034,7 +2060,7 @@ var titleStyles = StyleSheet22.create({
2034
2060
  lineHeight: lineHeight.heading1
2035
2061
  }
2036
2062
  });
2037
- var styles22 = StyleSheet22.create({
2063
+ var styles23 = StyleSheet24.create({
2038
2064
  container: {
2039
2065
  gap: spacing.xxs
2040
2066
  },
@@ -2053,24 +2079,24 @@ function SectionHeader({
2053
2079
  }) {
2054
2080
  const { colors: colors2 } = useTheme();
2055
2081
  const align = alignMap2[alignment];
2056
- return /* @__PURE__ */ jsxs15(View19, { style: [styles22.container, { alignItems: align }, style], children: [
2057
- /* @__PURE__ */ jsx24(
2058
- Text19,
2082
+ return /* @__PURE__ */ jsxs15(View19, { style: [styles23.container, { alignItems: align }, style], children: [
2083
+ /* @__PURE__ */ jsx26(
2084
+ ScaledText,
2059
2085
  {
2060
2086
  accessibilityRole: "header",
2061
2087
  style: [titleStyles[size], { color: colors2.colorOnBg }],
2062
2088
  children: title
2063
2089
  }
2064
2090
  ),
2065
- subtitle && /* @__PURE__ */ jsx24(Text19, { style: [styles22.subtitle, { color: colors2.colorOnBgSubtle }], children: subtitle })
2091
+ subtitle && /* @__PURE__ */ jsx26(ScaledText, { style: [styles23.subtitle, { color: colors2.colorOnBgSubtle }], children: subtitle })
2066
2092
  ] });
2067
2093
  }
2068
2094
 
2069
2095
  // src/components/layout/IconWrapper/IconWrapper.tsx
2070
2096
  import { View as View20 } from "react-native";
2071
- import { jsx as jsx25 } from "react/jsx-runtime";
2097
+ import { jsx as jsx27 } from "react/jsx-runtime";
2072
2098
  function IconWrapper({ children, style, accessibilityElementsHidden }) {
2073
- return /* @__PURE__ */ jsx25(
2099
+ return /* @__PURE__ */ jsx27(
2074
2100
  View20,
2075
2101
  {
2076
2102
  style: [{ alignItems: "center", justifyContent: "center" }, style],
@@ -2082,9 +2108,9 @@ function IconWrapper({ children, style, accessibilityElementsHidden }) {
2082
2108
  }
2083
2109
 
2084
2110
  // src/components/layout/ButtonGroup/ButtonGroup.tsx
2085
- import { StyleSheet as StyleSheet23, View as View21 } from "react-native";
2086
- import { jsx as jsx26 } from "react/jsx-runtime";
2087
- var styles23 = StyleSheet23.create({
2111
+ import { StyleSheet as StyleSheet25, View as View21 } from "react-native";
2112
+ import { jsx as jsx28 } from "react/jsx-runtime";
2113
+ var styles24 = StyleSheet25.create({
2088
2114
  group: {
2089
2115
  flexDirection: "row",
2090
2116
  flexWrap: "wrap",
@@ -2097,11 +2123,11 @@ var styles23 = StyleSheet23.create({
2097
2123
  });
2098
2124
  function ButtonContainer({ children, variant, accessibilityLabel, style }) {
2099
2125
  const isColumn = variant === "card" || variant === "modal";
2100
- return /* @__PURE__ */ jsx26(
2126
+ return /* @__PURE__ */ jsx28(
2101
2127
  View21,
2102
2128
  {
2103
2129
  accessibilityLabel,
2104
- style: [isColumn ? styles23.column : styles23.group, style],
2130
+ style: [isColumn ? styles24.column : styles24.group, style],
2105
2131
  children
2106
2132
  }
2107
2133
  );
@@ -2109,14 +2135,14 @@ function ButtonContainer({ children, variant, accessibilityLabel, style }) {
2109
2135
  var ButtonGroup = ButtonContainer;
2110
2136
 
2111
2137
  // src/components/interaction/Button/Button.tsx
2112
- import { StyleSheet as StyleSheet24, Pressable as Pressable14, Text as Text20, View as View22 } from "react-native";
2113
- import { jsx as jsx27, jsxs as jsxs16 } from "react/jsx-runtime";
2138
+ import { StyleSheet as StyleSheet26, Pressable as Pressable14, View as View22 } from "react-native";
2139
+ import { jsx as jsx29, jsxs as jsxs16 } from "react/jsx-runtime";
2114
2140
  var sizeTokens = {
2115
- small: { height: 36, px: spacing.m, fontSize: font.size.bodyS, radius: border.radius.full },
2116
- medium: { height: 48, px: spacing.m, fontSize: font.size.body, radius: border.radius.full },
2117
- large: { height: 56, px: spacing.xxl, fontSize: font.size.heading3, radius: border.radius.full }
2141
+ small: { height: 36, px: spacing.m, fontSize: font.size.bodyS },
2142
+ medium: { height: 48, px: spacing.m, fontSize: font.size.body },
2143
+ large: { height: 56, px: spacing.xxl, fontSize: font.size.heading3 }
2118
2144
  };
2119
- var styles24 = StyleSheet24.create({
2145
+ var styles25 = StyleSheet26.create({
2120
2146
  pressable: {
2121
2147
  flexDirection: "row",
2122
2148
  alignItems: "center",
@@ -2127,7 +2153,9 @@ var styles24 = StyleSheet24.create({
2127
2153
  label: {
2128
2154
  fontFamily: font.family.body,
2129
2155
  fontWeight: font.weight.semibold,
2130
- includeFontPadding: false
2156
+ includeFontPadding: false,
2157
+ flexShrink: 1,
2158
+ textAlign: "center"
2131
2159
  }
2132
2160
  });
2133
2161
  function Button({
@@ -2143,18 +2171,22 @@ function Button({
2143
2171
  style
2144
2172
  }) {
2145
2173
  const { colors: colors2 } = useTheme();
2146
- const { height, px, fontSize, radius } = sizeTokens[size];
2174
+ const { height, px, fontSize } = sizeTokens[size];
2147
2175
  const primaryColor = colors2.colorInteractive;
2148
2176
  const onPrimaryColor = colors2.colorOnInteractive;
2149
2177
  const outlineTextColor = colors2.colorInteractiveOnBg;
2150
2178
  const isOutline = variant === "outline" || variant === "ghost";
2151
2179
  const containerStyle = {
2152
- height,
2180
+ minHeight: height,
2153
2181
  paddingHorizontal: isIconOnly ? spacing.xs : px,
2154
- borderRadius: radius,
2182
+ // A text button has medium corners on every size; an icon-only button stays round.
2183
+ borderRadius: isIconOnly ? border.radius.full : border.radius.m,
2155
2184
  opacity: disabled ? 0.4 : 1,
2156
2185
  // Icon-only: square with equal xs padding on both axes.
2157
2186
  ...isIconOnly && { aspectRatio: 1, paddingVertical: spacing.xs },
2187
+ // Icon-only keeps a fixed height (stays square); a text button gets vertical padding
2188
+ // instead, so a wrapped label grows the button from minHeight rather than clipping.
2189
+ ...isIconOnly ? { height } : { paddingVertical: spacing.xxs },
2158
2190
  ...variant === "default" && { backgroundColor: primaryColor },
2159
2191
  ...isOutline && {
2160
2192
  backgroundColor: "transparent",
@@ -2171,21 +2203,21 @@ function Button({
2171
2203
  accessibilityRole: "button",
2172
2204
  accessibilityLabel,
2173
2205
  accessibilityState: { disabled },
2174
- style: ({ pressed }) => [styles24.pressable, containerStyle, pressed && { opacity: 0.75 }, style],
2206
+ style: ({ pressed }) => [styles25.pressable, containerStyle, pressed && { opacity: 0.75 }, style],
2175
2207
  children: [
2176
- iconStart && /* @__PURE__ */ jsx27(View22, { importantForAccessibility: "no-hide-descendants", accessibilityElementsHidden: true, children: iconStart }),
2177
- children && (isIconOnly ? children : /* @__PURE__ */ jsx27(Text20, { style: [styles24.label, { fontSize, color: textColor }], children })),
2178
- iconEnd && /* @__PURE__ */ jsx27(View22, { importantForAccessibility: "no-hide-descendants", children: iconEnd })
2208
+ iconStart && /* @__PURE__ */ jsx29(View22, { importantForAccessibility: "no-hide-descendants", accessibilityElementsHidden: true, children: iconStart }),
2209
+ children && (isIconOnly ? children : /* @__PURE__ */ jsx29(ScaledText, { style: [styles25.label, { fontSize, color: textColor }], children })),
2210
+ iconEnd && /* @__PURE__ */ jsx29(View22, { importantForAccessibility: "no-hide-descendants", children: iconEnd })
2179
2211
  ]
2180
2212
  }
2181
2213
  );
2182
2214
  }
2183
2215
 
2184
2216
  // src/components/interaction/Rating/Rating.tsx
2185
- import { StyleSheet as StyleSheet25, View as View23, Text as Text21 } from "react-native";
2186
- import { jsx as jsx28 } from "react/jsx-runtime";
2217
+ import { StyleSheet as StyleSheet27, View as View23 } from "react-native";
2218
+ import { jsx as jsx30 } from "react/jsx-runtime";
2187
2219
  var STAR_SIZE = 24;
2188
- var styles25 = StyleSheet25.create({
2220
+ var styles26 = StyleSheet27.create({
2189
2221
  container: {
2190
2222
  flexDirection: "row",
2191
2223
  alignItems: "center"
@@ -2198,17 +2230,17 @@ var styles25 = StyleSheet25.create({
2198
2230
  function Rating({ value, max = 5, style, accessibilityLabel }) {
2199
2231
  const { colors: colors2 } = useTheme();
2200
2232
  const label = accessibilityLabel ?? `${value} out of ${max} stars`;
2201
- return /* @__PURE__ */ jsx28(
2233
+ return /* @__PURE__ */ jsx30(
2202
2234
  View23,
2203
2235
  {
2204
- style: [styles25.container, style],
2236
+ style: [styles26.container, style],
2205
2237
  accessibilityRole: "image",
2206
2238
  accessibilityLabel: label,
2207
- children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ jsx28(
2208
- Text21,
2239
+ children: Array.from({ length: max }).map((_, i) => /* @__PURE__ */ jsx30(
2240
+ ScaledText,
2209
2241
  {
2210
2242
  style: [
2211
- styles25.star,
2243
+ styles26.star,
2212
2244
  { color: i < value ? colors2.colorWarning : colors2.colorBgSubtle }
2213
2245
  ],
2214
2246
  importantForAccessibility: "no",
@@ -2222,15 +2254,14 @@ function Rating({ value, max = 5, style, accessibilityLabel }) {
2222
2254
  }
2223
2255
 
2224
2256
  // src/components/interaction/form/Switch/Switch.tsx
2225
- import { Switch as RNSwitch, View as View24, StyleSheet as StyleSheet27 } from "react-native";
2257
+ import { Switch as RNSwitch, View as View24, StyleSheet as StyleSheet29 } from "react-native";
2226
2258
 
2227
2259
  // src/components/interaction/form/atoms/Label.tsx
2228
- import { Text as Text22 } from "react-native";
2229
- import { jsx as jsx29 } from "react/jsx-runtime";
2260
+ import { jsx as jsx31 } from "react/jsx-runtime";
2230
2261
  function Label({ label, style }) {
2231
2262
  const { colors: colors2 } = useTheme();
2232
- return /* @__PURE__ */ jsx29(
2233
- Text22,
2263
+ return /* @__PURE__ */ jsx31(
2264
+ ScaledText,
2234
2265
  {
2235
2266
  style: [
2236
2267
  {
@@ -2248,9 +2279,9 @@ function Label({ label, style }) {
2248
2279
  }
2249
2280
 
2250
2281
  // src/components/interaction/form/atoms/Message.tsx
2251
- import { StyleSheet as StyleSheet26, Text as Text23 } from "react-native";
2252
- import { jsx as jsx30 } from "react/jsx-runtime";
2253
- var styles26 = StyleSheet26.create({
2282
+ import { StyleSheet as StyleSheet28 } from "react-native";
2283
+ import { jsx as jsx32 } from "react/jsx-runtime";
2284
+ var styles27 = StyleSheet28.create({
2254
2285
  base: {
2255
2286
  fontFamily: font.family.body,
2256
2287
  fontSize: font.size.bodyS,
@@ -2261,20 +2292,20 @@ function Message({ message, type, style }) {
2261
2292
  const { colors: colors2 } = useTheme();
2262
2293
  if (!message) return null;
2263
2294
  const color = type === "error" ? colors2.colorError : colors2.colorOnBgSubtle;
2264
- return /* @__PURE__ */ jsx30(
2265
- Text23,
2295
+ return /* @__PURE__ */ jsx32(
2296
+ ScaledText,
2266
2297
  {
2267
2298
  accessibilityRole: type === "error" ? "alert" : "none",
2268
2299
  accessibilityLiveRegion: type === "error" ? "assertive" : "polite",
2269
- style: [styles26.base, { color }, style],
2300
+ style: [styles27.base, { color }, style],
2270
2301
  children: message
2271
2302
  }
2272
2303
  );
2273
2304
  }
2274
2305
 
2275
2306
  // src/components/interaction/form/Switch/Switch.tsx
2276
- import { jsx as jsx31, jsxs as jsxs17 } from "react/jsx-runtime";
2277
- var styles27 = StyleSheet27.create({
2307
+ import { jsx as jsx33, jsxs as jsxs17 } from "react/jsx-runtime";
2308
+ var styles28 = StyleSheet29.create({
2278
2309
  container: {
2279
2310
  gap: spacing.xxs
2280
2311
  },
@@ -2294,9 +2325,9 @@ function Switch({
2294
2325
  style
2295
2326
  }) {
2296
2327
  const { colors: colors2 } = useTheme();
2297
- return /* @__PURE__ */ jsxs17(View24, { style: [styles27.container, style], children: [
2298
- /* @__PURE__ */ jsxs17(View24, { style: styles27.row, children: [
2299
- /* @__PURE__ */ jsx31(
2328
+ return /* @__PURE__ */ jsxs17(View24, { style: [styles28.container, style], children: [
2329
+ /* @__PURE__ */ jsxs17(View24, { style: styles28.row, children: [
2330
+ /* @__PURE__ */ jsx33(
2300
2331
  RNSwitch,
2301
2332
  {
2302
2333
  value,
@@ -2309,18 +2340,18 @@ function Switch({
2309
2340
  trackColor: { false: colors2.colorBgSubtle, true: colors2.colorBlueSubtle }
2310
2341
  }
2311
2342
  ),
2312
- /* @__PURE__ */ jsx31(Label, { label })
2343
+ /* @__PURE__ */ jsx33(Label, { label })
2313
2344
  ] }),
2314
- /* @__PURE__ */ jsx31(Message, { type: "error", message: error }),
2315
- /* @__PURE__ */ jsx31(Message, { type: "hint", message: hint })
2345
+ /* @__PURE__ */ jsx33(Message, { type: "error", message: error }),
2346
+ /* @__PURE__ */ jsx33(Message, { type: "hint", message: hint })
2316
2347
  ] });
2317
2348
  }
2318
2349
 
2319
2350
  // src/components/interaction/form/Checkbox/Checkbox.tsx
2320
- import { StyleSheet as StyleSheet28, View as View25, Pressable as Pressable15 } from "react-native";
2321
- import { jsx as jsx32, jsxs as jsxs18 } from "react/jsx-runtime";
2351
+ import { StyleSheet as StyleSheet30, View as View25, Pressable as Pressable15 } from "react-native";
2352
+ import { jsx as jsx34, jsxs as jsxs18 } from "react/jsx-runtime";
2322
2353
  var BOX = 22;
2323
- var styles28 = StyleSheet28.create({
2354
+ var styles29 = StyleSheet30.create({
2324
2355
  container: {
2325
2356
  gap: spacing.xxs
2326
2357
  },
@@ -2357,7 +2388,7 @@ function Checkbox({
2357
2388
  const { colors: colors2 } = useTheme();
2358
2389
  const borderColor = error ? colors2.colorError : checked ? colors2.colorInteractive : colors2.colorOnBg;
2359
2390
  const bgColor = checked ? colors2.colorInteractive : "transparent";
2360
- return /* @__PURE__ */ jsxs18(View25, { style: [styles28.container, style], children: [
2391
+ return /* @__PURE__ */ jsxs18(View25, { style: [styles29.container, style], children: [
2361
2392
  /* @__PURE__ */ jsxs18(
2362
2393
  Pressable15,
2363
2394
  {
@@ -2366,22 +2397,22 @@ function Checkbox({
2366
2397
  accessibilityLabel: typeof label === "string" ? label : name,
2367
2398
  accessibilityState: { checked, disabled },
2368
2399
  disabled,
2369
- style: ({ pressed }) => [styles28.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2400
+ style: ({ pressed }) => [styles29.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2370
2401
  children: [
2371
- /* @__PURE__ */ jsx32(View25, { style: [styles28.box, { borderColor, backgroundColor: bgColor }], children: checked && /* @__PURE__ */ jsx32(Label, { label: "\u2713", style: [styles28.checkmark, { color: colors2.colorOnInteractive }] }) }),
2372
- /* @__PURE__ */ jsx32(Label, { label })
2402
+ /* @__PURE__ */ jsx34(View25, { style: [styles29.box, { borderColor, backgroundColor: bgColor }], children: checked && /* @__PURE__ */ jsx34(Label, { label: "\u2713", style: [styles29.checkmark, { color: colors2.colorOnInteractive }] }) }),
2403
+ /* @__PURE__ */ jsx34(Label, { label })
2373
2404
  ]
2374
2405
  }
2375
2406
  ),
2376
- /* @__PURE__ */ jsx32(Message, { type: "error", message: error }),
2377
- /* @__PURE__ */ jsx32(Message, { type: "hint", message: hint })
2407
+ /* @__PURE__ */ jsx34(Message, { type: "error", message: error }),
2408
+ /* @__PURE__ */ jsx34(Message, { type: "hint", message: hint })
2378
2409
  ] });
2379
2410
  }
2380
2411
 
2381
2412
  // src/components/interaction/form/CheckboxGroup/CheckboxGroup.tsx
2382
- import { StyleSheet as StyleSheet29, View as View26, Text as Text24 } from "react-native";
2383
- import { jsx as jsx33, jsxs as jsxs19 } from "react/jsx-runtime";
2384
- var styles29 = StyleSheet29.create({
2413
+ import { StyleSheet as StyleSheet31, View as View26 } from "react-native";
2414
+ import { jsx as jsx35, jsxs as jsxs19 } from "react/jsx-runtime";
2415
+ var styles30 = StyleSheet31.create({
2385
2416
  container: {
2386
2417
  gap: spacing.xs
2387
2418
  },
@@ -2411,28 +2442,28 @@ function CheckboxGroup({
2411
2442
  return /* @__PURE__ */ jsxs19(
2412
2443
  View26,
2413
2444
  {
2414
- style: [styles29.container, disabled && { opacity: 0.4 }, style],
2445
+ style: [styles30.container, disabled && { opacity: 0.4 }, style],
2415
2446
  accessibilityRole: "none",
2416
2447
  accessibilityLabel: legend,
2417
2448
  children: [
2418
- /* @__PURE__ */ jsxs19(Text24, { style: [styles29.legend, { color: colors2.colorOnBg }], children: [
2449
+ /* @__PURE__ */ jsxs19(ScaledText, { style: [styles30.legend, { color: colors2.colorOnBg }], children: [
2419
2450
  legend,
2420
- required && /* @__PURE__ */ jsx33(Text24, { style: [styles29.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2451
+ required && /* @__PURE__ */ jsx35(ScaledText, { style: [styles30.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2421
2452
  ] }),
2422
- /* @__PURE__ */ jsx33(View26, { style: styles29.items, children }),
2423
- /* @__PURE__ */ jsx33(Message, { type: "error", message: error }),
2424
- /* @__PURE__ */ jsx33(Message, { type: "hint", message: hint })
2453
+ /* @__PURE__ */ jsx35(View26, { style: styles30.items, children }),
2454
+ /* @__PURE__ */ jsx35(Message, { type: "error", message: error }),
2455
+ /* @__PURE__ */ jsx35(Message, { type: "hint", message: hint })
2425
2456
  ]
2426
2457
  }
2427
2458
  );
2428
2459
  }
2429
2460
 
2430
2461
  // src/components/interaction/form/Radio/Radio.tsx
2431
- import { StyleSheet as StyleSheet30, View as View27, Pressable as Pressable16 } from "react-native";
2432
- import { jsx as jsx34, jsxs as jsxs20 } from "react/jsx-runtime";
2462
+ import { StyleSheet as StyleSheet32, View as View27, Pressable as Pressable16 } from "react-native";
2463
+ import { jsx as jsx36, jsxs as jsxs20 } from "react/jsx-runtime";
2433
2464
  var DOT = 22;
2434
2465
  var INNER = 10;
2435
- var styles30 = StyleSheet30.create({
2466
+ var styles31 = StyleSheet32.create({
2436
2467
  container: {
2437
2468
  gap: spacing.xxs
2438
2469
  },
@@ -2468,7 +2499,7 @@ function Radio({
2468
2499
  }) {
2469
2500
  const { colors: colors2 } = useTheme();
2470
2501
  const borderColor = error ? colors2.colorError : checked ? colors2.colorInteractive : colors2.colorOnBg;
2471
- return /* @__PURE__ */ jsxs20(View27, { style: [styles30.container, style], children: [
2502
+ return /* @__PURE__ */ jsxs20(View27, { style: [styles31.container, style], children: [
2472
2503
  /* @__PURE__ */ jsxs20(
2473
2504
  Pressable16,
2474
2505
  {
@@ -2477,22 +2508,22 @@ function Radio({
2477
2508
  accessibilityLabel: typeof label === "string" ? label : name,
2478
2509
  accessibilityState: { checked, disabled },
2479
2510
  disabled,
2480
- style: ({ pressed }) => [styles30.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2511
+ style: ({ pressed }) => [styles31.row, pressed && { opacity: 0.7 }, disabled && { opacity: 0.4 }],
2481
2512
  children: [
2482
- /* @__PURE__ */ jsx34(View27, { style: [styles30.outer, { borderColor }], children: checked && /* @__PURE__ */ jsx34(View27, { style: [styles30.inner, { backgroundColor: colors2.colorInteractive }] }) }),
2483
- /* @__PURE__ */ jsx34(Label, { label })
2513
+ /* @__PURE__ */ jsx36(View27, { style: [styles31.outer, { borderColor }], children: checked && /* @__PURE__ */ jsx36(View27, { style: [styles31.inner, { backgroundColor: colors2.colorInteractive }] }) }),
2514
+ /* @__PURE__ */ jsx36(Label, { label })
2484
2515
  ]
2485
2516
  }
2486
2517
  ),
2487
- /* @__PURE__ */ jsx34(Message, { type: "error", message: error }),
2488
- /* @__PURE__ */ jsx34(Message, { type: "hint", message: hint })
2518
+ /* @__PURE__ */ jsx36(Message, { type: "error", message: error }),
2519
+ /* @__PURE__ */ jsx36(Message, { type: "hint", message: hint })
2489
2520
  ] });
2490
2521
  }
2491
2522
 
2492
2523
  // src/components/interaction/form/RadioGroup/RadioGroup.tsx
2493
- import { StyleSheet as StyleSheet31, View as View28, Text as Text25 } from "react-native";
2494
- import { jsx as jsx35, jsxs as jsxs21 } from "react/jsx-runtime";
2495
- var styles31 = StyleSheet31.create({
2524
+ import { StyleSheet as StyleSheet33, View as View28 } from "react-native";
2525
+ import { jsx as jsx37, jsxs as jsxs21 } from "react/jsx-runtime";
2526
+ var styles32 = StyleSheet33.create({
2496
2527
  container: {
2497
2528
  gap: spacing.xs
2498
2529
  },
@@ -2522,26 +2553,26 @@ function RadioGroup({
2522
2553
  return /* @__PURE__ */ jsxs21(
2523
2554
  View28,
2524
2555
  {
2525
- style: [styles31.container, disabled && { opacity: 0.4 }, style],
2556
+ style: [styles32.container, disabled && { opacity: 0.4 }, style],
2526
2557
  accessibilityRole: "radiogroup",
2527
2558
  accessibilityLabel: legend,
2528
2559
  children: [
2529
- /* @__PURE__ */ jsxs21(Text25, { style: [styles31.legend, { color: colors2.colorOnBg }], children: [
2560
+ /* @__PURE__ */ jsxs21(ScaledText, { style: [styles32.legend, { color: colors2.colorOnBg }], children: [
2530
2561
  legend,
2531
- required && /* @__PURE__ */ jsx35(Text25, { style: [styles31.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2562
+ required && /* @__PURE__ */ jsx37(ScaledText, { style: [styles32.required, { color: colors2.colorOnBgSubtle }], children: " *" })
2532
2563
  ] }),
2533
- /* @__PURE__ */ jsx35(View28, { style: styles31.items, children }),
2534
- /* @__PURE__ */ jsx35(Message, { type: "error", message: error }),
2535
- /* @__PURE__ */ jsx35(Message, { type: "hint", message: hint })
2564
+ /* @__PURE__ */ jsx37(View28, { style: styles32.items, children }),
2565
+ /* @__PURE__ */ jsx37(Message, { type: "error", message: error }),
2566
+ /* @__PURE__ */ jsx37(Message, { type: "hint", message: hint })
2536
2567
  ]
2537
2568
  }
2538
2569
  );
2539
2570
  }
2540
2571
 
2541
2572
  // src/components/interaction/form/FileInput/FileInput.tsx
2542
- import { StyleSheet as StyleSheet32, View as View29, Pressable as Pressable17, Text as Text26 } from "react-native";
2543
- import { jsx as jsx36, jsxs as jsxs22 } from "react/jsx-runtime";
2544
- var styles32 = StyleSheet32.create({
2573
+ import { StyleSheet as StyleSheet34, View as View29, Pressable as Pressable17 } from "react-native";
2574
+ import { jsx as jsx38, jsxs as jsxs22 } from "react/jsx-runtime";
2575
+ var styles33 = StyleSheet34.create({
2545
2576
  container: {
2546
2577
  gap: spacing.xxs
2547
2578
  },
@@ -2553,7 +2584,7 @@ var styles32 = StyleSheet32.create({
2553
2584
  paddingHorizontal: spacing.m,
2554
2585
  borderWidth: 2,
2555
2586
  borderStyle: "dashed",
2556
- borderRadius: border.radius.s,
2587
+ borderRadius: border.radius.m,
2557
2588
  minHeight: 120
2558
2589
  },
2559
2590
  icon: {
@@ -2596,8 +2627,8 @@ function FileInput({
2596
2627
  }) {
2597
2628
  const { colors: colors2 } = useTheme();
2598
2629
  const borderColor = error ? colors2.colorError : colors2.colorBgSubtle;
2599
- return /* @__PURE__ */ jsxs22(View29, { style: [styles32.container, style], testID: name, children: [
2600
- /* @__PURE__ */ jsx36(
2630
+ return /* @__PURE__ */ jsxs22(View29, { style: [styles33.container, style], testID: name, children: [
2631
+ /* @__PURE__ */ jsx38(
2601
2632
  Label,
2602
2633
  {
2603
2634
  label: required ? `${label} *` : label
@@ -2612,7 +2643,7 @@ function FileInput({
2612
2643
  accessibilityLabel: `${label}, tap to select file`,
2613
2644
  accessibilityState: { disabled },
2614
2645
  style: ({ pressed }) => [
2615
- styles32.dropZone,
2646
+ styles33.dropZone,
2616
2647
  {
2617
2648
  borderColor,
2618
2649
  backgroundColor: "transparent"
@@ -2621,42 +2652,35 @@ function FileInput({
2621
2652
  disabled && { opacity: 0.4 }
2622
2653
  ],
2623
2654
  children: [
2624
- /* @__PURE__ */ jsx36(Text26, { style: [styles32.icon, { color: colors2.colorInteractive }], children: "\u2191" }),
2625
- /* @__PURE__ */ jsx36(Text26, { style: [styles32.prompt, { color: colors2.colorOnBgSubtle }], children: fileNames.length > 0 ? "Selected files:" : "Tap to select file" }),
2626
- fileNames.length > 0 && /* @__PURE__ */ jsx36(View29, { style: styles32.fileList, children: fileNames.map((fileName) => /* @__PURE__ */ jsx36(Text26, { style: [styles32.fileName, { color: colors2.colorOnBg }], children: fileName }, fileName)) }),
2627
- accept && /* @__PURE__ */ jsx36(Text26, { style: [styles32.acceptHint, { color: colors2.colorOnBgSubtle }], children: accept })
2655
+ /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.icon, { color: colors2.colorInteractive }], children: "\u2191" }),
2656
+ /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.prompt, { color: colors2.colorOnBgSubtle }], children: fileNames.length > 0 ? "Selected files:" : "Tap to select file" }),
2657
+ 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)) }),
2658
+ accept && /* @__PURE__ */ jsx38(ScaledText, { style: [styles33.acceptHint, { color: colors2.colorOnBgSubtle }], children: accept })
2628
2659
  ]
2629
2660
  }
2630
2661
  ),
2631
- /* @__PURE__ */ jsx36(Message, { type: "error", message: error }),
2632
- /* @__PURE__ */ jsx36(Message, { type: "hint", message: hint })
2662
+ /* @__PURE__ */ jsx38(Message, { type: "error", message: error }),
2663
+ /* @__PURE__ */ jsx38(Message, { type: "hint", message: hint })
2633
2664
  ] });
2634
2665
  }
2635
2666
 
2636
2667
  // src/components/interaction/form/Combobox/Combobox.tsx
2637
2668
  import { useState as useState7, useMemo as useMemo2 } from "react";
2638
- import {
2639
- StyleSheet as StyleSheet33,
2640
- View as View30,
2641
- TextInput,
2642
- Pressable as Pressable18,
2643
- Text as Text27,
2644
- ScrollView as ScrollView4
2645
- } from "react-native";
2669
+ import { StyleSheet as StyleSheet35, View as View30, Pressable as Pressable18, ScrollView as ScrollView4 } from "react-native";
2646
2670
 
2647
2671
  // src/components/interaction/form/atoms/inputHelpers.ts
2648
2672
  var OPTICAL_TEXT_SHIFT = -1.5;
2649
2673
 
2650
2674
  // src/components/interaction/form/Combobox/Combobox.tsx
2651
- import { jsx as jsx37, jsxs as jsxs23 } from "react/jsx-runtime";
2675
+ import { jsx as jsx39, jsxs as jsxs23 } from "react/jsx-runtime";
2652
2676
  var INPUT_HEIGHT = 44;
2653
2677
  var MAX_DROPDOWN_HEIGHT = 200;
2654
- var styles33 = StyleSheet33.create({
2678
+ var styles34 = StyleSheet35.create({
2655
2679
  container: {
2656
2680
  gap: spacing.xxs
2657
2681
  },
2658
2682
  /**
2659
- * Draws the pill border and provides the fixed 44pt touch-target height.
2683
+ * Draws the rounded border and provides the fixed 44pt touch-target height.
2660
2684
  * justifyContent: 'center' vertically centers the inner TextInput.
2661
2685
  * position: 'relative' is required for the dropdown's absolute positioning.
2662
2686
  */
@@ -2665,7 +2689,7 @@ var styles33 = StyleSheet33.create({
2665
2689
  height: INPUT_HEIGHT,
2666
2690
  justifyContent: "center",
2667
2691
  borderWidth: 1,
2668
- borderRadius: border.radius.full
2692
+ borderRadius: border.radius.m
2669
2693
  },
2670
2694
  /**
2671
2695
  * No vertical padding: iOS centers text automatically inside the wrapper height.
@@ -2747,13 +2771,13 @@ function Combobox({
2747
2771
  setTimeout(() => setIsOpen(false), 150);
2748
2772
  };
2749
2773
  const borderColor = error ? colors2.colorError : colors2.colorOnBg;
2750
- return /* @__PURE__ */ jsxs23(View30, { style: [styles33.container, style], children: [
2751
- /* @__PURE__ */ jsx37(Label, { label }),
2774
+ return /* @__PURE__ */ jsxs23(View30, { style: [styles34.container, style], children: [
2775
+ /* @__PURE__ */ jsx39(Label, { label }),
2752
2776
  /* @__PURE__ */ jsxs23(
2753
2777
  View30,
2754
2778
  {
2755
2779
  style: [
2756
- styles33.inputWrapper,
2780
+ styles34.inputWrapper,
2757
2781
  {
2758
2782
  borderColor,
2759
2783
  backgroundColor: colors2.colorBg
@@ -2761,8 +2785,8 @@ function Combobox({
2761
2785
  disabled && { opacity: 0.4 }
2762
2786
  ],
2763
2787
  children: [
2764
- /* @__PURE__ */ jsx37(
2765
- TextInput,
2788
+ /* @__PURE__ */ jsx39(
2789
+ ScaledTextInput,
2766
2790
  {
2767
2791
  value: inputValue,
2768
2792
  onChangeText: handleChangeText,
@@ -2775,16 +2799,16 @@ function Combobox({
2775
2799
  accessibilityLabel: typeof label === "string" ? label : name,
2776
2800
  accessibilityState: { disabled, expanded: isOpen },
2777
2801
  style: [
2778
- styles33.input,
2802
+ styles34.input,
2779
2803
  { color: colors2.colorOnBg }
2780
2804
  ]
2781
2805
  }
2782
2806
  ),
2783
- isOpen && filtered.length > 0 && /* @__PURE__ */ jsx37(
2807
+ isOpen && filtered.length > 0 && /* @__PURE__ */ jsx39(
2784
2808
  ScrollView4,
2785
2809
  {
2786
2810
  style: [
2787
- styles33.dropdown,
2811
+ styles34.dropdown,
2788
2812
  {
2789
2813
  borderColor: colors2.colorBgSubtle,
2790
2814
  backgroundColor: colors2.colorBg
@@ -2795,7 +2819,7 @@ function Combobox({
2795
2819
  children: filtered.map((option) => {
2796
2820
  const isSelected = option.value === value;
2797
2821
  const isDisabled = option.disabled;
2798
- return /* @__PURE__ */ jsx37(
2822
+ return /* @__PURE__ */ jsx39(
2799
2823
  Pressable18,
2800
2824
  {
2801
2825
  onPress: () => !isDisabled && selectOption(option),
@@ -2804,16 +2828,16 @@ function Combobox({
2804
2828
  accessibilityLabel: option.label,
2805
2829
  accessibilityState: { selected: isSelected, disabled: isDisabled },
2806
2830
  style: ({ pressed }) => [
2807
- styles33.option,
2831
+ styles34.option,
2808
2832
  isSelected && { backgroundColor: colors2.colorBlueSubtle },
2809
2833
  pressed && !isDisabled && { backgroundColor: colors2.colorBgSubtle },
2810
2834
  isDisabled && { opacity: 0.4 }
2811
2835
  ],
2812
- children: /* @__PURE__ */ jsx37(
2813
- Text27,
2836
+ children: /* @__PURE__ */ jsx39(
2837
+ ScaledText,
2814
2838
  {
2815
2839
  style: [
2816
- styles33.optionText,
2840
+ styles34.optionText,
2817
2841
  {
2818
2842
  color: isSelected ? colors2.colorInteractive : colors2.colorOnBg
2819
2843
  },
@@ -2831,15 +2855,15 @@ function Combobox({
2831
2855
  ]
2832
2856
  }
2833
2857
  ),
2834
- /* @__PURE__ */ jsx37(Message, { type: "error", message: error }),
2835
- /* @__PURE__ */ jsx37(Message, { type: "hint", message: hint })
2858
+ /* @__PURE__ */ jsx39(Message, { type: "error", message: error }),
2859
+ /* @__PURE__ */ jsx39(Message, { type: "hint", message: hint })
2836
2860
  ] });
2837
2861
  }
2838
2862
 
2839
2863
  // src/components/interaction/form/SegmentedControl/SegmentedControl.tsx
2840
2864
  import { Children } from "react";
2841
- import { StyleSheet as StyleSheet34, View as View31, Pressable as Pressable19, Text as Text28 } from "react-native";
2842
- import { jsx as jsx38 } from "react/jsx-runtime";
2865
+ import { StyleSheet as StyleSheet36, View as View31, Pressable as Pressable19 } from "react-native";
2866
+ import { jsx as jsx40 } from "react/jsx-runtime";
2843
2867
  var TRACK_PADDING = spacing.xxxs;
2844
2868
  var sizeTokens2 = {
2845
2869
  small: { minHeight: 32, fontSize: font.size.bodyS, px: spacing.s, py: spacing.xxs },
@@ -2854,7 +2878,7 @@ var thumbShadow = {
2854
2878
  shadowRadius: 2,
2855
2879
  elevation: 2
2856
2880
  };
2857
- var styles34 = StyleSheet34.create({
2881
+ var styles35 = StyleSheet36.create({
2858
2882
  track: {
2859
2883
  flexDirection: "row",
2860
2884
  borderRadius: border.radius.full,
@@ -2889,10 +2913,10 @@ function SegmentedControl({
2889
2913
  const items = Children.toArray(children);
2890
2914
  const trackBg = colors2.colorBgSubtle;
2891
2915
  const thumbBg = variant === "outline" ? colors2.colorBg : colors2.colorInteractive;
2892
- return /* @__PURE__ */ jsx38(
2916
+ return /* @__PURE__ */ jsx40(
2893
2917
  View31,
2894
2918
  {
2895
- style: [styles34.track, { backgroundColor: trackBg }, style],
2919
+ style: [styles35.track, { backgroundColor: trackBg }, style],
2896
2920
  accessibilityRole: "tablist",
2897
2921
  accessibilityLabel,
2898
2922
  children: items.map((child, index) => {
@@ -2905,7 +2929,7 @@ function SegmentedControl({
2905
2929
  paddingVertical: py,
2906
2930
  ...isActive ? { backgroundColor: thumbBg, ...thumbShadow } : { backgroundColor: "transparent" }
2907
2931
  };
2908
- return /* @__PURE__ */ jsx38(
2932
+ return /* @__PURE__ */ jsx40(
2909
2933
  Pressable19,
2910
2934
  {
2911
2935
  onPress: () => !disabled && onValueChange?.(index),
@@ -2914,12 +2938,21 @@ function SegmentedControl({
2914
2938
  accessibilityLabel: label ?? void 0,
2915
2939
  accessibilityState: { selected: isActive, disabled },
2916
2940
  style: ({ pressed }) => [
2917
- styles34.segment,
2941
+ styles35.segment,
2918
2942
  segmentStyle,
2919
2943
  pressed && !disabled && { opacity: 0.7 },
2920
2944
  disabled && { opacity: 0.4 }
2921
2945
  ],
2922
- children: label !== null ? /* @__PURE__ */ jsx38(Text28, { style: [styles34.label, { fontSize, color: labelColor }], children: label }) : child
2946
+ children: label !== null ? /* @__PURE__ */ jsx40(
2947
+ ScaledText,
2948
+ {
2949
+ style: [styles35.label, { fontSize, color: labelColor }],
2950
+ numberOfLines: 1,
2951
+ adjustsFontSizeToFit: true,
2952
+ minimumFontScale: 0.5,
2953
+ children: label
2954
+ }
2955
+ ) : child
2923
2956
  },
2924
2957
  index
2925
2958
  );
@@ -2930,12 +2963,8 @@ function SegmentedControl({
2930
2963
 
2931
2964
  // src/components/interaction/form/FormInput/FormInput.tsx
2932
2965
  import { useState as useState8 } from "react";
2933
- import {
2934
- StyleSheet as StyleSheet35,
2935
- View as View32,
2936
- TextInput as TextInput2
2937
- } from "react-native";
2938
- import { jsx as jsx39, jsxs as jsxs24 } from "react/jsx-runtime";
2966
+ import { StyleSheet as StyleSheet37, View as View32 } from "react-native";
2967
+ import { jsx as jsx41, jsxs as jsxs24 } from "react/jsx-runtime";
2939
2968
  var INPUT_HEIGHT2 = 44;
2940
2969
  var keyboardTypeMap = {
2941
2970
  text: "default",
@@ -2946,19 +2975,19 @@ var keyboardTypeMap = {
2946
2975
  number: "numeric",
2947
2976
  search: "default"
2948
2977
  };
2949
- var styles35 = StyleSheet35.create({
2978
+ var styles36 = StyleSheet37.create({
2950
2979
  container: {
2951
2980
  gap: spacing.xxs
2952
2981
  },
2953
2982
  /**
2954
- * The wrapper draws the pill border and provides the fixed 44pt touch-target height.
2983
+ * The wrapper draws the rounded border and provides at least 44pt touch-target height.
2955
2984
  * justifyContent: 'center' vertically centers the inner TextInput on both iOS and Android.
2956
2985
  */
2957
2986
  inputWrapper: {
2958
- height: INPUT_HEIGHT2,
2987
+ minHeight: INPUT_HEIGHT2,
2959
2988
  justifyContent: "center",
2960
2989
  borderWidth: 1,
2961
- borderRadius: border.radius.full
2990
+ borderRadius: border.radius.m
2962
2991
  },
2963
2992
  /**
2964
2993
  * No vertical padding: iOS centers text automatically inside the wrapper height.
@@ -2994,21 +3023,21 @@ function FormInput({
2994
3023
  const { colors: colors2 } = useTheme();
2995
3024
  const [focused, setFocused] = useState8(false);
2996
3025
  const borderColor = error ? colors2.colorError : focused ? colors2.colorInteractive : colors2.colorOnBg;
2997
- return /* @__PURE__ */ jsxs24(View32, { style: [styles35.container, style], children: [
2998
- /* @__PURE__ */ jsx39(Label, { label }),
2999
- /* @__PURE__ */ jsx39(
3026
+ return /* @__PURE__ */ jsxs24(View32, { style: [styles36.container, style], children: [
3027
+ /* @__PURE__ */ jsx41(Label, { label }),
3028
+ /* @__PURE__ */ jsx41(
3000
3029
  View32,
3001
3030
  {
3002
3031
  style: [
3003
- styles35.inputWrapper,
3032
+ styles36.inputWrapper,
3004
3033
  {
3005
3034
  borderColor,
3006
3035
  backgroundColor: colors2.colorBg
3007
3036
  },
3008
3037
  disabled && { opacity: 0.4 }
3009
3038
  ],
3010
- children: /* @__PURE__ */ jsx39(
3011
- TextInput2,
3039
+ children: /* @__PURE__ */ jsx41(
3040
+ ScaledTextInput,
3012
3041
  {
3013
3042
  accessibilityLabel: typeof label === "string" ? label : name,
3014
3043
  accessibilityState: { disabled },
@@ -3032,27 +3061,23 @@ function FormInput({
3032
3061
  onBlur?.();
3033
3062
  },
3034
3063
  style: [
3035
- styles35.input,
3064
+ styles36.input,
3036
3065
  { color: colors2.colorOnBg }
3037
3066
  ]
3038
3067
  }
3039
3068
  )
3040
3069
  }
3041
3070
  ),
3042
- /* @__PURE__ */ jsx39(Message, { type: "error", message: error }),
3043
- /* @__PURE__ */ jsx39(Message, { type: "hint", message: hint })
3071
+ /* @__PURE__ */ jsx41(Message, { type: "error", message: error }),
3072
+ /* @__PURE__ */ jsx41(Message, { type: "hint", message: hint })
3044
3073
  ] });
3045
3074
  }
3046
3075
 
3047
3076
  // src/components/interaction/form/Textarea/Textarea.tsx
3048
3077
  import { useState as useState9 } from "react";
3049
- import {
3050
- StyleSheet as StyleSheet36,
3051
- View as View33,
3052
- TextInput as TextInput3
3053
- } from "react-native";
3054
- import { jsx as jsx40, jsxs as jsxs25 } from "react/jsx-runtime";
3055
- var styles36 = StyleSheet36.create({
3078
+ import { StyleSheet as StyleSheet38, View as View33 } from "react-native";
3079
+ import { jsx as jsx42, jsxs as jsxs25 } from "react/jsx-runtime";
3080
+ var styles37 = StyleSheet38.create({
3056
3081
  container: {
3057
3082
  gap: spacing.xxs
3058
3083
  },
@@ -3063,7 +3088,7 @@ var styles36 = StyleSheet36.create({
3063
3088
  paddingHorizontal: spacing.s,
3064
3089
  paddingVertical: spacing.xs,
3065
3090
  borderWidth: 1,
3066
- borderRadius: border.radius.xs,
3091
+ borderRadius: border.radius.m,
3067
3092
  minHeight: 100,
3068
3093
  textAlignVertical: "top"
3069
3094
  }
@@ -3086,10 +3111,10 @@ function Textarea({
3086
3111
  const { colors: colors2 } = useTheme();
3087
3112
  const [focused, setFocused] = useState9(false);
3088
3113
  const borderColor = error ? colors2.colorError : focused ? colors2.colorInteractive : colors2.colorOnBg;
3089
- return /* @__PURE__ */ jsxs25(View33, { style: [styles36.container, style], children: [
3090
- /* @__PURE__ */ jsx40(Label, { label }),
3091
- /* @__PURE__ */ jsx40(
3092
- TextInput3,
3114
+ return /* @__PURE__ */ jsxs25(View33, { style: [styles37.container, style], children: [
3115
+ /* @__PURE__ */ jsx42(Label, { label }),
3116
+ /* @__PURE__ */ jsx42(
3117
+ ScaledTextInput,
3093
3118
  {
3094
3119
  accessibilityLabel: typeof label === "string" ? label : name,
3095
3120
  accessibilityState: { disabled },
@@ -3111,7 +3136,7 @@ function Textarea({
3111
3136
  onBlur?.();
3112
3137
  },
3113
3138
  style: [
3114
- styles36.textarea,
3139
+ styles37.textarea,
3115
3140
  {
3116
3141
  borderColor,
3117
3142
  color: colors2.colorOnBg,
@@ -3121,24 +3146,16 @@ function Textarea({
3121
3146
  ]
3122
3147
  }
3123
3148
  ),
3124
- /* @__PURE__ */ jsx40(Message, { type: "error", message: error }),
3125
- /* @__PURE__ */ jsx40(Message, { type: "hint", message: hint })
3149
+ /* @__PURE__ */ jsx42(Message, { type: "error", message: error }),
3150
+ /* @__PURE__ */ jsx42(Message, { type: "hint", message: hint })
3126
3151
  ] });
3127
3152
  }
3128
3153
 
3129
3154
  // src/components/interaction/form/Select/Select.tsx
3130
3155
  import { useState as useState10 } from "react";
3131
- import {
3132
- StyleSheet as StyleSheet37,
3133
- View as View34,
3134
- Text as Text29,
3135
- Pressable as Pressable20,
3136
- Modal,
3137
- FlatList,
3138
- SafeAreaView
3139
- } from "react-native";
3140
- import { jsx as jsx41, jsxs as jsxs26 } from "react/jsx-runtime";
3141
- var styles37 = StyleSheet37.create({
3156
+ import { StyleSheet as StyleSheet39, View as View34, Pressable as Pressable20, Modal, FlatList, SafeAreaView } from "react-native";
3157
+ import { jsx as jsx43, jsxs as jsxs26 } from "react/jsx-runtime";
3158
+ var styles38 = StyleSheet39.create({
3142
3159
  container: {
3143
3160
  gap: spacing.xxs
3144
3161
  },
@@ -3149,7 +3166,7 @@ var styles37 = StyleSheet37.create({
3149
3166
  paddingHorizontal: spacing.s,
3150
3167
  paddingVertical: spacing.xs,
3151
3168
  borderWidth: 1,
3152
- borderRadius: border.radius.full,
3169
+ borderRadius: border.radius.m,
3153
3170
  minHeight: 44
3154
3171
  },
3155
3172
  triggerText: {
@@ -3159,8 +3176,6 @@ var styles37 = StyleSheet37.create({
3159
3176
  flex: 1
3160
3177
  },
3161
3178
  chevron: {
3162
- fontFamily: font.family.body,
3163
- fontSize: font.size.body,
3164
3179
  marginStart: spacing.xs
3165
3180
  },
3166
3181
  overlay: {
@@ -3226,8 +3241,8 @@ function Select({
3226
3241
  onChange?.(optionValue);
3227
3242
  setOpen(false);
3228
3243
  };
3229
- return /* @__PURE__ */ jsxs26(View34, { style: [styles37.container, style], children: [
3230
- /* @__PURE__ */ jsx41(Label, { label }),
3244
+ return /* @__PURE__ */ jsxs26(View34, { style: [styles38.container, style], children: [
3245
+ /* @__PURE__ */ jsx43(Label, { label }),
3231
3246
  /* @__PURE__ */ jsxs26(
3232
3247
  Pressable20,
3233
3248
  {
@@ -3238,7 +3253,7 @@ function Select({
3238
3253
  disabled,
3239
3254
  onPress: () => setOpen(true),
3240
3255
  style: [
3241
- styles37.trigger,
3256
+ styles38.trigger,
3242
3257
  {
3243
3258
  borderColor,
3244
3259
  backgroundColor: colors2.colorBg
@@ -3246,11 +3261,11 @@ function Select({
3246
3261
  disabled && { opacity: 0.4 }
3247
3262
  ],
3248
3263
  children: [
3249
- /* @__PURE__ */ jsx41(
3250
- Text29,
3264
+ /* @__PURE__ */ jsx43(
3265
+ ScaledText,
3251
3266
  {
3252
3267
  style: [
3253
- styles37.triggerText,
3268
+ styles38.triggerText,
3254
3269
  {
3255
3270
  color: isPlaceholder ? colors2.colorOnBgSubtle : colors2.colorOnBg
3256
3271
  }
@@ -3258,52 +3273,59 @@ function Select({
3258
3273
  children: displayText
3259
3274
  }
3260
3275
  ),
3261
- /* @__PURE__ */ jsx41(Text29, { style: [styles37.chevron, { color: colors2.colorOnBgSubtle }], "aria-hidden": true, children: "\u25BE" })
3276
+ /* @__PURE__ */ jsx43(
3277
+ Chevron,
3278
+ {
3279
+ testID: "bds-select-chevron",
3280
+ color: colors2.colorOnBgSubtle,
3281
+ style: styles38.chevron
3282
+ }
3283
+ )
3262
3284
  ]
3263
3285
  }
3264
3286
  ),
3265
- /* @__PURE__ */ jsx41(
3287
+ /* @__PURE__ */ jsx43(
3266
3288
  Modal,
3267
3289
  {
3268
3290
  visible: open,
3269
3291
  transparent: true,
3270
3292
  animationType: "slide",
3271
3293
  onRequestClose: () => setOpen(false),
3272
- children: /* @__PURE__ */ jsx41(
3294
+ children: /* @__PURE__ */ jsx43(
3273
3295
  Pressable20,
3274
3296
  {
3275
- style: styles37.overlay,
3297
+ style: styles38.overlay,
3276
3298
  onPress: () => setOpen(false),
3277
3299
  accessibilityRole: "button",
3278
3300
  accessibilityLabel: "Close options",
3279
- children: /* @__PURE__ */ jsx41(
3301
+ children: /* @__PURE__ */ jsx43(
3280
3302
  Pressable20,
3281
3303
  {
3282
- style: [styles37.sheet, { backgroundColor: colors2.colorBg }],
3304
+ style: [styles38.sheet, { backgroundColor: colors2.colorBg }],
3283
3305
  onPress: () => {
3284
3306
  },
3285
3307
  children: /* @__PURE__ */ jsxs26(SafeAreaView, { children: [
3286
- /* @__PURE__ */ jsxs26(View34, { style: styles37.sheetHeader, children: [
3287
- /* @__PURE__ */ jsx41(Text29, { style: [styles37.sheetTitle, { color: colors2.colorOnBg }], children: typeof label === "string" ? label : "Select" }),
3288
- /* @__PURE__ */ jsx41(
3308
+ /* @__PURE__ */ jsxs26(View34, { style: styles38.sheetHeader, children: [
3309
+ /* @__PURE__ */ jsx43(ScaledText, { style: [styles38.sheetTitle, { color: colors2.colorOnBg }], children: typeof label === "string" ? label : "Select" }),
3310
+ /* @__PURE__ */ jsx43(
3289
3311
  Pressable20,
3290
3312
  {
3291
3313
  accessibilityRole: "button",
3292
3314
  accessibilityLabel: "Close",
3293
3315
  onPress: () => setOpen(false),
3294
3316
  hitSlop: 8,
3295
- children: /* @__PURE__ */ jsx41(Text29, { style: [styles37.closeText, { color: colors2.colorInteractive }], children: "Done" })
3317
+ children: /* @__PURE__ */ jsx43(ScaledText, { style: [styles38.closeText, { color: colors2.colorInteractive }], children: "Done" })
3296
3318
  }
3297
3319
  )
3298
3320
  ] }),
3299
- /* @__PURE__ */ jsx41(
3321
+ /* @__PURE__ */ jsx43(
3300
3322
  FlatList,
3301
3323
  {
3302
3324
  data: options,
3303
3325
  keyExtractor: (item) => item.value,
3304
3326
  renderItem: ({ item }) => {
3305
3327
  const isSelected = item.value === value;
3306
- return /* @__PURE__ */ jsx41(
3328
+ return /* @__PURE__ */ jsx43(
3307
3329
  Pressable20,
3308
3330
  {
3309
3331
  accessibilityRole: "button",
@@ -3315,16 +3337,16 @@ function Select({
3315
3337
  disabled: item.disabled,
3316
3338
  onPress: () => handleSelect(item.value),
3317
3339
  style: ({ pressed }) => [
3318
- styles37.optionItem,
3340
+ styles38.optionItem,
3319
3341
  isSelected && { backgroundColor: colors2.colorBgSubtle },
3320
3342
  pressed && { opacity: 0.7 },
3321
3343
  item.disabled && { opacity: 0.4 }
3322
3344
  ],
3323
- children: /* @__PURE__ */ jsx41(
3324
- Text29,
3345
+ children: /* @__PURE__ */ jsx43(
3346
+ ScaledText,
3325
3347
  {
3326
3348
  style: [
3327
- styles37.optionText,
3349
+ styles38.optionText,
3328
3350
  {
3329
3351
  color: isSelected ? colors2.colorInteractive : colors2.colorOnBg,
3330
3352
  fontWeight: isSelected ? font.weight.semibold : font.weight.body
@@ -3345,22 +3367,18 @@ function Select({
3345
3367
  )
3346
3368
  }
3347
3369
  ),
3348
- /* @__PURE__ */ jsx41(Message, { type: "error", message: error }),
3349
- /* @__PURE__ */ jsx41(Message, { type: "hint", message: hint })
3370
+ /* @__PURE__ */ jsx43(Message, { type: "error", message: error }),
3371
+ /* @__PURE__ */ jsx43(Message, { type: "hint", message: hint })
3350
3372
  ] });
3351
3373
  }
3352
3374
 
3353
3375
  // src/components/interaction/form/Slider/Slider.tsx
3354
3376
  import { useState as useState11 } from "react";
3355
- import {
3356
- StyleSheet as StyleSheet38,
3357
- View as View35,
3358
- Text as Text30
3359
- } from "react-native";
3360
- import { jsx as jsx42, jsxs as jsxs27 } from "react/jsx-runtime";
3377
+ import { StyleSheet as StyleSheet40, View as View35 } from "react-native";
3378
+ import { jsx as jsx44, jsxs as jsxs27 } from "react/jsx-runtime";
3361
3379
  var TRACK_HEIGHT = 6;
3362
3380
  var THUMB_SIZE = 24;
3363
- var styles38 = StyleSheet38.create({
3381
+ var styles39 = StyleSheet40.create({
3364
3382
  container: {
3365
3383
  gap: spacing.xxs
3366
3384
  },
@@ -3457,31 +3475,31 @@ function Slider({
3457
3475
  return /* @__PURE__ */ jsxs27(
3458
3476
  View35,
3459
3477
  {
3460
- style: [styles38.container, style],
3478
+ style: [styles39.container, style],
3461
3479
  accessibilityRole: "adjustable",
3462
3480
  accessibilityLabel: label,
3463
3481
  accessibilityValue: { min, max, now: currentValue, text: String(currentValue) },
3464
3482
  accessibilityState: { disabled },
3465
3483
  children: [
3466
- /* @__PURE__ */ jsxs27(View35, { style: styles38.labelRow, children: [
3467
- /* @__PURE__ */ jsx42(Label, { label }),
3468
- showValue && /* @__PURE__ */ jsx42(Text30, { style: [styles38.valueText, { color: colors2.colorOnBg }], children: currentValue })
3484
+ /* @__PURE__ */ jsxs27(View35, { style: styles39.labelRow, children: [
3485
+ /* @__PURE__ */ jsx44(Label, { label }),
3486
+ showValue && /* @__PURE__ */ jsx44(ScaledText, { style: [styles39.valueText, { color: colors2.colorOnBg }], children: currentValue })
3469
3487
  ] }),
3470
3488
  /* @__PURE__ */ jsxs27(
3471
3489
  View35,
3472
3490
  {
3473
- style: [styles38.trackContainer, disabled && { opacity: 0.4 }],
3491
+ style: [styles39.trackContainer, disabled && { opacity: 0.4 }],
3474
3492
  onLayout: handleTrackLayout,
3475
3493
  onStartShouldSetResponder: handleStartShouldSetResponder,
3476
3494
  onMoveShouldSetResponder: handleStartShouldSetResponder,
3477
3495
  onResponderGrant: handleResponderGrant,
3478
3496
  onResponderMove: handleResponderMove,
3479
3497
  children: [
3480
- /* @__PURE__ */ jsx42(View35, { style: [styles38.track, { backgroundColor: colors2.colorBgSubtle }], children: /* @__PURE__ */ jsx42(
3498
+ /* @__PURE__ */ jsx44(View35, { style: [styles39.track, { backgroundColor: colors2.colorBgSubtle }], children: /* @__PURE__ */ jsx44(
3481
3499
  View35,
3482
3500
  {
3483
3501
  style: [
3484
- styles38.fill,
3502
+ styles39.fill,
3485
3503
  {
3486
3504
  width: `${fillPct}%`,
3487
3505
  backgroundColor: error ? colors2.colorError : colors2.colorInteractive
@@ -3489,11 +3507,11 @@ function Slider({
3489
3507
  ]
3490
3508
  }
3491
3509
  ) }),
3492
- /* @__PURE__ */ jsx42(
3510
+ /* @__PURE__ */ jsx44(
3493
3511
  View35,
3494
3512
  {
3495
3513
  style: [
3496
- styles38.thumb,
3514
+ styles39.thumb,
3497
3515
  {
3498
3516
  start: `${fillPct}%`,
3499
3517
  marginStart: -(THUMB_SIZE / 2),
@@ -3506,8 +3524,8 @@ function Slider({
3506
3524
  ]
3507
3525
  }
3508
3526
  ),
3509
- /* @__PURE__ */ jsx42(Message, { type: "error", message: error }),
3510
- /* @__PURE__ */ jsx42(Message, { type: "hint", message: hint })
3527
+ /* @__PURE__ */ jsx44(Message, { type: "error", message: error }),
3528
+ /* @__PURE__ */ jsx44(Message, { type: "hint", message: hint })
3511
3529
  ]
3512
3530
  }
3513
3531
  );
@@ -3515,16 +3533,10 @@ function Slider({
3515
3533
 
3516
3534
  // src/components/interaction/form/NumberInput/NumberInput.tsx
3517
3535
  import { useState as useState12 } from "react";
3518
- import {
3519
- StyleSheet as StyleSheet39,
3520
- View as View36,
3521
- TextInput as TextInput4,
3522
- Text as Text31,
3523
- Pressable as Pressable21
3524
- } from "react-native";
3525
- import { jsx as jsx43, jsxs as jsxs28 } from "react/jsx-runtime";
3536
+ import { StyleSheet as StyleSheet41, View as View36, Pressable as Pressable21 } from "react-native";
3537
+ import { jsx as jsx45, jsxs as jsxs28 } from "react/jsx-runtime";
3526
3538
  var STEPPER_SIZE = 44;
3527
- var styles39 = StyleSheet39.create({
3539
+ var styles40 = StyleSheet41.create({
3528
3540
  container: {
3529
3541
  gap: spacing.xxs
3530
3542
  },
@@ -3540,13 +3552,13 @@ var styles39 = StyleSheet39.create({
3540
3552
  borderWidth: 1
3541
3553
  },
3542
3554
  stepperStart: {
3543
- borderTopStartRadius: border.radius.full,
3544
- borderBottomStartRadius: border.radius.full,
3555
+ borderTopStartRadius: border.radius.m,
3556
+ borderBottomStartRadius: border.radius.m,
3545
3557
  borderEndWidth: 0
3546
3558
  },
3547
3559
  stepperEnd: {
3548
- borderTopEndRadius: border.radius.full,
3549
- borderBottomEndRadius: border.radius.full,
3560
+ borderTopEndRadius: border.radius.m,
3561
+ borderBottomEndRadius: border.radius.m,
3550
3562
  borderStartWidth: 0
3551
3563
  },
3552
3564
  stepperText: {
@@ -3613,10 +3625,10 @@ function NumberInput({
3613
3625
  const canDecrease = min === void 0 || currentValue > min;
3614
3626
  const canIncrease = max === void 0 || currentValue < max;
3615
3627
  const borderColor = error ? colors2.colorError : colors2.colorOnBg;
3616
- return /* @__PURE__ */ jsxs28(View36, { style: [styles39.container, style], children: [
3617
- /* @__PURE__ */ jsx43(Label, { label }),
3618
- /* @__PURE__ */ jsxs28(View36, { style: [styles39.inputRow, disabled && { opacity: 0.4 }], children: [
3619
- /* @__PURE__ */ jsx43(
3628
+ return /* @__PURE__ */ jsxs28(View36, { style: [styles40.container, style], children: [
3629
+ /* @__PURE__ */ jsx45(Label, { label }),
3630
+ /* @__PURE__ */ jsxs28(View36, { style: [styles40.inputRow, disabled && { opacity: 0.4 }], children: [
3631
+ /* @__PURE__ */ jsx45(
3620
3632
  Pressable21,
3621
3633
  {
3622
3634
  accessibilityRole: "button",
@@ -3625,8 +3637,8 @@ function NumberInput({
3625
3637
  disabled: disabled || !canDecrease,
3626
3638
  onPress: () => update(currentValue - step),
3627
3639
  style: ({ pressed }) => [
3628
- styles39.stepper,
3629
- styles39.stepperStart,
3640
+ styles40.stepper,
3641
+ styles40.stepperStart,
3630
3642
  {
3631
3643
  borderColor,
3632
3644
  backgroundColor: colors2.colorBgSubtle
@@ -3634,28 +3646,28 @@ function NumberInput({
3634
3646
  pressed && { opacity: 0.7 },
3635
3647
  (disabled || !canDecrease) && { opacity: 0.4 }
3636
3648
  ],
3637
- children: /* @__PURE__ */ jsx43(
3638
- Text31,
3649
+ children: /* @__PURE__ */ jsx45(
3650
+ ScaledText,
3639
3651
  {
3640
- style: [styles39.stepperText, { color: colors2.colorOnBg }],
3652
+ style: [styles40.stepperText, { color: colors2.colorOnBg }],
3641
3653
  "aria-hidden": true,
3642
3654
  children: "\u2212"
3643
3655
  }
3644
3656
  )
3645
3657
  }
3646
3658
  ),
3647
- /* @__PURE__ */ jsx43(
3659
+ /* @__PURE__ */ jsx45(
3648
3660
  View36,
3649
3661
  {
3650
3662
  style: [
3651
- styles39.inputWrapper,
3663
+ styles40.inputWrapper,
3652
3664
  {
3653
3665
  borderColor,
3654
3666
  backgroundColor: colors2.colorBg
3655
3667
  }
3656
3668
  ],
3657
- children: /* @__PURE__ */ jsx43(
3658
- TextInput4,
3669
+ children: /* @__PURE__ */ jsx45(
3670
+ ScaledTextInput,
3659
3671
  {
3660
3672
  accessibilityLabel: label,
3661
3673
  accessibilityState: { disabled },
@@ -3674,14 +3686,14 @@ function NumberInput({
3674
3686
  update(safe);
3675
3687
  },
3676
3688
  style: [
3677
- styles39.input,
3689
+ styles40.input,
3678
3690
  { color: colors2.colorOnBg }
3679
3691
  ]
3680
3692
  }
3681
3693
  )
3682
3694
  }
3683
3695
  ),
3684
- /* @__PURE__ */ jsx43(
3696
+ /* @__PURE__ */ jsx45(
3685
3697
  Pressable21,
3686
3698
  {
3687
3699
  accessibilityRole: "button",
@@ -3690,8 +3702,8 @@ function NumberInput({
3690
3702
  disabled: disabled || !canIncrease,
3691
3703
  onPress: () => update(currentValue + step),
3692
3704
  style: ({ pressed }) => [
3693
- styles39.stepper,
3694
- styles39.stepperEnd,
3705
+ styles40.stepper,
3706
+ styles40.stepperEnd,
3695
3707
  {
3696
3708
  borderColor,
3697
3709
  backgroundColor: colors2.colorBgSubtle
@@ -3699,10 +3711,10 @@ function NumberInput({
3699
3711
  pressed && { opacity: 0.7 },
3700
3712
  (disabled || !canIncrease) && { opacity: 0.4 }
3701
3713
  ],
3702
- children: /* @__PURE__ */ jsx43(
3703
- Text31,
3714
+ children: /* @__PURE__ */ jsx45(
3715
+ ScaledText,
3704
3716
  {
3705
- style: [styles39.stepperText, { color: colors2.colorOnBg }],
3717
+ style: [styles40.stepperText, { color: colors2.colorOnBg }],
3706
3718
  "aria-hidden": true,
3707
3719
  children: "+"
3708
3720
  }
@@ -3710,21 +3722,15 @@ function NumberInput({
3710
3722
  }
3711
3723
  )
3712
3724
  ] }),
3713
- /* @__PURE__ */ jsx43(Message, { type: "error", message: error }),
3714
- /* @__PURE__ */ jsx43(Message, { type: "hint", message: hint })
3725
+ /* @__PURE__ */ jsx45(Message, { type: "error", message: error }),
3726
+ /* @__PURE__ */ jsx45(Message, { type: "hint", message: hint })
3715
3727
  ] });
3716
3728
  }
3717
3729
 
3718
3730
  // src/components/interaction/Dialog/Dialog.tsx
3719
- import {
3720
- Modal as Modal2,
3721
- View as View37,
3722
- Pressable as Pressable22,
3723
- Text as Text32,
3724
- StyleSheet as StyleSheet40
3725
- } from "react-native";
3726
- import { jsx as jsx44, jsxs as jsxs29 } from "react/jsx-runtime";
3727
- var styles40 = StyleSheet40.create({
3731
+ import { Modal as Modal2, View as View37, Pressable as Pressable22, StyleSheet as StyleSheet42 } from "react-native";
3732
+ import { jsx as jsx46, jsxs as jsxs29 } from "react/jsx-runtime";
3733
+ var styles41 = StyleSheet42.create({
3728
3734
  overlay: {
3729
3735
  flex: 1,
3730
3736
  justifyContent: "center",
@@ -3780,19 +3786,19 @@ function Dialog({
3780
3786
  style
3781
3787
  }) {
3782
3788
  const { colors: colors2 } = useTheme();
3783
- return /* @__PURE__ */ jsx44(
3789
+ return /* @__PURE__ */ jsx46(
3784
3790
  Modal2,
3785
3791
  {
3786
3792
  visible: isOpen,
3787
3793
  transparent: true,
3788
3794
  animationType: "fade",
3789
3795
  onRequestClose: onClose,
3790
- children: /* @__PURE__ */ jsxs29(View37, { style: styles40.overlay, children: [
3791
- /* @__PURE__ */ jsx44(
3796
+ children: /* @__PURE__ */ jsxs29(View37, { style: styles41.overlay, children: [
3797
+ /* @__PURE__ */ jsx46(
3792
3798
  Pressable22,
3793
3799
  {
3794
3800
  testID: "bds-dialog-backdrop",
3795
- style: StyleSheet40.absoluteFill,
3801
+ style: StyleSheet42.absoluteFill,
3796
3802
  onPress: onClose,
3797
3803
  accessible: false,
3798
3804
  importantForAccessibility: "no"
@@ -3801,29 +3807,29 @@ function Dialog({
3801
3807
  /* @__PURE__ */ jsxs29(
3802
3808
  View37,
3803
3809
  {
3804
- style: [styles40.panel, { backgroundColor: colors2.colorGreySubtle }, style],
3810
+ style: [styles41.panel, { backgroundColor: colors2.colorGreySubtle }, style],
3805
3811
  accessibilityViewIsModal: true,
3806
3812
  onAccessibilityEscape: onClose,
3807
3813
  children: [
3808
- /* @__PURE__ */ jsx44(
3814
+ /* @__PURE__ */ jsx46(
3809
3815
  Pressable22,
3810
3816
  {
3811
- style: styles40.closeButton,
3817
+ style: styles41.closeButton,
3812
3818
  onPress: onClose,
3813
3819
  accessibilityRole: "button",
3814
3820
  accessibilityLabel: "Close dialog",
3815
3821
  hitSlop: 8,
3816
- children: /* @__PURE__ */ jsx44(
3817
- Text32,
3822
+ children: /* @__PURE__ */ jsx46(
3823
+ ScaledText,
3818
3824
  {
3819
- style: [styles40.closeText, { color: colors2.colorOnBgSubtle }],
3825
+ style: [styles41.closeText, { color: colors2.colorOnBgSubtle }],
3820
3826
  "aria-hidden": true,
3821
3827
  children: "\u2715"
3822
3828
  }
3823
3829
  )
3824
3830
  }
3825
3831
  ),
3826
- !!title && /* @__PURE__ */ jsx44(View37, { style: styles40.header, children: /* @__PURE__ */ jsx44(Text32, { style: [styles40.title, { color: colors2.colorOnGreySubtle }], children: title }) }),
3832
+ !!title && /* @__PURE__ */ jsx46(View37, { style: styles41.header, children: /* @__PURE__ */ jsx46(ScaledText, { style: [styles41.title, { color: colors2.colorOnGreySubtle }], children: title }) }),
3827
3833
  children
3828
3834
  ]
3829
3835
  }
@@ -3835,17 +3841,9 @@ function Dialog({
3835
3841
 
3836
3842
  // src/components/interaction/SideSheet/SideSheet.tsx
3837
3843
  import { useEffect as useEffect2, useRef as useRef4 } from "react";
3838
- import {
3839
- Modal as Modal3,
3840
- View as View38,
3841
- Pressable as Pressable23,
3842
- Text as Text33,
3843
- Animated as Animated3,
3844
- StyleSheet as StyleSheet41,
3845
- Dimensions as Dimensions2
3846
- } from "react-native";
3847
- import { jsx as jsx45, jsxs as jsxs30 } from "react/jsx-runtime";
3848
- var styles41 = StyleSheet41.create({
3844
+ import { Modal as Modal3, View as View38, Pressable as Pressable23, Animated as Animated4, StyleSheet as StyleSheet43, Dimensions as Dimensions2 } from "react-native";
3845
+ import { jsx as jsx47, jsxs as jsxs30 } from "react/jsx-runtime";
3846
+ var styles42 = StyleSheet43.create({
3849
3847
  overlay: {
3850
3848
  flex: 1,
3851
3849
  justifyContent: "flex-end"
@@ -3903,30 +3901,30 @@ function SideSheet({
3903
3901
  }) {
3904
3902
  const { colors: colors2 } = useTheme();
3905
3903
  const screenHeight = Dimensions2.get("window").height;
3906
- const slideAnim = useRef4(new Animated3.Value(screenHeight)).current;
3907
- const backdropAnim = useRef4(new Animated3.Value(0)).current;
3904
+ const slideAnim = useRef4(new Animated4.Value(screenHeight)).current;
3905
+ const backdropAnim = useRef4(new Animated4.Value(0)).current;
3908
3906
  useEffect2(() => {
3909
3907
  if (isOpen) {
3910
- Animated3.parallel([
3911
- Animated3.timing(slideAnim, {
3908
+ Animated4.parallel([
3909
+ Animated4.timing(slideAnim, {
3912
3910
  toValue: 0,
3913
3911
  duration: 250,
3914
3912
  useNativeDriver: true
3915
3913
  }),
3916
- Animated3.timing(backdropAnim, {
3914
+ Animated4.timing(backdropAnim, {
3917
3915
  toValue: 1,
3918
3916
  duration: 250,
3919
3917
  useNativeDriver: true
3920
3918
  })
3921
3919
  ]).start();
3922
3920
  } else {
3923
- Animated3.parallel([
3924
- Animated3.timing(slideAnim, {
3921
+ Animated4.parallel([
3922
+ Animated4.timing(slideAnim, {
3925
3923
  toValue: screenHeight,
3926
3924
  duration: 200,
3927
3925
  useNativeDriver: true
3928
3926
  }),
3929
- Animated3.timing(backdropAnim, {
3927
+ Animated4.timing(backdropAnim, {
3930
3928
  toValue: 0,
3931
3929
  duration: 200,
3932
3930
  useNativeDriver: true
@@ -3934,25 +3932,25 @@ function SideSheet({
3934
3932
  ]).start();
3935
3933
  }
3936
3934
  }, [isOpen, slideAnim, backdropAnim, screenHeight]);
3937
- return /* @__PURE__ */ jsx45(
3935
+ return /* @__PURE__ */ jsx47(
3938
3936
  Modal3,
3939
3937
  {
3940
3938
  visible: isOpen,
3941
3939
  transparent: true,
3942
3940
  animationType: "none",
3943
3941
  onRequestClose: onClose,
3944
- children: /* @__PURE__ */ jsxs30(View38, { style: styles41.overlay, children: [
3945
- /* @__PURE__ */ jsx45(
3946
- Animated3.View,
3942
+ children: /* @__PURE__ */ jsxs30(View38, { style: styles42.overlay, children: [
3943
+ /* @__PURE__ */ jsx47(
3944
+ Animated4.View,
3947
3945
  {
3948
3946
  style: [
3949
- StyleSheet41.absoluteFill,
3947
+ StyleSheet43.absoluteFill,
3950
3948
  { backgroundColor: "rgba(0, 0, 0, 0.5)", opacity: backdropAnim }
3951
3949
  ],
3952
- children: /* @__PURE__ */ jsx45(
3950
+ children: /* @__PURE__ */ jsx47(
3953
3951
  Pressable23,
3954
3952
  {
3955
- style: StyleSheet41.absoluteFill,
3953
+ style: StyleSheet43.absoluteFill,
3956
3954
  onPress: onClose,
3957
3955
  testID: "bds-sidesheet-backdrop",
3958
3956
  accessible: false,
@@ -3962,10 +3960,10 @@ function SideSheet({
3962
3960
  }
3963
3961
  ),
3964
3962
  /* @__PURE__ */ jsxs30(
3965
- Animated3.View,
3963
+ Animated4.View,
3966
3964
  {
3967
3965
  style: [
3968
- styles41.panel,
3966
+ styles42.panel,
3969
3967
  {
3970
3968
  backgroundColor: colors2.colorBg,
3971
3969
  transform: [{ translateY: slideAnim }]
@@ -3978,21 +3976,21 @@ function SideSheet({
3978
3976
  /* @__PURE__ */ jsxs30(
3979
3977
  View38,
3980
3978
  {
3981
- style: [styles41.header, { borderBottomColor: colors2.colorBgSubtle }],
3979
+ style: [styles42.header, { borderBottomColor: colors2.colorBgSubtle }],
3982
3980
  children: [
3983
- !!title && /* @__PURE__ */ jsx45(Text33, { style: [styles41.title, { color: colors2.colorOnBg }], children: title }),
3984
- /* @__PURE__ */ jsx45(
3981
+ !!title && /* @__PURE__ */ jsx47(ScaledText, { style: [styles42.title, { color: colors2.colorOnBg }], children: title }),
3982
+ /* @__PURE__ */ jsx47(
3985
3983
  Pressable23,
3986
3984
  {
3987
- style: styles41.closeButton,
3985
+ style: styles42.closeButton,
3988
3986
  onPress: onClose,
3989
3987
  accessibilityRole: "button",
3990
3988
  accessibilityLabel: "Close side sheet",
3991
3989
  hitSlop: 8,
3992
- children: /* @__PURE__ */ jsx45(
3993
- Text33,
3990
+ children: /* @__PURE__ */ jsx47(
3991
+ ScaledText,
3994
3992
  {
3995
- style: [styles41.closeText, { color: colors2.colorOnBgSubtle }],
3993
+ style: [styles42.closeText, { color: colors2.colorOnBgSubtle }],
3996
3994
  "aria-hidden": true,
3997
3995
  children: "\u2715"
3998
3996
  }
@@ -4002,7 +4000,7 @@ function SideSheet({
4002
4000
  ]
4003
4001
  }
4004
4002
  ),
4005
- /* @__PURE__ */ jsx45(View38, { style: styles41.body, testID: "bds-sidesheet-body", children })
4003
+ /* @__PURE__ */ jsx47(View38, { style: styles42.body, testID: "bds-sidesheet-body", children })
4006
4004
  ]
4007
4005
  }
4008
4006
  )
@@ -4021,16 +4019,10 @@ import {
4021
4019
  createContext as createContext2,
4022
4020
  useContext as useContext2
4023
4021
  } from "react";
4024
- import {
4025
- View as View39,
4026
- Text as Text34,
4027
- Pressable as Pressable24,
4028
- Animated as Animated4,
4029
- StyleSheet as StyleSheet42
4030
- } from "react-native";
4031
- import { jsx as jsx46, jsxs as jsxs31 } from "react/jsx-runtime";
4022
+ import { View as View39, Pressable as Pressable24, Animated as Animated5, StyleSheet as StyleSheet44 } from "react-native";
4023
+ import { jsx as jsx48, jsxs as jsxs31 } from "react/jsx-runtime";
4032
4024
  var ToastContext = createContext2(void 0);
4033
- var styles42 = StyleSheet42.create({
4025
+ var styles43 = StyleSheet44.create({
4034
4026
  container: {
4035
4027
  position: "absolute",
4036
4028
  top: 0,
@@ -4075,8 +4067,8 @@ function ToastItem({
4075
4067
  onRemove
4076
4068
  }) {
4077
4069
  const { colors: colors2 } = useTheme();
4078
- const slideAnim = useRef5(new Animated4.Value(-100)).current;
4079
- const opacityAnim = useRef5(new Animated4.Value(0)).current;
4070
+ const slideAnim = useRef5(new Animated5.Value(-100)).current;
4071
+ const opacityAnim = useRef5(new Animated5.Value(0)).current;
4080
4072
  const variantColors = useMemo3(
4081
4073
  () => ({
4082
4074
  success: { bg: colors2.colorSuccess, text: colors2.colorOnSuccess },
@@ -4086,13 +4078,13 @@ function ToastItem({
4086
4078
  [colors2]
4087
4079
  );
4088
4080
  useEffect3(() => {
4089
- Animated4.parallel([
4090
- Animated4.timing(slideAnim, {
4081
+ Animated5.parallel([
4082
+ Animated5.timing(slideAnim, {
4091
4083
  toValue: 0,
4092
4084
  duration: 200,
4093
4085
  useNativeDriver: true
4094
4086
  }),
4095
- Animated4.timing(opacityAnim, {
4087
+ Animated5.timing(opacityAnim, {
4096
4088
  toValue: 1,
4097
4089
  duration: 200,
4098
4090
  useNativeDriver: true
@@ -4105,10 +4097,10 @@ function ToastItem({
4105
4097
  }, [onRemove]);
4106
4098
  const { bg, text } = variantColors[toast.variant];
4107
4099
  return /* @__PURE__ */ jsxs31(
4108
- Animated4.View,
4100
+ Animated5.View,
4109
4101
  {
4110
4102
  style: [
4111
- styles42.toast,
4103
+ styles43.toast,
4112
4104
  {
4113
4105
  backgroundColor: bg,
4114
4106
  transform: [{ translateY: slideAnim }],
@@ -4118,16 +4110,16 @@ function ToastItem({
4118
4110
  accessibilityRole: "alert",
4119
4111
  accessibilityLiveRegion: "polite",
4120
4112
  children: [
4121
- /* @__PURE__ */ jsx46(Text34, { style: [styles42.message, { color: text }], children: toast.message }),
4122
- /* @__PURE__ */ jsx46(
4113
+ /* @__PURE__ */ jsx48(ScaledText, { style: [styles43.message, { color: text }], children: toast.message }),
4114
+ /* @__PURE__ */ jsx48(
4123
4115
  Pressable24,
4124
4116
  {
4125
- style: styles42.closeButton,
4117
+ style: styles43.closeButton,
4126
4118
  onPress: onRemove,
4127
4119
  accessibilityRole: "button",
4128
4120
  accessibilityLabel: "Dismiss",
4129
4121
  hitSlop: 8,
4130
- children: /* @__PURE__ */ jsx46(Text34, { style: [styles42.closeText, { color: text }], "aria-hidden": true, children: "\u2715" })
4122
+ children: /* @__PURE__ */ jsx48(ScaledText, { style: [styles43.closeText, { color: text }], "aria-hidden": true, children: "\u2715" })
4131
4123
  }
4132
4124
  )
4133
4125
  ]
@@ -4147,15 +4139,15 @@ function ToastProvider({
4147
4139
  setToasts((prev) => prev.filter((t) => t.id !== id));
4148
4140
  }, []);
4149
4141
  const value = useMemo3(() => ({ showToast }), [showToast]);
4150
- return /* @__PURE__ */ jsx46(ToastContext.Provider, { value, children: /* @__PURE__ */ jsxs31(View39, { style: [{ flex: 1 }, style], children: [
4142
+ return /* @__PURE__ */ jsx48(ToastContext.Provider, { value, children: /* @__PURE__ */ jsxs31(View39, { style: [{ flex: 1 }, style], children: [
4151
4143
  children,
4152
- toasts.length > 0 && /* @__PURE__ */ jsx46(
4144
+ toasts.length > 0 && /* @__PURE__ */ jsx48(
4153
4145
  View39,
4154
4146
  {
4155
- style: styles42.container,
4147
+ style: styles43.container,
4156
4148
  accessibilityRole: "summary",
4157
4149
  accessibilityLabel: "Notifications",
4158
- children: toasts.map((toast) => /* @__PURE__ */ jsx46(
4150
+ children: toasts.map((toast) => /* @__PURE__ */ jsx48(
4159
4151
  ToastItem,
4160
4152
  {
4161
4153
  toast,
@@ -4177,19 +4169,9 @@ function useToast() {
4177
4169
 
4178
4170
  // src/components/interaction/DropdownMenu/DropdownMenu.tsx
4179
4171
  import React, { useState as useState14, useEffect as useEffect4, useRef as useRef6 } from "react";
4180
- import {
4181
- Modal as Modal4,
4182
- View as View40,
4183
- Pressable as Pressable25,
4184
- Text as Text35,
4185
- FlatList as FlatList2,
4186
- Animated as Animated5,
4187
- StyleSheet as StyleSheet43,
4188
- Dimensions as Dimensions3,
4189
- SafeAreaView as SafeAreaView2
4190
- } from "react-native";
4191
- import { Fragment as Fragment2, jsx as jsx47, jsxs as jsxs32 } from "react/jsx-runtime";
4192
- var styles43 = StyleSheet43.create({
4172
+ 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";
4173
+ import { Fragment as Fragment2, jsx as jsx49, jsxs as jsxs32 } from "react/jsx-runtime";
4174
+ var styles44 = StyleSheet45.create({
4193
4175
  overlay: {
4194
4176
  flex: 1,
4195
4177
  justifyContent: "flex-end"
@@ -4248,30 +4230,30 @@ function DropdownMenu({
4248
4230
  const { colors: colors2 } = useTheme();
4249
4231
  const [open, setOpen] = useState14(false);
4250
4232
  const screenHeight = Dimensions3.get("window").height;
4251
- const slideAnim = useRef6(new Animated5.Value(screenHeight)).current;
4252
- const backdropAnim = useRef6(new Animated5.Value(0)).current;
4233
+ const slideAnim = useRef6(new Animated6.Value(screenHeight)).current;
4234
+ const backdropAnim = useRef6(new Animated6.Value(0)).current;
4253
4235
  useEffect4(() => {
4254
4236
  if (open) {
4255
- Animated5.parallel([
4256
- Animated5.timing(slideAnim, {
4237
+ Animated6.parallel([
4238
+ Animated6.timing(slideAnim, {
4257
4239
  toValue: 0,
4258
4240
  duration: 250,
4259
4241
  useNativeDriver: true
4260
4242
  }),
4261
- Animated5.timing(backdropAnim, {
4243
+ Animated6.timing(backdropAnim, {
4262
4244
  toValue: 1,
4263
4245
  duration: 250,
4264
4246
  useNativeDriver: true
4265
4247
  })
4266
4248
  ]).start();
4267
4249
  } else {
4268
- Animated5.parallel([
4269
- Animated5.timing(slideAnim, {
4250
+ Animated6.parallel([
4251
+ Animated6.timing(slideAnim, {
4270
4252
  toValue: screenHeight,
4271
4253
  duration: 200,
4272
4254
  useNativeDriver: true
4273
4255
  }),
4274
- Animated5.timing(backdropAnim, {
4256
+ Animated6.timing(backdropAnim, {
4275
4257
  toValue: 0,
4276
4258
  duration: 200,
4277
4259
  useNativeDriver: true
@@ -4289,25 +4271,25 @@ function DropdownMenu({
4289
4271
  accessibilityRole: "button",
4290
4272
  accessibilityLabel: title
4291
4273
  }),
4292
- /* @__PURE__ */ jsx47(
4274
+ /* @__PURE__ */ jsx49(
4293
4275
  Modal4,
4294
4276
  {
4295
4277
  visible: open,
4296
4278
  transparent: true,
4297
4279
  animationType: "none",
4298
4280
  onRequestClose: () => setOpen(false),
4299
- children: /* @__PURE__ */ jsxs32(View40, { style: styles43.overlay, children: [
4300
- /* @__PURE__ */ jsx47(
4301
- Animated5.View,
4281
+ children: /* @__PURE__ */ jsxs32(View40, { style: styles44.overlay, children: [
4282
+ /* @__PURE__ */ jsx49(
4283
+ Animated6.View,
4302
4284
  {
4303
4285
  style: [
4304
- StyleSheet43.absoluteFill,
4286
+ StyleSheet45.absoluteFill,
4305
4287
  { backgroundColor: "rgba(0, 0, 0, 0.5)", opacity: backdropAnim }
4306
4288
  ],
4307
- children: /* @__PURE__ */ jsx47(
4289
+ children: /* @__PURE__ */ jsx49(
4308
4290
  Pressable25,
4309
4291
  {
4310
- style: StyleSheet43.absoluteFill,
4292
+ style: StyleSheet45.absoluteFill,
4311
4293
  onPress: () => setOpen(false),
4312
4294
  testID: "bds-dropdownmenu-backdrop",
4313
4295
  accessible: false,
@@ -4316,11 +4298,11 @@ function DropdownMenu({
4316
4298
  )
4317
4299
  }
4318
4300
  ),
4319
- /* @__PURE__ */ jsx47(
4320
- Animated5.View,
4301
+ /* @__PURE__ */ jsx49(
4302
+ Animated6.View,
4321
4303
  {
4322
4304
  style: [
4323
- styles43.sheet,
4305
+ styles44.sheet,
4324
4306
  {
4325
4307
  backgroundColor: colors2.colorBg,
4326
4308
  transform: [{ translateY: slideAnim }]
@@ -4333,23 +4315,23 @@ function DropdownMenu({
4333
4315
  View40,
4334
4316
  {
4335
4317
  style: [
4336
- styles43.sheetHeader,
4318
+ styles44.sheetHeader,
4337
4319
  { borderBottomColor: colors2.colorBgSubtle }
4338
4320
  ],
4339
4321
  children: [
4340
- /* @__PURE__ */ jsx47(Text35, { style: [styles43.sheetTitle, { color: colors2.colorOnBg }], children: title }),
4341
- /* @__PURE__ */ jsx47(
4322
+ /* @__PURE__ */ jsx49(ScaledText, { style: [styles44.sheetTitle, { color: colors2.colorOnBg }], children: title }),
4323
+ /* @__PURE__ */ jsx49(
4342
4324
  Pressable25,
4343
4325
  {
4344
4326
  accessibilityRole: "button",
4345
4327
  accessibilityLabel: "Close",
4346
4328
  onPress: () => setOpen(false),
4347
4329
  hitSlop: 8,
4348
- children: /* @__PURE__ */ jsx47(
4349
- Text35,
4330
+ children: /* @__PURE__ */ jsx49(
4331
+ ScaledText,
4350
4332
  {
4351
4333
  style: [
4352
- styles43.closeText,
4334
+ styles44.closeText,
4353
4335
  { color: colors2.colorInteractive }
4354
4336
  ],
4355
4337
  children: "Done"
@@ -4360,17 +4342,17 @@ function DropdownMenu({
4360
4342
  ]
4361
4343
  }
4362
4344
  ),
4363
- /* @__PURE__ */ jsx47(
4345
+ /* @__PURE__ */ jsx49(
4364
4346
  FlatList2,
4365
4347
  {
4366
4348
  data: items,
4367
4349
  keyExtractor: (item) => item.id,
4368
4350
  renderItem: ({ item }) => /* @__PURE__ */ jsxs32(Fragment2, { children: [
4369
- item.separator && /* @__PURE__ */ jsx47(
4351
+ item.separator && /* @__PURE__ */ jsx49(
4370
4352
  View40,
4371
4353
  {
4372
4354
  style: [
4373
- styles43.separator,
4355
+ styles44.separator,
4374
4356
  { backgroundColor: colors2.colorBgSubtle }
4375
4357
  ],
4376
4358
  accessibilityRole: "none"
@@ -4385,12 +4367,12 @@ function DropdownMenu({
4385
4367
  disabled: item.disabled,
4386
4368
  onPress: () => handleItemPress(item),
4387
4369
  style: ({ pressed }) => [
4388
- styles43.item,
4370
+ styles44.item,
4389
4371
  pressed && { backgroundColor: colors2.colorBgSubtle },
4390
4372
  item.disabled && { opacity: 0.4 }
4391
4373
  ],
4392
4374
  children: [
4393
- !!item.icon && /* @__PURE__ */ jsx47(
4375
+ !!item.icon && /* @__PURE__ */ jsx49(
4394
4376
  View40,
4395
4377
  {
4396
4378
  importantForAccessibility: "no-hide-descendants",
@@ -4398,11 +4380,11 @@ function DropdownMenu({
4398
4380
  children: item.icon
4399
4381
  }
4400
4382
  ),
4401
- /* @__PURE__ */ jsx47(
4402
- Text35,
4383
+ /* @__PURE__ */ jsx49(
4384
+ ScaledText,
4403
4385
  {
4404
4386
  style: [
4405
- styles43.itemText,
4387
+ styles44.itemText,
4406
4388
  { color: colors2.colorOnBg }
4407
4389
  ],
4408
4390
  children: item.label
@@ -4429,10 +4411,10 @@ import {
4429
4411
  Modal as Modal5,
4430
4412
  View as View41,
4431
4413
  Pressable as Pressable26,
4432
- StyleSheet as StyleSheet44
4414
+ StyleSheet as StyleSheet46
4433
4415
  } from "react-native";
4434
- import { jsx as jsx48, jsxs as jsxs33 } from "react/jsx-runtime";
4435
- var styles44 = StyleSheet44.create({
4416
+ import { jsx as jsx50, jsxs as jsxs33 } from "react/jsx-runtime";
4417
+ var styles45 = StyleSheet46.create({
4436
4418
  wrapper: {
4437
4419
  alignSelf: "flex-start"
4438
4420
  },
@@ -4464,35 +4446,35 @@ function Popover({
4464
4446
  const { colors: colors2 } = useTheme();
4465
4447
  const [isOpen, setIsOpen] = useState15(false);
4466
4448
  const close = () => setIsOpen(false);
4467
- return /* @__PURE__ */ jsxs33(View41, { style: [styles44.wrapper, style], children: [
4449
+ return /* @__PURE__ */ jsxs33(View41, { style: [styles45.wrapper, style], children: [
4468
4450
  React2.cloneElement(children, {
4469
4451
  onPress: () => setIsOpen(true),
4470
4452
  accessibilityRole: "button",
4471
4453
  accessibilityLabel: accessibilityLabel ?? "Open popover"
4472
4454
  }),
4473
- /* @__PURE__ */ jsx48(
4455
+ /* @__PURE__ */ jsx50(
4474
4456
  Modal5,
4475
4457
  {
4476
4458
  visible: isOpen,
4477
4459
  transparent: true,
4478
4460
  animationType: "fade",
4479
4461
  onRequestClose: close,
4480
- children: /* @__PURE__ */ jsxs33(View41, { style: styles44.overlay, onAccessibilityEscape: close, children: [
4481
- /* @__PURE__ */ jsx48(
4462
+ children: /* @__PURE__ */ jsxs33(View41, { style: styles45.overlay, onAccessibilityEscape: close, children: [
4463
+ /* @__PURE__ */ jsx50(
4482
4464
  Pressable26,
4483
4465
  {
4484
4466
  testID: "bds-popover-backdrop",
4485
- style: StyleSheet44.absoluteFill,
4467
+ style: StyleSheet46.absoluteFill,
4486
4468
  onPress: close,
4487
4469
  onAccessibilityTap: close,
4488
4470
  accessibilityRole: "button",
4489
4471
  accessibilityLabel: "Close popover"
4490
4472
  }
4491
4473
  ),
4492
- /* @__PURE__ */ jsx48(
4474
+ /* @__PURE__ */ jsx50(
4493
4475
  View41,
4494
4476
  {
4495
- style: [styles44.panel, { backgroundColor: colors2.colorBg }],
4477
+ style: [styles45.panel, { backgroundColor: colors2.colorBg }],
4496
4478
  accessibilityLabel,
4497
4479
  children: content
4498
4480
  }
@@ -4537,6 +4519,8 @@ export {
4537
4519
  Radio,
4538
4520
  RadioGroup,
4539
4521
  Rating,
4522
+ ScaledText,
4523
+ ScaledTextInput,
4540
4524
  SectionHeader,
4541
4525
  SegmentedControl,
4542
4526
  Select,
@@ -4558,6 +4542,8 @@ export {
4558
4542
  createReactNavigationTheme,
4559
4543
  font,
4560
4544
  lineHeight,
4545
+ maxFontScaleFor,
4546
+ maxFontScaleForStyle,
4561
4547
  spacing,
4562
4548
  useReactNavigationTheme,
4563
4549
  useTheme,