@butternutbox/pawprint-native 0.14.0 → 0.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -7,12 +7,12 @@
7
7
  CJS Build start
8
8
  ESM Build start
9
9
  DTS Build start
10
- CJS dist/index.cjs 528.39 KB
11
- CJS dist/index.cjs.map 1.01 MB
12
- CJS ⚡️ Build success in 7645ms
13
- ESM dist/index.js 498.99 KB
14
- ESM dist/index.js.map 1.01 MB
15
- ESM ⚡️ Build success in 7649ms
16
- DTS ⚡️ Build success in 21918ms
17
- DTS dist/index.d.cts 94.99 KB
18
- DTS dist/index.d.ts 94.99 KB
10
+ ESM dist/index.js 502.55 KB
11
+ ESM dist/index.js.map 1.02 MB
12
+ ESM ⚡️ Build success in 6906ms
13
+ CJS dist/index.cjs 532.19 KB
14
+ CJS dist/index.cjs.map 1.02 MB
15
+ CJS ⚡️ Build success in 6908ms
16
+ DTS ⚡️ Build success in 18492ms
17
+ DTS dist/index.d.cts 98.50 KB
18
+ DTS dist/index.d.ts 98.50 KB
package/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  # @butternutbox/pawprint-native
2
2
 
3
+ ## 0.15.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 80ab1d3: Add `Menu` molecule — a dropdown menu that expands beneath an anchor (e.g. a header/bar) and dismisses on outside tap, leaving the page behind undarkened. Consumers own open/close state and supply `Menu.Item` rows (`action` / `destructive` variants, opt-out `divider`); `anchorOffset` positions the card just below the anchoring bar.
8
+
3
9
  ## 0.14.0
4
10
 
5
11
  ### Minor Changes
package/dist/index.cjs CHANGED
@@ -10186,6 +10186,128 @@ var Tooltip = React66__default.default.forwardRef(
10186
10186
  );
10187
10187
  Tooltip.displayName = "Tooltip";
10188
10188
  var parseTokenValue53 = (value) => parseFloat(value);
