fermmap-shared 0.6.0 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/main.cjs CHANGED
@@ -2,10 +2,10 @@ require("./main.css");
2
2
  var $fs04y$reactjsxruntime = require("react/jsx-runtime");
3
3
  var $fs04y$reactariacomponents = require("react-aria-components");
4
4
  var $fs04y$react = require("react");
5
+ var $fs04y$reactintl = require("react-intl");
5
6
  var $fs04y$reactspectrums2iconsSearch = require("@react-spectrum/s2/icons/Search");
6
7
  var $fs04y$reactspectrums2iconsCheckmarkCircle = require("@react-spectrum/s2/icons/CheckmarkCircle");
7
8
  var $fs04y$reactspectrums2iconsCloseCircle = require("@react-spectrum/s2/icons/CloseCircle");
8
- var $fs04y$reactintl = require("react-intl");
9
9
  var $fs04y$reactspectrums2iconsChevronDown = require("@react-spectrum/s2/icons/ChevronDown");
10
10
  var $fs04y$reactspectrums2iconsChevronRight = require("@react-spectrum/s2/icons/ChevronRight");
11
11
  var $fs04y$reactspectrums2iconsClose = require("@react-spectrum/s2/icons/Close");
@@ -161,7 +161,7 @@ const $e6839169613154d7$var$buttonStyles = function anonymous(props) {
161
161
  rules += ' plc12';
162
162
  } else {
163
163
  if (props.variant === "navigation") rules += ' pMbOPsb12';
164
- else if (props.variant === "danger") rules += ' px12';
164
+ else if (props.variant === "danger") rules += ' pLYrGTd12';
165
165
  else if (props.variant === "secondary") rules += ' pMbOPsb12';
166
166
  rules += ' plb12';
167
167
  }
