@orianatech/pire 0.8.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/components/forms/DateRangePicker.d.cts +55 -0
- package/dist/components/forms/DateRangePicker.d.ts +56 -0
- package/dist/components/forms/DateRangePicker.d.ts.map +1 -0
- package/dist/components/forms/FileUpload.d.cts +57 -0
- package/dist/components/forms/FileUpload.d.ts +58 -0
- package/dist/components/forms/FileUpload.d.ts.map +1 -0
- package/dist/components/forms/Input.d.cts +5 -0
- package/dist/components/forms/Input.d.ts +5 -0
- package/dist/components/forms/Input.d.ts.map +1 -1
- package/dist/components/navigation/SideNav.d.cts +15 -9
- package/dist/components/navigation/SideNav.d.ts +15 -9
- package/dist/components/navigation/SideNav.d.ts.map +1 -1
- package/dist/components/patterns/FileDropZone.d.cts +16 -0
- package/dist/components/patterns/FileDropZone.d.ts +17 -0
- package/dist/components/patterns/FileDropZone.d.ts.map +1 -0
- package/dist/components.css +42 -0
- package/dist/i18n/messages.d.cts +10 -0
- package/dist/i18n/messages.d.ts +10 -0
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/index.cjs +700 -318
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +3 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +711 -309
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -40,15 +40,18 @@ __export(src_exports, {
|
|
|
40
40
|
ConfirmDialog: () => ConfirmDialog,
|
|
41
41
|
DataTable: () => DataTable,
|
|
42
42
|
DatePicker: () => DatePicker,
|
|
43
|
+
DateRangePicker: () => DateRangePicker,
|
|
43
44
|
DescriptionList: () => DescriptionList,
|
|
44
45
|
Dialog: () => Dialog,
|
|
45
|
-
DialogTrigger: () =>
|
|
46
|
+
DialogTrigger: () => import_react_aria_components32.DialogTrigger,
|
|
46
47
|
EmptyState: () => EmptyState,
|
|
48
|
+
FileDropZone: () => FileDropZone,
|
|
49
|
+
FileUpload: () => FileUpload,
|
|
47
50
|
FilterBar: () => FilterBar,
|
|
48
51
|
FooterBar: () => FooterBar,
|
|
49
52
|
FormField: () => FormField,
|
|
50
53
|
Heading: () => Heading,
|
|
51
|
-
I18nProvider: () =>
|
|
54
|
+
I18nProvider: () => import_react_aria_components32.I18nProvider,
|
|
52
55
|
Icon: () => Icon,
|
|
53
56
|
IconButton: () => IconButton,
|
|
54
57
|
InlineMessage: () => InlineMessage,
|
|
@@ -60,7 +63,7 @@ __export(src_exports, {
|
|
|
60
63
|
MenuItem: () => MenuItem,
|
|
61
64
|
MenuSection: () => MenuSection,
|
|
62
65
|
MenuSeparator: () => MenuSeparator,
|
|
63
|
-
MenuTrigger: () =>
|
|
66
|
+
MenuTrigger: () => import_react_aria_components32.MenuTrigger,
|
|
64
67
|
MultiComboBox: () => MultiComboBox,
|
|
65
68
|
NumberField: () => NumberField,
|
|
66
69
|
ObjectHeader: () => ObjectHeader,
|
|
@@ -68,11 +71,11 @@ __export(src_exports, {
|
|
|
68
71
|
PageHeader: () => PageHeader,
|
|
69
72
|
Pagination: () => Pagination,
|
|
70
73
|
PireIntlProvider: () => PireIntlProvider,
|
|
71
|
-
Popover: () =>
|
|
74
|
+
Popover: () => import_react_aria_components32.Popover,
|
|
72
75
|
ProgressBar: () => ProgressBar,
|
|
73
76
|
Radio: () => Radio,
|
|
74
77
|
RadioGroup: () => RadioGroup,
|
|
75
|
-
RouterProvider: () =>
|
|
78
|
+
RouterProvider: () => import_react_aria_components32.RouterProvider,
|
|
76
79
|
SectionHeader: () => SectionHeader,
|
|
77
80
|
SegmentedControl: () => SegmentedControl,
|
|
78
81
|
Select: () => Select,
|
|
@@ -84,7 +87,7 @@ __export(src_exports, {
|
|
|
84
87
|
Skeleton: () => Skeleton,
|
|
85
88
|
SkeletonTableRow: () => SkeletonTableRow,
|
|
86
89
|
Strong: () => Strong,
|
|
87
|
-
SubmenuTrigger: () =>
|
|
90
|
+
SubmenuTrigger: () => import_react_aria_components32.SubmenuTrigger,
|
|
88
91
|
Switch: () => Switch,
|
|
89
92
|
Tabs: () => Tabs,
|
|
90
93
|
Tag: () => Tag,
|
|
@@ -99,6 +102,8 @@ __export(src_exports, {
|
|
|
99
102
|
configureIcons: () => configureIcons,
|
|
100
103
|
enMessages: () => enMessages,
|
|
101
104
|
esMessages: () => esMessages,
|
|
105
|
+
formatFileSize: () => formatFileSize,
|
|
106
|
+
rangeLengthInDays: () => rangeLengthInDays,
|
|
102
107
|
usePireMessages: () => usePireMessages,
|
|
103
108
|
useToast: () => useToast
|
|
104
109
|
});
|
|
@@ -896,6 +901,7 @@ var enMessages = {
|
|
|
896
901
|
datePickerOpenCalendar: "Open calendar",
|
|
897
902
|
datePickerPreviousMonth: "Previous month",
|
|
898
903
|
datePickerNextMonth: "Next month",
|
|
904
|
+
dateRangePresetsLabel: "Date range shortcuts",
|
|
899
905
|
numberFieldIncrease: "Increase",
|
|
900
906
|
numberFieldDecrease: "Decrease",
|
|
901
907
|
valueHelpFieldClear: "Clear selection",
|
|
@@ -909,7 +915,11 @@ var enMessages = {
|
|
|
909
915
|
paginationPrevious: "Previous page",
|
|
910
916
|
paginationNext: "Next page",
|
|
911
917
|
paginationRowsPerPage: "Rows per page",
|
|
912
|
-
sideNavLabel: "Main navigation"
|
|
918
|
+
sideNavLabel: "Main navigation",
|
|
919
|
+
fileUploadChoose: "Choose files",
|
|
920
|
+
fileUploadRemoveNamed: "Remove {name}",
|
|
921
|
+
fileUploadUploading: "Uploading",
|
|
922
|
+
fileDropZonePrompt: "Drag files here, or choose them"
|
|
913
923
|
};
|
|
914
924
|
var esMessages = {
|
|
915
925
|
filterBarLabel: "Filtros",
|
|
@@ -928,6 +938,7 @@ var esMessages = {
|
|
|
928
938
|
datePickerOpenCalendar: "Abrir calendario",
|
|
929
939
|
datePickerPreviousMonth: "Mes anterior",
|
|
930
940
|
datePickerNextMonth: "Mes siguiente",
|
|
941
|
+
dateRangePresetsLabel: "Atajos de rango de fechas",
|
|
931
942
|
numberFieldIncrease: "Aumentar",
|
|
932
943
|
numberFieldDecrease: "Disminuir",
|
|
933
944
|
valueHelpFieldClear: "Limpiar selecci\xF3n",
|
|
@@ -941,7 +952,11 @@ var esMessages = {
|
|
|
941
952
|
paginationPrevious: "P\xE1gina anterior",
|
|
942
953
|
paginationNext: "P\xE1gina siguiente",
|
|
943
954
|
paginationRowsPerPage: "Filas por p\xE1gina",
|
|
944
|
-
sideNavLabel: "Navegaci\xF3n principal"
|
|
955
|
+
sideNavLabel: "Navegaci\xF3n principal",
|
|
956
|
+
fileUploadChoose: "Elegir archivos",
|
|
957
|
+
fileUploadRemoveNamed: "Quitar {name}",
|
|
958
|
+
fileUploadUploading: "Subiendo",
|
|
959
|
+
fileDropZonePrompt: "Arrastr\xE1 archivos ac\xE1, o elegilos"
|
|
945
960
|
};
|
|
946
961
|
|
|
947
962
|
// src/i18n/PireIntlProvider.tsx
|
|
@@ -1283,6 +1298,120 @@ function DatePicker({
|
|
|
1283
1298
|
] });
|
|
1284
1299
|
}
|
|
1285
1300
|
|
|
1301
|
+
// src/components/forms/DateRangePicker.tsx
|
|
1302
|
+
var import_react_aria_components19 = require("react-aria-components");
|
|
1303
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1304
|
+
function rangeLengthInDays(range) {
|
|
1305
|
+
return range.end.toDate("UTC").getTime() / 864e5 - range.start.toDate("UTC").getTime() / 864e5 + 1;
|
|
1306
|
+
}
|
|
1307
|
+
function DateRangePicker({
|
|
1308
|
+
label,
|
|
1309
|
+
description,
|
|
1310
|
+
errorMessage,
|
|
1311
|
+
maxRangeDays,
|
|
1312
|
+
presets,
|
|
1313
|
+
size = "md",
|
|
1314
|
+
fullWidth = true,
|
|
1315
|
+
startName,
|
|
1316
|
+
endName,
|
|
1317
|
+
className,
|
|
1318
|
+
style,
|
|
1319
|
+
...rest
|
|
1320
|
+
}) {
|
|
1321
|
+
const msg = usePireMessages();
|
|
1322
|
+
const current = rest.value ?? rest.defaultValue ?? null;
|
|
1323
|
+
const tooLong = maxRangeDays != null && current != null && rangeLengthInDays(current) > maxRangeDays;
|
|
1324
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1325
|
+
import_react_aria_components19.DateRangePicker,
|
|
1326
|
+
{
|
|
1327
|
+
className: cx("pire-field", className),
|
|
1328
|
+
style,
|
|
1329
|
+
startName,
|
|
1330
|
+
endName,
|
|
1331
|
+
validationBehavior: "aria",
|
|
1332
|
+
...rest,
|
|
1333
|
+
isInvalid: rest.isInvalid || tooLong,
|
|
1334
|
+
children: [
|
|
1335
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.Label, { className: "pire-field-label", children: [
|
|
1336
|
+
label,
|
|
1337
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
1338
|
+
] }) : null,
|
|
1339
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1340
|
+
import_react_aria_components19.Group,
|
|
1341
|
+
{
|
|
1342
|
+
className: "pire-control pire-daterange-control",
|
|
1343
|
+
"data-size": size,
|
|
1344
|
+
"data-full-width": String(fullWidth),
|
|
1345
|
+
"data-invalid": rest.isInvalid || tooLong ? "true" : void 0,
|
|
1346
|
+
"data-readonly": rest.isReadOnly ? "true" : void 0,
|
|
1347
|
+
children: [
|
|
1348
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateInput, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateSegment, { segment, className: "pire-datesegment" }) }),
|
|
1349
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
|
|
1350
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateInput, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateSegment, { segment, className: "pire-datesegment" }) }),
|
|
1351
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1352
|
+
import_react_aria_components19.Button,
|
|
1353
|
+
{
|
|
1354
|
+
className: "pire-iconbtn",
|
|
1355
|
+
"data-size": "sm",
|
|
1356
|
+
"aria-label": msg.datePickerOpenCalendar,
|
|
1357
|
+
style: { width: 24, height: 24 },
|
|
1358
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "calendar", size: 16 })
|
|
1359
|
+
}
|
|
1360
|
+
)
|
|
1361
|
+
]
|
|
1362
|
+
}
|
|
1363
|
+
),
|
|
1364
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
1365
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.FieldError, { className: "pire-field-error", children: errorMessage }),
|
|
1366
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.Dialog, { className: "pire-daterange-dialog", children: [
|
|
1367
|
+
presets?.length ? (
|
|
1368
|
+
// Before the calendar in the DOM, so keyboard users reach the shortcut without
|
|
1369
|
+
// arrowing through a month first.
|
|
1370
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1371
|
+
import_react_aria_components19.Button,
|
|
1372
|
+
{
|
|
1373
|
+
className: "pire-daterange-preset",
|
|
1374
|
+
onPress: () => rest.onChange?.(preset.range()),
|
|
1375
|
+
children: preset.label
|
|
1376
|
+
},
|
|
1377
|
+
preset.id
|
|
1378
|
+
)) })
|
|
1379
|
+
) : null,
|
|
1380
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.RangeCalendar, { className: "pire-calendar", children: [
|
|
1381
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("header", { className: "pire-calendar-head", children: [
|
|
1382
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1383
|
+
import_react_aria_components19.Button,
|
|
1384
|
+
{
|
|
1385
|
+
slot: "previous",
|
|
1386
|
+
className: "pire-iconbtn",
|
|
1387
|
+
"data-size": "sm",
|
|
1388
|
+
"aria-label": msg.datePickerPreviousMonth,
|
|
1389
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-left", size: 16 })
|
|
1390
|
+
}
|
|
1391
|
+
),
|
|
1392
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Heading, { className: "pire-calendar-title" }),
|
|
1393
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
1394
|
+
import_react_aria_components19.Button,
|
|
1395
|
+
{
|
|
1396
|
+
slot: "next",
|
|
1397
|
+
className: "pire-iconbtn",
|
|
1398
|
+
"data-size": "sm",
|
|
1399
|
+
"aria-label": msg.datePickerNextMonth,
|
|
1400
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-right", size: 16 })
|
|
1401
|
+
}
|
|
1402
|
+
)
|
|
1403
|
+
] }),
|
|
1404
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.CalendarGrid, { className: "pire-calendar-grid", children: [
|
|
1405
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarHeaderCell, { children: day }) }),
|
|
1406
|
+
/* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarCell, { date, className: "pire-calendar-cell" }) })
|
|
1407
|
+
] })
|
|
1408
|
+
] })
|
|
1409
|
+
] }) })
|
|
1410
|
+
]
|
|
1411
|
+
}
|
|
1412
|
+
);
|
|
1413
|
+
}
|
|
1414
|
+
|
|
1286
1415
|
// src/components/forms/ValueHelpField.tsx
|
|
1287
1416
|
var React9 = __toESM(require("react"), 1);
|
|
1288
1417
|
|
|
@@ -1290,8 +1419,8 @@ var React9 = __toESM(require("react"), 1);
|
|
|
1290
1419
|
var React8 = __toESM(require("react"), 1);
|
|
1291
1420
|
|
|
1292
1421
|
// src/components/feedback/Dialog.tsx
|
|
1293
|
-
var
|
|
1294
|
-
var
|
|
1422
|
+
var import_react_aria_components20 = require("react-aria-components");
|
|
1423
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1295
1424
|
function Dialog({
|
|
1296
1425
|
isOpen,
|
|
1297
1426
|
onOpenChange,
|
|
@@ -1311,8 +1440,8 @@ function Dialog({
|
|
|
1311
1440
|
onClose?.();
|
|
1312
1441
|
onOpenChange?.(false);
|
|
1313
1442
|
};
|
|
1314
|
-
return /* @__PURE__ */ (0,
|
|
1315
|
-
|
|
1443
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
|
|
1444
|
+
import_react_aria_components20.ModalOverlay,
|
|
1316
1445
|
{
|
|
1317
1446
|
className: "pire-modal-overlay",
|
|
1318
1447
|
isOpen,
|
|
@@ -1320,28 +1449,28 @@ function Dialog({
|
|
|
1320
1449
|
onOpenChange: (o) => {
|
|
1321
1450
|
if (!o) close();
|
|
1322
1451
|
},
|
|
1323
|
-
children: /* @__PURE__ */ (0,
|
|
1324
|
-
title ? /* @__PURE__ */ (0,
|
|
1325
|
-
/* @__PURE__ */ (0,
|
|
1326
|
-
/* @__PURE__ */ (0,
|
|
1327
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
1452
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components20.Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components20.Dialog, { className: "pire-dialog", children: [
|
|
1453
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "pire-dialog-head", children: [
|
|
1454
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
1455
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components20.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
|
|
1456
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
1328
1457
|
] }),
|
|
1329
|
-
showClose ? /* @__PURE__ */ (0,
|
|
1458
|
+
showClose ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
|
|
1330
1459
|
] }) : null,
|
|
1331
|
-
/* @__PURE__ */ (0,
|
|
1332
|
-
footer ? /* @__PURE__ */ (0,
|
|
1460
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "pire-dialog-body", children }),
|
|
1461
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
|
|
1333
1462
|
] }) })
|
|
1334
1463
|
}
|
|
1335
1464
|
);
|
|
1336
1465
|
}
|
|
1337
1466
|
|
|
1338
1467
|
// src/components/data/DataTable.tsx
|
|
1339
|
-
var
|
|
1468
|
+
var import_react_aria_components21 = require("react-aria-components");
|
|
1340
1469
|
|
|
1341
1470
|
// src/components/feedback/Skeleton.tsx
|
|
1342
|
-
var
|
|
1471
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1343
1472
|
function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
|
|
1344
|
-
return /* @__PURE__ */ (0,
|
|
1473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1345
1474
|
"div",
|
|
1346
1475
|
{
|
|
1347
1476
|
className: cx("pire-skeleton", className),
|
|
@@ -1355,7 +1484,7 @@ function Skeleton({ shape = "text", width, height, className, style, ...rest })
|
|
|
1355
1484
|
var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
|
|
1356
1485
|
function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
|
|
1357
1486
|
const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
|
|
1358
|
-
return /* @__PURE__ */ (0,
|
|
1487
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1359
1488
|
"div",
|
|
1360
1489
|
{
|
|
1361
1490
|
className: cx("pire-skeleton-row", className),
|
|
@@ -1367,13 +1496,13 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
|
|
|
1367
1496
|
const align = c.numeric ? "right" : c.align ?? "left";
|
|
1368
1497
|
return (
|
|
1369
1498
|
// biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
|
|
1370
|
-
/* @__PURE__ */ (0,
|
|
1499
|
+
/* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1371
1500
|
"div",
|
|
1372
1501
|
{
|
|
1373
1502
|
className: "pire-skeleton-cell",
|
|
1374
1503
|
"data-align": align,
|
|
1375
1504
|
style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
|
|
1376
|
-
children: /* @__PURE__ */ (0,
|
|
1505
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
|
|
1377
1506
|
},
|
|
1378
1507
|
i
|
|
1379
1508
|
)
|
|
@@ -1384,7 +1513,7 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
|
|
|
1384
1513
|
}
|
|
1385
1514
|
|
|
1386
1515
|
// src/components/data/DataTable.tsx
|
|
1387
|
-
var
|
|
1516
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1388
1517
|
function DataTable({
|
|
1389
1518
|
columns,
|
|
1390
1519
|
rows,
|
|
@@ -1416,15 +1545,15 @@ function DataTable({
|
|
|
1416
1545
|
...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
|
|
1417
1546
|
];
|
|
1418
1547
|
const body = isLoading ? [] : rows;
|
|
1419
|
-
return /* @__PURE__ */ (0,
|
|
1548
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1420
1549
|
"div",
|
|
1421
1550
|
{
|
|
1422
1551
|
className: cx("pire-table-wrap", className),
|
|
1423
1552
|
style,
|
|
1424
1553
|
"data-loading": isLoading ? "true" : void 0,
|
|
1425
1554
|
"aria-busy": isLoading ? "true" : void 0,
|
|
1426
|
-
children: /* @__PURE__ */ (0,
|
|
1427
|
-
|
|
1555
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
|
|
1556
|
+
import_react_aria_components21.Table,
|
|
1428
1557
|
{
|
|
1429
1558
|
className: "pire-table",
|
|
1430
1559
|
"data-density": density,
|
|
@@ -1440,10 +1569,10 @@ function DataTable({
|
|
|
1440
1569
|
if (row) onRowAction(row);
|
|
1441
1570
|
} : void 0,
|
|
1442
1571
|
children: [
|
|
1443
|
-
/* @__PURE__ */ (0,
|
|
1444
|
-
selectable ? /* @__PURE__ */ (0,
|
|
1445
|
-
columns.map((c, i) => /* @__PURE__ */ (0,
|
|
1446
|
-
|
|
1572
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_aria_components21.TableHeader, { className: "pire-thead-row", children: [
|
|
1573
|
+
selectable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components21.Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
|
|
1574
|
+
columns.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1575
|
+
import_react_aria_components21.Column,
|
|
1447
1576
|
{
|
|
1448
1577
|
id: c.key,
|
|
1449
1578
|
className: "pire-th",
|
|
@@ -1452,9 +1581,9 @@ function DataTable({
|
|
|
1452
1581
|
width: c.width,
|
|
1453
1582
|
"data-align": c.numeric || c.align === "right" ? "right" : c.align,
|
|
1454
1583
|
"data-allows-sorting": c.sortable ? "true" : void 0,
|
|
1455
|
-
children: /* @__PURE__ */ (0,
|
|
1584
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "pire-th-inner", children: [
|
|
1456
1585
|
c.label,
|
|
1457
|
-
c.sortable ? /* @__PURE__ */ (0,
|
|
1586
|
+
c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1458
1587
|
Icon,
|
|
1459
1588
|
{
|
|
1460
1589
|
size: 12,
|
|
@@ -1467,16 +1596,16 @@ function DataTable({
|
|
|
1467
1596
|
c.key
|
|
1468
1597
|
))
|
|
1469
1598
|
] }),
|
|
1470
|
-
/* @__PURE__ */ (0,
|
|
1471
|
-
/* @__PURE__ */ (0,
|
|
1599
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components21.TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
|
|
1600
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
|
|
1472
1601
|
Array.from({ length: skeletonRows }, (_, i) => (
|
|
1473
1602
|
// biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
|
|
1474
|
-
/* @__PURE__ */ (0,
|
|
1603
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SkeletonTableRow, { columns: skeletonColumns, density }, i)
|
|
1475
1604
|
))
|
|
1476
|
-
] }) : /* @__PURE__ */ (0,
|
|
1477
|
-
selectable ? /* @__PURE__ */ (0,
|
|
1478
|
-
columns.map((c) => /* @__PURE__ */ (0,
|
|
1479
|
-
|
|
1605
|
+
] }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_aria_components21.Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
|
|
1606
|
+
selectable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components21.Cell, { className: "pire-td", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
|
|
1607
|
+
columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1608
|
+
import_react_aria_components21.Cell,
|
|
1480
1609
|
{
|
|
1481
1610
|
className: "pire-td",
|
|
1482
1611
|
"data-numeric": c.numeric ? "true" : void 0,
|
|
@@ -1494,7 +1623,7 @@ function DataTable({
|
|
|
1494
1623
|
}
|
|
1495
1624
|
|
|
1496
1625
|
// src/components/patterns/ValueHelpDialog.tsx
|
|
1497
|
-
var
|
|
1626
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1498
1627
|
function ValueHelpDialog({
|
|
1499
1628
|
isOpen,
|
|
1500
1629
|
title = "Select a record",
|
|
@@ -1515,16 +1644,16 @@ function ValueHelpDialog({
|
|
|
1515
1644
|
if (!q) return rows;
|
|
1516
1645
|
return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
|
|
1517
1646
|
}, [rows, query]);
|
|
1518
|
-
return /* @__PURE__ */ (0,
|
|
1647
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1519
1648
|
Dialog,
|
|
1520
1649
|
{
|
|
1521
1650
|
isOpen,
|
|
1522
1651
|
size: "lg",
|
|
1523
1652
|
title,
|
|
1524
1653
|
onClose,
|
|
1525
|
-
footer: /* @__PURE__ */ (0,
|
|
1526
|
-
children: /* @__PURE__ */ (0,
|
|
1527
|
-
/* @__PURE__ */ (0,
|
|
1654
|
+
footer: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
|
|
1655
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
|
|
1656
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1528
1657
|
Input,
|
|
1529
1658
|
{
|
|
1530
1659
|
"aria-label": msg.valueHelpDialogSearch,
|
|
@@ -1536,7 +1665,7 @@ function ValueHelpDialog({
|
|
|
1536
1665
|
autoFocus: true
|
|
1537
1666
|
}
|
|
1538
1667
|
),
|
|
1539
|
-
/* @__PURE__ */ (0,
|
|
1668
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
1540
1669
|
DataTable,
|
|
1541
1670
|
{
|
|
1542
1671
|
"aria-label": typeof title === "string" ? title : "Records",
|
|
@@ -1556,7 +1685,7 @@ function ValueHelpDialog({
|
|
|
1556
1685
|
}
|
|
1557
1686
|
|
|
1558
1687
|
// src/components/forms/ValueHelpField.tsx
|
|
1559
|
-
var
|
|
1688
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1560
1689
|
var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
|
|
1561
1690
|
function ValueHelpField({
|
|
1562
1691
|
label,
|
|
@@ -1578,9 +1707,9 @@ function ValueHelpField({
|
|
|
1578
1707
|
}) {
|
|
1579
1708
|
const msg = usePireMessages();
|
|
1580
1709
|
const [open, setOpen] = React9.useState(false);
|
|
1581
|
-
return /* @__PURE__ */ (0,
|
|
1582
|
-
/* @__PURE__ */ (0,
|
|
1583
|
-
/* @__PURE__ */ (0,
|
|
1710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx(className), style, children: [
|
|
1711
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
|
|
1712
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1584
1713
|
Input,
|
|
1585
1714
|
{
|
|
1586
1715
|
label,
|
|
@@ -1594,7 +1723,7 @@ function ValueHelpField({
|
|
|
1594
1723
|
errorMessage
|
|
1595
1724
|
}
|
|
1596
1725
|
),
|
|
1597
|
-
allowsClear && value ? /* @__PURE__ */ (0,
|
|
1726
|
+
allowsClear && value ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1598
1727
|
IconButton,
|
|
1599
1728
|
{
|
|
1600
1729
|
icon: "x",
|
|
@@ -1604,7 +1733,7 @@ function ValueHelpField({
|
|
|
1604
1733
|
onPress: () => onChange?.(null)
|
|
1605
1734
|
}
|
|
1606
1735
|
) : null,
|
|
1607
|
-
/* @__PURE__ */ (0,
|
|
1736
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1608
1737
|
IconButton,
|
|
1609
1738
|
{
|
|
1610
1739
|
icon: "search",
|
|
@@ -1615,7 +1744,7 @@ function ValueHelpField({
|
|
|
1615
1744
|
}
|
|
1616
1745
|
)
|
|
1617
1746
|
] }),
|
|
1618
|
-
/* @__PURE__ */ (0,
|
|
1747
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1619
1748
|
ValueHelpDialog,
|
|
1620
1749
|
{
|
|
1621
1750
|
isOpen: open,
|
|
@@ -1629,8 +1758,165 @@ function ValueHelpField({
|
|
|
1629
1758
|
] });
|
|
1630
1759
|
}
|
|
1631
1760
|
|
|
1761
|
+
// src/components/forms/FileUpload.tsx
|
|
1762
|
+
var React10 = __toESM(require("react"), 1);
|
|
1763
|
+
var import_react_aria_components23 = require("react-aria-components");
|
|
1764
|
+
|
|
1765
|
+
// src/components/feedback/ProgressBar.tsx
|
|
1766
|
+
var import_react_aria_components22 = require("react-aria-components");
|
|
1767
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1768
|
+
function ProgressBar({
|
|
1769
|
+
value = 0,
|
|
1770
|
+
minValue = 0,
|
|
1771
|
+
maxValue = 100,
|
|
1772
|
+
label,
|
|
1773
|
+
showValue = true,
|
|
1774
|
+
isIndeterminate,
|
|
1775
|
+
status = "informative",
|
|
1776
|
+
size = "md",
|
|
1777
|
+
className,
|
|
1778
|
+
style
|
|
1779
|
+
}) {
|
|
1780
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
1781
|
+
import_react_aria_components22.ProgressBar,
|
|
1782
|
+
{
|
|
1783
|
+
className: cx("pire-progress", className),
|
|
1784
|
+
"data-status": status,
|
|
1785
|
+
"data-size": size,
|
|
1786
|
+
value,
|
|
1787
|
+
minValue,
|
|
1788
|
+
maxValue,
|
|
1789
|
+
isIndeterminate,
|
|
1790
|
+
style,
|
|
1791
|
+
children: ({ percentage, valueText }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
|
|
1792
|
+
label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "pire-progress-head", children: [
|
|
1793
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_aria_components22.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", {}),
|
|
1794
|
+
showValue && !isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "pire-numeric", children: valueText }) : null
|
|
1795
|
+
] }) : null,
|
|
1796
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "pire-progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
|
|
1797
|
+
] })
|
|
1798
|
+
}
|
|
1799
|
+
);
|
|
1800
|
+
}
|
|
1801
|
+
|
|
1802
|
+
// src/components/forms/FileUpload.tsx
|
|
1803
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1804
|
+
var isImage = (file) => file.type.startsWith("image/");
|
|
1805
|
+
function formatFileSize(bytes) {
|
|
1806
|
+
if (bytes < 1024) return `${bytes} B`;
|
|
1807
|
+
if (bytes < 1024 * 1024) return `${Math.round(bytes / 1024).toLocaleString()} KB`;
|
|
1808
|
+
return `${(bytes / (1024 * 1024)).toFixed(1)} MB`;
|
|
1809
|
+
}
|
|
1810
|
+
function screenFiles(files, { maxSize, acceptedFileTypes }) {
|
|
1811
|
+
const accepted = [];
|
|
1812
|
+
const rejected = [];
|
|
1813
|
+
for (const file of files) {
|
|
1814
|
+
if (maxSize != null && file.size > maxSize) {
|
|
1815
|
+
rejected.push({ file, reason: "size" });
|
|
1816
|
+
continue;
|
|
1817
|
+
}
|
|
1818
|
+
if (acceptedFileTypes?.length) {
|
|
1819
|
+
const ok = acceptedFileTypes.some((t) => t.startsWith(".") ? file.name.toLowerCase().endsWith(t.toLowerCase()) : t.endsWith("/*") ? file.type.startsWith(t.slice(0, -1)) : file.type === t);
|
|
1820
|
+
if (!ok) {
|
|
1821
|
+
rejected.push({ file, reason: "type" });
|
|
1822
|
+
continue;
|
|
1823
|
+
}
|
|
1824
|
+
}
|
|
1825
|
+
accepted.push(file);
|
|
1826
|
+
}
|
|
1827
|
+
return { accepted, rejected };
|
|
1828
|
+
}
|
|
1829
|
+
function FileUpload({
|
|
1830
|
+
label,
|
|
1831
|
+
value,
|
|
1832
|
+
defaultValue,
|
|
1833
|
+
onChange,
|
|
1834
|
+
acceptedFileTypes,
|
|
1835
|
+
allowsMultiple,
|
|
1836
|
+
maxSize,
|
|
1837
|
+
onError,
|
|
1838
|
+
showPreview = true,
|
|
1839
|
+
uploadProgress,
|
|
1840
|
+
chooseLabel,
|
|
1841
|
+
description,
|
|
1842
|
+
errorMessage,
|
|
1843
|
+
isInvalid,
|
|
1844
|
+
isDisabled,
|
|
1845
|
+
isReadOnly,
|
|
1846
|
+
isRequired,
|
|
1847
|
+
fullWidth = true,
|
|
1848
|
+
className,
|
|
1849
|
+
style
|
|
1850
|
+
}) {
|
|
1851
|
+
const msg = usePireMessages();
|
|
1852
|
+
const [uncontrolled, setUncontrolled] = React10.useState(defaultValue ?? []);
|
|
1853
|
+
const files = value ?? uncontrolled;
|
|
1854
|
+
const created = React10.useRef([]);
|
|
1855
|
+
React10.useEffect(() => () => {
|
|
1856
|
+
for (const url of created.current) URL.revokeObjectURL(url);
|
|
1857
|
+
}, []);
|
|
1858
|
+
const commit = (next) => {
|
|
1859
|
+
if (value === void 0) setUncontrolled(next);
|
|
1860
|
+
onChange?.(next);
|
|
1861
|
+
};
|
|
1862
|
+
const accept = (picked) => {
|
|
1863
|
+
if (!picked || isDisabled || isReadOnly) return;
|
|
1864
|
+
const { accepted, rejected } = screenFiles([...picked], { maxSize, acceptedFileTypes });
|
|
1865
|
+
if (rejected.length) onError?.(rejected);
|
|
1866
|
+
if (!accepted.length) return;
|
|
1867
|
+
const wrapped = accepted.map((file) => {
|
|
1868
|
+
const previewUrl = showPreview && isImage(file) ? URL.createObjectURL(file) : void 0;
|
|
1869
|
+
if (previewUrl) created.current.push(previewUrl);
|
|
1870
|
+
return { file, previewUrl };
|
|
1871
|
+
});
|
|
1872
|
+
commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
|
|
1873
|
+
};
|
|
1874
|
+
const remove = (target) => commit(files.filter((f) => f.file !== target));
|
|
1875
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
|
|
1876
|
+
"div",
|
|
1877
|
+
{
|
|
1878
|
+
className: cx("pire-field", "pire-fileupload", className),
|
|
1879
|
+
style,
|
|
1880
|
+
"data-full-width": String(fullWidth),
|
|
1881
|
+
"data-invalid": isInvalid ? "true" : void 0,
|
|
1882
|
+
children: [
|
|
1883
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "pire-field-label", children: [
|
|
1884
|
+
label,
|
|
1885
|
+
isRequired ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
1886
|
+
] }) : null,
|
|
1887
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1888
|
+
import_react_aria_components23.FileTrigger,
|
|
1889
|
+
{
|
|
1890
|
+
acceptedFileTypes,
|
|
1891
|
+
allowsMultiple,
|
|
1892
|
+
onSelect: accept,
|
|
1893
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
|
|
1894
|
+
}
|
|
1895
|
+
),
|
|
1896
|
+
files.length ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("li", { className: "pire-fileupload-item", children: [
|
|
1897
|
+
previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
|
|
1898
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
|
|
1899
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
|
|
1900
|
+
isDisabled || isReadOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1901
|
+
IconButton,
|
|
1902
|
+
{
|
|
1903
|
+
icon: "x",
|
|
1904
|
+
size: "sm",
|
|
1905
|
+
label: msg.fileUploadRemoveNamed.replace("{name}", file.name),
|
|
1906
|
+
onPress: () => remove(file)
|
|
1907
|
+
}
|
|
1908
|
+
)
|
|
1909
|
+
] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
|
|
1910
|
+
uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
|
|
1911
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components23.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
1912
|
+
isInvalid && errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-field-error", children: errorMessage }) : null
|
|
1913
|
+
]
|
|
1914
|
+
}
|
|
1915
|
+
);
|
|
1916
|
+
}
|
|
1917
|
+
|
|
1632
1918
|
// src/components/navigation/ShellBar.tsx
|
|
1633
|
-
var
|
|
1919
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1634
1920
|
var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
|
|
1635
1921
|
function ShellBar({
|
|
1636
1922
|
product,
|
|
@@ -1645,22 +1931,75 @@ function ShellBar({
|
|
|
1645
1931
|
className,
|
|
1646
1932
|
...rest
|
|
1647
1933
|
}) {
|
|
1648
|
-
return /* @__PURE__ */ (0,
|
|
1649
|
-
onMenu ? /* @__PURE__ */ (0,
|
|
1650
|
-
monogram ? /* @__PURE__ */ (0,
|
|
1651
|
-
product ? /* @__PURE__ */ (0,
|
|
1652
|
-
title ? /* @__PURE__ */ (0,
|
|
1653
|
-
/* @__PURE__ */ (0,
|
|
1654
|
-
onSearch ? /* @__PURE__ */ (0,
|
|
1934
|
+
return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("header", { className: cx("pire-shellbar", className), ...rest, children: [
|
|
1935
|
+
onMenu ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
|
|
1936
|
+
monogram ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
|
|
1937
|
+
product ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-product", children: product }) : null,
|
|
1938
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-title", children: title }) : null,
|
|
1939
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-spacer" }),
|
|
1940
|
+
onSearch ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
|
|
1655
1941
|
actions,
|
|
1656
|
-
user ? /* @__PURE__ */ (0,
|
|
1942
|
+
user ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
|
|
1657
1943
|
] });
|
|
1658
1944
|
}
|
|
1659
1945
|
|
|
1660
1946
|
// src/components/navigation/SideNav.tsx
|
|
1661
|
-
var
|
|
1662
|
-
var
|
|
1663
|
-
|
|
1947
|
+
var React11 = __toESM(require("react"), 1);
|
|
1948
|
+
var import_react_aria_components25 = require("react-aria-components");
|
|
1949
|
+
|
|
1950
|
+
// src/components/navigation/Menu.tsx
|
|
1951
|
+
var import_react_aria_components24 = require("react-aria-components");
|
|
1952
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1953
|
+
function Menu({ minWidth, className, style, ...rest }) {
|
|
1954
|
+
const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
|
|
1955
|
+
const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
|
|
1956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
1957
|
+
import_react_aria_components24.Menu,
|
|
1958
|
+
{
|
|
1959
|
+
className: cx("pire-menu", className),
|
|
1960
|
+
style: menuStyle,
|
|
1961
|
+
...rest
|
|
1962
|
+
}
|
|
1963
|
+
);
|
|
1964
|
+
}
|
|
1965
|
+
function MenuItem({
|
|
1966
|
+
children,
|
|
1967
|
+
icon,
|
|
1968
|
+
description,
|
|
1969
|
+
shortcut,
|
|
1970
|
+
tone = "default",
|
|
1971
|
+
className,
|
|
1972
|
+
...rest
|
|
1973
|
+
}) {
|
|
1974
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
1975
|
+
import_react_aria_components24.MenuItem,
|
|
1976
|
+
{
|
|
1977
|
+
className: cx("pire-menu-item", className),
|
|
1978
|
+
"data-tone": tone === "danger" ? "danger" : void 0,
|
|
1979
|
+
...rest,
|
|
1980
|
+
children: [
|
|
1981
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
|
|
1982
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "pire-menu-item-body", children: [
|
|
1983
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-menu-item-label", children }),
|
|
1984
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-menu-item-desc", children: description }) : null
|
|
1985
|
+
] }),
|
|
1986
|
+
shortcut ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
|
|
1987
|
+
]
|
|
1988
|
+
}
|
|
1989
|
+
);
|
|
1990
|
+
}
|
|
1991
|
+
function MenuSection({ title, children, className, ...rest }) {
|
|
1992
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react_aria_components24.MenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
|
|
1993
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components24.Header, { className: "pire-menu-section-title", children: title }) : null,
|
|
1994
|
+
children
|
|
1995
|
+
] });
|
|
1996
|
+
}
|
|
1997
|
+
function MenuSeparator({ className }) {
|
|
1998
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components24.Separator, { className: cx("pire-menu-separator", className) });
|
|
1999
|
+
}
|
|
2000
|
+
|
|
2001
|
+
// src/components/navigation/SideNav.tsx
|
|
2002
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1664
2003
|
function findActiveParent(groups, value) {
|
|
1665
2004
|
if (value == null) return void 0;
|
|
1666
2005
|
for (const group of groups) {
|
|
@@ -1678,6 +2017,7 @@ function SideNav({
|
|
|
1678
2017
|
defaultExpandedIds,
|
|
1679
2018
|
onExpandedChange,
|
|
1680
2019
|
collapsed,
|
|
2020
|
+
railFlyout = true,
|
|
1681
2021
|
footer,
|
|
1682
2022
|
className,
|
|
1683
2023
|
...rest
|
|
@@ -1685,10 +2025,10 @@ function SideNav({
|
|
|
1685
2025
|
const msg = usePireMessages();
|
|
1686
2026
|
const activeParent = findActiveParent(groups, value);
|
|
1687
2027
|
const isControlled = expandedIds != null;
|
|
1688
|
-
const [ownExpanded, setOwnExpanded] =
|
|
2028
|
+
const [ownExpanded, setOwnExpanded] = React11.useState(
|
|
1689
2029
|
() => new Set(defaultExpandedIds ?? (activeParent ? [activeParent] : []))
|
|
1690
2030
|
);
|
|
1691
|
-
const [lastValue, setLastValue] =
|
|
2031
|
+
const [lastValue, setLastValue] = React11.useState(value);
|
|
1692
2032
|
if (value !== lastValue) {
|
|
1693
2033
|
setLastValue(value);
|
|
1694
2034
|
if (!isControlled && activeParent && !ownExpanded.has(activeParent)) {
|
|
@@ -1708,8 +2048,8 @@ function SideNav({
|
|
|
1708
2048
|
};
|
|
1709
2049
|
const renderRow = (item, onPress, isGroup) => {
|
|
1710
2050
|
const selected = !isGroup && item.id === value;
|
|
1711
|
-
const button = /* @__PURE__ */ (0,
|
|
1712
|
-
|
|
2051
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
2052
|
+
import_react_aria_components25.Button,
|
|
1713
2053
|
{
|
|
1714
2054
|
className: "pire-sidenav-item",
|
|
1715
2055
|
"data-selected": selected ? "true" : void 0,
|
|
@@ -1718,50 +2058,70 @@ function SideNav({
|
|
|
1718
2058
|
"aria-label": collapsed ? item.label : void 0,
|
|
1719
2059
|
onPress,
|
|
1720
2060
|
children: [
|
|
1721
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
1722
|
-
collapsed ? null : /* @__PURE__ */ (0,
|
|
1723
|
-
item.count != null && !collapsed ? /* @__PURE__ */ (0,
|
|
2061
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null,
|
|
2062
|
+
collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label }),
|
|
2063
|
+
item.count != null && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null
|
|
1724
2064
|
]
|
|
1725
2065
|
},
|
|
1726
2066
|
item.id
|
|
1727
2067
|
);
|
|
1728
|
-
return collapsed ? /* @__PURE__ */ (0,
|
|
2068
|
+
return collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
|
|
1729
2069
|
};
|
|
1730
|
-
const
|
|
1731
|
-
/* @__PURE__ */ (0,
|
|
1732
|
-
|
|
2070
|
+
const renderRailFlyout = (item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.MenuTrigger, { children: [
|
|
2071
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2072
|
+
import_react_aria_components25.Button,
|
|
2073
|
+
{
|
|
2074
|
+
className: "pire-sidenav-item",
|
|
2075
|
+
"aria-label": item.label,
|
|
2076
|
+
"data-active-child": item.id === activeParent ? "true" : void 0,
|
|
2077
|
+
children: item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null
|
|
2078
|
+
}
|
|
2079
|
+
),
|
|
2080
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components25.Popover, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2081
|
+
Menu,
|
|
2082
|
+
{
|
|
2083
|
+
"aria-label": item.label,
|
|
2084
|
+
className: "pire-sidenav-flyout",
|
|
2085
|
+
onAction: (key) => onChange?.(String(key)),
|
|
2086
|
+
children: (item.items ?? []).map((child) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(MenuItem, { id: child.id, children: child.label }, child.id))
|
|
2087
|
+
}
|
|
2088
|
+
) })
|
|
2089
|
+
] }, item.id);
|
|
2090
|
+
const renderSection = (item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
|
|
2091
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
2092
|
+
import_react_aria_components25.Button,
|
|
1733
2093
|
{
|
|
1734
2094
|
slot: "trigger",
|
|
1735
2095
|
className: "pire-sidenav-item",
|
|
1736
2096
|
"data-kind": "group",
|
|
1737
2097
|
"data-active-child": item.id === activeParent ? "true" : void 0,
|
|
1738
2098
|
children: [
|
|
1739
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
1740
|
-
/* @__PURE__ */ (0,
|
|
1741
|
-
item.count != null ? /* @__PURE__ */ (0,
|
|
1742
|
-
/* @__PURE__ */ (0,
|
|
2099
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null,
|
|
2100
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label }),
|
|
2101
|
+
item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null,
|
|
2102
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
|
|
1743
2103
|
]
|
|
1744
2104
|
}
|
|
1745
2105
|
),
|
|
1746
|
-
/* @__PURE__ */ (0,
|
|
2106
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components25.DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
|
|
1747
2107
|
const selected = child.id === value;
|
|
1748
|
-
return /* @__PURE__ */ (0,
|
|
1749
|
-
|
|
2108
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
2109
|
+
import_react_aria_components25.Button,
|
|
1750
2110
|
{
|
|
1751
2111
|
className: "pire-sidenav-item pire-sidenav-subitem",
|
|
1752
2112
|
"data-selected": selected ? "true" : void 0,
|
|
1753
2113
|
"aria-current": selected ? "page" : void 0,
|
|
1754
2114
|
onPress: () => onChange?.(child.id),
|
|
1755
2115
|
children: [
|
|
1756
|
-
/* @__PURE__ */ (0,
|
|
1757
|
-
child.count != null ? /* @__PURE__ */ (0,
|
|
2116
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: child.label }),
|
|
2117
|
+
child.count != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: child.count }) : null
|
|
1758
2118
|
]
|
|
1759
2119
|
},
|
|
1760
2120
|
child.id
|
|
1761
2121
|
);
|
|
1762
2122
|
}) })
|
|
1763
2123
|
] }, item.id);
|
|
1764
|
-
return /* @__PURE__ */ (0,
|
|
2124
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1765
2125
|
"nav",
|
|
1766
2126
|
{
|
|
1767
2127
|
className: cx("pire-sidenav", className),
|
|
@@ -1774,12 +2134,13 @@ function SideNav({
|
|
|
1774
2134
|
const rows = group.items.map((item) => {
|
|
1775
2135
|
const isGroup = Boolean(item.items?.length);
|
|
1776
2136
|
if (isGroup && !collapsed) return renderSection(item);
|
|
2137
|
+
if (isGroup && collapsed && railFlyout) return renderRailFlyout(item);
|
|
1777
2138
|
return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
|
|
1778
2139
|
});
|
|
1779
|
-
return /* @__PURE__ */ (0,
|
|
1780
|
-
group.label && !collapsed ? /* @__PURE__ */ (0,
|
|
1781
|
-
hasSections ? /* @__PURE__ */ (0,
|
|
1782
|
-
|
|
2140
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "pire-sidenav-group", children: [
|
|
2141
|
+
group.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "pire-sidenav-label", children: group.label }) : null,
|
|
2142
|
+
hasSections ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
2143
|
+
import_react_aria_components25.DisclosureGroup,
|
|
1783
2144
|
{
|
|
1784
2145
|
className: "pire-sidenav-tree",
|
|
1785
2146
|
allowsMultipleExpanded: true,
|
|
@@ -1790,18 +2151,18 @@ function SideNav({
|
|
|
1790
2151
|
) : rows
|
|
1791
2152
|
] }, group.label ?? gi);
|
|
1792
2153
|
}),
|
|
1793
|
-
footer ? /* @__PURE__ */ (0,
|
|
2154
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "pire-sidenav-footer", children: footer }) : null
|
|
1794
2155
|
]
|
|
1795
2156
|
}
|
|
1796
2157
|
);
|
|
1797
2158
|
}
|
|
1798
2159
|
|
|
1799
2160
|
// src/components/navigation/Tabs.tsx
|
|
1800
|
-
var
|
|
1801
|
-
var
|
|
2161
|
+
var import_react_aria_components26 = require("react-aria-components");
|
|
2162
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
1802
2163
|
function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
|
|
1803
|
-
return /* @__PURE__ */ (0,
|
|
1804
|
-
|
|
2164
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
|
|
2165
|
+
import_react_aria_components26.Tabs,
|
|
1805
2166
|
{
|
|
1806
2167
|
className,
|
|
1807
2168
|
style,
|
|
@@ -1809,23 +2170,23 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
|
|
|
1809
2170
|
defaultSelectedKey: defaultValue,
|
|
1810
2171
|
onSelectionChange: (k) => onChange?.(String(k)),
|
|
1811
2172
|
children: [
|
|
1812
|
-
/* @__PURE__ */ (0,
|
|
1813
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
2173
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components26.TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_aria_components26.Tab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
|
|
2174
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { name: item.icon, size: 16 }) : null,
|
|
1814
2175
|
item.label,
|
|
1815
|
-
item.count != null ? /* @__PURE__ */ (0,
|
|
2176
|
+
item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "pire-tab-count", children: item.count }) : null
|
|
1816
2177
|
] }) }),
|
|
1817
|
-
items.map((item) => /* @__PURE__ */ (0,
|
|
2178
|
+
items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components26.TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
|
|
1818
2179
|
]
|
|
1819
2180
|
}
|
|
1820
2181
|
);
|
|
1821
2182
|
}
|
|
1822
2183
|
|
|
1823
2184
|
// src/components/navigation/Breadcrumb.tsx
|
|
1824
|
-
var
|
|
1825
|
-
var
|
|
2185
|
+
var import_react_aria_components27 = require("react-aria-components");
|
|
2186
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
1826
2187
|
function Breadcrumb({ items, onNavigate, className, style }) {
|
|
1827
|
-
return /* @__PURE__ */ (0,
|
|
1828
|
-
|
|
2188
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2189
|
+
import_react_aria_components27.Breadcrumbs,
|
|
1829
2190
|
{
|
|
1830
2191
|
className: cx("pire-breadcrumbs", className),
|
|
1831
2192
|
style,
|
|
@@ -1833,9 +2194,9 @@ function Breadcrumb({ items, onNavigate, className, style }) {
|
|
|
1833
2194
|
onAction: (key) => onNavigate?.(String(key)),
|
|
1834
2195
|
children: (item) => {
|
|
1835
2196
|
const last = items[items.length - 1] === item;
|
|
1836
|
-
return /* @__PURE__ */ (0,
|
|
1837
|
-
last ? item.label : /* @__PURE__ */ (0,
|
|
1838
|
-
last ? null : /* @__PURE__ */ (0,
|
|
2197
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_aria_components27.Breadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
|
|
2198
|
+
last ? item.label : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components27.Link, { href: item.href, children: item.label }),
|
|
2199
|
+
last ? null : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
|
|
1839
2200
|
] });
|
|
1840
2201
|
}
|
|
1841
2202
|
}
|
|
@@ -1843,7 +2204,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
|
|
|
1843
2204
|
}
|
|
1844
2205
|
|
|
1845
2206
|
// src/components/navigation/Pagination.tsx
|
|
1846
|
-
var
|
|
2207
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
1847
2208
|
function Pagination({
|
|
1848
2209
|
page = 1,
|
|
1849
2210
|
pageSize = 25,
|
|
@@ -1858,9 +2219,9 @@ function Pagination({
|
|
|
1858
2219
|
const pages = Math.max(1, Math.ceil(total / pageSize));
|
|
1859
2220
|
const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
1860
2221
|
const to = Math.min(total, page * pageSize);
|
|
1861
|
-
return /* @__PURE__ */ (0,
|
|
1862
|
-
/* @__PURE__ */ (0,
|
|
1863
|
-
/* @__PURE__ */ (0,
|
|
2222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
|
|
2223
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
|
|
2224
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
1864
2225
|
IconButton,
|
|
1865
2226
|
{
|
|
1866
2227
|
icon: "chevron-left",
|
|
@@ -1871,8 +2232,8 @@ function Pagination({
|
|
|
1871
2232
|
onPress: () => onPageChange?.(page - 1)
|
|
1872
2233
|
}
|
|
1873
2234
|
),
|
|
1874
|
-
/* @__PURE__ */ (0,
|
|
1875
|
-
/* @__PURE__ */ (0,
|
|
2235
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
|
|
2236
|
+
/* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
1876
2237
|
IconButton,
|
|
1877
2238
|
{
|
|
1878
2239
|
icon: "chevron-right",
|
|
@@ -1883,7 +2244,7 @@ function Pagination({
|
|
|
1883
2244
|
onPress: () => onPageChange?.(page + 1)
|
|
1884
2245
|
}
|
|
1885
2246
|
),
|
|
1886
|
-
onPageSizeChange ? /* @__PURE__ */ (0,
|
|
2247
|
+
onPageSizeChange ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
1887
2248
|
Select,
|
|
1888
2249
|
{
|
|
1889
2250
|
"aria-label": msg.paginationRowsPerPage,
|
|
@@ -1898,59 +2259,8 @@ function Pagination({
|
|
|
1898
2259
|
] });
|
|
1899
2260
|
}
|
|
1900
2261
|
|
|
1901
|
-
// src/components/navigation/Menu.tsx
|
|
1902
|
-
var import_react_aria_components24 = require("react-aria-components");
|
|
1903
|
-
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1904
|
-
function Menu({ minWidth, className, style, ...rest }) {
|
|
1905
|
-
const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
|
|
1906
|
-
const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
|
|
1907
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
1908
|
-
import_react_aria_components24.Menu,
|
|
1909
|
-
{
|
|
1910
|
-
className: cx("pire-menu", className),
|
|
1911
|
-
style: menuStyle,
|
|
1912
|
-
...rest
|
|
1913
|
-
}
|
|
1914
|
-
);
|
|
1915
|
-
}
|
|
1916
|
-
function MenuItem({
|
|
1917
|
-
children,
|
|
1918
|
-
icon,
|
|
1919
|
-
description,
|
|
1920
|
-
shortcut,
|
|
1921
|
-
tone = "default",
|
|
1922
|
-
className,
|
|
1923
|
-
...rest
|
|
1924
|
-
}) {
|
|
1925
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
|
|
1926
|
-
import_react_aria_components24.MenuItem,
|
|
1927
|
-
{
|
|
1928
|
-
className: cx("pire-menu-item", className),
|
|
1929
|
-
"data-tone": tone === "danger" ? "danger" : void 0,
|
|
1930
|
-
...rest,
|
|
1931
|
-
children: [
|
|
1932
|
-
icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
|
|
1933
|
-
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "pire-menu-item-body", children: [
|
|
1934
|
-
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-menu-item-label", children }),
|
|
1935
|
-
description ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-menu-item-desc", children: description }) : null
|
|
1936
|
-
] }),
|
|
1937
|
-
shortcut ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
|
|
1938
|
-
]
|
|
1939
|
-
}
|
|
1940
|
-
);
|
|
1941
|
-
}
|
|
1942
|
-
function MenuSection({ title, children, className, ...rest }) {
|
|
1943
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components24.MenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
|
|
1944
|
-
title ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components24.Header, { className: "pire-menu-section-title", children: title }) : null,
|
|
1945
|
-
children
|
|
1946
|
-
] });
|
|
1947
|
-
}
|
|
1948
|
-
function MenuSeparator({ className }) {
|
|
1949
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components24.Separator, { className: cx("pire-menu-separator", className) });
|
|
1950
|
-
}
|
|
1951
|
-
|
|
1952
2262
|
// src/components/feedback/InlineMessage.tsx
|
|
1953
|
-
var
|
|
2263
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
1954
2264
|
var KIND_ICON = {
|
|
1955
2265
|
info: "info",
|
|
1956
2266
|
success: "check-circle-2",
|
|
@@ -1960,7 +2270,7 @@ var KIND_ICON = {
|
|
|
1960
2270
|
function InlineMessage({ kind = "info", title, action, onClose, children, className, ...rest }) {
|
|
1961
2271
|
const msg = usePireMessages();
|
|
1962
2272
|
const assertive = kind === "error" || kind === "warning";
|
|
1963
|
-
return /* @__PURE__ */ (0,
|
|
2273
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
|
|
1964
2274
|
"div",
|
|
1965
2275
|
{
|
|
1966
2276
|
className: cx("pire-msg", className),
|
|
@@ -1969,58 +2279,21 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
|
|
|
1969
2279
|
"aria-live": assertive ? "assertive" : "polite",
|
|
1970
2280
|
...rest,
|
|
1971
2281
|
children: [
|
|
1972
|
-
/* @__PURE__ */ (0,
|
|
1973
|
-
/* @__PURE__ */ (0,
|
|
1974
|
-
title ? /* @__PURE__ */ (0,
|
|
1975
|
-
children ? /* @__PURE__ */ (0,
|
|
2282
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
|
|
2283
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
|
|
2284
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-msg-title", children: title }) : null,
|
|
2285
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-msg-body", children }) : null,
|
|
1976
2286
|
action
|
|
1977
2287
|
] }),
|
|
1978
|
-
onClose ? /* @__PURE__ */ (0,
|
|
2288
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
|
|
1979
2289
|
]
|
|
1980
2290
|
}
|
|
1981
2291
|
);
|
|
1982
2292
|
}
|
|
1983
2293
|
|
|
1984
|
-
// src/components/feedback/ProgressBar.tsx
|
|
1985
|
-
var import_react_aria_components25 = require("react-aria-components");
|
|
1986
|
-
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
1987
|
-
function ProgressBar({
|
|
1988
|
-
value = 0,
|
|
1989
|
-
minValue = 0,
|
|
1990
|
-
maxValue = 100,
|
|
1991
|
-
label,
|
|
1992
|
-
showValue = true,
|
|
1993
|
-
isIndeterminate,
|
|
1994
|
-
status = "informative",
|
|
1995
|
-
size = "md",
|
|
1996
|
-
className,
|
|
1997
|
-
style
|
|
1998
|
-
}) {
|
|
1999
|
-
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
2000
|
-
import_react_aria_components25.ProgressBar,
|
|
2001
|
-
{
|
|
2002
|
-
className: cx("pire-progress", className),
|
|
2003
|
-
"data-status": status,
|
|
2004
|
-
"data-size": size,
|
|
2005
|
-
value,
|
|
2006
|
-
minValue,
|
|
2007
|
-
maxValue,
|
|
2008
|
-
isIndeterminate,
|
|
2009
|
-
style,
|
|
2010
|
-
children: ({ percentage, valueText }) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_jsx_runtime38.Fragment, { children: [
|
|
2011
|
-
label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: "pire-progress-head", children: [
|
|
2012
|
-
label ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components25.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", {}),
|
|
2013
|
-
showValue && !isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "pire-numeric", children: valueText }) : null
|
|
2014
|
-
] }) : null,
|
|
2015
|
-
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "pire-progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
|
|
2016
|
-
] })
|
|
2017
|
-
}
|
|
2018
|
-
);
|
|
2019
|
-
}
|
|
2020
|
-
|
|
2021
2294
|
// src/components/feedback/Toast.tsx
|
|
2022
|
-
var
|
|
2023
|
-
var
|
|
2295
|
+
var React12 = __toESM(require("react"), 1);
|
|
2296
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
2024
2297
|
var KIND_ICON2 = {
|
|
2025
2298
|
info: "info",
|
|
2026
2299
|
success: "check-circle-2",
|
|
@@ -2029,7 +2302,7 @@ var KIND_ICON2 = {
|
|
|
2029
2302
|
};
|
|
2030
2303
|
function Toast({ kind = "success", onClose, position = "bottom-center", children, className, ...rest }) {
|
|
2031
2304
|
const msg = usePireMessages();
|
|
2032
|
-
return /* @__PURE__ */ (0,
|
|
2305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
|
|
2033
2306
|
"div",
|
|
2034
2307
|
{
|
|
2035
2308
|
className: cx("pire-toast", className),
|
|
@@ -2038,40 +2311,40 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
|
|
|
2038
2311
|
"aria-live": kind === "error" ? "assertive" : "polite",
|
|
2039
2312
|
...rest,
|
|
2040
2313
|
children: [
|
|
2041
|
-
/* @__PURE__ */ (0,
|
|
2042
|
-
/* @__PURE__ */ (0,
|
|
2043
|
-
onClose ? /* @__PURE__ */ (0,
|
|
2314
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { name: KIND_ICON2[kind], size: 16 }),
|
|
2315
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { flex: 1 }, children }),
|
|
2316
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
|
|
2044
2317
|
]
|
|
2045
2318
|
}
|
|
2046
2319
|
);
|
|
2047
2320
|
}
|
|
2048
|
-
var ToastContext =
|
|
2321
|
+
var ToastContext = React12.createContext(null);
|
|
2049
2322
|
function ToastProvider({ children, timeout = 6e3 }) {
|
|
2050
2323
|
const msg = usePireMessages();
|
|
2051
|
-
const [toasts, setToasts] =
|
|
2052
|
-
const close =
|
|
2053
|
-
const add =
|
|
2324
|
+
const [toasts, setToasts] = React12.useState([]);
|
|
2325
|
+
const close = React12.useCallback((id) => setToasts((t) => t.filter((x) => x.id !== id)), []);
|
|
2326
|
+
const add = React12.useCallback((toast) => {
|
|
2054
2327
|
const id = Math.random().toString(36).slice(2);
|
|
2055
2328
|
setToasts((t) => [...t, { ...toast, id }]);
|
|
2056
2329
|
const ms = toast.timeout ?? timeout;
|
|
2057
2330
|
if (ms > 0) setTimeout(() => close(id), ms);
|
|
2058
2331
|
return id;
|
|
2059
2332
|
}, [close, timeout]);
|
|
2060
|
-
const value =
|
|
2061
|
-
return /* @__PURE__ */ (0,
|
|
2333
|
+
const value = React12.useMemo(() => ({ add, close }), [add, close]);
|
|
2334
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(ToastContext.Provider, { value, children: [
|
|
2062
2335
|
children,
|
|
2063
|
-
/* @__PURE__ */ (0,
|
|
2336
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
|
|
2064
2337
|
] });
|
|
2065
2338
|
}
|
|
2066
2339
|
function useToast() {
|
|
2067
|
-
const ctx =
|
|
2340
|
+
const ctx = React12.useContext(ToastContext);
|
|
2068
2341
|
if (!ctx) throw new Error("useToast must be used inside <ToastProvider>");
|
|
2069
2342
|
return ctx;
|
|
2070
2343
|
}
|
|
2071
2344
|
|
|
2072
2345
|
// src/components/data/KpiTile.tsx
|
|
2073
|
-
var
|
|
2074
|
-
var
|
|
2346
|
+
var import_react_aria_components28 = require("react-aria-components");
|
|
2347
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
2075
2348
|
function KpiTile({
|
|
2076
2349
|
label,
|
|
2077
2350
|
value,
|
|
@@ -2087,50 +2360,50 @@ function KpiTile({
|
|
|
2087
2360
|
style
|
|
2088
2361
|
}) {
|
|
2089
2362
|
const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
|
|
2090
|
-
const body = /* @__PURE__ */ (0,
|
|
2091
|
-
/* @__PURE__ */ (0,
|
|
2092
|
-
icon ? /* @__PURE__ */ (0,
|
|
2363
|
+
const body = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
|
|
2364
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-label", children: [
|
|
2365
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { name: icon, size: 16 }) : null,
|
|
2093
2366
|
label
|
|
2094
2367
|
] }),
|
|
2095
|
-
/* @__PURE__ */ (0,
|
|
2368
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-value", children: [
|
|
2096
2369
|
value,
|
|
2097
|
-
unit ? /* @__PURE__ */ (0,
|
|
2370
|
+
unit ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pire-kpi-unit", children: unit }) : null
|
|
2098
2371
|
] }),
|
|
2099
|
-
delta ? /* @__PURE__ */ (0,
|
|
2100
|
-
deltaDirection ? /* @__PURE__ */ (0,
|
|
2372
|
+
delta ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
|
|
2373
|
+
deltaDirection ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
|
|
2101
2374
|
delta
|
|
2102
2375
|
] }) : null,
|
|
2103
|
-
footnote ? /* @__PURE__ */ (0,
|
|
2376
|
+
footnote ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pire-kpi-foot", children: footnote }) : null
|
|
2104
2377
|
] });
|
|
2105
2378
|
const props = { className: cx("pire-kpi", className), "data-status": status, style };
|
|
2106
|
-
return onPress ? /* @__PURE__ */ (0,
|
|
2379
|
+
return onPress ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components28.Button, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { ...props, children: body });
|
|
2107
2380
|
}
|
|
2108
2381
|
|
|
2109
2382
|
// src/components/data/ObjectHeader.tsx
|
|
2110
|
-
var
|
|
2383
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
2111
2384
|
function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
|
|
2112
|
-
return /* @__PURE__ */ (0,
|
|
2385
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("header", { className: cx("pire-objheader", className), ...rest, children: [
|
|
2113
2386
|
breadcrumb,
|
|
2114
|
-
/* @__PURE__ */ (0,
|
|
2115
|
-
/* @__PURE__ */ (0,
|
|
2116
|
-
/* @__PURE__ */ (0,
|
|
2117
|
-
subtitle || id ? /* @__PURE__ */ (0,
|
|
2387
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "pire-objheader-row", children: [
|
|
2388
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { minWidth: 0 }, children: [
|
|
2389
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h1", { className: "pire-objheader-title", children: title }),
|
|
2390
|
+
subtitle || id ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "pire-objheader-sub", children: [
|
|
2118
2391
|
subtitle,
|
|
2119
|
-
id ? /* @__PURE__ */ (0,
|
|
2392
|
+
id ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "pire-objheader-id", children: id }) : null
|
|
2120
2393
|
] }) : null
|
|
2121
2394
|
] }),
|
|
2122
2395
|
badge,
|
|
2123
|
-
actions ? /* @__PURE__ */ (0,
|
|
2396
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "pire-objheader-actions", children: actions }) : null
|
|
2124
2397
|
] }),
|
|
2125
|
-
facts?.length ? /* @__PURE__ */ (0,
|
|
2126
|
-
/* @__PURE__ */ (0,
|
|
2127
|
-
/* @__PURE__ */ (0,
|
|
2398
|
+
facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { children: [
|
|
2399
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dt", { className: "pire-fact-label", children: fact.label }),
|
|
2400
|
+
/* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
|
|
2128
2401
|
] }, fact.label)) }) : null
|
|
2129
2402
|
] });
|
|
2130
2403
|
}
|
|
2131
2404
|
|
|
2132
2405
|
// src/components/data/FilterBar.tsx
|
|
2133
|
-
var
|
|
2406
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
2134
2407
|
function FilterBar({
|
|
2135
2408
|
children,
|
|
2136
2409
|
activeFilters = [],
|
|
@@ -2147,66 +2420,66 @@ function FilterBar({
|
|
|
2147
2420
|
const label = useMessage("filterBarLabel", rest["aria-label"]);
|
|
2148
2421
|
const go = useMessage("filterBarGo", goLabel);
|
|
2149
2422
|
const clearAll = useMessage("filterBarClearAll", clearAllLabel);
|
|
2150
|
-
return /* @__PURE__ */ (0,
|
|
2151
|
-
/* @__PURE__ */ (0,
|
|
2423
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
|
|
2424
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-filterbar-controls", children: [
|
|
2152
2425
|
children,
|
|
2153
|
-
onGo ? /* @__PURE__ */ (0,
|
|
2426
|
+
onGo ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: "primary", onPress: onGo, children: go }) : null
|
|
2154
2427
|
] }),
|
|
2155
|
-
activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0,
|
|
2156
|
-
activeFilters.map((filter) => /* @__PURE__ */ (0,
|
|
2157
|
-
activeFilters.length && onClear ? /* @__PURE__ */ (0,
|
|
2158
|
-
resultLabel ? /* @__PURE__ */ (0,
|
|
2159
|
-
actions ? /* @__PURE__ */ (0,
|
|
2428
|
+
activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-filterbar-foot", children: [
|
|
2429
|
+
activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
|
|
2430
|
+
activeFilters.length && onClear ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
|
|
2431
|
+
resultLabel ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
|
|
2432
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "pire-filterbar-actions", children: actions }) : null
|
|
2160
2433
|
] }) : null
|
|
2161
2434
|
] });
|
|
2162
2435
|
}
|
|
2163
2436
|
|
|
2164
2437
|
// src/components/data/DescriptionList.tsx
|
|
2165
|
-
var
|
|
2438
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
2166
2439
|
function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
|
|
2167
|
-
return /* @__PURE__ */ (0,
|
|
2440
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
2168
2441
|
"dl",
|
|
2169
2442
|
{
|
|
2170
2443
|
className: cx("pire-dl", className),
|
|
2171
2444
|
"data-layout": layout,
|
|
2172
2445
|
style: { ...layout === "grid" ? { "--pire-dl-cols": columns } : null, ...style },
|
|
2173
2446
|
...rest,
|
|
2174
|
-
children: items.map((item, i) => /* @__PURE__ */ (0,
|
|
2175
|
-
/* @__PURE__ */ (0,
|
|
2447
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
|
|
2448
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("dt", { className: "pire-dl-term", children: [
|
|
2176
2449
|
item.label,
|
|
2177
2450
|
item.hint
|
|
2178
2451
|
] }),
|
|
2179
|
-
/* @__PURE__ */ (0,
|
|
2452
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
|
|
2180
2453
|
] }, i))
|
|
2181
2454
|
}
|
|
2182
2455
|
);
|
|
2183
2456
|
}
|
|
2184
2457
|
|
|
2185
2458
|
// src/components/data/Timeline.tsx
|
|
2186
|
-
var
|
|
2459
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
2187
2460
|
function Timeline({ entries, reverse = false, className, ...rest }) {
|
|
2188
2461
|
const list = reverse ? [...entries].reverse() : entries;
|
|
2189
|
-
return /* @__PURE__ */ (0,
|
|
2190
|
-
/* @__PURE__ */ (0,
|
|
2191
|
-
/* @__PURE__ */ (0,
|
|
2192
|
-
entry.actor ? /* @__PURE__ */ (0,
|
|
2462
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("li", { className: "pire-timeline-item", children: [
|
|
2463
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-time", children: entry.time }),
|
|
2464
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-text", children: entry.event }),
|
|
2465
|
+
entry.actor ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-actor", children: entry.actor }) : null
|
|
2193
2466
|
] }, entry.id ?? i)) });
|
|
2194
2467
|
}
|
|
2195
2468
|
|
|
2196
2469
|
// src/components/data/LinkList.tsx
|
|
2197
|
-
var
|
|
2198
|
-
var
|
|
2470
|
+
var import_react_aria_components29 = require("react-aria-components");
|
|
2471
|
+
var import_jsx_runtime47 = require("react/jsx-runtime");
|
|
2199
2472
|
function LinkList({ items, onSelect, className, ...rest }) {
|
|
2200
|
-
return /* @__PURE__ */ (0,
|
|
2201
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
2202
|
-
item.key ? /* @__PURE__ */ (0,
|
|
2203
|
-
item.text ? /* @__PURE__ */ (0,
|
|
2473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)(import_react_aria_components29.Button, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
|
|
2474
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
|
|
2475
|
+
item.key ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-linklist-key", children: item.key }) : null,
|
|
2476
|
+
item.text ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-linklist-text", children: item.text }) : null,
|
|
2204
2477
|
item.trailing
|
|
2205
2478
|
] }, item.id)) });
|
|
2206
2479
|
}
|
|
2207
2480
|
|
|
2208
2481
|
// src/components/layout/PageBand.tsx
|
|
2209
|
-
var
|
|
2482
|
+
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
2210
2483
|
function PageBand({
|
|
2211
2484
|
surface = "card",
|
|
2212
2485
|
hasBorder = true,
|
|
@@ -2214,7 +2487,7 @@ function PageBand({
|
|
|
2214
2487
|
className,
|
|
2215
2488
|
...rest
|
|
2216
2489
|
}) {
|
|
2217
|
-
return /* @__PURE__ */ (0,
|
|
2490
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
2218
2491
|
"div",
|
|
2219
2492
|
{
|
|
2220
2493
|
className: cx("pire-pageband", className),
|
|
@@ -2227,56 +2500,56 @@ function PageBand({
|
|
|
2227
2500
|
}
|
|
2228
2501
|
|
|
2229
2502
|
// src/components/layout/PageHeader.tsx
|
|
2230
|
-
var
|
|
2503
|
+
var import_jsx_runtime49 = require("react/jsx-runtime");
|
|
2231
2504
|
function PageHeader({ title, subtitle, actions, className, ...rest }) {
|
|
2232
|
-
return /* @__PURE__ */ (0,
|
|
2233
|
-
/* @__PURE__ */ (0,
|
|
2234
|
-
/* @__PURE__ */ (0,
|
|
2235
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
2505
|
+
return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("header", { className: cx("pire-pageheader", className), ...rest, children: [
|
|
2506
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { style: { minWidth: 0 }, children: [
|
|
2507
|
+
/* @__PURE__ */ (0, import_jsx_runtime49.jsx)("h1", { className: "pire-pageheader-title", children: title }),
|
|
2508
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("p", { className: "pire-pageheader-sub", children: subtitle }) : null
|
|
2236
2509
|
] }),
|
|
2237
|
-
actions ? /* @__PURE__ */ (0,
|
|
2510
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "pire-pageheader-actions", children: actions }) : null
|
|
2238
2511
|
] });
|
|
2239
2512
|
}
|
|
2240
2513
|
|
|
2241
2514
|
// src/components/layout/SectionHeader.tsx
|
|
2242
|
-
var
|
|
2515
|
+
var import_jsx_runtime50 = require("react/jsx-runtime");
|
|
2243
2516
|
function SectionHeader({ title, meta, actions, className, ...rest }) {
|
|
2244
|
-
return /* @__PURE__ */ (0,
|
|
2245
|
-
/* @__PURE__ */ (0,
|
|
2246
|
-
meta ? /* @__PURE__ */ (0,
|
|
2247
|
-
actions ? /* @__PURE__ */ (0,
|
|
2517
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: cx("pire-sectionhead", className), ...rest, children: [
|
|
2518
|
+
/* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "pire-eyebrow", children: title }),
|
|
2519
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
|
|
2520
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "pire-sectionhead-actions", children: actions }) : null
|
|
2248
2521
|
] });
|
|
2249
2522
|
}
|
|
2250
2523
|
|
|
2251
2524
|
// src/components/layout/SelectionBar.tsx
|
|
2252
|
-
var
|
|
2525
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
2253
2526
|
function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
|
|
2254
2527
|
if (!count) return null;
|
|
2255
|
-
return /* @__PURE__ */ (0,
|
|
2256
|
-
/* @__PURE__ */ (0,
|
|
2528
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
|
|
2529
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("span", { className: "pire-selectionbar-count", children: [
|
|
2257
2530
|
count.toLocaleString(),
|
|
2258
2531
|
" ",
|
|
2259
2532
|
noun,
|
|
2260
2533
|
count === 1 ? "" : "s",
|
|
2261
2534
|
" selected"
|
|
2262
2535
|
] }),
|
|
2263
|
-
children ? /* @__PURE__ */ (0,
|
|
2264
|
-
actions ? /* @__PURE__ */ (0,
|
|
2536
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
|
|
2537
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "pire-selectionbar-actions", children: actions }) : null
|
|
2265
2538
|
] });
|
|
2266
2539
|
}
|
|
2267
2540
|
|
|
2268
2541
|
// src/components/layout/FooterBar.tsx
|
|
2269
|
-
var
|
|
2542
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
2270
2543
|
function FooterBar({ note, actions, children, className, ...rest }) {
|
|
2271
|
-
return /* @__PURE__ */ (0,
|
|
2272
|
-
note ? /* @__PURE__ */ (0,
|
|
2544
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)("footer", { className: cx("pire-footerbar", className), ...rest, children: [
|
|
2545
|
+
note ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "pire-footerbar-note", children: note }) : null,
|
|
2273
2546
|
children,
|
|
2274
|
-
actions ? /* @__PURE__ */ (0,
|
|
2547
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: "pire-footerbar-actions", children: actions }) : null
|
|
2275
2548
|
] });
|
|
2276
2549
|
}
|
|
2277
2550
|
|
|
2278
2551
|
// src/components/patterns/ConfirmDialog.tsx
|
|
2279
|
-
var
|
|
2552
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
2280
2553
|
function ConfirmDialog({
|
|
2281
2554
|
isOpen,
|
|
2282
2555
|
title,
|
|
@@ -2290,7 +2563,7 @@ function ConfirmDialog({
|
|
|
2290
2563
|
onConfirm,
|
|
2291
2564
|
onCancel
|
|
2292
2565
|
}) {
|
|
2293
|
-
return /* @__PURE__ */ (0,
|
|
2566
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
2294
2567
|
Dialog,
|
|
2295
2568
|
{
|
|
2296
2569
|
isOpen,
|
|
@@ -2300,12 +2573,12 @@ function ConfirmDialog({
|
|
|
2300
2573
|
onClose: onCancel,
|
|
2301
2574
|
isDismissable: !isBusy,
|
|
2302
2575
|
showClose: false,
|
|
2303
|
-
footer: /* @__PURE__ */ (0,
|
|
2304
|
-
/* @__PURE__ */ (0,
|
|
2305
|
-
/* @__PURE__ */ (0,
|
|
2576
|
+
footer: /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(import_jsx_runtime53.Fragment, { children: [
|
|
2577
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
|
|
2578
|
+
/* @__PURE__ */ (0, import_jsx_runtime53.jsx)(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
|
|
2306
2579
|
] }),
|
|
2307
2580
|
children: [
|
|
2308
|
-
consequence ? /* @__PURE__ */ (0,
|
|
2581
|
+
consequence ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
|
|
2309
2582
|
children
|
|
2310
2583
|
]
|
|
2311
2584
|
}
|
|
@@ -2313,12 +2586,12 @@ function ConfirmDialog({
|
|
|
2313
2586
|
}
|
|
2314
2587
|
|
|
2315
2588
|
// src/components/patterns/SidePanel.tsx
|
|
2316
|
-
var
|
|
2317
|
-
var
|
|
2589
|
+
var import_react_aria_components30 = require("react-aria-components");
|
|
2590
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
2318
2591
|
function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
|
|
2319
2592
|
const msg = usePireMessages();
|
|
2320
|
-
return /* @__PURE__ */ (0,
|
|
2321
|
-
|
|
2593
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
2594
|
+
import_react_aria_components30.ModalOverlay,
|
|
2322
2595
|
{
|
|
2323
2596
|
className: "pire-sidepanel-overlay",
|
|
2324
2597
|
isOpen,
|
|
@@ -2326,34 +2599,138 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
|
|
|
2326
2599
|
onOpenChange: (o) => {
|
|
2327
2600
|
if (!o) onClose?.();
|
|
2328
2601
|
},
|
|
2329
|
-
children: /* @__PURE__ */ (0,
|
|
2330
|
-
/* @__PURE__ */ (0,
|
|
2331
|
-
/* @__PURE__ */ (0,
|
|
2332
|
-
/* @__PURE__ */ (0,
|
|
2333
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
2602
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_aria_components30.Modal, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(import_react_aria_components30.Dialog, { className: "pire-dialog", style: { height: "100%" }, children: [
|
|
2603
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("header", { className: "pire-dialog-head", children: [
|
|
2604
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
2605
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_react_aria_components30.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
|
|
2606
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
2334
2607
|
] }),
|
|
2335
|
-
/* @__PURE__ */ (0,
|
|
2608
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
|
|
2336
2609
|
] }),
|
|
2337
|
-
/* @__PURE__ */ (0,
|
|
2338
|
-
footer ? /* @__PURE__ */ (0,
|
|
2610
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
|
|
2611
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
|
|
2339
2612
|
] }) })
|
|
2340
2613
|
}
|
|
2341
2614
|
);
|
|
2342
2615
|
}
|
|
2343
2616
|
|
|
2344
2617
|
// src/components/patterns/EmptyState.tsx
|
|
2345
|
-
var
|
|
2618
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
2346
2619
|
function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
|
|
2347
|
-
return /* @__PURE__ */ (0,
|
|
2348
|
-
/* @__PURE__ */ (0,
|
|
2349
|
-
title ? /* @__PURE__ */ (0,
|
|
2350
|
-
children ? /* @__PURE__ */ (0,
|
|
2620
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
|
|
2621
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
|
|
2622
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
|
|
2623
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
|
|
2351
2624
|
action
|
|
2352
2625
|
] });
|
|
2353
2626
|
}
|
|
2354
2627
|
|
|
2628
|
+
// src/components/patterns/FileDropZone.tsx
|
|
2629
|
+
var React13 = __toESM(require("react"), 1);
|
|
2630
|
+
var import_react_aria_components31 = require("react-aria-components");
|
|
2631
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
2632
|
+
var isImage2 = (file) => file.type.startsWith("image/");
|
|
2633
|
+
function FileDropZone({
|
|
2634
|
+
label,
|
|
2635
|
+
value,
|
|
2636
|
+
defaultValue,
|
|
2637
|
+
onChange,
|
|
2638
|
+
acceptedFileTypes,
|
|
2639
|
+
allowsMultiple,
|
|
2640
|
+
maxSize,
|
|
2641
|
+
onError,
|
|
2642
|
+
showPreview = true,
|
|
2643
|
+
uploadProgress,
|
|
2644
|
+
promptLabel,
|
|
2645
|
+
height = "regular",
|
|
2646
|
+
description,
|
|
2647
|
+
errorMessage,
|
|
2648
|
+
isInvalid,
|
|
2649
|
+
isDisabled,
|
|
2650
|
+
isReadOnly,
|
|
2651
|
+
isRequired,
|
|
2652
|
+
fullWidth = true,
|
|
2653
|
+
className,
|
|
2654
|
+
style
|
|
2655
|
+
}) {
|
|
2656
|
+
const msg = usePireMessages();
|
|
2657
|
+
const [uncontrolled, setUncontrolled] = React13.useState(defaultValue ?? []);
|
|
2658
|
+
const files = value ?? uncontrolled;
|
|
2659
|
+
const created = React13.useRef([]);
|
|
2660
|
+
React13.useEffect(() => () => {
|
|
2661
|
+
for (const url of created.current) URL.revokeObjectURL(url);
|
|
2662
|
+
}, []);
|
|
2663
|
+
const commit = (next) => {
|
|
2664
|
+
if (value === void 0) setUncontrolled(next);
|
|
2665
|
+
onChange?.(next);
|
|
2666
|
+
};
|
|
2667
|
+
const accept = (picked) => {
|
|
2668
|
+
if (isDisabled || isReadOnly || !picked.length) return;
|
|
2669
|
+
const { accepted, rejected } = screenFiles(picked, { maxSize, acceptedFileTypes });
|
|
2670
|
+
if (rejected.length) onError?.(rejected);
|
|
2671
|
+
if (!accepted.length) return;
|
|
2672
|
+
const wrapped = accepted.map((file) => {
|
|
2673
|
+
const previewUrl = showPreview && isImage2(file) ? URL.createObjectURL(file) : void 0;
|
|
2674
|
+
if (previewUrl) created.current.push(previewUrl);
|
|
2675
|
+
return { file, previewUrl };
|
|
2676
|
+
});
|
|
2677
|
+
commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
|
|
2678
|
+
};
|
|
2679
|
+
const remove = (target) => commit(files.filter((f) => f.file !== target));
|
|
2680
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
|
|
2681
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "pire-field-label", children: [
|
|
2682
|
+
label,
|
|
2683
|
+
isRequired ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
2684
|
+
] }) : null,
|
|
2685
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsxs)(
|
|
2686
|
+
import_react_aria_components31.DropZone,
|
|
2687
|
+
{
|
|
2688
|
+
className: "pire-dropzone",
|
|
2689
|
+
"data-height": height,
|
|
2690
|
+
isDisabled: isDisabled || isReadOnly,
|
|
2691
|
+
onDrop: async (e) => {
|
|
2692
|
+
const dropped = await Promise.all(
|
|
2693
|
+
e.items.filter(import_react_aria_components31.isFileDropItem).map((item) => item.getFile())
|
|
2694
|
+
);
|
|
2695
|
+
accept(dropped);
|
|
2696
|
+
},
|
|
2697
|
+
children: [
|
|
2698
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
|
|
2699
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
|
|
2700
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
2701
|
+
import_react_aria_components31.FileTrigger,
|
|
2702
|
+
{
|
|
2703
|
+
acceptedFileTypes,
|
|
2704
|
+
allowsMultiple,
|
|
2705
|
+
onSelect: (list) => accept(list ? [...list] : []),
|
|
2706
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
|
|
2707
|
+
}
|
|
2708
|
+
)
|
|
2709
|
+
]
|
|
2710
|
+
}
|
|
2711
|
+
),
|
|
2712
|
+
files.length ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("li", { className: "pire-fileupload-item", children: [
|
|
2713
|
+
previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
|
|
2714
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
|
|
2715
|
+
/* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
|
|
2716
|
+
isDisabled || isReadOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
2717
|
+
IconButton,
|
|
2718
|
+
{
|
|
2719
|
+
icon: "x",
|
|
2720
|
+
size: "sm",
|
|
2721
|
+
label: msg.fileUploadRemoveNamed.replace("{name}", file.name),
|
|
2722
|
+
onPress: () => remove(file)
|
|
2723
|
+
}
|
|
2724
|
+
)
|
|
2725
|
+
] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
|
|
2726
|
+
uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
|
|
2727
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-field-hint", children: description }) : null,
|
|
2728
|
+
isInvalid && errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-field-error", children: errorMessage }) : null
|
|
2729
|
+
] });
|
|
2730
|
+
}
|
|
2731
|
+
|
|
2355
2732
|
// src/index.ts
|
|
2356
|
-
var
|
|
2733
|
+
var import_react_aria_components32 = require("react-aria-components");
|
|
2357
2734
|
// Annotate the CommonJS export names for ESM import in node:
|
|
2358
2735
|
0 && (module.exports = {
|
|
2359
2736
|
Avatar,
|
|
@@ -2366,10 +2743,13 @@ var import_react_aria_components29 = require("react-aria-components");
|
|
|
2366
2743
|
ConfirmDialog,
|
|
2367
2744
|
DataTable,
|
|
2368
2745
|
DatePicker,
|
|
2746
|
+
DateRangePicker,
|
|
2369
2747
|
DescriptionList,
|
|
2370
2748
|
Dialog,
|
|
2371
2749
|
DialogTrigger,
|
|
2372
2750
|
EmptyState,
|
|
2751
|
+
FileDropZone,
|
|
2752
|
+
FileUpload,
|
|
2373
2753
|
FilterBar,
|
|
2374
2754
|
FooterBar,
|
|
2375
2755
|
FormField,
|
|
@@ -2425,6 +2805,8 @@ var import_react_aria_components29 = require("react-aria-components");
|
|
|
2425
2805
|
configureIcons,
|
|
2426
2806
|
enMessages,
|
|
2427
2807
|
esMessages,
|
|
2808
|
+
formatFileSize,
|
|
2809
|
+
rangeLengthInDays,
|
|
2428
2810
|
usePireMessages,
|
|
2429
2811
|
useToast
|
|
2430
2812
|
});
|