10189
+ var Row = styled51__default.default(reactNative.Pressable)(({ theme: theme2, divider }) => {
10190
+ const { spacing } = theme2.tokens.semantics.dimensions;
10191
+ const { colour } = theme2.tokens.semantics;
10192
+ return {
10193
+ width: "100%",
10194
+ alignItems: "center",
10195
+ justifyContent: "center",
10196
+ paddingVertical: parseTokenValue53(spacing.md),
10197
+ paddingHorizontal: parseTokenValue53(spacing.md),
10198
+ borderBottomWidth: divider ? 1 : 0,
10199
+ borderBottomColor: colour.border.divider
10200
+ };
10201
+ });
10202
+ var MenuItem = React66__default.default.forwardRef((_a, ref) => {
10203
+ var _b = _a, { variant = "action", onPress, children, divider = true } = _b, rest = __objRest(_b, ["variant", "onPress", "children", "divider"]);
10204
+ const theme2 = react.useTheme();
10205
+ const { colour, typography } = theme2.tokens.semantics;
10206
+ const labelColour = variant === "destructive" ? colour.text.error : colour.text.action.default;
10207
+ const label = typeof children === "string" || typeof children === "number" ? String(children) : void 0;
10208
+ return /* @__PURE__ */ jsxRuntime.jsx(
10209
+ Row,
10210
+ __spreadProps(__spreadValues({
10211
+ ref,
10212
+ divider,
10213
+ onPress,
10214
+ accessible: true,
10215
+ accessibilityRole: "menuitem",
10216
+ accessibilityLabel: label
10217
+ }, rest), {
10218
+ children: label !== void 0 ? /* @__PURE__ */ jsxRuntime.jsx(
10219
+ Typography,
10220
+ {
10221
+ token: typography.body.medium.md,
10222
+ align: "center",
10223
+ color: labelColour,
10224
+ children: label
10225
+ }
10226
+ ) : children
10227
+ })
10228
+ );
10229
+ });
10230
+ MenuItem.displayName = "Menu.Item";
10231
+ var parseTokenValue54 = (value) => parseFloat(value);
10232
+ var DismissLayer = styled51__default.default(reactNative.Pressable)({
10233
+ position: "absolute",
10234
+ top: 0,
10235
+ left: 0,
10236
+ right: 0,
10237
+ bottom: 0
10238
+ });
10239
+ var Anchor = styled51__default.default(reactNative.View)(({ theme: theme2, align }) => {
10240
+ const inset = parseTokenValue54(theme2.tokens.semantics.dimensions.spacing.md);
10241
+ return __spreadValues({
10242
+ position: "absolute"
10243
+ }, align === "right" ? { right: inset } : { left: inset });
10244
+ });
10245
+ var Card = styled51__default.default(reactNative.Pressable)(({ theme: theme2, width }) => {
10246
+ const { borderRadius } = theme2.tokens.semantics.dimensions;
10247
+ const { shadow, background } = theme2.tokens.semantics.colour;
10248
+ return {
10249
+ width,
10250
+ maxWidth: "90%",
10251
+ borderRadius: parseTokenValue54(borderRadius.md),
10252
+ overflow: "hidden",
10253
+ backgroundColor: background.surface.default,
10254
+ // Shadow token colour carries its own alpha, so opacity stays at 1.
10255
+ shadowColor: shadow.md.color,
10256
+ shadowOffset: {
10257
+ width: parseTokenValue54(shadow.md.offsetX),
10258
+ height: parseTokenValue54(shadow.md.offsetY)
10259
+ },
10260
+ shadowOpacity: 1,
10261
+ shadowRadius: parseTokenValue54(shadow.md.blur),
10262
+ elevation: 8
10263
+ };
10264
+ });
10265
+ var MenuRoot = ({
10266
+ open,
10267
+ onClose,
10268
+ anchorOffset = 0,
10269
+ align = "right",
10270
+ width = 360,
10271
+ closeAccessibilityLabel = "Close menu",
10272
+ children
10273
+ }) => {
10274
+ return /* @__PURE__ */ jsxRuntime.jsxs(
10275
+ reactNative.Modal,
10276
+ {
10277
+ visible: open,
10278
+ transparent: true,
10279
+ statusBarTranslucent: true,
10280
+ animationType: "fade",
10281
+ onRequestClose: onClose,
10282
+ children: [
10283
+ /* @__PURE__ */ jsxRuntime.jsx(
10284
+ DismissLayer,
10285
+ {
10286
+ onPress: onClose,
10287
+ accessible: false,
10288
+ accessibilityLabel: closeAccessibilityLabel
10289
+ }
10290
+ ),
10291
+ /* @__PURE__ */ jsxRuntime.jsx(Anchor, { align, style: { top: anchorOffset }, children: /* @__PURE__ */ jsxRuntime.jsx(
10292
+ Card,
10293
+ {
10294
+ width,
10295
+ onPress: () => {
10296
+ },
10297
+ accessible: false,
10298
+ accessibilityRole: "menu",
10299
+ children
10300
+ }
10301
+ ) })
10302
+ ]
10303
+ }
10304
+ );
10305
+ };
10306
+ MenuRoot.displayName = "Menu";
10307
+ var Menu2 = Object.assign(MenuRoot, {
10308
+ Item: MenuItem
10309
+ });
10310
+ var parseTokenValue55 = (value) => parseFloat(value);
10189
10311
  var StyledInsightRoot = styled51__default.default(reactNative.View)(
10190
10312
  ({
10191
10313
  rootGap,
@@ -10230,26 +10352,26 @@ var MessageCardInsight = React66__default.default.forwardRef(
10230
10352
  const isSupporting = variant === "supporting";
10231
10353
  const supporting = insightCard.spacing.supporting;
10232
10354
  const standalone = insightCard.spacing.standalone;
10233
- const radiusStandalone = parseTokenValue53(
10355
+ const radiusStandalone = parseTokenValue55(
10234
10356
  insightCard.borderRadius.standalone.default
10235
10357
  );
10236
- const radiusSupporting = parseTokenValue53(
10358
+ const radiusSupporting = parseTokenValue55(
10237
10359
  insightCard.borderRadius.supporting.bottom
10238
10360
  );
10239
10361
  return /* @__PURE__ */ jsxRuntime.jsxs(
10240
10362
  StyledInsightRoot,
10241
10363
  __spreadProps(__spreadValues({
10242
10364
  ref,
10243
- rootGap: parseTokenValue53(
10365
+ rootGap: parseTokenValue55(
10244
10366
  isSupporting ? supporting.gap : standalone.gap
10245
10367
  ),
10246
- rootPaddingH: parseTokenValue53(
10368
+ rootPaddingH: parseTokenValue55(
10247
10369
  isSupporting ? semanticSpacing.md : standalone.horizontalPadding
10248
10370
  ),
10249
- rootPaddingTop: parseTokenValue53(
10371
+ rootPaddingTop: parseTokenValue55(
10250
10372
  isSupporting ? supporting.topPadding : standalone.verticalPadding
10251
10373
  ),
10252
- rootPaddingBottom: parseTokenValue53(
10374
+ rootPaddingBottom: parseTokenValue55(
10253
10375
  isSupporting ? supporting.bottomPadding : standalone.verticalPadding
10254
10376
  ),
10255
10377
  rootBorderTopLeftRadius: isSupporting ? 0 : radiusStandalone,
@@ -10257,7 +10379,7 @@ var MessageCardInsight = React66__default.default.forwardRef(
10257
10379
  rootBorderBottomLeftRadius: isSupporting ? radiusSupporting : radiusStandalone,
10258
10380
  rootBorderBottomRightRadius: isSupporting ? radiusSupporting : radiusStandalone,
10259
10381
  rootBgColor: insightCard.colour.background.default,
10260
- rootMinWidth: parseTokenValue53(insightCard.size.minWidth),
10382
+ rootMinWidth: parseTokenValue55(insightCard.size.minWidth),
10261
10383
  accessible: true,
10262
10384
  accessibilityRole: "summary"
10263
10385
  }, rest), {
@@ -10266,7 +10388,7 @@ var MessageCardInsight = React66__default.default.forwardRef(
10266
10388
  /* @__PURE__ */ jsxRuntime.jsxs(
10267
10389
  StyledInsightContent,
10268
10390
  {
10269
- contentGap: parseTokenValue53(standalone.content.gap),
10391
+ contentGap: parseTokenValue55(standalone.content.gap),
10270
10392
  children: [
10271
10393
  title && /* @__PURE__ */ jsxRuntime.jsx(
10272
10394
  Typography,
@@ -10358,9 +10480,9 @@ var MessageCardBanner = React66__default.default.forwardRef(
10358
10480
  StyledBannerRoot,
10359
10481
  __spreadProps(__spreadValues({
10360
10482
  ref,
10361
- rootGap: parseTokenValue53(dimensions3.spacing.md),
10362
- rootPadding: parseTokenValue53(dimensions3.spacing.md),
10363
- rootBorderRadius: parseTokenValue53(dimensions3.borderRadius.md),
10483
+ rootGap: parseTokenValue55(dimensions3.spacing.md),
10484
+ rootPadding: parseTokenValue55(dimensions3.spacing.md),
10485
+ rootBorderRadius: parseTokenValue55(dimensions3.borderRadius.md),
10364
10486
  rootBgColor: bgColor,
10365
10487
  accessible: true,
10366
10488
  accessibilityRole: "summary"
@@ -10372,7 +10494,7 @@ var MessageCardBanner = React66__default.default.forwardRef(
10372
10494
  }) }) : (media == null ? void 0 : media.type) === "image" ? /* @__PURE__ */ jsxRuntime.jsx(
10373
10495
  StyledBannerImage,
10374
10496
  {
10375
- imageRadius: parseTokenValue53(dimensions3.borderRadius.sm),
10497
+ imageRadius: parseTokenValue55(dimensions3.borderRadius.sm),
10376
10498
  imageBgColor: colour.background.surface.secondary,
10377
10499
  children: /* @__PURE__ */ jsxRuntime.jsx(
10378
10500
  reactNative.Image,
@@ -10388,12 +10510,12 @@ var MessageCardBanner = React66__default.default.forwardRef(
10388
10510
  /* @__PURE__ */ jsxRuntime.jsxs(
10389
10511
  StyledBannerContents,
10390
10512
  {
10391
- contentsGap: parseTokenValue53(dimensions3.spacing.xs),
10513
+ contentsGap: parseTokenValue55(dimensions3.spacing.xs),
10392
10514
  children: [
10393
10515
  /* @__PURE__ */ jsxRuntime.jsxs(
10394
10516
  StyledBannerCopy,
10395
10517
  {
10396
- copyGap: parseTokenValue53(dimensions3.spacing["3xs"]),
10518
+ copyGap: parseTokenValue55(dimensions3.spacing["3xs"]),
10397
10519
  children: [
10398
10520
  title && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "heading", size: "xs", color: "primary", children: title }),
10399
10521
  /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", size: "md", color: "secondary", children })
@@ -10424,7 +10546,7 @@ var MessageCard = {
10424
10546
  Insight: MessageCardInsight,
10425
10547
  Banner: MessageCardBanner
10426
10548
  };
10427
- var parseTokenValue54 = (value) => parseFloat(value);
10549
+ var parseTokenValue56 = (value) => parseFloat(value);
10428
10550
  var slideEaseOut = Animated10.Easing.out(Animated10.Easing.quad);
10429
10551
  var MONTH_SLIDE_ENTERING = {
10430
10552
  forward: Animated10.FadeInRight.duration(250).easing(slideEaseOut),
@@ -10585,17 +10707,17 @@ var DatePicker = React66__default.default.forwardRef(
10585
10707
  } = React66.useMemo(
10586
10708
  () => ({
10587
10709
  // Gap between the week-day header and the month header.
10588
- weekGap: parseTokenValue54(datePicker.spacing.gap),
10710
+ weekGap: parseTokenValue56(datePicker.spacing.gap),
10589
10711
  // Gap between the month header and the dates grid.
10590
- datesGap: parseTokenValue54(theme2.tokens.semantics.dimensions.spacing.md),
10591
- containerMaxWidth: parseTokenValue54(dt.size.width) * 7,
10592
- headerGap: parseTokenValue54(datePicker.month.spacing.gap),
10593
- cellHeight: parseTokenValue54(dt.size.height),
10594
- indicatorSize: parseTokenValue54(dt.size.indicator),
10595
- indicatorBorderRadius: parseTokenValue54(dt.borderRadius.indicator),
10596
- selectedBorderWidth: parseTokenValue54(dt.borderWidth.indicator.selected),
10597
- disabledOpacity: parseTokenValue54(dt.opacity.disabled),
10598
- rowGap: parseTokenValue54(datePicker.dates.spacing.gap)
10712
+ datesGap: parseTokenValue56(theme2.tokens.semantics.dimensions.spacing.md),
10713
+ containerMaxWidth: parseTokenValue56(dt.size.width) * 7,
10714
+ headerGap: parseTokenValue56(datePicker.month.spacing.gap),
10715
+ cellHeight: parseTokenValue56(dt.size.height),
10716
+ indicatorSize: parseTokenValue56(dt.size.indicator),
10717
+ indicatorBorderRadius: parseTokenValue56(dt.borderRadius.indicator),
10718
+ selectedBorderWidth: parseTokenValue56(dt.borderWidth.indicator.selected),
10719
+ disabledOpacity: parseTokenValue56(dt.opacity.disabled),
10720
+ rowGap: parseTokenValue56(datePicker.dates.spacing.gap)
10599
10721
  }),
10600
10722
  [datePicker, dt, theme2]
10601
10723
  );
@@ -10873,7 +10995,7 @@ var buildPointerPath = (r) => {
10873
10995
  "Z"
10874
10996
  ].join(" ");
10875
10997
  };
10876
- var parseTokenValue55 = (value) => parseFloat(value);
10998
+ var parseTokenValue57 = (value) => parseFloat(value);
10877
10999
  var StyledRoot16 = styled51__default.default(reactNative.View)(({ rootGap }) => ({
10878
11000
  flexDirection: "column",
10879
11001
  gap: rootGap,
@@ -10963,21 +11085,21 @@ var PictureSelector = React66__default.default.forwardRef(
10963
11085
  if (!isControlled) setInternalValue(nextValue);
10964
11086
  onValueChange == null ? void 0 : onValueChange(nextValue);
10965
11087
  };
10966
- const rootGap = parseTokenValue55(pictureSelector.spacing.container.gap);
10967
- const rowGap = parseTokenValue55(pictureSelector.spacing.buttons.gap);
10968
- const stackGap = parseTokenValue55(pictureButton.spacing.container.gap);
10969
- const buttonPadding = parseTokenValue55(pictureButton.spacing.padding);
10970
- const buttonBorderRadius = parseTokenValue55(
11088
+ const rootGap = parseTokenValue57(pictureSelector.spacing.container.gap);
11089
+ const rowGap = parseTokenValue57(pictureSelector.spacing.buttons.gap);
11090
+ const stackGap = parseTokenValue57(pictureButton.spacing.container.gap);
11091
+ const buttonPadding = parseTokenValue57(pictureButton.spacing.padding);
11092
+ const buttonBorderRadius = parseTokenValue57(
10971
11093
  pictureButton.borderRadius.default
10972
11094
  );
10973
- const borderWidthDefault = parseTokenValue55(
11095
+ const borderWidthDefault = parseTokenValue57(
10974
11096
  pictureButton.borderWidth.default
10975
11097
  );
10976
- const borderWidthActive = parseTokenValue55(pictureButton.borderWidth.active);
11098
+ const borderWidthActive = parseTokenValue57(pictureButton.borderWidth.active);
10977
11099
  const pointerPath = buildPointerPath(
10978
- parseTokenValue55(pictureButton.pointer.borderRadius.default)
11100
+ parseTokenValue57(pictureButton.pointer.borderRadius.default)
10979
11101
  );
10980
- const resolvedMinWidth = itemMinWidth != null ? itemMinWidth : parseTokenValue55(pictureButton.size.minWidth);
11102
+ const resolvedMinWidth = itemMinWidth != null ? itemMinWidth : parseTokenValue57(pictureButton.size.minWidth);
10981
11103
  const resolvedMinHeight = itemMinHeight != null ? itemMinHeight : resolvedMinWidth;
10982
11104
  return /* @__PURE__ */ jsxRuntime.jsxs(
10983
11105
  StyledRoot16,
@@ -11070,7 +11192,7 @@ var DEFAULT_UNIT_LABELS = {
11070
11192
  seconds: { singular: "sec", plural: "secs" }
11071
11193
  };
11072
11194
  var resolveLabel = (label, value) => typeof label === "string" ? label : value === 1 ? label.singular : label.plural;
11073
- var parseTokenValue56 = (value) => parseFloat(value);
11195
+ var parseTokenValue58 = (value) => parseFloat(value);
11074
11196
  var pad = (value) => String(Math.max(0, Math.floor(value))).padStart(2, "0");
11075
11197
  var StackedRoot = styled51__default.default(reactNative.View)(({ rootGap }) => ({
11076
11198
  flexDirection: "row",
@@ -11200,28 +11322,28 @@ var Countdown = React66__default.default.forwardRef(
11200
11322
  InlineRoot,
11201
11323
  __spreadProps(__spreadValues({
11202
11324
  ref,
11203
- rootGap: parseTokenValue56(countdown.spacing.gap),
11204
- rootVerticalPadding: parseTokenValue56(
11325
+ rootGap: parseTokenValue58(countdown.spacing.gap),
11326
+ rootVerticalPadding: parseTokenValue58(
11205
11327
  countdown.spacing.verticalPadding
11206
11328
  ),
11207
- rootHorizontalPadding: parseTokenValue56(
11329
+ rootHorizontalPadding: parseTokenValue58(
11208
11330
  countdown.spacing.horizontalPadding
11209
11331
  ),
11210
11332
  rootBgColor: countdown.colour.background.default,
11211
- rootBorderRadius: parseTokenValue56(countdown.borderRadius.default)
11333
+ rootBorderRadius: parseTokenValue58(countdown.borderRadius.default)
11212
11334
  }, rest), {
11213
11335
  children: [
11214
11336
  label != null && /* @__PURE__ */ jsxRuntime.jsx(Typography, { variant: "body", weight: "bold", size: "md", color: "primary", children: label }),
11215
11337
  /* @__PURE__ */ jsxRuntime.jsx(
11216
11338
  InlineGroup,
11217
11339
  {
11218
- groupGap: parseTokenValue56(countdown.countdownGroup.spacing.gap),
11340
+ groupGap: parseTokenValue58(countdown.countdownGroup.spacing.gap),
11219
11341
  children: units.map((unit, index) => /* @__PURE__ */ jsxRuntime.jsxs(React66__default.default.Fragment, { children: [
11220
11342
  index > 0 && colon(`colon-${unit.key}`),
11221
11343
  /* @__PURE__ */ jsxRuntime.jsxs(
11222
11344
  InlineCount,
11223
11345
  {
11224
- countGap: parseTokenValue56(countdown.count.spacing.gap),
11346
+ countGap: parseTokenValue58(countdown.count.spacing.gap),
11225
11347
  children: [
11226
11348
  /* @__PURE__ */ jsxRuntime.jsx(
11227
11349
  Typography,
@@ -11257,33 +11379,33 @@ var Countdown = React66__default.default.forwardRef(
11257
11379
  StackedRoot,
11258
11380
  __spreadProps(__spreadValues({
11259
11381
  ref,
11260
- rootGap: parseTokenValue56(countdown.spacing.gap)
11382
+ rootGap: parseTokenValue58(countdown.spacing.gap)
11261
11383
  }, rest), {
11262
11384
  children: units.map((unit, index) => /* @__PURE__ */ jsxRuntime.jsxs(React66__default.default.Fragment, { children: [
11263
11385
  index > 0 && colon(`colon-${unit.key}`),
11264
11386
  /* @__PURE__ */ jsxRuntime.jsxs(
11265
11387
  StackedItem,
11266
11388
  {
11267
- itemGap: parseTokenValue56(countdownItem.spacing.gap),
11268
- itemVerticalPadding: parseTokenValue56(
11389
+ itemGap: parseTokenValue58(countdownItem.spacing.gap),
11390
+ itemVerticalPadding: parseTokenValue58(
11269
11391
  countdownItem.spacing.verticalPadding
11270
11392
  ),
11271
- itemHorizontalPadding: parseTokenValue56(
11393
+ itemHorizontalPadding: parseTokenValue58(
11272
11394
  countdownItem.spacing.horizontalPadding
11273
11395
  ),
11274
11396
  itemBgColor: countdownItem.colour.background.default,
11275
- itemBorderRadius: parseTokenValue56(
11397
+ itemBorderRadius: parseTokenValue58(
11276
11398
  countdownItem.borderRadius.default
11277
11399
  ),
11278
11400
  children: [
11279
11401
  /* @__PURE__ */ jsxRuntime.jsx(
11280
11402
  StackedCountBox,
11281
11403
  {
11282
- countPaddingTop: parseTokenValue56(
11404
+ countPaddingTop: parseTokenValue58(
11283
11405
  countdownItem.count.spacing.paddingTop
11284
11406
  ),
11285
11407
  countBgColor: countdownItem.count.colour.background.default,
11286
- countBorderRadius: parseTokenValue56(
11408
+ countBorderRadius: parseTokenValue58(
11287
11409
  countdownItem.count.borderRadius.default
11288
11410
  ),
11289
11411
  children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -11313,7 +11435,7 @@ var Countdown = React66__default.default.forwardRef(
11313
11435
  }
11314
11436
  );
11315
11437
  Countdown.displayName = "Countdown";
11316
- var parseTokenValue57 = (value) => {
11438
+ var parseTokenValue59 = (value) => {
11317
11439
  if (typeof value === "number") return value;
11318
11440
  return parseFloat(value);
11319
11441
  };
@@ -11324,14 +11446,14 @@ var BadgeContainer = styled51__default.default(reactNative.View)(({ theme: theme
11324
11446
  return {
11325
11447
  display: "flex",
11326
11448
  flexDirection: "row",
11327
- gap: parseTokenValue57(spacing["2xs"]),
11449
+ gap: parseTokenValue59(spacing["2xs"]),
11328
11450
  alignItems: "center",
11329
11451
  justifyContent: "center",
11330
- height: parseTokenValue57(sizing["2xl"]),
11331
- paddingRight: parseTokenValue57(spacing.xs),
11452
+ height: parseTokenValue59(sizing["2xl"]),
11453
+ paddingRight: parseTokenValue59(spacing.xs),
11332
11454
  backgroundColor: colour.background.container.brand,
11333
- borderTopRightRadius: parseTokenValue57(borderRadius.xs),
11334
- borderBottomRightRadius: parseTokenValue57(borderRadius.xs)
11455
+ borderTopRightRadius: parseTokenValue59(borderRadius.xs),
11456
+ borderBottomRightRadius: parseTokenValue59(borderRadius.xs)
11335
11457
  };
11336
11458
  });
11337
11459
  var BadgeIcon = styled51__default.default(reactNative.View)(({ theme: theme2 }) => {
@@ -11341,9 +11463,9 @@ var BadgeIcon = styled51__default.default(reactNative.View)(({ theme: theme2 })
11341
11463
  display: "flex",
11342
11464
  alignItems: "center",
11343
11465
  justifyContent: "center",
11344
- width: parseTokenValue57(sizing.md),
11345
- height: parseTokenValue57(sizing.md),
11346
- marginLeft: parseTokenValue57(spacing.xs),
11466
+ width: parseTokenValue59(sizing.md),
11467
+ height: parseTokenValue59(sizing.md),
11468
+ marginLeft: parseTokenValue59(spacing.xs),
11347
11469
  flexShrink: 0
11348
11470
  };
11349
11471
  });
@@ -11392,7 +11514,7 @@ var Grid = React66__default.default.forwardRef(
11392
11514
  }
11393
11515
  );
11394
11516
  Grid.displayName = "ProductListingCard.Grid";
11395
- var parseTokenValue58 = (value) => {
11517
+ var parseTokenValue60 = (value) => {
11396
11518
  if (typeof value === "number") return value;
11397
11519
  return parseFloat(value);
11398
11520
  };
@@ -11401,7 +11523,7 @@ var StyledRoot17 = styled51__default.default(reactNative.Pressable)(({ theme: th
11401
11523
  return {
11402
11524
  display: "flex",
11403
11525
  flexDirection: "column",
11404
- gap: parseTokenValue58(spacing.md),
11526
+ gap: parseTokenValue60(spacing.md),
11405
11527
  alignItems: "flex-start",
11406
11528
  width: "100%"
11407
11529
  };
@@ -11411,7 +11533,7 @@ var ImageContainer = styled51__default.default(reactNative.View)(({ theme: theme
11411
11533
  width: "100%",
11412
11534
  aspectRatio: 1,
11413
11535
  overflow: "hidden",
11414
- borderRadius: parseTokenValue58(
11536
+ borderRadius: parseTokenValue60(
11415
11537
  theme2.tokens.semantics.dimensions.borderRadius.md
11416
11538
  )
11417
11539
  }));
@@ -11422,7 +11544,7 @@ var StyledImage2 = styled51__default.default(reactNative.Image)({
11422
11544
  });
11423
11545
  var BadgeContainer2 = styled51__default.default(reactNative.View)(({ theme: theme2 }) => ({
11424
11546
  position: "absolute",
11425
- top: parseTokenValue58(theme2.tokens.semantics.dimensions.spacing.md),
11547
+ top: parseTokenValue60(theme2.tokens.semantics.dimensions.spacing.md),
11426
11548
  left: 0
11427
11549
  }));
11428
11550
  var ContentContainer = styled51__default.default(reactNative.View)(({ theme: theme2 }) => {
@@ -11430,7 +11552,7 @@ var ContentContainer = styled51__default.default(reactNative.View)(({ theme: the
11430
11552
  return {
11431
11553
  display: "flex",
11432
11554
  flexDirection: "column",
11433
- gap: parseTokenValue58(spacing.md),
11555
+ gap: parseTokenValue60(spacing.md),
11434
11556
  alignItems: "flex-start",
11435
11557
  width: "100%"
11436
11558
  };
@@ -11444,7 +11566,7 @@ var DetailsContainer = styled51__default.default(reactNative.View)({
11444
11566
  var CategoryWrapper = styled51__default.default(reactNative.View)(({ theme: theme2 }) => {
11445
11567
  const spacing = theme2.tokens.semantics.dimensions.spacing;
11446
11568
  return {
11447
- marginBottom: parseTokenValue58(spacing["3xs"])
11569
+ marginBottom: parseTokenValue60(spacing["3xs"])
11448
11570
  };
11449
11571
  });
11450
11572
  var TitleContainer = styled51__default.default(reactNative.View)({
@@ -11792,7 +11914,7 @@ var useTabNavigationContext = () => {
11792
11914
  }
11793
11915
  return context;
11794
11916
  };
11795
- var parseTokenValue59 = (value) => parseFloat(value);
11917
+ var parseTokenValue61 = (value) => parseFloat(value);
11796
11918
  var StyledFixedList = styled51__default.default(reactNative.View)({
11797
11919
  flexDirection: "row",
11798
11920
  alignItems: "stretch",
@@ -11858,13 +11980,13 @@ var TabNavigationTab = React66__default.default.forwardRef(
11858
11980
  StyledTab,
11859
11981
  __spreadProps(__spreadValues({
11860
11982
  ref,
11861
- tabHeight: parseTokenValue59(tabitem.size.height),
11862
- tabMinWidth: parseTokenValue59(tabitem.size.minWidth),
11863
- tabPaddingTop: parseTokenValue59(spacing.topPadding),
11864
- tabPaddingBottom: parseTokenValue59(spacing.bottomPadding),
11865
- tabPaddingHorizontal: parseTokenValue59(spacing.horizontalPadding),
11866
- tabGap: parseTokenValue59(spacing.gap),
11867
- tabBorderWidth: parseTokenValue59(borderWidth.default),
11983
+ tabHeight: parseTokenValue61(tabitem.size.height),
11984
+ tabMinWidth: parseTokenValue61(tabitem.size.minWidth),
11985
+ tabPaddingTop: parseTokenValue61(spacing.topPadding),
11986
+ tabPaddingBottom: parseTokenValue61(spacing.bottomPadding),
11987
+ tabPaddingHorizontal: parseTokenValue61(spacing.horizontalPadding),
11988
+ tabGap: parseTokenValue61(spacing.gap),
11989
+ tabBorderWidth: parseTokenValue61(borderWidth.default),
11868
11990
  tabBorderColor: borderColour,
11869
11991
  tabFlex: layout === "fixed" ? 1 : void 0
11870
11992
  }, rest), {
@@ -11984,6 +12106,8 @@ exports.InputLabel = InputLabel;
11984
12106
  exports.InputText = InputText;
11985
12107
  exports.Link = Link;
11986
12108
  exports.Logo = Logo;
12109
+ exports.Menu = Menu2;
12110
+ exports.MenuItem = MenuItem;
11987
12111
  exports.MessageCard = MessageCard;
11988
12112
  exports.MessageCardBanner = MessageCardBanner;
11989
12113
  exports.MessageCardInsight = MessageCardInsight;