@@ -326,13 +326,80 @@ function $6ab530226d5e3153$export$2c73285ae9390cec({ label: label, type: type =
326
326
 
327
327
 
328
328
 
329
- const $09cc2cf19505fddf$var$overlayStyles = " _Pb12 Wr12 _lr12 _Ar12 _zr12 g812 sd12 eb12 _Ca12 _Bb12";
329
+
330
+
331
+ const $25d82f0a3d474ebc$var$I18nContext = /*#__PURE__*/ (0, $fs04y$react.createContext)(undefined);
332
+ function $25d82f0a3d474ebc$export$a54013f0d02a8f82({ children: children, messages: messages }) {
333
+ // For MVP, we'll start with just English
334
+ // Future: Add locale state management and persistence
335
+ const locale = 'en';
336
+ const setLocale = (newLocale)=>{
337
+ // Future: Implement locale switching with localStorage
338
+ console.log('Locale switching to:', newLocale);
339
+ };
340
+ // Defensive check: ensure messages are loaded
341
+ const currentMessages = messages?.[locale] || {};
342
+ if (!messages || Object.keys(currentMessages).length === 0) console.warn('I18nProvider: No messages loaded for locale:', locale);
343
+ return (0, $fs04y$reactjsxruntime.jsx)($25d82f0a3d474ebc$var$I18nContext.Provider, {
344
+ value: {
345
+ locale: locale,
346
+ setLocale: setLocale
347
+ },
348
+ children: (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactintl.IntlProvider), {
349
+ messages: currentMessages,
350
+ locale: locale,
351
+ defaultLocale: "en",
352
+ children: children
353
+ })
354
+ });
355
+ }
356
+ function $25d82f0a3d474ebc$export$3f3caade1c12f8c9() {
357
+ const context = (0, $fs04y$react.useContext)($25d82f0a3d474ebc$var$I18nContext);
358
+ if (context === undefined) throw new Error('useI18n must be used within an I18nProvider');
359
+ return context;
360
+ }
361
+ function $25d82f0a3d474ebc$export$5aebe9a147f4d146() {
362
+ return (0, $fs04y$reactintl.useIntl)();
363
+ }
364
+
365
+
366
+
367
+ /**
368
+ * Helper to translate default i18n keys or return custom labels as-is
369
+ */ const $09cc2cf19505fddf$var$useTranslateLabel = ()=>{
370
+ const intl = (0, $25d82f0a3d474ebc$export$5aebe9a147f4d146)();
371
+ return (label)=>{
372
+ // If it's one of our default i18n keys, translate it
373
+ if (label === 'admin.common.ok' || label === 'admin.common.cancel') return intl.formatMessage({
374
+ id: label
375
+ });
376
+ // Otherwise return as-is (already translated by caller)
377
+ return label;
378
+ };
379
+ };
380
+ const $09cc2cf19505fddf$var$overlayStyles = function anonymous(props) {
381
+ let rules = " ";
382
+ rules += ' _Pb12';
383
+ rules += ' Wr12';
384
+ rules += ' _lr12';
385
+ rules += ' _Ar12';
386
+ rules += ' _zr12';
387
+ rules += ' g812';
388
+ rules += ' sd12';
389
+ rules += ' eb12';
390
+ rules += ' _Ca12';
391
+ rules += ' _Bb12';
392
+ if (props.isFromPopover) rules += ' _99NTVsc12';
393
+ return rules;
394
+ };
330
395
  const $09cc2cf19505fddf$var$modalStyles = " gqlRAZb12 oe12 ne12 ke12 je12 _nLeasBb12 Th12 Qh12 Sh12 Rh12 Z9ar6Zb12 ZnA12 ZoQAax0d12 LQAax0d12 _ZBuPDyb12";
331
396
  const $09cc2cf19505fddf$var$headingStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-lcY1Ce12 vx12 we12 xe12 _xa12 wX0cczbd12 xX0cczbd12 _xX0cczba12 wezxGHbd12 xezxGHbd12 _xezxGHba12 wfe12 xfe12 _xfa12 wfX0cczbd12 xfX0cczbd12 _xfX0cczba12 wfezxGHbd12 xfezxGHbd12 _xfezxGHba12 _Fd12 _FezxGHba12 _FnuYUweb12 po12 Jy12 Gx12 Iy12 Hy12";
332
397
  const $09cc2cf19505fddf$var$messageStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-d12 vx12 wb12 xb12 _xa12 _Fb12 _FnuYUwec12 pMbOPsb12 Jy12 GA12 Iy12 Hy12";
333
398
  const $09cc2cf19505fddf$var$buttonGroupStyles = " sd12 Ug12 qg12 _Cb12";
334
- function $09cc2cf19505fddf$export$de466dd8317b0b75({ isOpen: isOpen, onClose: onClose, title: title, message: message, variant: variant = 'info', confirmLabel: confirmLabel = 'OK', cancelLabel: cancelLabel = 'Cancel', onConfirm: onConfirm, showCancel: showCancel = true, children: children }) {
399
+ function $09cc2cf19505fddf$export$de466dd8317b0b75({ isFromPopover: isFromPopover = false, isOpen: isOpen, onClose: onClose, title: title, message: message, variant: variant = 'info', confirmLabel: confirmLabel = 'admin.common.ok', cancelLabel: cancelLabel = 'admin.common.cancel', onConfirm: onConfirm, showCancel: showCancel = true, children: children }) {
335
400
  const [isProcessing, setIsProcessing] = (0, $fs04y$react.useState)(false);
401
+ const translateLabel = $09cc2cf19505fddf$var$useTranslateLabel();
402
+ const intl = (0, $25d82f0a3d474ebc$export$5aebe9a147f4d146)();
336
403
  const handleConfirm = async ()=>{
337
404
  setIsProcessing(true);
338
405
  try {
@@ -347,7 +414,9 @@ function $09cc2cf19505fddf$export$de466dd8317b0b75({ isOpen: isOpen, onClose: on
347
414
  return (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactariacomponents.ModalOverlay), {
348
415
  isOpen: isOpen,
349
416
  onOpenChange: (open)=>!open && onClose(),
350
- className: $09cc2cf19505fddf$var$overlayStyles,
417
+ className: $09cc2cf19505fddf$var$overlayStyles({
418
+ isFromPopover: isFromPopover
419
+ }),
351
420
  children: (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactariacomponents.Modal), {
352
421
  className: $09cc2cf19505fddf$var$modalStyles,
353
422
  children: (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactariacomponents.Dialog), {
@@ -374,14 +443,16 @@ function $09cc2cf19505fddf$export$de466dd8317b0b75({ isOpen: isOpen, onClose: on
374
443
  size: "M",
375
444
  onPress: close,
376
445
  isDisabled: isProcessing,
377
- children: cancelLabel
446
+ children: translateLabel(cancelLabel)
378
447
  }),
379
448
  (0, $fs04y$reactjsxruntime.jsx)((0, $e6839169613154d7$export$353f5b6fc5456de1), {
380
449
  variant: buttonVariant,
381
450
  size: "M",
382
451
  onPress: handleConfirm,
383
452
  isDisabled: isProcessing,
384
- children: isProcessing ? 'Processing...' : confirmLabel
453
+ children: isProcessing ? intl.formatMessage({
454
+ id: 'admin.common.processing'
455
+ }) : translateLabel(confirmLabel)
385
456
  })
386
457
  ]
387
458
  })
@@ -391,10 +462,12 @@ function $09cc2cf19505fddf$export$de466dd8317b0b75({ isOpen: isOpen, onClose: on
391
462
  })
392
463
  });
393
464
  }
394
- function $09cc2cf19505fddf$export$a551a871839880f9({ isOpen: isOpen, onClose: onClose, title: title, message: message, inputLabel: inputLabel, inputPlaceholder: inputPlaceholder = '', confirmLabel: confirmLabel = 'OK', cancelLabel: cancelLabel = 'Cancel', onConfirm: onConfirm, validator: validator }) {
465
+ function $09cc2cf19505fddf$export$a551a871839880f9({ isOpen: isOpen, onClose: onClose, title: title, message: message, inputLabel: inputLabel, inputPlaceholder: inputPlaceholder = '', confirmLabel: confirmLabel = 'admin.common.ok', cancelLabel: cancelLabel = 'admin.common.cancel', onConfirm: onConfirm, validator: validator }) {
395
466
  const [value, setValue] = (0, $fs04y$react.useState)('');
396
467
  const [error, setError] = (0, $fs04y$react.useState)(null);
397
468
  const [isProcessing, setIsProcessing] = (0, $fs04y$react.useState)(false);
469
+ const translateLabel = $09cc2cf19505fddf$var$useTranslateLabel();
470
+ const intl = (0, $25d82f0a3d474ebc$export$5aebe9a147f4d146)();
398
471
  const handleConfirm = async ()=>{
399
472
  // Validate
400
473
  if (validator) {
@@ -463,14 +536,16 @@ function $09cc2cf19505fddf$export$a551a871839880f9({ isOpen: isOpen, onClose: on
463
536
  close();
464
537
  },
465
538
  isDisabled: isProcessing,
466
- children: cancelLabel
539
+ children: translateLabel(cancelLabel)
467
540
  }),
468
541
  (0, $fs04y$reactjsxruntime.jsx)((0, $e6839169613154d7$export$353f5b6fc5456de1), {
469
542
  variant: "primary",
470
543
  size: "M",
471
544
  onPress: handleConfirm,
472
545
  isDisabled: isProcessing,
473
- children: isProcessing ? 'Processing...' : confirmLabel
546
+ children: isProcessing ? intl.formatMessage({
547
+ id: 'admin.common.processing'
548
+ }) : translateLabel(confirmLabel)
474
549
  })
475
550
  ]
476
551
  })
@@ -1253,43 +1328,6 @@ function $5f63bea78c5270d1$export$37acb3580601e69a({ variant: variant, children:
1253
1328
 
1254
1329
 
1255
1330
 
1256
-
1257
-
1258
- const $25d82f0a3d474ebc$var$I18nContext = /*#__PURE__*/ (0, $fs04y$react.createContext)(undefined);
1259
- function $25d82f0a3d474ebc$export$a54013f0d02a8f82({ children: children, messages: messages }) {
1260
- // For MVP, we'll start with just English
1261
- // Future: Add locale state management and persistence
1262
- const locale = 'en';
1263
- const setLocale = (newLocale)=>{
1264
- // Future: Implement locale switching with localStorage
1265
- console.log('Locale switching to:', newLocale);
1266
- };
1267
- // Defensive check: ensure messages are loaded
1268
- const currentMessages = messages?.[locale] || {};
1269
- if (!messages || Object.keys(currentMessages).length === 0) console.warn('I18nProvider: No messages loaded for locale:', locale);
1270
- return (0, $fs04y$reactjsxruntime.jsx)($25d82f0a3d474ebc$var$I18nContext.Provider, {
1271
- value: {
1272
- locale: locale,
1273
- setLocale: setLocale
1274
- },
1275
- children: (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactintl.IntlProvider), {
1276
- messages: currentMessages,
1277
- locale: locale,
1278
- defaultLocale: "en",
1279
- children: children
1280
- })
1281
- });
1282
- }
1283
- function $25d82f0a3d474ebc$export$3f3caade1c12f8c9() {
1284
- const context = (0, $fs04y$react.useContext)($25d82f0a3d474ebc$var$I18nContext);
1285
- if (context === undefined) throw new Error('useI18n must be used within an I18nProvider');
1286
- return context;
1287
- }
1288
- function $25d82f0a3d474ebc$export$5aebe9a147f4d146() {
1289
- return (0, $fs04y$reactintl.useIntl)();
1290
- }
1291
-
1292
-
1293
1331
  const $5a568b5eb65bfe76$var$closeButtonStyles = function anonymous(props) {
1294
1332
  let rules = " ";
1295
1333
  if (props.isFocusVisible) rules += ' _Lf12';
@@ -1626,7 +1664,7 @@ function $3764d8bc3c612a35$export$944aceb4f8c89f10({ items: items, ...props }) {
1626
1664
  children: (0, $fs04y$reactjsxruntime.jsx)($3764d8bc3c612a35$var$DisclosureContents, {
1627
1665
  ...item
1628
1666
  }, `${item.id}-contents`)
1629
- }))
1667
+ }, item.id))
1630
1668
  });
