@orianatech/pire 0.9.0 → 0.10.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/index.js CHANGED
@@ -817,6 +817,7 @@ var enMessages = {
817
817
  datePickerOpenCalendar: "Open calendar",
818
818
  datePickerPreviousMonth: "Previous month",
819
819
  datePickerNextMonth: "Next month",
820
+ dateRangePresetsLabel: "Date range shortcuts",
820
821
  numberFieldIncrease: "Increase",
821
822
  numberFieldDecrease: "Decrease",
822
823
  valueHelpFieldClear: "Clear selection",
@@ -853,6 +854,7 @@ var esMessages = {
853
854
  datePickerOpenCalendar: "Abrir calendario",
854
855
  datePickerPreviousMonth: "Mes anterior",
855
856
  datePickerNextMonth: "Mes siguiente",
857
+ dateRangePresetsLabel: "Atajos de rango de fechas",
856
858
  numberFieldIncrease: "Aumentar",
857
859
  numberFieldDecrease: "Disminuir",
858
860
  valueHelpFieldClear: "Limpiar selecci\xF3n",
@@ -1251,6 +1253,138 @@ function DatePicker({
1251
1253
  ] });
1252
1254
  }
1253
1255
 
1256
+ // src/components/forms/DateRangePicker.tsx
1257
+ import {
1258
+ DateRangePicker as AriaDateRangePicker,
1259
+ Label as Label9,
1260
+ Group as Group7,
1261
+ DateInput as DateInput2,
1262
+ DateSegment as DateSegment2,
1263
+ Button as AriaButton9,
1264
+ Popover as Popover5,
1265
+ Dialog as AriaDialog2,
1266
+ RangeCalendar,
1267
+ CalendarGrid as CalendarGrid2,
1268
+ CalendarGridHeader as CalendarGridHeader2,
1269
+ CalendarHeaderCell as CalendarHeaderCell2,
1270
+ CalendarGridBody as CalendarGridBody2,
1271
+ CalendarCell as CalendarCell2,
1272
+ Heading as Heading3,
1273
+ Text as Text10,
1274
+ FieldError as FieldError9
1275
+ } from "react-aria-components";
1276
+ import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1277
+ function rangeLengthInDays(range) {
1278
+ return range.end.toDate("UTC").getTime() / 864e5 - range.start.toDate("UTC").getTime() / 864e5 + 1;
1279
+ }
1280
+ function DateRangePicker({
1281
+ label,
1282
+ description,
1283
+ errorMessage,
1284
+ maxRangeDays,
1285
+ presets,
1286
+ size = "md",
1287
+ fullWidth = true,
1288
+ startName,
1289
+ endName,
1290
+ className,
1291
+ style,
1292
+ ...rest
1293
+ }) {
1294
+ const msg = usePireMessages();
1295
+ const current = rest.value ?? rest.defaultValue ?? null;
1296
+ const tooLong = maxRangeDays != null && current != null && rangeLengthInDays(current) > maxRangeDays;
1297
+ return /* @__PURE__ */ jsxs20(
1298
+ AriaDateRangePicker,
1299
+ {
1300
+ className: cx("pire-field", className),
1301
+ style,
1302
+ startName,
1303
+ endName,
1304
+ validationBehavior: "aria",
1305
+ ...rest,
1306
+ isInvalid: rest.isInvalid || tooLong,
1307
+ children: [
1308
+ label ? /* @__PURE__ */ jsxs20(Label9, { className: "pire-field-label", children: [
1309
+ label,
1310
+ rest.isRequired ? /* @__PURE__ */ jsx26("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1311
+ ] }) : null,
1312
+ /* @__PURE__ */ jsxs20(
1313
+ Group7,
1314
+ {
1315
+ className: "pire-control pire-daterange-control",
1316
+ "data-size": size,
1317
+ "data-full-width": String(fullWidth),
1318
+ "data-invalid": rest.isInvalid || tooLong ? "true" : void 0,
1319
+ "data-readonly": rest.isReadOnly ? "true" : void 0,
1320
+ children: [
1321
+ /* @__PURE__ */ jsx26(DateInput2, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment2, { segment, className: "pire-datesegment" }) }),
1322
+ /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1323
+ /* @__PURE__ */ jsx26(DateInput2, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment2, { segment, className: "pire-datesegment" }) }),
1324
+ /* @__PURE__ */ jsx26(
1325
+ AriaButton9,
1326
+ {
1327
+ className: "pire-iconbtn",
1328
+ "data-size": "sm",
1329
+ "aria-label": msg.datePickerOpenCalendar,
1330
+ style: { width: 24, height: 24 },
1331
+ children: /* @__PURE__ */ jsx26(Icon, { name: "calendar", size: 16 })
1332
+ }
1333
+ )
1334
+ ]
1335
+ }
1336
+ ),
1337
+ description ? /* @__PURE__ */ jsx26(Text10, { slot: "description", className: "pire-field-hint", children: description }) : null,
1338
+ /* @__PURE__ */ jsx26(FieldError9, { className: "pire-field-error", children: errorMessage }),
1339
+ /* @__PURE__ */ jsx26(Popover5, { className: "pire-popover", children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-daterange-dialog", children: [
1340
+ presets?.length ? (
1341
+ // Before the calendar in the DOM, so keyboard users reach the shortcut without
1342
+ // arrowing through a month first.
1343
+ /* @__PURE__ */ jsx26("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ jsx26(
1344
+ AriaButton9,
1345
+ {
1346
+ className: "pire-daterange-preset",
1347
+ onPress: () => rest.onChange?.(preset.range()),
1348
+ children: preset.label
1349
+ },
1350
+ preset.id
1351
+ )) })
1352
+ ) : null,
1353
+ /* @__PURE__ */ jsxs20(RangeCalendar, { className: "pire-calendar", children: [
1354
+ /* @__PURE__ */ jsxs20("header", { className: "pire-calendar-head", children: [
1355
+ /* @__PURE__ */ jsx26(
1356
+ AriaButton9,
1357
+ {
1358
+ slot: "previous",
1359
+ className: "pire-iconbtn",
1360
+ "data-size": "sm",
1361
+ "aria-label": msg.datePickerPreviousMonth,
1362
+ children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-left", size: 16 })
1363
+ }
1364
+ ),
1365
+ /* @__PURE__ */ jsx26(Heading3, { className: "pire-calendar-title" }),
1366
+ /* @__PURE__ */ jsx26(
1367
+ AriaButton9,
1368
+ {
1369
+ slot: "next",
1370
+ className: "pire-iconbtn",
1371
+ "data-size": "sm",
1372
+ "aria-label": msg.datePickerNextMonth,
1373
+ children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-right", size: 16 })
1374
+ }
1375
+ )
1376
+ ] }),
1377
+ /* @__PURE__ */ jsxs20(CalendarGrid2, { className: "pire-calendar-grid", children: [
1378
+ /* @__PURE__ */ jsx26(CalendarGridHeader2, { children: (day) => /* @__PURE__ */ jsx26(CalendarHeaderCell2, { children: day }) }),
1379
+ /* @__PURE__ */ jsx26(CalendarGridBody2, { children: (date) => /* @__PURE__ */ jsx26(CalendarCell2, { date, className: "pire-calendar-cell" }) })
1380
+ ] })
1381
+ ] })
1382
+ ] }) })
1383
+ ]
1384
+ }
1385
+ );
1386
+ }
1387
+
1254
1388
  // src/components/forms/ValueHelpField.tsx
1255
1389
  import * as React9 from "react";
1256
1390
 
@@ -1258,8 +1392,8 @@ import * as React9 from "react";
1258
1392
  import * as React8 from "react";
1259
1393
 
1260
1394
  // src/components/feedback/Dialog.tsx