1631
1669
  }
1632
1670
  const $3764d8bc3c612a35$var$DisclosureContents = (item)=>{
@@ -1689,13 +1727,13 @@ const $3764d8bc3c612a35$var$DisclosureContents = (item)=>{
1689
1727
  marker: 'var(--ginger-600)',
1690
1728
  badge: 'ginger'
1691
1729
  },
1692
- meat: {
1730
+ protein: {
1693
1731
  marker: 'var(--berry-500)',
1694
1732
  badge: 'berry'
1695
1733
  },
1696
- fish: {
1697
- marker: 'var(--berry-500)',
1698
- badge: 'berry'
1734
+ fruit: {
1735
+ marker: 'var(--peach-500)',
1736
+ badge: 'peach'
1699
1737
  },
1700
1738
  condiment: {
1701
1739
  marker: 'var(--plum-500)',
@@ -1959,12 +1997,17 @@ const $e0bb5e496bf3f32a$var$linkStyles = function anonymous(props) {
1959
1997
  if (props.isPressed) rules += ' ppxXPsb12';
1960
1998
  else if (props.isHovered) rules += ' ppxXPsb12';
1961
1999
  else rules += ' pMbOPsb12';
2000
+ if (props.isQuiet) rules += ' _Xa12';
2001
+ else {
2002
+ rules += ' _Xb12';
2003
+ rules += ' __Va12';
2004
+ }
1962
2005
  rules += ' ry12';
1963
2006
  if (props.isHovered) rules += ' g912';
1964
2007
  else rules += ' g912';
1965
2008
  return rules;
1966
2009
  };
1967
- function $e0bb5e496bf3f32a$export$a6c7ac8248d6e38a({ children: children, href: href, isExternal: isExternal, className: className, ...props }) {
2010
+ function $e0bb5e496bf3f32a$export$a6c7ac8248d6e38a({ children: children, href: href, isExternal: isExternal, isQuiet: isQuiet = false, className: className, ...props }) {
1968
2011
  // Automatically detect external links if not specified
1969
2012
  const isExternalLink = isExternal ?? (href?.toString().startsWith('http://') || href?.toString().startsWith('https://'));
1970
2013
  const externalProps = isExternalLink ? {
@@ -1975,7 +2018,9 @@ function $e0bb5e496bf3f32a$export$a6c7ac8248d6e38a({ children: children, href: h
1975
2018
  ...props,
1976
2019
  ...externalProps,
1977
2020
  href: href,
1978
- className: className || $e0bb5e496bf3f32a$var$linkStyles,
2021
+ className: className || $e0bb5e496bf3f32a$var$linkStyles({
2022
+ isQuiet: isQuiet
2023
+ }),
1979
2024
  children: children
1980
2025
  });
1981
2026
  }
@@ -3059,14 +3104,15 @@ function $e17150d3e28b39fb$export$64133607978931b({ sourceCategory: sourceCatego
3059
3104
 
3060
3105
 
3061
3106
 
3062
- const $22c620249a5b4412$var$cardStyles = " gqlRAZb12 oe12 ne12 ke12 je12 Th12 Qh12 Sh12 Rh12 _kb12 hb12 mb12 lb12 _jf12 i05TOsb12 sd12 _ta12 Ug12 qg12 eb12 _Wa12";
3107
+ const $22c620249a5b4412$var$cardStyles = " gqlRAZb12 oe12 ne12 ke12 je12 Th12 Qh12 Sh12 Rh12 _kb12 hb12 mb12 lb12 _jf12 i05TOsb12 sd12 _ta12 Ul12 ql12 eb12 _Wa12";
3063
3108
  const $22c620249a5b4412$var$cardTitleStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-e12 vx12 wd12 xd12 _xa12 wX0cczbc12 xX0cczbc12 _xX0cczba12 wfd12 xfd12 _xfa12 wfX0cczbc12 xfX0cczbc12 _xfX0cczba12 _Fd12 _FezxGHba12 _FnuYUweb12 pMbOPsb12 Jy12 Gy12 Iy12 Hy12";
3064
3109
  const $22c620249a5b4412$var$cardValueStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-snabcc12 vx12 we12 xe12 _xa12 wX0cczbd12 xX0cczbd12 _xX0cczba12 wezxGHbd12 xezxGHbd12 _xezxGHba12 wfe12 xfe12 _xfa12 wfX0cczbd12 xfX0cczbd12 _xfX0cczba12 wfezxGHbd12 xfezxGHbd12 _xfezxGHba12 _Fd12 _FezxGHba12 _FnuYUweb12 pMbOPsb12";
3065
3110
  const $22c620249a5b4412$var$cardDescStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-d12 vx12 wb12 xb12 _xa12 _Fb12 _FnuYUwec12 pMbOPsb12 Jy12 Gy12 Iy12 Hy12";
3066
- const $22c620249a5b4412$var$listPreviewStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-c12 vx12 wb12 xb12 _xa12 _Fb12 _FnuYUwec12 pMbOPsb12 Jv12 Gy12 Iy12 Hy12";
3111
+ const $22c620249a5b4412$var$listPreviewStyles = " sd12 _tc12 Ul12 ql12 eb12 uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-c12 vx12 wb12 xb12 _xa12 _Fb12 _FnuYUwec12 pMbOPsb12 Jy12 Gy12 Iy12 Hy12";
3067
3112
  const $22c620249a5b4412$var$listBoxStyles = " Tp12 Qp12 Sp12 Rp12";
3068
- const $22c620249a5b4412$var$listBoxItemStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-d12 vx12 wb12 xb12 _xa12 _Fb12 _FnuYUwec12 pMbOPsb12 St12 Rt12 Tp12 Qp12 oa12 na12 ka12 ja12 g912";
3069
- function $22c620249a5b4412$export$b5cddb1a6bf990a0({ title: title, value: value, description: description, list: list, listTitle: listTitle }) {
3113
+ const $22c620249a5b4412$var$listBoxItemStyles = " uk12 uch12 udi12 uea12 ugb12 uhd12 uje12 u2NhKxcl12 uic12 -_6BNtrc-d12 vx12 wb12 xb12 _xa12 _Fb12 _FnuYUwec12 pMbOPsb12 St12 Rt12 Tp12 Qp12 oa12 na12 ka12 ja12 g912 sd12 eb12 _Ce12 Ue12 qe12";
3114
+ const $22c620249a5b4412$var$actionsContainerStyles = " sd12 Ue12 qe12 _Ca12";
3115
+ function $22c620249a5b4412$export$b5cddb1a6bf990a0({ title: title, value: value, description: description, list: list, listTitle: listTitle, actions: actions, listItemActions: listItemActions }) {
3070
3116
  const intl = (0, $25d82f0a3d474ebc$export$5aebe9a147f4d146)();
3071
3117
  return (0, $fs04y$reactjsxruntime.jsxs)("div", {
3072
3118
  className: $22c620249a5b4412$var$cardStyles,
@@ -3083,28 +3129,39 @@ function $22c620249a5b4412$export$b5cddb1a6bf990a0({ title: title, value: value,
3083
3129
  className: $22c620249a5b4412$var$cardDescStyles,
3084
3130
  children: description
3085
3131
  }),
3086
- list && list.length > 0 && (0, $fs04y$reactjsxruntime.jsx)("div", {
3132
+ list && list.length > 0 && (0, $fs04y$reactjsxruntime.jsxs)("div", {
3087
3133
  className: $22c620249a5b4412$var$listPreviewStyles,
3088
- children: (0, $fs04y$reactjsxruntime.jsxs)((0, $fs04y$reactariacomponents.DialogTrigger), {
3089
- children: [
3090
- (0, $fs04y$reactjsxruntime.jsx)((0, $e6839169613154d7$export$353f5b6fc5456de1), {
3091
- variant: "navigation",
3092
- children: intl.formatMessage({
3093
- id: 'statCard.viewAll'
3094
- })
3095
- }),
3096
- (0, $fs04y$reactjsxruntime.jsx)((0, $d1460dbc559e1751$export$5b6b19405a83ff9d), {
3097
- title: listTitle || title,
3098
- children: (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactariacomponents.ListBox), {
3099
- className: $22c620249a5b4412$var$listBoxStyles,
3100
- children: list.map((item)=>(0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactariacomponents.ListBoxItem), {
3101
- className: $22c620249a5b4412$var$listBoxItemStyles,
3102
- children: item.name
3103
- }, item.id))
3134
+ children: [
3135
+ (0, $fs04y$reactjsxruntime.jsxs)((0, $fs04y$reactariacomponents.DialogTrigger), {
3136
+ children: [
3137
+ (0, $fs04y$reactjsxruntime.jsx)((0, $e6839169613154d7$export$353f5b6fc5456de1), {
3138
+ variant: "navigation",
3139
+ children: intl.formatMessage({
3140
+ id: 'statCard.viewAll'
3141
+ })
3142
+ }),
3143
+ (0, $fs04y$reactjsxruntime.jsx)((0, $d1460dbc559e1751$export$5b6b19405a83ff9d), {
3144
+ title: listTitle || title,
3145
+ children: (0, $fs04y$reactjsxruntime.jsx)((0, $fs04y$reactariacomponents.ListBox), {
3146
+ className: $22c620249a5b4412$var$listBoxStyles,
3147
+ children: list.map((item)=>(0, $fs04y$reactjsxruntime.jsxs)((0, $fs04y$reactariacomponents.ListBoxItem), {
3148
+ className: $22c620249a5b4412$var$listBoxItemStyles,
3149
+ children: [
3150
+ (0, $fs04y$reactjsxruntime.jsx)("span", {
3151
+ children: item.name
3152
+ }),
3153
+ listItemActions?.(item)
3154
+ ]
3155
+ }, item.id))
3156
+ })
3104
3157
  })
3105
- })
3106
- ]
3107
- })
3158
+ ]
3159
+ }),
3160
+ actions && (0, $fs04y$reactjsxruntime.jsx)("div", {
3161
+ className: $22c620249a5b4412$var$actionsContainerStyles,
3162
+ children: actions
3163
+ })
3164
+ ]
3108
3165
  })
3109
3166
  ]
3110
3167
  });
@@ -3865,7 +3922,7 @@ function $8f5795e91d23efab$export$973ca22476b0e05f() {
3865
3922
 
3866
3923
  // Export all locale message files for i18n
3867
3924
  var $c6f2b9804e791467$exports = {};
3868
- $c6f2b9804e791467$exports = JSON.parse("{\"app.title\":\"Global Ferments\",\"app.subtitle\":\"Explore Fermented Foods Around the World\",\"home.hello\":\"Hello World!\",\"home.description\":\"Next.js is running successfully with React Aria Components and React Spectrum S2. The foundation is set!\",\"home.checkHealth\":\"Check API Health\",\"home.healthChecking\":\"Checking health...\",\"home.healthClickPrompt\":\"Click the button to check API health\",\"health.status\":\"Status\",\"health.database\":\"Database\",\"health.time\":\"Time\",\"health.error\":\"Error\",\"health.siteUrls\":\"Site URLs\",\"health.apiEndpoints\":\"API Endpoints\",\"theme.toggle.label\":\"Dark Mode\",\"theme.toggle.ariaLabel\":\"Toggle dark mode\",\"features.map\":\"Coming soon: Interactive map with fermented foods\",\"features.browse\":\"Browse by region, category, and culture\",\"ferments.subtitle\":\"Explore and discover fermented foods from around the world\",\"ferments.loading\":\"Loading...\",\"ferments.count\":\"{count, plural, =0 {No ferments found} one {# ferment found} other {# ferments found}}\",\"ferments.filter.category\":\"Category\",\"ferments.filter.country\":\"Country\",\"ferments.filter.allCategories\":\"All Categories\",\"ferments.filter.allCountries\":\"All Countries\",\"ferments.filter.clear\":\"Clear Filters\",\"ferments.filter.loading\":\"Loading filters...\",\"ferments.filter.category.ariaLabel\":\"Filter by category\",\"ferments.filter.country.ariaLabel\":\"Filter by country\",\"ferments.search.placeholder\":\"Search ferments...\",\"ferments.search.label\":\"Search\",\"ferments.search.ariaLabel\":\"Search ferments by name or description\",\"ferments.search.clear\":\"Clear\",\"ferment.detail.backToBrowse\":\"Back to Browse\",\"ferment.detail.loading\":\"Loading ferment details...\",\"ferment.detail.notFound\":\"Ferment not found\",\"ferment.detail.error\":\"Failed to load ferment details\",\"ferment.detail.country\":\"Country\",\"ferment.detail.region\":\"Region\",\"ferment.detail.category\":\"Category\",\"ferment.detail.ingredients\":\"Ingredients\",\"ferment.detail.learnMore\":\"Learn More\",\"ferment.detail.viewSource\":\"View Source\",\"ferment.detail.location\":\"Location\",\"ferment.detail.coordinates\":\"Coordinates\",\"ferment.detail.relatedFerments\":\"Related Ferments\",\"ferment.detail.close\":\"Close\",\"map.loading\":\"Loading map...\",\"map.error.title\":\"Map Error\",\"map.error.load\":\"Failed to load ferments for map\",\"map.error.noToken\":\"Mapbox token not configured. Please set NEXT_PUBLIC_MAPBOX_TOKEN in your environment.\",\"map.error.init\":\"Failed to initialize map\",\"map.ariaLabel\":\"Interactive map showing fermented foods around the world\",\"map.marker.label\":\"{name} from {country}\",\"map.popup.viewDetails\":\"View details\",\"nav.map\":\"Map\",\"nav.list\":\"List\",\"nav.viewToggle.ariaLabel\":\"Switch between map and list views\",\"nav.about\":\"About\",\"common.back\":\"Back\",\"filterTabs.ariaLabel\":\"Filter options\",\"statCard.viewAll\":\"View all\",\"ferments.category.all\":\"All Categories\",\"ferments.category.vegetable\":\"Vegetable\",\"ferments.category.dairy\":\"Dairy\",\"ferments.category.grain\":\"Grain\",\"ferments.category.legume\":\"Legume\",\"ferments.category.beverage\":\"Beverage\",\"ferments.category.condiment\":\"Condiment\",\"ferments.category.protein\":\"Protein\",\"ferments.category.other\":\"Other\",\"sources.content_type.about\":\"About\",\"sources.content_type.history\":\"History\",\"sources.content_type.recipes\":\"Recipes\",\"sources.content_type.tools\":\"Tools & Equipment\",\"sources.content_type.starters\":\"Starters & Cultures\",\"sources.content_type.culture\":\"Cultural Context\",\"sources.content_type.scientific\":\"Scientific Research\",\"sources.content_type.commercial\":\"Commercial Products\",\"sources.content_type.course\":\"Courses & Tutorials\",\"sources.content_type.general\":\"General Information\"}");
3925
+ $c6f2b9804e791467$exports = JSON.parse("{\"app.title\":\"World Ferments\",\"app.subtitle\":\"Explore Fermented Foods Around the World\",\"home.hello\":\"Hello World!\",\"home.description\":\"Next.js is running successfully with React Aria Components and React Spectrum S2. The foundation is set!\",\"home.checkHealth\":\"Check API Health\",\"home.healthChecking\":\"Checking health...\",\"home.healthClickPrompt\":\"Click the button to check API health\",\"health.status\":\"Status\",\"health.database\":\"Database\",\"health.time\":\"Time\",\"health.error\":\"Error\",\"health.siteUrls\":\"Site URLs\",\"health.apiEndpoints\":\"API Endpoints\",\"theme.toggle.label\":\"Dark Mode\",\"theme.toggle.ariaLabel\":\"Toggle dark mode\",\"features.map\":\"Coming soon: Interactive map with fermented foods\",\"features.browse\":\"Browse by region, category, and culture\",\"ferments.subtitle\":\"Explore and discover fermented foods from around the world\",\"ferments.loading\":\"Loading...\",\"ferments.count\":\"{count, plural, =0 {No ferments found} one {# ferment found} other {# ferments found}}\",\"ferments.filter.category\":\"Category\",\"ferments.filter.country\":\"Country\",\"ferments.filter.allCategories\":\"All Categories\",\"ferments.filter.allCountries\":\"All Countries\",\"ferments.filter.all\":\"All\",\"ferments.filter.alphabetLabel\":\"Filter by first letter\",\"ferments.filter.clear\":\"Clear Filters\",\"ferments.filter.loading\":\"Loading filters...\",\"ferments.filter.category.ariaLabel\":\"Filter by category\",\"ferments.filter.country.ariaLabel\":\"Filter by country\",\"ferments.search.placeholder\":\"Search ferments...\",\"ferments.search.label\":\"Search\",\"ferments.search.ariaLabel\":\"Search ferments by name or description\",\"ferments.search.clear\":\"Clear\",\"ferment.detail.backToBrowse\":\"Back to Browse\",\"ferment.detail.loading\":\"Loading ferment details...\",\"ferment.detail.notFound\":\"Ferment not found\",\"ferment.detail.error\":\"Failed to load ferment details\",\"ferment.detail.country\":\"Country\",\"ferment.detail.region\":\"Region\",\"ferment.detail.category\":\"Category\",\"ferment.detail.ingredients\":\"Ingredients\",\"ferment.detail.learnMore\":\"Learn More\",\"ferment.detail.viewSource\":\"View Source\",\"ferment.detail.location\":\"Location\",\"ferment.detail.coordinates\":\"Coordinates\",\"ferment.detail.relatedFerments\":\"Related Ferments\",\"ferment.detail.close\":\"Close\",\"map.loading\":\"Loading map...\",\"map.error.title\":\"Map Error\",\"map.error.load\":\"Failed to load ferments for map\",\"map.error.noToken\":\"Mapbox token not configured. Please set NEXT_PUBLIC_MAPBOX_TOKEN in your environment.\",\"map.error.init\":\"Failed to initialize map\",\"map.ariaLabel\":\"Interactive map showing fermented foods around the world\",\"map.marker.label\":\"{name} from {country}\",\"map.popup.viewDetails\":\"View details\",\"nav.map\":\"Map\",\"nav.list\":\"List\",\"nav.viewToggle.ariaLabel\":\"Switch between map and list views\",\"nav.about\":\"About\",\"common.back\":\"Back\",\"common.loading\":\"Loading...\",\"common.saving\":\"Saving...\",\"filterTabs.ariaLabel\":\"Filter options\",\"statCard.viewAll\":\"View all\",\"ferments.category.all\":\"All Categories\",\"ferments.category.vegetable\":\"Vegetable\",\"ferments.category.dairy\":\"Dairy\",\"ferments.category.grain\":\"Grain\",\"ferments.category.legume\":\"Legume\",\"ferments.category.beverage\":\"Beverage\",\"ferments.category.condiment\":\"Condiment\",\"ferments.category.protein\":\"Protein\",\"ferments.category.fruit\":\"Fruit\",\"ferments.category.other\":\"Other\",\"sources.content_type.about\":\"About\",\"sources.content_type.history\":\"History\",\"sources.content_type.recipes\":\"Recipes\",\"sources.content_type.tools\":\"Tools & Equipment\",\"sources.content_type.starters\":\"Starters & Cultures\",\"sources.content_type.culture\":\"Cultural Context\",\"sources.content_type.scientific\":\"Scientific Research\",\"sources.content_type.commercial\":\"Commercial Products\",\"sources.content_type.course\":\"Courses & Tutorials\",\"sources.content_type.general\":\"General Information\"}");
3869
3926
 
3870
3927
 
3871
3928
  const $c5d9f7a2bd6c13d4$export$d0451c6199f2a163 = {
@@ -3887,10 +3944,11 @@ $parcel$export($c5b52867831f5132$exports, "filtersToQueryParams", () => $c5b5286
3887
3944
  */ const $c5b52867831f5132$export$42d0f19526e5d9da = {
3888
3945
  searchQuery: '',
3889
3946
  category: null,
3890
- country: null
3947
+ country: null,
3948
+ letterFilter: null
3891
3949
  };
3892
3950
  function $c5b52867831f5132$export$a15c90bdf31a4ff3(filters) {
3893
- return filters.searchQuery.trim() !== '' || filters.category !== null || filters.country !== null;
3951
+ return filters.searchQuery.trim() !== '' || filters.category !== null || filters.country !== null || filters.letterFilter !== null && filters.letterFilter !== 'all';
3894
3952
  }
3895
3953
  function $c5b52867831f5132$export$d0e6b6bfede2a57() {
3896
3954
  return {
@@ -3907,6 +3965,7 @@ function $c5b52867831f5132$export$5d7f9913734d3d5f(filters) {
3907
3965
  const params = {};
3908
3966
  if (filters.category) params.category = filters.category;
3909
3967
  if (filters.country) params.country = filters.country;
3968
+ if (filters.letterFilter && filters.letterFilter !== 'all') params.letter = filters.letterFilter;
3910
3969
  return params;
3911
3970
  }
3912
3971
 
@@ -3956,14 +4015,16 @@ const $53c8911eec26a318$export$457d6d213bf79459 = ()=>({
3956
4015
 
3957
4016
  /**
3958
4017
  * Ferment category values
4018
+ * Sorted alphabetically with 'other' last
3959
4019
  */ const $dfdc7d5751a79ddf$export$90169ffd4a6ec1f5 = [
3960
- 'vegetable',
4020
+ 'beverage',
4021
+ 'condiment',
3961
4022
  'dairy',
4023
+ 'fruit',
3962
4024
  'grain',
3963
4025
  'legume',
3964
- 'beverage',
3965
- 'condiment',
3966
4026
  'protein',
4027
+ 'vegetable',
3967
4028
  'other'
3968
4029
  ];
3969
4030
  const $dfdc7d5751a79ddf$export$2002190b63448c99 = [