1261
- import { ModalOverlay, Modal, Dialog as AriaDialog2, Heading as Heading3 } from "react-aria-components";
1262
- import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1395
+ import { ModalOverlay, Modal, Dialog as AriaDialog3, Heading as Heading4 } from "react-aria-components";
1396
+ import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
1263
1397
  function Dialog({
1264
1398
  isOpen,
1265
1399
  onOpenChange,
@@ -1279,7 +1413,7 @@ function Dialog({
1279
1413
  onClose?.();
1280
1414
  onOpenChange?.(false);
1281
1415
  };
1282
- return /* @__PURE__ */ jsx26(
1416
+ return /* @__PURE__ */ jsx27(
1283
1417
  ModalOverlay,
1284
1418
  {
1285
1419
  className: "pire-modal-overlay",
@@ -1288,16 +1422,16 @@ function Dialog({
1288
1422
  onOpenChange: (o) => {
1289
1423
  if (!o) close();
1290
1424
  },
1291
- children: /* @__PURE__ */ jsx26(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-dialog", children: [
1292
- title ? /* @__PURE__ */ jsxs20("header", { className: "pire-dialog-head", children: [
1293
- /* @__PURE__ */ jsxs20("div", { style: { flex: 1, minWidth: 0 }, children: [
1294
- /* @__PURE__ */ jsx26(Heading3, { slot: "title", className: "pire-dialog-title", children: title }),
1295
- subtitle ? /* @__PURE__ */ jsx26("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1425
+ children: /* @__PURE__ */ jsx27(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs21(AriaDialog3, { className: "pire-dialog", children: [
1426
+ title ? /* @__PURE__ */ jsxs21("header", { className: "pire-dialog-head", children: [
1427
+ /* @__PURE__ */ jsxs21("div", { style: { flex: 1, minWidth: 0 }, children: [
1428
+ /* @__PURE__ */ jsx27(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
1429
+ subtitle ? /* @__PURE__ */ jsx27("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1296
1430
  ] }),
1297
- showClose ? /* @__PURE__ */ jsx26(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1431
+ showClose ? /* @__PURE__ */ jsx27(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1298
1432
  ] }) : null,
1299
- /* @__PURE__ */ jsx26("div", { className: "pire-dialog-body", children }),
1300
- footer ? /* @__PURE__ */ jsx26("footer", { className: "pire-dialog-foot", children: footer }) : null
1433
+ /* @__PURE__ */ jsx27("div", { className: "pire-dialog-body", children }),
1434
+ footer ? /* @__PURE__ */ jsx27("footer", { className: "pire-dialog-foot", children: footer }) : null
1301
1435
  ] }) })
1302
1436
  }
1303
1437
  );
@@ -1314,9 +1448,9 @@ import {
1314
1448
  } from "react-aria-components";
1315
1449
 
1316
1450
  // src/components/feedback/Skeleton.tsx
1317
- import { jsx as jsx27 } from "react/jsx-runtime";
1451
+ import { jsx as jsx28 } from "react/jsx-runtime";
1318
1452
  function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
1319
- return /* @__PURE__ */ jsx27(
1453
+ return /* @__PURE__ */ jsx28(
1320
1454
  "div",
1321
1455
  {
1322
1456
  className: cx("pire-skeleton", className),
@@ -1330,7 +1464,7 @@ function Skeleton({ shape = "text", width, height, className, style, ...rest })
1330
1464
  var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
1331
1465
  function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
1332
1466
  const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
1333
- return /* @__PURE__ */ jsx27(
1467
+ return /* @__PURE__ */ jsx28(
1334
1468
  "div",
1335
1469
  {
1336
1470
  className: cx("pire-skeleton-row", className),
@@ -1342,13 +1476,13 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1342
1476
  const align = c.numeric ? "right" : c.align ?? "left";
1343
1477
  return (
1344
1478
  // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
1345
- /* @__PURE__ */ jsx27(
1479
+ /* @__PURE__ */ jsx28(
1346
1480
  "div",
1347
1481
  {
1348
1482
  className: "pire-skeleton-cell",
1349
1483
  "data-align": align,
1350
1484
  style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
1351
- children: /* @__PURE__ */ jsx27(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1485
+ children: /* @__PURE__ */ jsx28(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1352
1486
  },
1353
1487
  i
1354
1488
  )
@@ -1359,7 +1493,7 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1359
1493
  }
1360
1494
 
1361
1495
  // src/components/data/DataTable.tsx
1362
- import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1496
+ import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1363
1497
  function DataTable({
1364
1498
  columns,
1365
1499
  rows,
@@ -1391,14 +1525,14 @@ function DataTable({
1391
1525
  ...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
1392
1526
  ];
1393
1527
  const body = isLoading ? [] : rows;
1394
- return /* @__PURE__ */ jsx28(
1528
+ return /* @__PURE__ */ jsx29(
1395
1529
  "div",
1396
1530
  {
1397
1531
  className: cx("pire-table-wrap", className),
1398
1532
  style,
1399
1533
  "data-loading": isLoading ? "true" : void 0,
1400
1534
  "aria-busy": isLoading ? "true" : void 0,
1401
- children: /* @__PURE__ */ jsxs21(
1535
+ children: /* @__PURE__ */ jsxs22(
1402
1536
  Table,
1403
1537
  {
1404
1538
  className: "pire-table",
@@ -1415,9 +1549,9 @@ function DataTable({
1415
1549
  if (row) onRowAction(row);
1416
1550
  } : void 0,
1417
1551
  children: [
1418
- /* @__PURE__ */ jsxs21(TableHeader, { className: "pire-thead-row", children: [
1419
- selectable ? /* @__PURE__ */ jsx28(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx28(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1420
- columns.map((c, i) => /* @__PURE__ */ jsx28(
1552
+ /* @__PURE__ */ jsxs22(TableHeader, { className: "pire-thead-row", children: [
1553
+ selectable ? /* @__PURE__ */ jsx29(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx29(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1554
+ columns.map((c, i) => /* @__PURE__ */ jsx29(
1421
1555
  Column,
1422
1556
  {
1423
1557
  id: c.key,
@@ -1427,9 +1561,9 @@ function DataTable({
1427
1561
  width: c.width,
1428
1562
  "data-align": c.numeric || c.align === "right" ? "right" : c.align,
1429
1563
  "data-allows-sorting": c.sortable ? "true" : void 0,
1430
- children: /* @__PURE__ */ jsxs21("span", { className: "pire-th-inner", children: [
1564
+ children: /* @__PURE__ */ jsxs22("span", { className: "pire-th-inner", children: [
1431
1565
  c.label,
1432
- c.sortable ? /* @__PURE__ */ jsx28(
1566
+ c.sortable ? /* @__PURE__ */ jsx29(
1433
1567
  Icon,
1434
1568
  {
1435
1569
  size: 12,
@@ -1442,15 +1576,15 @@ function DataTable({
1442
1576
  c.key
1443
1577
  ))
1444
1578
  ] }),
1445
- /* @__PURE__ */ jsx28(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs21("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1446
- /* @__PURE__ */ jsx28("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1579
+ /* @__PURE__ */ jsx29(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs22("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1580
+ /* @__PURE__ */ jsx29("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1447
1581
  Array.from({ length: skeletonRows }, (_, i) => (
1448
1582
  // biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
1449
- /* @__PURE__ */ jsx28(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1583
+ /* @__PURE__ */ jsx29(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1450
1584
  ))
1451
- ] }) : /* @__PURE__ */ jsx28("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ jsxs21(Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
1452
- selectable ? /* @__PURE__ */ jsx28(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx28(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1453
- columns.map((c) => /* @__PURE__ */ jsx28(
1585
+ ] }) : /* @__PURE__ */ jsx29("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ jsxs22(Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
1586
+ selectable ? /* @__PURE__ */ jsx29(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx29(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1587
+ columns.map((c) => /* @__PURE__ */ jsx29(
1454
1588
  Cell,
1455
1589
  {
1456
1590
  className: "pire-td",
@@ -1469,7 +1603,7 @@ function DataTable({
1469
1603
  }
1470
1604
 
1471
1605
  // src/components/patterns/ValueHelpDialog.tsx
1472
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1606
+ import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1473
1607
  function ValueHelpDialog({
1474
1608
  isOpen,
1475
1609
  title = "Select a record",
@@ -1490,16 +1624,16 @@ function ValueHelpDialog({
1490
1624
  if (!q) return rows;
1491
1625
  return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
1492
1626
  }, [rows, query]);
1493
- return /* @__PURE__ */ jsx29(
1627
+ return /* @__PURE__ */ jsx30(
1494
1628
  Dialog,
1495
1629
  {
1496
1630
  isOpen,
1497
1631
  size: "lg",
1498
1632
  title,
1499
1633
  onClose,
1500
- footer: /* @__PURE__ */ jsx29(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1501
- children: /* @__PURE__ */ jsxs22("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1502
- /* @__PURE__ */ jsx29(
1634
+ footer: /* @__PURE__ */ jsx30(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1635
+ children: /* @__PURE__ */ jsxs23("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1636
+ /* @__PURE__ */ jsx30(
1503
1637
  Input,
1504
1638
  {
1505
1639
  "aria-label": msg.valueHelpDialogSearch,
@@ -1511,7 +1645,7 @@ function ValueHelpDialog({
1511
1645
  autoFocus: true
1512
1646
  }
1513
1647
  ),
1514
- /* @__PURE__ */ jsx29(
1648
+ /* @__PURE__ */ jsx30(
1515
1649
  DataTable,
1516
1650
  {
1517
1651
  "aria-label": typeof title === "string" ? title : "Records",
@@ -1531,7 +1665,7 @@ function ValueHelpDialog({
1531
1665
  }
1532
1666
 
1533
1667
  // src/components/forms/ValueHelpField.tsx
1534
- import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1668
+ import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1535
1669
  var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
1536
1670
  function ValueHelpField({
1537
1671
  label,
@@ -1553,9 +1687,9 @@ function ValueHelpField({
1553
1687
  }) {
1554
1688
  const msg = usePireMessages();
1555
1689
  const [open, setOpen] = React9.useState(false);
1556
- return /* @__PURE__ */ jsxs23("div", { className: cx(className), style, children: [
1557
- /* @__PURE__ */ jsxs23("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
1558
- /* @__PURE__ */ jsx30(
1690
+ return /* @__PURE__ */ jsxs24("div", { className: cx(className), style, children: [
1691
+ /* @__PURE__ */ jsxs24("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
1692
+ /* @__PURE__ */ jsx31(
1559
1693
  Input,
1560
1694
  {
1561
1695
  label,
@@ -1569,7 +1703,7 @@ function ValueHelpField({
1569
1703
  errorMessage
1570
1704
  }
1571
1705
  ),
1572
- allowsClear && value ? /* @__PURE__ */ jsx30(
1706
+ allowsClear && value ? /* @__PURE__ */ jsx31(
1573
1707
  IconButton,
1574
1708
  {
1575
1709
  icon: "x",
@@ -1579,7 +1713,7 @@ function ValueHelpField({
1579
1713
  onPress: () => onChange?.(null)
1580
1714
  }
1581
1715
  ) : null,
1582
- /* @__PURE__ */ jsx30(
1716
+ /* @__PURE__ */ jsx31(
1583
1717
  IconButton,
1584
1718
  {
1585
1719
  icon: "search",
@@ -1590,7 +1724,7 @@ function ValueHelpField({
1590
1724
  }
1591
1725
  )
1592
1726
  ] }),
1593
- /* @__PURE__ */ jsx30(
1727
+ /* @__PURE__ */ jsx31(
1594
1728
  ValueHelpDialog,
1595
1729
  {
1596
1730
  isOpen: open,
@@ -1606,11 +1740,11 @@ function ValueHelpField({
1606
1740
 
1607
1741
  // src/components/forms/FileUpload.tsx
1608
1742
  import * as React10 from "react";
1609
- import { FileTrigger, Text as Text10 } from "react-aria-components";
1743
+ import { FileTrigger, Text as Text11 } from "react-aria-components";
1610
1744
 
1611
1745
  // src/components/feedback/ProgressBar.tsx
1612
- import { ProgressBar as AriaProgressBar, Label as Label9 } from "react-aria-components";
1613
- import { Fragment as Fragment2, jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1746
+ import { ProgressBar as AriaProgressBar, Label as Label10 } from "react-aria-components";
1747
+ import { Fragment as Fragment2, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1614
1748
  function ProgressBar({
1615
1749
  value = 0,
1616
1750
  minValue = 0,
@@ -1623,7 +1757,7 @@ function ProgressBar({
1623
1757
  className,
1624
1758
  style
1625
1759
  }) {
1626
- return /* @__PURE__ */ jsx31(
1760
+ return /* @__PURE__ */ jsx32(
1627
1761
  AriaProgressBar,
1628
1762
  {
1629
1763
  className: cx("pire-progress", className),
@@ -1634,19 +1768,19 @@ function ProgressBar({
1634
1768
  maxValue,
1635
1769
  isIndeterminate,
1636
1770
  style,
1637
- children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs24(Fragment2, { children: [
1638
- label || showValue ? /* @__PURE__ */ jsxs24("div", { className: "pire-progress-head", children: [
1639
- label ? /* @__PURE__ */ jsx31(Label9, { children: label }) : /* @__PURE__ */ jsx31("span", {}),
1640
- showValue && !isIndeterminate ? /* @__PURE__ */ jsx31("span", { className: "pire-numeric", children: valueText }) : null
1771
+ children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs25(Fragment2, { children: [
1772
+ label || showValue ? /* @__PURE__ */ jsxs25("div", { className: "pire-progress-head", children: [
1773
+ label ? /* @__PURE__ */ jsx32(Label10, { children: label }) : /* @__PURE__ */ jsx32("span", {}),
1774
+ showValue && !isIndeterminate ? /* @__PURE__ */ jsx32("span", { className: "pire-numeric", children: valueText }) : null
1641
1775
  ] }) : null,
1642
- /* @__PURE__ */ jsx31("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx31("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
1776
+ /* @__PURE__ */ jsx32("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx32("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
1643
1777
  ] })
1644
1778
  }
1645
1779
  );
1646
1780
  }
1647
1781
 
1648
1782
  // src/components/forms/FileUpload.tsx
1649
- import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1783
+ import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
1650
1784
  var isImage = (file) => file.type.startsWith("image/");
1651
1785
  function formatFileSize(bytes) {
1652
1786
  if (bytes < 1024) return `${bytes} B`;
@@ -1718,7 +1852,7 @@ function FileUpload({
1718
1852
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
1719
1853
  };
1720
1854
  const remove = (target) => commit(files.filter((f) => f.file !== target));
1721
- return /* @__PURE__ */ jsxs25(
1855
+ return /* @__PURE__ */ jsxs26(
1722
1856
  "div",
1723
1857
  {
1724
1858
  className: cx("pire-field", "pire-fileupload", className),
@@ -1726,24 +1860,24 @@ function FileUpload({
1726
1860
  "data-full-width": String(fullWidth),
1727
1861
  "data-invalid": isInvalid ? "true" : void 0,
1728
1862
  children: [
1729
- label ? /* @__PURE__ */ jsxs25("span", { className: "pire-field-label", children: [
1863
+ label ? /* @__PURE__ */ jsxs26("span", { className: "pire-field-label", children: [
1730
1864
  label,
1731
- isRequired ? /* @__PURE__ */ jsx32("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1865
+ isRequired ? /* @__PURE__ */ jsx33("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1732
1866
  ] }) : null,
1733
- /* @__PURE__ */ jsx32(
1867
+ /* @__PURE__ */ jsx33(
1734
1868
  FileTrigger,
1735
1869
  {
1736
1870
  acceptedFileTypes,
1737
1871
  allowsMultiple,
1738
1872
  onSelect: accept,
1739
- children: /* @__PURE__ */ jsx32(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
1873
+ children: /* @__PURE__ */ jsx33(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
1740
1874
  }
1741
1875
  ),
1742
- files.length ? /* @__PURE__ */ jsx32("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs25("li", { className: "pire-fileupload-item", children: [
1743
- previewUrl ? /* @__PURE__ */ jsx32("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx32(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
1744
- /* @__PURE__ */ jsx32("span", { className: "pire-fileupload-name", children: file.name }),
1745
- /* @__PURE__ */ jsx32("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
1746
- isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx32(
1876
+ files.length ? /* @__PURE__ */ jsx33("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs26("li", { className: "pire-fileupload-item", children: [
1877
+ previewUrl ? /* @__PURE__ */ jsx33("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx33(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
1878
+ /* @__PURE__ */ jsx33("span", { className: "pire-fileupload-name", children: file.name }),
1879
+ /* @__PURE__ */ jsx33("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
1880
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx33(
1747
1881
  IconButton,
1748
1882
  {
1749
1883
  icon: "x",
@@ -1753,16 +1887,16 @@ function FileUpload({
1753
1887
  }
1754
1888
  )
1755
1889
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
1756
- uploadProgress != null ? /* @__PURE__ */ jsx32(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
1757
- description ? /* @__PURE__ */ jsx32(Text10, { slot: "description", className: "pire-field-hint", children: description }) : null,
1758
- isInvalid && errorMessage ? /* @__PURE__ */ jsx32("span", { className: "pire-field-error", children: errorMessage }) : null
1890
+ uploadProgress != null ? /* @__PURE__ */ jsx33(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
1891
+ description ? /* @__PURE__ */ jsx33(Text11, { slot: "description", className: "pire-field-hint", children: description }) : null,
1892
+ isInvalid && errorMessage ? /* @__PURE__ */ jsx33("span", { className: "pire-field-error", children: errorMessage }) : null
1759
1893
  ]
1760
1894
  }
1761
1895
  );
1762
1896
  }
1763
1897
 
1764
1898
  // src/components/navigation/ShellBar.tsx
1765
- import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
1899
+ import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
1766
1900
  var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
1767
1901
  function ShellBar({
1768
1902
  product,
@@ -1777,27 +1911,27 @@ function ShellBar({
1777
1911
  className,
1778
1912
  ...rest
1779
1913
  }) {
1780
- return /* @__PURE__ */ jsxs26("header", { className: cx("pire-shellbar", className), ...rest, children: [
1781
- onMenu ? /* @__PURE__ */ jsx33(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
1782
- monogram ? /* @__PURE__ */ jsx33("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
1783
- product ? /* @__PURE__ */ jsx33("span", { className: "pire-shellbar-product", children: product }) : null,
1784
- title ? /* @__PURE__ */ jsx33("span", { className: "pire-shellbar-title", children: title }) : null,
1785
- /* @__PURE__ */ jsx33("span", { className: "pire-shellbar-spacer" }),
1786
- onSearch ? /* @__PURE__ */ jsx33(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
1914
+ return /* @__PURE__ */ jsxs27("header", { className: cx("pire-shellbar", className), ...rest, children: [
1915
+ onMenu ? /* @__PURE__ */ jsx34(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
1916
+ monogram ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
1917
+ product ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-product", children: product }) : null,
1918
+ title ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-title", children: title }) : null,
1919
+ /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-spacer" }),
1920
+ onSearch ? /* @__PURE__ */ jsx34(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
1787
1921
  actions,
1788
- user ? /* @__PURE__ */ jsx33("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
1922
+ user ? /* @__PURE__ */ jsx34("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
1789
1923
  ] });
1790
1924
  }
1791
1925
 
1792
1926
  // src/components/navigation/SideNav.tsx
1793
1927
  import * as React11 from "react";
1794
1928
  import {
1795
- Button as AriaButton9,
1929
+ Button as AriaButton10,
1796
1930
  Disclosure,
1797
1931
  DisclosureGroup,
1798
1932
  DisclosurePanel,
1799
1933
  MenuTrigger,
1800
- Popover as Popover5
1934
+ Popover as Popover6
1801
1935
  } from "react-aria-components";
1802
1936
 
1803
1937
  // src/components/navigation/Menu.tsx
@@ -1808,11 +1942,11 @@ import {
1808
1942
  Separator as AriaSeparator2,
1809
1943
  Header
1810
1944
  } from "react-aria-components";
1811
- import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
1945
+ import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
1812
1946
  function Menu({ minWidth, className, style, ...rest }) {
1813
1947
  const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
1814
1948
  const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
1815
- return /* @__PURE__ */ jsx34(
1949
+ return /* @__PURE__ */ jsx35(
1816
1950
  AriaMenu,
1817
1951
  {
1818
1952
  className: cx("pire-menu", className),
@@ -1830,35 +1964,35 @@ function MenuItem({
1830
1964
  className,
1831
1965
  ...rest
1832
1966
  }) {
1833
- return /* @__PURE__ */ jsxs27(
1967
+ return /* @__PURE__ */ jsxs28(
1834
1968
  AriaMenuItem,
1835
1969
  {
1836
1970
  className: cx("pire-menu-item", className),
1837
1971
  "data-tone": tone === "danger" ? "danger" : void 0,
1838
1972
  ...rest,
1839
1973
  children: [
1840
- icon ? /* @__PURE__ */ jsx34(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
1841
- /* @__PURE__ */ jsxs27("span", { className: "pire-menu-item-body", children: [
1842
- /* @__PURE__ */ jsx34("span", { className: "pire-menu-item-label", children }),
1843
- description ? /* @__PURE__ */ jsx34("span", { className: "pire-menu-item-desc", children: description }) : null
1974
+ icon ? /* @__PURE__ */ jsx35(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
1975
+ /* @__PURE__ */ jsxs28("span", { className: "pire-menu-item-body", children: [
1976
+ /* @__PURE__ */ jsx35("span", { className: "pire-menu-item-label", children }),
1977
+ description ? /* @__PURE__ */ jsx35("span", { className: "pire-menu-item-desc", children: description }) : null
1844
1978
  ] }),
1845
- shortcut ? /* @__PURE__ */ jsx34("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
1979
+ shortcut ? /* @__PURE__ */ jsx35("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
1846
1980
  ]
1847
1981
  }
1848
1982
  );
1849
1983
  }
1850
1984
  function MenuSection({ title, children, className, ...rest }) {
1851
- return /* @__PURE__ */ jsxs27(AriaMenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
1852
- title ? /* @__PURE__ */ jsx34(Header, { className: "pire-menu-section-title", children: title }) : null,
1985
+ return /* @__PURE__ */ jsxs28(AriaMenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
1986
+ title ? /* @__PURE__ */ jsx35(Header, { className: "pire-menu-section-title", children: title }) : null,
1853
1987
  children
1854
1988
  ] });
1855
1989
  }
1856
1990
  function MenuSeparator({ className }) {
1857
- return /* @__PURE__ */ jsx34(AriaSeparator2, { className: cx("pire-menu-separator", className) });
1991
+ return /* @__PURE__ */ jsx35(AriaSeparator2, { className: cx("pire-menu-separator", className) });
1858
1992
  }
1859
1993
 
1860
1994
  // src/components/navigation/SideNav.tsx
1861
- import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
1995
+ import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
1862
1996
  function findActiveParent(groups, value) {
1863
1997
  if (value == null) return void 0;
1864
1998
  for (const group of groups) {
@@ -1907,8 +2041,8 @@ function SideNav({
1907
2041
  };
1908
2042
  const renderRow = (item, onPress, isGroup) => {
1909
2043
  const selected = !isGroup && item.id === value;
1910
- const button = /* @__PURE__ */ jsxs28(
1911
- AriaButton9,
2044
+ const button = /* @__PURE__ */ jsxs29(
2045
+ AriaButton10,
1912
2046
  {
1913
2047
  className: "pire-sidenav-item",
1914
2048
  "data-selected": selected ? "true" : void 0,
@@ -1917,70 +2051,70 @@ function SideNav({
1917
2051
  "aria-label": collapsed ? item.label : void 0,
1918
2052
  onPress,
1919
2053
  children: [
1920
- item.icon ? /* @__PURE__ */ jsx35(Icon, { name: item.icon, size: 16 }) : null,
1921
- collapsed ? null : /* @__PURE__ */ jsx35("span", { children: item.label }),
1922
- item.count != null && !collapsed ? /* @__PURE__ */ jsx35("span", { className: "pire-sidenav-count", children: item.count }) : null
2054
+ item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2055
+ collapsed ? null : /* @__PURE__ */ jsx36("span", { children: item.label }),
2056
+ item.count != null && !collapsed ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: item.count }) : null
1923
2057
  ]
1924
2058
  },
1925
2059
  item.id
1926
2060
  );
1927
- return collapsed ? /* @__PURE__ */ jsx35(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2061
+ return collapsed ? /* @__PURE__ */ jsx36(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
1928
2062
  };
1929
- const renderRailFlyout = (item) => /* @__PURE__ */ jsxs28(MenuTrigger, { children: [
1930
- /* @__PURE__ */ jsx35(
1931
- AriaButton9,
2063
+ const renderRailFlyout = (item) => /* @__PURE__ */ jsxs29(MenuTrigger, { children: [
2064
+ /* @__PURE__ */ jsx36(
2065
+ AriaButton10,
1932
2066
  {
1933
2067
  className: "pire-sidenav-item",
1934
2068
  "aria-label": item.label,
1935
2069
  "data-active-child": item.id === activeParent ? "true" : void 0,
1936
- children: item.icon ? /* @__PURE__ */ jsx35(Icon, { name: item.icon, size: 16 }) : null
2070
+ children: item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null
1937
2071
  }
1938
2072
  ),
1939
- /* @__PURE__ */ jsx35(Popover5, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ jsx35(
2073
+ /* @__PURE__ */ jsx36(Popover6, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ jsx36(
1940
2074
  Menu,
1941
2075
  {
1942
2076
  "aria-label": item.label,
1943
2077
  className: "pire-sidenav-flyout",
1944
2078
  onAction: (key) => onChange?.(String(key)),
1945
- children: (item.items ?? []).map((child) => /* @__PURE__ */ jsx35(MenuItem, { id: child.id, children: child.label }, child.id))
2079
+ children: (item.items ?? []).map((child) => /* @__PURE__ */ jsx36(MenuItem, { id: child.id, children: child.label }, child.id))
1946
2080
  }
1947
2081
  ) })
1948
2082
  ] }, item.id);
1949
- const renderSection = (item) => /* @__PURE__ */ jsxs28(Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
1950
- /* @__PURE__ */ jsxs28(
1951
- AriaButton9,
2083
+ const renderSection = (item) => /* @__PURE__ */ jsxs29(Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
2084
+ /* @__PURE__ */ jsxs29(
2085
+ AriaButton10,
1952
2086
  {
1953
2087
  slot: "trigger",
1954
2088
  className: "pire-sidenav-item",
1955
2089
  "data-kind": "group",
1956
2090
  "data-active-child": item.id === activeParent ? "true" : void 0,
1957
2091
  children: [
1958
- item.icon ? /* @__PURE__ */ jsx35(Icon, { name: item.icon, size: 16 }) : null,
1959
- /* @__PURE__ */ jsx35("span", { children: item.label }),
1960
- item.count != null ? /* @__PURE__ */ jsx35("span", { className: "pire-sidenav-count", children: item.count }) : null,
1961
- /* @__PURE__ */ jsx35(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2092
+ item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2093
+ /* @__PURE__ */ jsx36("span", { children: item.label }),
2094
+ item.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: item.count }) : null,
2095
+ /* @__PURE__ */ jsx36(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
1962
2096
  ]
1963
2097
  }
1964
2098
  ),
1965
- /* @__PURE__ */ jsx35(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2099
+ /* @__PURE__ */ jsx36(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
1966
2100
  const selected = child.id === value;
1967
- return /* @__PURE__ */ jsxs28(
1968
- AriaButton9,
2101
+ return /* @__PURE__ */ jsxs29(
2102
+ AriaButton10,
1969
2103
  {
1970
2104
  className: "pire-sidenav-item pire-sidenav-subitem",
1971
2105
  "data-selected": selected ? "true" : void 0,
1972
2106
  "aria-current": selected ? "page" : void 0,
1973
2107
  onPress: () => onChange?.(child.id),
1974
2108
  children: [
1975
- /* @__PURE__ */ jsx35("span", { children: child.label }),
1976
- child.count != null ? /* @__PURE__ */ jsx35("span", { className: "pire-sidenav-count", children: child.count }) : null
2109
+ /* @__PURE__ */ jsx36("span", { children: child.label }),
2110
+ child.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: child.count }) : null
1977
2111
  ]
1978
2112
  },
1979
2113
  child.id
1980
2114
  );
1981
2115
  }) })
1982
2116
  ] }, item.id);
1983
- return /* @__PURE__ */ jsxs28(
2117
+ return /* @__PURE__ */ jsxs29(
1984
2118
  "nav",
1985
2119
  {
1986
2120
  className: cx("pire-sidenav", className),
@@ -1996,9 +2130,9 @@ function SideNav({
1996
2130
  if (isGroup && collapsed && railFlyout) return renderRailFlyout(item);
1997
2131
  return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
1998
2132
  });
1999
- return /* @__PURE__ */ jsxs28("div", { className: "pire-sidenav-group", children: [
2000
- group.label && !collapsed ? /* @__PURE__ */ jsx35("div", { className: "pire-sidenav-label", children: group.label }) : null,
2001
- hasSections ? /* @__PURE__ */ jsx35(
2133
+ return /* @__PURE__ */ jsxs29("div", { className: "pire-sidenav-group", children: [
2134
+ group.label && !collapsed ? /* @__PURE__ */ jsx36("div", { className: "pire-sidenav-label", children: group.label }) : null,
2135
+ hasSections ? /* @__PURE__ */ jsx36(
2002
2136
  DisclosureGroup,
2003
2137
  {
2004
2138
  className: "pire-sidenav-tree",
@@ -2010,7 +2144,7 @@ function SideNav({
2010
2144
  ) : rows
2011
2145
  ] }, group.label ?? gi);
2012
2146
  }),
2013
- footer ? /* @__PURE__ */ jsx35("div", { className: "pire-sidenav-footer", children: footer }) : null
2147
+ footer ? /* @__PURE__ */ jsx36("div", { className: "pire-sidenav-footer", children: footer }) : null
2014
2148
  ]
2015
2149
  }
2016
2150
  );
@@ -2018,9 +2152,9 @@ function SideNav({
2018
2152
 
2019
2153
  // src/components/navigation/Tabs.tsx
2020
2154
  import { Tabs as AriaTabs, TabList, Tab as AriaTab, TabPanel } from "react-aria-components";
2021
- import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
2155
+ import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
2022
2156
  function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
2023
- return /* @__PURE__ */ jsxs29(
2157
+ return /* @__PURE__ */ jsxs30(
2024
2158
  AriaTabs,
2025
2159
  {
2026
2160
  className,
@@ -2029,12 +2163,12 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2029
2163
  defaultSelectedKey: defaultValue,
2030
2164
  onSelectionChange: (k) => onChange?.(String(k)),
2031
2165
  children: [
2032
- /* @__PURE__ */ jsx36(TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ jsxs29(AriaTab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
2033
- item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2166
+ /* @__PURE__ */ jsx37(TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ jsxs30(AriaTab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
2167
+ item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2034
2168
  item.label,
2035
- item.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-tab-count", children: item.count }) : null
2169
+ item.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-tab-count", children: item.count }) : null
2036
2170
  ] }) }),
2037
- items.map((item) => /* @__PURE__ */ jsx36(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2171
+ items.map((item) => /* @__PURE__ */ jsx37(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2038
2172
  ]
2039
2173
  }
2040
2174
  );
@@ -2042,9 +2176,9 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2042
2176
 
2043
2177
  // src/components/navigation/Breadcrumb.tsx
2044
2178
  import { Breadcrumbs as AriaBreadcrumbs, Breadcrumb as AriaBreadcrumb, Link as Link2 } from "react-aria-components";
2045
- import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
2179
+ import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
2046
2180
  function Breadcrumb({ items, onNavigate, className, style }) {
2047
- return /* @__PURE__ */ jsx37(
2181
+ return /* @__PURE__ */ jsx38(
2048
2182
  AriaBreadcrumbs,
2049
2183
  {
2050
2184
  className: cx("pire-breadcrumbs", className),
@@ -2053,9 +2187,9 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2053
2187
  onAction: (key) => onNavigate?.(String(key)),
2054
2188
  children: (item) => {
2055
2189
  const last = items[items.length - 1] === item;
2056
- return /* @__PURE__ */ jsxs30(AriaBreadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2057
- last ? item.label : /* @__PURE__ */ jsx37(Link2, { href: item.href, children: item.label }),
2058
- last ? null : /* @__PURE__ */ jsx37(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2190
+ return /* @__PURE__ */ jsxs31(AriaBreadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2191
+ last ? item.label : /* @__PURE__ */ jsx38(Link2, { href: item.href, children: item.label }),
2192
+ last ? null : /* @__PURE__ */ jsx38(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2059
2193
  ] });
2060
2194
  }
2061
2195
  }
@@ -2063,7 +2197,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2063
2197
  }
2064
2198
 
2065
2199
  // src/components/navigation/Pagination.tsx
2066
- import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
2200
+ import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
2067
2201
  function Pagination({
2068
2202
  page = 1,
2069
2203
  pageSize = 25,
@@ -2078,9 +2212,9 @@ function Pagination({
2078
2212
  const pages = Math.max(1, Math.ceil(total / pageSize));
2079
2213
  const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
2080
2214
  const to = Math.min(total, page * pageSize);
2081
- return /* @__PURE__ */ jsxs31("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2082
- /* @__PURE__ */ jsx38("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2083
- /* @__PURE__ */ jsx38(
2215
+ return /* @__PURE__ */ jsxs32("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2216
+ /* @__PURE__ */ jsx39("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2217
+ /* @__PURE__ */ jsx39(
2084
2218
  IconButton,
2085
2219
  {
2086
2220
  icon: "chevron-left",
@@ -2091,8 +2225,8 @@ function Pagination({
2091
2225
  onPress: () => onPageChange?.(page - 1)
2092
2226
  }
2093
2227
  ),
2094
- /* @__PURE__ */ jsx38("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2095
- /* @__PURE__ */ jsx38(
2228
+ /* @__PURE__ */ jsx39("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2229
+ /* @__PURE__ */ jsx39(
2096
2230
  IconButton,
2097
2231
  {
2098
2232
  icon: "chevron-right",
@@ -2103,7 +2237,7 @@ function Pagination({
2103
2237
  onPress: () => onPageChange?.(page + 1)
2104
2238
  }
2105
2239
  ),
2106
- onPageSizeChange ? /* @__PURE__ */ jsx38(
2240
+ onPageSizeChange ? /* @__PURE__ */ jsx39(
2107
2241
  Select,
2108
2242
  {
2109
2243
  "aria-label": msg.paginationRowsPerPage,
@@ -2119,7 +2253,7 @@ function Pagination({
2119
2253
  }
2120
2254
 
2121
2255
  // src/components/feedback/InlineMessage.tsx
2122
- import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
2256
+ import { jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
2123
2257
  var KIND_ICON = {
2124
2258
  info: "info",
2125
2259
  success: "check-circle-2",
@@ -2129,7 +2263,7 @@ var KIND_ICON = {
2129
2263
  function InlineMessage({ kind = "info", title, action, onClose, children, className, ...rest }) {
2130
2264
  const msg = usePireMessages();
2131
2265
  const assertive = kind === "error" || kind === "warning";
2132
- return /* @__PURE__ */ jsxs32(
2266
+ return /* @__PURE__ */ jsxs33(
2133
2267
  "div",
2134
2268
  {
2135
2269
  className: cx("pire-msg", className),
@@ -2138,13 +2272,13 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2138
2272
  "aria-live": assertive ? "assertive" : "polite",
2139
2273
  ...rest,
2140
2274
  children: [
2141
- /* @__PURE__ */ jsx39(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2142
- /* @__PURE__ */ jsxs32("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2143
- title ? /* @__PURE__ */ jsx39("span", { className: "pire-msg-title", children: title }) : null,
2144
- children ? /* @__PURE__ */ jsx39("span", { className: "pire-msg-body", children }) : null,
2275
+ /* @__PURE__ */ jsx40(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2276
+ /* @__PURE__ */ jsxs33("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2277
+ title ? /* @__PURE__ */ jsx40("span", { className: "pire-msg-title", children: title }) : null,
2278
+ children ? /* @__PURE__ */ jsx40("span", { className: "pire-msg-body", children }) : null,
2145
2279
  action
2146
2280
  ] }),
2147
- onClose ? /* @__PURE__ */ jsx39(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2281
+ onClose ? /* @__PURE__ */ jsx40(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2148
2282
  ]
2149
2283
  }
2150
2284
  );
@@ -2152,7 +2286,7 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2152
2286
 
2153
2287
  // src/components/feedback/Toast.tsx
2154
2288
  import * as React12 from "react";
2155
- import { jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
2289
+ import { jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
2156
2290
  var KIND_ICON2 = {
2157
2291
  info: "info",
2158
2292
  success: "check-circle-2",
@@ -2161,7 +2295,7 @@ var KIND_ICON2 = {
2161
2295
  };
2162
2296
  function Toast({ kind = "success", onClose, position = "bottom-center", children, className, ...rest }) {
2163
2297
  const msg = usePireMessages();
2164
- return /* @__PURE__ */ jsxs33(
2298
+ return /* @__PURE__ */ jsxs34(
2165
2299
  "div",
2166
2300
  {
2167
2301
  className: cx("pire-toast", className),
@@ -2170,9 +2304,9 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
2170
2304
  "aria-live": kind === "error" ? "assertive" : "polite",
2171
2305
  ...rest,
2172
2306
  children: [
2173
- /* @__PURE__ */ jsx40(Icon, { name: KIND_ICON2[kind], size: 16 }),
2174
- /* @__PURE__ */ jsx40("span", { style: { flex: 1 }, children }),
2175
- onClose ? /* @__PURE__ */ jsx40(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2307
+ /* @__PURE__ */ jsx41(Icon, { name: KIND_ICON2[kind], size: 16 }),
2308
+ /* @__PURE__ */ jsx41("span", { style: { flex: 1 }, children }),
2309
+ onClose ? /* @__PURE__ */ jsx41(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2176
2310
  ]
2177
2311
  }
2178
2312
  );
@@ -2190,9 +2324,9 @@ function ToastProvider({ children, timeout = 6e3 }) {
2190
2324
  return id;
2191
2325
  }, [close, timeout]);
2192
2326
  const value = React12.useMemo(() => ({ add, close }), [add, close]);
2193
- return /* @__PURE__ */ jsxs33(ToastContext.Provider, { value, children: [
2327
+ return /* @__PURE__ */ jsxs34(ToastContext.Provider, { value, children: [
2194
2328
  children,
2195
- /* @__PURE__ */ jsx40("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ jsx40(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
2329
+ /* @__PURE__ */ jsx41("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ jsx41(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
2196
2330
  ] });
2197
2331
  }
2198
2332
  function useToast() {
@@ -2202,8 +2336,8 @@ function useToast() {
2202
2336
  }
2203
2337
 
2204
2338
  // src/components/data/KpiTile.tsx
2205
- import { Button as AriaButton10 } from "react-aria-components";
2206
- import { Fragment as Fragment3, jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
2339
+ import { Button as AriaButton11 } from "react-aria-components";
2340
+ import { Fragment as Fragment3, jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
2207
2341
  function KpiTile({
2208
2342
  label,
2209
2343
  value,
@@ -2219,50 +2353,50 @@ function KpiTile({
2219
2353
  style
2220
2354
  }) {
2221
2355
  const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
2222
- const body = /* @__PURE__ */ jsxs34(Fragment3, { children: [
2223
- /* @__PURE__ */ jsxs34("span", { className: "pire-kpi-label", children: [
2224
- icon ? /* @__PURE__ */ jsx41(Icon, { name: icon, size: 16 }) : null,
2356
+ const body = /* @__PURE__ */ jsxs35(Fragment3, { children: [
2357
+ /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-label", children: [
2358
+ icon ? /* @__PURE__ */ jsx42(Icon, { name: icon, size: 16 }) : null,
2225
2359
  label
2226
2360
  ] }),
2227
- /* @__PURE__ */ jsxs34("span", { className: "pire-kpi-value", children: [
2361
+ /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-value", children: [
2228
2362
  value,
2229
- unit ? /* @__PURE__ */ jsx41("span", { className: "pire-kpi-unit", children: unit }) : null
2363
+ unit ? /* @__PURE__ */ jsx42("span", { className: "pire-kpi-unit", children: unit }) : null
2230
2364
  ] }),
2231
- delta ? /* @__PURE__ */ jsxs34("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2232
- deltaDirection ? /* @__PURE__ */ jsx41(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2365
+ delta ? /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2366
+ deltaDirection ? /* @__PURE__ */ jsx42(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2233
2367
  delta
2234
2368
  ] }) : null,
2235
- footnote ? /* @__PURE__ */ jsx41("span", { className: "pire-kpi-foot", children: footnote }) : null
2369
+ footnote ? /* @__PURE__ */ jsx42("span", { className: "pire-kpi-foot", children: footnote }) : null
2236
2370
  ] });
2237
2371
  const props = { className: cx("pire-kpi", className), "data-status": status, style };
2238
- return onPress ? /* @__PURE__ */ jsx41(AriaButton10, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ jsx41("div", { ...props, children: body });
2372
+ return onPress ? /* @__PURE__ */ jsx42(AriaButton11, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ jsx42("div", { ...props, children: body });
2239
2373
  }
2240
2374
 
2241
2375
  // src/components/data/ObjectHeader.tsx
2242
- import { jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
2376
+ import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
2243
2377
  function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
2244
- return /* @__PURE__ */ jsxs35("header", { className: cx("pire-objheader", className), ...rest, children: [
2378
+ return /* @__PURE__ */ jsxs36("header", { className: cx("pire-objheader", className), ...rest, children: [
2245
2379
  breadcrumb,
2246
- /* @__PURE__ */ jsxs35("div", { className: "pire-objheader-row", children: [
2247
- /* @__PURE__ */ jsxs35("div", { style: { minWidth: 0 }, children: [
2248
- /* @__PURE__ */ jsx42("h1", { className: "pire-objheader-title", children: title }),
2249
- subtitle || id ? /* @__PURE__ */ jsxs35("div", { className: "pire-objheader-sub", children: [
2380
+ /* @__PURE__ */ jsxs36("div", { className: "pire-objheader-row", children: [
2381
+ /* @__PURE__ */ jsxs36("div", { style: { minWidth: 0 }, children: [
2382
+ /* @__PURE__ */ jsx43("h1", { className: "pire-objheader-title", children: title }),
2383
+ subtitle || id ? /* @__PURE__ */ jsxs36("div", { className: "pire-objheader-sub", children: [
2250
2384
  subtitle,
2251
- id ? /* @__PURE__ */ jsx42("span", { className: "pire-objheader-id", children: id }) : null
2385
+ id ? /* @__PURE__ */ jsx43("span", { className: "pire-objheader-id", children: id }) : null
2252
2386
  ] }) : null
2253
2387
  ] }),
2254
2388
  badge,
2255
- actions ? /* @__PURE__ */ jsx42("div", { className: "pire-objheader-actions", children: actions }) : null
2389
+ actions ? /* @__PURE__ */ jsx43("div", { className: "pire-objheader-actions", children: actions }) : null
2256
2390
  ] }),
2257
- facts?.length ? /* @__PURE__ */ jsx42("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs35("div", { children: [
2258
- /* @__PURE__ */ jsx42("dt", { className: "pire-fact-label", children: fact.label }),
2259
- /* @__PURE__ */ jsx42("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2391
+ facts?.length ? /* @__PURE__ */ jsx43("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs36("div", { children: [
2392
+ /* @__PURE__ */ jsx43("dt", { className: "pire-fact-label", children: fact.label }),
2393
+ /* @__PURE__ */ jsx43("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2260
2394
  ] }, fact.label)) }) : null
2261
2395
  ] });
2262
2396
  }
2263
2397
 
2264
2398
  // src/components/data/FilterBar.tsx
2265
- import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
2399
+ import { jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
2266
2400
  function FilterBar({
2267
2401
  children,
2268
2402
  activeFilters = [],
@@ -2279,66 +2413,66 @@ function FilterBar({
2279
2413
  const label = useMessage("filterBarLabel", rest["aria-label"]);
2280
2414
  const go = useMessage("filterBarGo", goLabel);
2281
2415
  const clearAll = useMessage("filterBarClearAll", clearAllLabel);
2282
- return /* @__PURE__ */ jsxs36("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2283
- /* @__PURE__ */ jsxs36("div", { className: "pire-filterbar-controls", children: [
2416
+ return /* @__PURE__ */ jsxs37("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2417
+ /* @__PURE__ */ jsxs37("div", { className: "pire-filterbar-controls", children: [
2284
2418
  children,
2285
- onGo ? /* @__PURE__ */ jsx43(Button, { variant: "primary", onPress: onGo, children: go }) : null
2419
+ onGo ? /* @__PURE__ */ jsx44(Button, { variant: "primary", onPress: onGo, children: go }) : null
2286
2420
  ] }),
2287
- activeFilters.length || resultLabel || actions ? /* @__PURE__ */ jsxs36("div", { className: "pire-filterbar-foot", children: [
2288
- activeFilters.map((filter) => /* @__PURE__ */ jsx43(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2289
- activeFilters.length && onClear ? /* @__PURE__ */ jsx43(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2290
- resultLabel ? /* @__PURE__ */ jsx43("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2291
- actions ? /* @__PURE__ */ jsx43("div", { className: "pire-filterbar-actions", children: actions }) : null
2421
+ activeFilters.length || resultLabel || actions ? /* @__PURE__ */ jsxs37("div", { className: "pire-filterbar-foot", children: [
2422
+ activeFilters.map((filter) => /* @__PURE__ */ jsx44(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2423
+ activeFilters.length && onClear ? /* @__PURE__ */ jsx44(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2424
+ resultLabel ? /* @__PURE__ */ jsx44("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2425
+ actions ? /* @__PURE__ */ jsx44("div", { className: "pire-filterbar-actions", children: actions }) : null
2292
2426
  ] }) : null
2293
2427
  ] });
2294
2428
  }
2295
2429
 
2296
2430
  // src/components/data/DescriptionList.tsx
2297
- import { jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
2431
+ import { jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
2298
2432
  function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
2299
- return /* @__PURE__ */ jsx44(
2433
+ return /* @__PURE__ */ jsx45(
2300
2434
  "dl",
2301
2435
  {
2302
2436
  className: cx("pire-dl", className),
2303
2437
  "data-layout": layout,
2304
2438
  style: { ...layout === "grid" ? { "--pire-dl-cols": columns } : null, ...style },
2305
2439
  ...rest,
2306
- children: items.map((item, i) => /* @__PURE__ */ jsxs37("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
2307
- /* @__PURE__ */ jsxs37("dt", { className: "pire-dl-term", children: [
2440
+ children: items.map((item, i) => /* @__PURE__ */ jsxs38("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
2441
+ /* @__PURE__ */ jsxs38("dt", { className: "pire-dl-term", children: [
2308
2442
  item.label,
2309
2443
  item.hint
2310
2444
  ] }),
2311
- /* @__PURE__ */ jsx44("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2445
+ /* @__PURE__ */ jsx45("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2312
2446
  ] }, i))
2313
2447
  }
2314
2448
  );
2315
2449
  }
2316
2450
 
2317
2451
  // src/components/data/Timeline.tsx
2318
- import { jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
2452
+ import { jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
2319
2453
  function Timeline({ entries, reverse = false, className, ...rest }) {
2320
2454
  const list = reverse ? [...entries].reverse() : entries;
2321
- return /* @__PURE__ */ jsx45("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs38("li", { className: "pire-timeline-item", children: [
2322
- /* @__PURE__ */ jsx45("span", { className: "pire-timeline-time", children: entry.time }),
2323
- /* @__PURE__ */ jsx45("span", { className: "pire-timeline-text", children: entry.event }),
2324
- entry.actor ? /* @__PURE__ */ jsx45("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2455
+ return /* @__PURE__ */ jsx46("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs39("li", { className: "pire-timeline-item", children: [
2456
+ /* @__PURE__ */ jsx46("span", { className: "pire-timeline-time", children: entry.time }),
2457
+ /* @__PURE__ */ jsx46("span", { className: "pire-timeline-text", children: entry.event }),
2458
+ entry.actor ? /* @__PURE__ */ jsx46("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2325
2459
  ] }, entry.id ?? i)) });
2326
2460
  }
2327
2461
 
2328
2462
  // src/components/data/LinkList.tsx
2329
- import { Button as AriaButton11 } from "react-aria-components";
2330
- import { jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
2463
+ import { Button as AriaButton12 } from "react-aria-components";
2464
+ import { jsx as jsx47, jsxs as jsxs40 } from "react/jsx-runtime";
2331
2465
  function LinkList({ items, onSelect, className, ...rest }) {
2332
- return /* @__PURE__ */ jsx46("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ jsxs39(AriaButton11, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
2333
- item.icon ? /* @__PURE__ */ jsx46(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
2334
- item.key ? /* @__PURE__ */ jsx46("span", { className: "pire-linklist-key", children: item.key }) : null,
2335
- item.text ? /* @__PURE__ */ jsx46("span", { className: "pire-linklist-text", children: item.text }) : null,
2466
+ return /* @__PURE__ */ jsx47("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ jsxs40(AriaButton12, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
2467
+ item.icon ? /* @__PURE__ */ jsx47(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
2468
+ item.key ? /* @__PURE__ */ jsx47("span", { className: "pire-linklist-key", children: item.key }) : null,
2469
+ item.text ? /* @__PURE__ */ jsx47("span", { className: "pire-linklist-text", children: item.text }) : null,
2336
2470
  item.trailing
2337
2471
  ] }, item.id)) });
2338
2472
  }
2339
2473
 
2340
2474
  // src/components/layout/PageBand.tsx
2341
- import { jsx as jsx47 } from "react/jsx-runtime";
2475
+ import { jsx as jsx48 } from "react/jsx-runtime";
2342
2476
  function PageBand({
2343
2477
  surface = "card",
2344
2478
  hasBorder = true,
@@ -2346,7 +2480,7 @@ function PageBand({
2346
2480
  className,
2347
2481
  ...rest
2348
2482
  }) {
2349
- return /* @__PURE__ */ jsx47(
2483
+ return /* @__PURE__ */ jsx48(
2350
2484
  "div",
2351
2485
  {
2352
2486
  className: cx("pire-pageband", className),
@@ -2359,56 +2493,56 @@ function PageBand({
2359
2493
  }
2360
2494
 
2361
2495
  // src/components/layout/PageHeader.tsx
2362
- import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
2496
+ import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
2363
2497
  function PageHeader({ title, subtitle, actions, className, ...rest }) {
2364
- return /* @__PURE__ */ jsxs40("header", { className: cx("pire-pageheader", className), ...rest, children: [
2365
- /* @__PURE__ */ jsxs40("div", { style: { minWidth: 0 }, children: [
2366
- /* @__PURE__ */ jsx48("h1", { className: "pire-pageheader-title", children: title }),
2367
- subtitle ? /* @__PURE__ */ jsx48("p", { className: "pire-pageheader-sub", children: subtitle }) : null
2498
+ return /* @__PURE__ */ jsxs41("header", { className: cx("pire-pageheader", className), ...rest, children: [
2499
+ /* @__PURE__ */ jsxs41("div", { style: { minWidth: 0 }, children: [
2500
+ /* @__PURE__ */ jsx49("h1", { className: "pire-pageheader-title", children: title }),
2501
+ subtitle ? /* @__PURE__ */ jsx49("p", { className: "pire-pageheader-sub", children: subtitle }) : null
2368
2502
  ] }),
2369
- actions ? /* @__PURE__ */ jsx48("div", { className: "pire-pageheader-actions", children: actions }) : null
2503
+ actions ? /* @__PURE__ */ jsx49("div", { className: "pire-pageheader-actions", children: actions }) : null
2370
2504
  ] });
2371
2505
  }
2372
2506
 
2373
2507
  // src/components/layout/SectionHeader.tsx
2374
- import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
2508
+ import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
2375
2509
  function SectionHeader({ title, meta, actions, className, ...rest }) {
2376
- return /* @__PURE__ */ jsxs41("div", { className: cx("pire-sectionhead", className), ...rest, children: [
2377
- /* @__PURE__ */ jsx49("span", { className: "pire-eyebrow", children: title }),
2378
- meta ? /* @__PURE__ */ jsx49("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
2379
- actions ? /* @__PURE__ */ jsx49("div", { className: "pire-sectionhead-actions", children: actions }) : null
2510
+ return /* @__PURE__ */ jsxs42("div", { className: cx("pire-sectionhead", className), ...rest, children: [
2511
+ /* @__PURE__ */ jsx50("span", { className: "pire-eyebrow", children: title }),
2512
+ meta ? /* @__PURE__ */ jsx50("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
2513
+ actions ? /* @__PURE__ */ jsx50("div", { className: "pire-sectionhead-actions", children: actions }) : null
2380
2514
  ] });
2381
2515
  }
2382
2516
 
2383
2517
  // src/components/layout/SelectionBar.tsx
2384
- import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
2518
+ import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
2385
2519
  function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
2386
2520
  if (!count) return null;
2387
- return /* @__PURE__ */ jsxs42("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
2388
- /* @__PURE__ */ jsxs42("span", { className: "pire-selectionbar-count", children: [
2521
+ return /* @__PURE__ */ jsxs43("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
2522
+ /* @__PURE__ */ jsxs43("span", { className: "pire-selectionbar-count", children: [
2389
2523
  count.toLocaleString(),
2390
2524
  " ",
2391
2525
  noun,
2392
2526
  count === 1 ? "" : "s",
2393
2527
  " selected"
2394
2528
  ] }),
2395
- children ? /* @__PURE__ */ jsx50("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
2396
- actions ? /* @__PURE__ */ jsx50("div", { className: "pire-selectionbar-actions", children: actions }) : null
2529
+ children ? /* @__PURE__ */ jsx51("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
2530
+ actions ? /* @__PURE__ */ jsx51("div", { className: "pire-selectionbar-actions", children: actions }) : null
2397
2531
  ] });
2398
2532
  }
2399
2533
 
2400
2534
  // src/components/layout/FooterBar.tsx
2401
- import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
2535
+ import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
2402
2536
  function FooterBar({ note, actions, children, className, ...rest }) {
2403
- return /* @__PURE__ */ jsxs43("footer", { className: cx("pire-footerbar", className), ...rest, children: [
2404
- note ? /* @__PURE__ */ jsx51("span", { className: "pire-footerbar-note", children: note }) : null,
2537
+ return /* @__PURE__ */ jsxs44("footer", { className: cx("pire-footerbar", className), ...rest, children: [
2538
+ note ? /* @__PURE__ */ jsx52("span", { className: "pire-footerbar-note", children: note }) : null,
2405
2539
  children,
2406
- actions ? /* @__PURE__ */ jsx51("div", { className: "pire-footerbar-actions", children: actions }) : null
2540
+ actions ? /* @__PURE__ */ jsx52("div", { className: "pire-footerbar-actions", children: actions }) : null
2407
2541
  ] });
2408
2542
  }
2409
2543
 
2410
2544
  // src/components/patterns/ConfirmDialog.tsx
2411
- import { Fragment as Fragment4, jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
2545
+ import { Fragment as Fragment4, jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
2412
2546
  function ConfirmDialog({
2413
2547
  isOpen,
2414
2548
  title,
@@ -2422,7 +2556,7 @@ function ConfirmDialog({
2422
2556
  onConfirm,
2423
2557
  onCancel
2424
2558
  }) {
2425
- return /* @__PURE__ */ jsxs44(
2559
+ return /* @__PURE__ */ jsxs45(
2426
2560
  Dialog,
2427
2561
  {
2428
2562
  isOpen,
@@ -2432,12 +2566,12 @@ function ConfirmDialog({
2432
2566
  onClose: onCancel,
2433
2567
  isDismissable: !isBusy,
2434
2568
  showClose: false,
2435
- footer: /* @__PURE__ */ jsxs44(Fragment4, { children: [
2436
- /* @__PURE__ */ jsx52(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
2437
- /* @__PURE__ */ jsx52(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
2569
+ footer: /* @__PURE__ */ jsxs45(Fragment4, { children: [
2570
+ /* @__PURE__ */ jsx53(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
2571
+ /* @__PURE__ */ jsx53(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
2438
2572
  ] }),
2439
2573
  children: [
2440
- consequence ? /* @__PURE__ */ jsx52(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
2574
+ consequence ? /* @__PURE__ */ jsx53(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
2441
2575
  children
2442
2576
  ]
2443
2577
  }
@@ -2445,11 +2579,11 @@ function ConfirmDialog({
2445
2579
  }
2446
2580
 
2447
2581
  // src/components/patterns/SidePanel.tsx
2448
- import { ModalOverlay as ModalOverlay2, Modal as Modal2, Dialog as AriaDialog3, Heading as Heading4 } from "react-aria-components";
2449
- import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
2582
+ import { ModalOverlay as ModalOverlay2, Modal as Modal2, Dialog as AriaDialog4, Heading as Heading5 } from "react-aria-components";
2583
+ import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
2450
2584
  function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
2451
2585
  const msg = usePireMessages();
2452
- return /* @__PURE__ */ jsx53(
2586
+ return /* @__PURE__ */ jsx54(
2453
2587
  ModalOverlay2,
2454
2588
  {
2455
2589
  className: "pire-sidepanel-overlay",
@@ -2458,28 +2592,28 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
2458
2592
  onOpenChange: (o) => {
2459
2593
  if (!o) onClose?.();
2460
2594
  },
2461
- children: /* @__PURE__ */ jsx53(Modal2, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs45(AriaDialog3, { className: "pire-dialog", style: { height: "100%" }, children: [
2462
- /* @__PURE__ */ jsxs45("header", { className: "pire-dialog-head", children: [
2463
- /* @__PURE__ */ jsxs45("div", { style: { flex: 1, minWidth: 0 }, children: [
2464
- /* @__PURE__ */ jsx53(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
2465
- subtitle ? /* @__PURE__ */ jsx53("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
2595
+ children: /* @__PURE__ */ jsx54(Modal2, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs46(AriaDialog4, { className: "pire-dialog", style: { height: "100%" }, children: [
2596
+ /* @__PURE__ */ jsxs46("header", { className: "pire-dialog-head", children: [
2597
+ /* @__PURE__ */ jsxs46("div", { style: { flex: 1, minWidth: 0 }, children: [
2598
+ /* @__PURE__ */ jsx54(Heading5, { slot: "title", className: "pire-dialog-title", children: title }),
2599
+ subtitle ? /* @__PURE__ */ jsx54("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
2466
2600
  ] }),
2467
- /* @__PURE__ */ jsx53(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
2601
+ /* @__PURE__ */ jsx54(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
2468
2602
  ] }),
2469
- /* @__PURE__ */ jsx53("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
2470
- footer ? /* @__PURE__ */ jsx53("footer", { className: "pire-dialog-foot", children: footer }) : null
2603
+ /* @__PURE__ */ jsx54("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
2604
+ footer ? /* @__PURE__ */ jsx54("footer", { className: "pire-dialog-foot", children: footer }) : null
2471
2605
  ] }) })
2472
2606
  }
2473
2607
  );
2474
2608
  }
2475
2609
 
2476
2610
  // src/components/patterns/EmptyState.tsx
2477
- import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
2611
+ import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
2478
2612
  function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
2479
- return /* @__PURE__ */ jsxs46("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
2480
- /* @__PURE__ */ jsx54(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
2481
- title ? /* @__PURE__ */ jsx54("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
2482
- children ? /* @__PURE__ */ jsx54("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
2613
+ return /* @__PURE__ */ jsxs47("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
2614
+ /* @__PURE__ */ jsx55(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
2615
+ title ? /* @__PURE__ */ jsx55("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
2616
+ children ? /* @__PURE__ */ jsx55("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
2483
2617
  action
2484
2618
  ] });
2485
2619
  }
@@ -2487,7 +2621,7 @@ function EmptyState({ icon = "file-text", title, action, compact, children, clas
2487
2621
  // src/components/patterns/FileDropZone.tsx
2488
2622
  import * as React13 from "react";
2489
2623
  import { DropZone, FileTrigger as FileTrigger2, isFileDropItem } from "react-aria-components";
2490
- import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
2624
+ import { jsx as jsx56, jsxs as jsxs48 } from "react/jsx-runtime";
2491
2625
  var isImage2 = (file) => file.type.startsWith("image/");
2492
2626
  function FileDropZone({
2493
2627
  label,
@@ -2536,12 +2670,12 @@ function FileDropZone({
2536
2670
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
2537
2671
  };
2538
2672
  const remove = (target) => commit(files.filter((f) => f.file !== target));
2539
- return /* @__PURE__ */ jsxs47("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
2540
- label ? /* @__PURE__ */ jsxs47("span", { className: "pire-field-label", children: [
2673
+ return /* @__PURE__ */ jsxs48("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
2674
+ label ? /* @__PURE__ */ jsxs48("span", { className: "pire-field-label", children: [
2541
2675
  label,
2542
- isRequired ? /* @__PURE__ */ jsx55("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
2676
+ isRequired ? /* @__PURE__ */ jsx56("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
2543
2677
  ] }) : null,
2544
- /* @__PURE__ */ jsxs47(
2678
+ /* @__PURE__ */ jsxs48(
2545
2679
  DropZone,
2546
2680
  {
2547
2681
  className: "pire-dropzone",
@@ -2554,25 +2688,25 @@ function FileDropZone({
2554
2688
  accept(dropped);
2555
2689
  },
2556
2690
  children: [
2557
- /* @__PURE__ */ jsx55(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
2558
- /* @__PURE__ */ jsx55("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
2559
- /* @__PURE__ */ jsx55(
2691
+ /* @__PURE__ */ jsx56(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
2692
+ /* @__PURE__ */ jsx56("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
2693
+ /* @__PURE__ */ jsx56(
2560
2694
  FileTrigger2,
2561
2695
  {
2562
2696
  acceptedFileTypes,
2563
2697
  allowsMultiple,
2564
2698
  onSelect: (list) => accept(list ? [...list] : []),
2565
- children: /* @__PURE__ */ jsx55(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
2699
+ children: /* @__PURE__ */ jsx56(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
2566
2700
  }
2567
2701
  )
2568
2702
  ]
2569
2703
  }
2570
2704
  ),
2571
- files.length ? /* @__PURE__ */ jsx55("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs47("li", { className: "pire-fileupload-item", children: [
2572
- previewUrl ? /* @__PURE__ */ jsx55("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx55(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
2573
- /* @__PURE__ */ jsx55("span", { className: "pire-fileupload-name", children: file.name }),
2574
- /* @__PURE__ */ jsx55("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
2575
- isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx55(
2705
+ files.length ? /* @__PURE__ */ jsx56("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs48("li", { className: "pire-fileupload-item", children: [
2706
+ previewUrl ? /* @__PURE__ */ jsx56("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx56(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
2707
+ /* @__PURE__ */ jsx56("span", { className: "pire-fileupload-name", children: file.name }),
2708
+ /* @__PURE__ */ jsx56("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
2709
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx56(
2576
2710
  IconButton,
2577
2711
  {
2578
2712
  icon: "x",
@@ -2582,14 +2716,14 @@ function FileDropZone({
2582
2716
  }
2583
2717
  )
2584
2718
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
2585
- uploadProgress != null ? /* @__PURE__ */ jsx55(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
2586
- description ? /* @__PURE__ */ jsx55("span", { className: "pire-field-hint", children: description }) : null,
2587
- isInvalid && errorMessage ? /* @__PURE__ */ jsx55("span", { className: "pire-field-error", children: errorMessage }) : null
2719
+ uploadProgress != null ? /* @__PURE__ */ jsx56(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
2720
+ description ? /* @__PURE__ */ jsx56("span", { className: "pire-field-hint", children: description }) : null,
2721
+ isInvalid && errorMessage ? /* @__PURE__ */ jsx56("span", { className: "pire-field-error", children: errorMessage }) : null
2588
2722
  ] });
2589
2723
  }
2590
2724
 
2591
2725
  // src/index.ts
2592
- import { DialogTrigger, MenuTrigger as MenuTrigger2, SubmenuTrigger, Popover as Popover6, RouterProvider, I18nProvider } from "react-aria-components";
2726
+ import { DialogTrigger, MenuTrigger as MenuTrigger2, SubmenuTrigger, Popover as Popover7, RouterProvider, I18nProvider } from "react-aria-components";
2593
2727
  export {
2594
2728
  Avatar,
2595
2729
  Badge,
@@ -2601,6 +2735,7 @@ export {
2601
2735
  ConfirmDialog,
2602
2736
  DataTable,
2603
2737
  DatePicker,
2738
+ DateRangePicker,
2604
2739
  DescriptionList,
2605
2740
  Dialog,
2606
2741
  DialogTrigger,
@@ -2631,7 +2766,7 @@ export {
2631
2766
  PageHeader,
2632
2767
  Pagination,
2633
2768
  PireIntlProvider,
2634
- Popover6 as Popover,
2769
+ Popover7 as Popover,
2635
2770
  ProgressBar,
2636
2771
  Radio,
2637
2772
  RadioGroup,
@@ -2663,6 +2798,7 @@ export {
2663
2798
  enMessages,
2664
2799
  esMessages,
2665
2800
  formatFileSize,
2801
+ rangeLengthInDays,
2666
2802
  usePireMessages,
2667
2803
  useToast
2668
2804
  };