@orianatech/pire 0.2.0 → 0.3.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/feedback/Skeleton.d.cts +43 -0
- package/dist/components/feedback/Skeleton.d.ts +44 -0
- package/dist/components/feedback/Skeleton.d.ts.map +1 -0
- package/dist/components/forms/MultiComboBox.d.cts +58 -0
- package/dist/components/forms/MultiComboBox.d.ts +59 -0
- package/dist/components/forms/MultiComboBox.d.ts.map +1 -0
- package/dist/components/forms/TextArea.d.cts +42 -0
- package/dist/components/forms/TextArea.d.ts +43 -0
- package/dist/components/forms/TextArea.d.ts.map +1 -0
- package/dist/components.css +55 -3
- package/dist/index.cjs +558 -299
- 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 +561 -293
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -42,26 +42,27 @@ __export(src_exports, {
|
|
|
42
42
|
DatePicker: () => DatePicker,
|
|
43
43
|
DescriptionList: () => DescriptionList,
|
|
44
44
|
Dialog: () => Dialog,
|
|
45
|
-
DialogTrigger: () =>
|
|
45
|
+
DialogTrigger: () => import_react_aria_components25.DialogTrigger,
|
|
46
46
|
EmptyState: () => EmptyState,
|
|
47
47
|
FilterBar: () => FilterBar,
|
|
48
48
|
FooterBar: () => FooterBar,
|
|
49
49
|
FormField: () => FormField,
|
|
50
|
-
I18nProvider: () =>
|
|
50
|
+
I18nProvider: () => import_react_aria_components25.I18nProvider,
|
|
51
51
|
Icon: () => Icon,
|
|
52
52
|
IconButton: () => IconButton,
|
|
53
53
|
InlineMessage: () => InlineMessage,
|
|
54
54
|
Input: () => Input,
|
|
55
55
|
KpiTile: () => KpiTile,
|
|
56
56
|
LinkList: () => LinkList,
|
|
57
|
-
Menu: () =>
|
|
58
|
-
MenuItem: () =>
|
|
59
|
-
MenuTrigger: () =>
|
|
57
|
+
Menu: () => import_react_aria_components25.Menu,
|
|
58
|
+
MenuItem: () => import_react_aria_components25.MenuItem,
|
|
59
|
+
MenuTrigger: () => import_react_aria_components25.MenuTrigger,
|
|
60
|
+
MultiComboBox: () => MultiComboBox,
|
|
60
61
|
NumberField: () => NumberField,
|
|
61
62
|
ObjectHeader: () => ObjectHeader,
|
|
62
63
|
PageHeader: () => PageHeader,
|
|
63
64
|
Pagination: () => Pagination,
|
|
64
|
-
Popover: () =>
|
|
65
|
+
Popover: () => import_react_aria_components25.Popover,
|
|
65
66
|
ProgressBar: () => ProgressBar,
|
|
66
67
|
Radio: () => Radio,
|
|
67
68
|
RadioGroup: () => RadioGroup,
|
|
@@ -69,13 +70,16 @@ __export(src_exports, {
|
|
|
69
70
|
SegmentedControl: () => SegmentedControl,
|
|
70
71
|
Select: () => Select,
|
|
71
72
|
SelectionBar: () => SelectionBar,
|
|
72
|
-
Separator: () =>
|
|
73
|
+
Separator: () => import_react_aria_components25.Separator,
|
|
73
74
|
ShellBar: () => ShellBar,
|
|
74
75
|
SideNav: () => SideNav,
|
|
75
76
|
SidePanel: () => SidePanel,
|
|
77
|
+
Skeleton: () => Skeleton,
|
|
78
|
+
SkeletonTableRow: () => SkeletonTableRow,
|
|
76
79
|
Switch: () => Switch,
|
|
77
80
|
Tabs: () => Tabs,
|
|
78
81
|
Tag: () => Tag,
|
|
82
|
+
TextArea: () => TextArea,
|
|
79
83
|
Timeline: () => Timeline,
|
|
80
84
|
Toast: () => Toast,
|
|
81
85
|
ToastProvider: () => ToastProvider,
|
|
@@ -461,9 +465,94 @@ function Input({
|
|
|
461
465
|
);
|
|
462
466
|
}
|
|
463
467
|
|
|
464
|
-
// src/components/forms/
|
|
468
|
+
// src/components/forms/TextArea.tsx
|
|
469
|
+
var React6 = __toESM(require("react"), 1);
|
|
465
470
|
var import_react_aria_components7 = require("react-aria-components");
|
|
466
471
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
472
|
+
var useIsomorphicLayoutEffect = typeof document === "undefined" ? React6.useEffect : React6.useLayoutEffect;
|
|
473
|
+
function TextArea({
|
|
474
|
+
label,
|
|
475
|
+
description,
|
|
476
|
+
errorMessage,
|
|
477
|
+
size = "md",
|
|
478
|
+
rows = 3,
|
|
479
|
+
autoGrow,
|
|
480
|
+
maxRows,
|
|
481
|
+
fullWidth = true,
|
|
482
|
+
className,
|
|
483
|
+
style,
|
|
484
|
+
textAreaRef,
|
|
485
|
+
onChange,
|
|
486
|
+
...rest
|
|
487
|
+
}) {
|
|
488
|
+
const innerRef = React6.useRef(null);
|
|
489
|
+
const ref = React6.useCallback((node) => {
|
|
490
|
+
innerRef.current = node;
|
|
491
|
+
if (typeof textAreaRef === "function") textAreaRef(node);
|
|
492
|
+
else if (textAreaRef) textAreaRef.current = node;
|
|
493
|
+
}, [textAreaRef]);
|
|
494
|
+
const grow = React6.useCallback(() => {
|
|
495
|
+
const el = innerRef.current;
|
|
496
|
+
if (!el || !autoGrow) return;
|
|
497
|
+
const styles = getComputedStyle(el);
|
|
498
|
+
const lineHeight = Number.parseFloat(styles.lineHeight) || Number.parseFloat(styles.fontSize) * 1.5;
|
|
499
|
+
const chrome = el.offsetHeight - el.clientHeight;
|
|
500
|
+
el.style.height = "auto";
|
|
501
|
+
const wanted = maxRows ? Math.min(el.scrollHeight, Math.ceil(lineHeight * maxRows)) : el.scrollHeight;
|
|
502
|
+
const next = `${wanted + chrome}px`;
|
|
503
|
+
if (el.style.height !== next) el.style.height = next;
|
|
504
|
+
}, [autoGrow, maxRows]);
|
|
505
|
+
useIsomorphicLayoutEffect(() => {
|
|
506
|
+
if (!autoGrow) {
|
|
507
|
+
if (innerRef.current) innerRef.current.style.height = "";
|
|
508
|
+
return;
|
|
509
|
+
}
|
|
510
|
+
grow();
|
|
511
|
+
}, [autoGrow, grow, rest.value]);
|
|
512
|
+
return /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(
|
|
513
|
+
import_react_aria_components7.TextField,
|
|
514
|
+
{
|
|
515
|
+
className: cx("pire-field", className),
|
|
516
|
+
style,
|
|
517
|
+
onChange,
|
|
518
|
+
validationBehavior: "aria",
|
|
519
|
+
...rest,
|
|
520
|
+
children: [
|
|
521
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime12.jsxs)(import_react_aria_components7.Label, { className: "pire-field-label", children: [
|
|
522
|
+
label,
|
|
523
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
524
|
+
] }) : null,
|
|
525
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
526
|
+
import_react_aria_components7.Group,
|
|
527
|
+
{
|
|
528
|
+
className: "pire-control",
|
|
529
|
+
"data-size": size,
|
|
530
|
+
"data-full-width": String(fullWidth),
|
|
531
|
+
"data-multiline": "true",
|
|
532
|
+
"data-invalid": rest.isInvalid ? "true" : void 0,
|
|
533
|
+
"data-readonly": rest.isReadOnly ? "true" : void 0,
|
|
534
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
535
|
+
import_react_aria_components7.TextArea,
|
|
536
|
+
{
|
|
537
|
+
ref,
|
|
538
|
+
rows,
|
|
539
|
+
onInput: autoGrow ? grow : void 0,
|
|
540
|
+
className: cx("pire-input", "pire-textarea"),
|
|
541
|
+
"data-auto-grow": autoGrow ? "true" : void 0
|
|
542
|
+
}
|
|
543
|
+
)
|
|
544
|
+
}
|
|
545
|
+
),
|
|
546
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
547
|
+
/* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.FieldError, { className: "pire-field-error", children: errorMessage })
|
|
548
|
+
]
|
|
549
|
+
}
|
|
550
|
+
);
|
|
551
|
+
}
|
|
552
|
+
|
|
553
|
+
// src/components/forms/Select.tsx
|
|
554
|
+
var import_react_aria_components8 = require("react-aria-components");
|
|
555
|
+
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
467
556
|
var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
|
|
468
557
|
function Select({
|
|
469
558
|
label,
|
|
@@ -481,8 +570,8 @@ function Select({
|
|
|
481
570
|
...rest
|
|
482
571
|
}) {
|
|
483
572
|
const items = options.map(norm);
|
|
484
|
-
return /* @__PURE__ */ (0,
|
|
485
|
-
|
|
573
|
+
return /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
574
|
+
import_react_aria_components8.Select,
|
|
486
575
|
{
|
|
487
576
|
className: cx("pire-field", className),
|
|
488
577
|
style,
|
|
@@ -493,78 +582,78 @@ function Select({
|
|
|
493
582
|
validationBehavior: "aria",
|
|
494
583
|
...rest,
|
|
495
584
|
children: [
|
|
496
|
-
label ? /* @__PURE__ */ (0,
|
|
585
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_react_aria_components8.Label, { className: "pire-field-label", children: [
|
|
497
586
|
label,
|
|
498
|
-
rest.isRequired ? /* @__PURE__ */ (0,
|
|
587
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
499
588
|
] }) : null,
|
|
500
|
-
/* @__PURE__ */ (0,
|
|
501
|
-
|
|
589
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(
|
|
590
|
+
import_react_aria_components8.Button,
|
|
502
591
|
{
|
|
503
592
|
className: "pire-control",
|
|
504
593
|
"data-size": size,
|
|
505
594
|
"data-full-width": String(fullWidth),
|
|
506
595
|
"data-invalid": rest.isInvalid ? "true" : void 0,
|
|
507
596
|
children: [
|
|
508
|
-
/* @__PURE__ */ (0,
|
|
509
|
-
/* @__PURE__ */ (0,
|
|
597
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.SelectValue, { className: "pire-select-value" }),
|
|
598
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
|
|
510
599
|
]
|
|
511
600
|
}
|
|
512
601
|
),
|
|
513
|
-
description ? /* @__PURE__ */ (0,
|
|
514
|
-
/* @__PURE__ */ (0,
|
|
515
|
-
/* @__PURE__ */ (0,
|
|
602
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
603
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.FieldError, { className: "pire-field-error", children: errorMessage }),
|
|
604
|
+
/* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ListBox, { className: "pire-listbox", items, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(import_react_aria_components8.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label }) }) })
|
|
516
605
|
]
|
|
517
606
|
}
|
|
518
607
|
);
|
|
519
608
|
}
|
|
520
609
|
|
|
521
610
|
// src/components/forms/Checkbox.tsx
|
|
522
|
-
var
|
|
523
|
-
var
|
|
611
|
+
var import_react_aria_components9 = require("react-aria-components");
|
|
612
|
+
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
524
613
|
function Checkbox({ label, hint, children, className, ...rest }) {
|
|
525
|
-
return /* @__PURE__ */ (0,
|
|
526
|
-
/* @__PURE__ */ (0,
|
|
527
|
-
/* @__PURE__ */ (0,
|
|
614
|
+
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Checkbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)(import_jsx_runtime14.Fragment, { children: [
|
|
615
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon, { name: "check", size: 12 }) : null }),
|
|
616
|
+
/* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { children: [
|
|
528
617
|
label ?? children,
|
|
529
|
-
hint ? /* @__PURE__ */ (0,
|
|
618
|
+
hint ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
|
|
530
619
|
] })
|
|
531
620
|
] }) });
|
|
532
621
|
}
|
|
533
622
|
|
|
534
623
|
// src/components/forms/Radio.tsx
|
|
535
|
-
var
|
|
536
|
-
var
|
|
624
|
+
var import_react_aria_components10 = require("react-aria-components");
|
|
625
|
+
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
537
626
|
function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
|
|
538
|
-
return /* @__PURE__ */ (0,
|
|
539
|
-
label ? /* @__PURE__ */ (0,
|
|
540
|
-
/* @__PURE__ */ (0,
|
|
541
|
-
description ? /* @__PURE__ */ (0,
|
|
542
|
-
/* @__PURE__ */ (0,
|
|
627
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react_aria_components10.RadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
|
|
628
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components10.Label, { className: "pire-field-label", children: label }) : null,
|
|
629
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("div", { className: "pire-radiogroup", children }),
|
|
630
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components10.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
631
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components10.FieldError, { className: "pire-field-error", children: errorMessage })
|
|
543
632
|
] });
|
|
544
633
|
}
|
|
545
634
|
function Radio({ label, hint, children, className, ...rest }) {
|
|
546
|
-
return /* @__PURE__ */ (0,
|
|
547
|
-
/* @__PURE__ */ (0,
|
|
548
|
-
/* @__PURE__ */ (0,
|
|
635
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react_aria_components10.Radio, { className: cx("pire-choice", className), ...rest, children: [
|
|
636
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
|
|
637
|
+
/* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { children: [
|
|
549
638
|
label ?? children,
|
|
550
|
-
hint ? /* @__PURE__ */ (0,
|
|
639
|
+
hint ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
|
|
551
640
|
] })
|
|
552
641
|
] });
|
|
553
642
|
}
|
|
554
643
|
|
|
555
644
|
// src/components/forms/Switch.tsx
|
|
556
|
-
var
|
|
557
|
-
var
|
|
645
|
+
var import_react_aria_components11 = require("react-aria-components");
|
|
646
|
+
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
558
647
|
function Switch({ label, children, className, ...rest }) {
|
|
559
|
-
return /* @__PURE__ */ (0,
|
|
560
|
-
/* @__PURE__ */ (0,
|
|
561
|
-
/* @__PURE__ */ (0,
|
|
648
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_aria_components11.Switch, { className: cx("pire-choice", className), ...rest, children: [
|
|
649
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "pire-switch-thumb" }) }),
|
|
650
|
+
/* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { children: label ?? children })
|
|
562
651
|
] });
|
|
563
652
|
}
|
|
564
653
|
|
|
565
654
|
// src/components/forms/ComboBox.tsx
|
|
566
|
-
var
|
|
567
|
-
var
|
|
655
|
+
var import_react_aria_components12 = require("react-aria-components");
|
|
656
|
+
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
568
657
|
var norm2 = (o) => typeof o === "string" ? { value: o, label: o } : o;
|
|
569
658
|
function ComboBox({
|
|
570
659
|
label,
|
|
@@ -582,8 +671,8 @@ function ComboBox({
|
|
|
582
671
|
...rest
|
|
583
672
|
}) {
|
|
584
673
|
const items = options.map(norm2);
|
|
585
|
-
return /* @__PURE__ */ (0,
|
|
586
|
-
|
|
674
|
+
return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
675
|
+
import_react_aria_components12.ComboBox,
|
|
587
676
|
{
|
|
588
677
|
className: cx("pire-field", className),
|
|
589
678
|
style,
|
|
@@ -596,29 +685,150 @@ function ComboBox({
|
|
|
596
685
|
validationBehavior: "aria",
|
|
597
686
|
...rest,
|
|
598
687
|
children: [
|
|
599
|
-
label ? /* @__PURE__ */ (0,
|
|
688
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_react_aria_components12.Label, { className: "pire-field-label", children: [
|
|
600
689
|
label,
|
|
601
|
-
rest.isRequired ? /* @__PURE__ */ (0,
|
|
690
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
602
691
|
] }) : null,
|
|
603
|
-
/* @__PURE__ */ (0,
|
|
604
|
-
|
|
692
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
|
|
693
|
+
import_react_aria_components12.Group,
|
|
605
694
|
{
|
|
606
695
|
className: "pire-control",
|
|
607
696
|
"data-size": size,
|
|
608
697
|
"data-full-width": String(fullWidth),
|
|
609
698
|
"data-invalid": rest.isInvalid ? "true" : void 0,
|
|
610
699
|
children: [
|
|
611
|
-
/* @__PURE__ */ (0,
|
|
612
|
-
/* @__PURE__ */ (0,
|
|
613
|
-
/* @__PURE__ */ (0,
|
|
700
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
|
|
701
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.Input, { className: "pire-input", placeholder: rest.placeholder }),
|
|
702
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": "Show suggestions", style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { name: "chevron-down", size: 16 }) })
|
|
614
703
|
]
|
|
615
704
|
}
|
|
616
705
|
),
|
|
617
|
-
description ? /* @__PURE__ */ (0,
|
|
618
|
-
/* @__PURE__ */ (0,
|
|
619
|
-
/* @__PURE__ */ (0,
|
|
620
|
-
/* @__PURE__ */ (0,
|
|
621
|
-
item.secondary ? /* @__PURE__ */ (0,
|
|
706
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
707
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.FieldError, { className: "pire-field-error", children: errorMessage }),
|
|
708
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.ListBox, { className: "pire-listbox", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_react_aria_components12.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
|
|
709
|
+
/* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { flex: 1 }, children: item.label }),
|
|
710
|
+
item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { style: { font: "var(--type-code)", color: "var(--text-tertiary)" }, children: item.secondary }) : null
|
|
711
|
+
] }) }) })
|
|
712
|
+
]
|
|
713
|
+
}
|
|
714
|
+
);
|
|
715
|
+
}
|
|
716
|
+
|
|
717
|
+
// src/components/forms/MultiComboBox.tsx
|
|
718
|
+
var React7 = __toESM(require("react"), 1);
|
|
719
|
+
var import_react_aria_components13 = require("react-aria-components");
|
|
720
|
+
var import_jsx_runtime18 = require("react/jsx-runtime");
|
|
721
|
+
var norm3 = (o) => typeof o === "string" ? { value: o, label: o } : o;
|
|
722
|
+
function MultiComboBox({
|
|
723
|
+
label,
|
|
724
|
+
value,
|
|
725
|
+
defaultValue,
|
|
726
|
+
onChange,
|
|
727
|
+
onInputChange,
|
|
728
|
+
options = [],
|
|
729
|
+
description,
|
|
730
|
+
errorMessage,
|
|
731
|
+
allowsCustomValue,
|
|
732
|
+
size = "md",
|
|
733
|
+
fullWidth = true,
|
|
734
|
+
className,
|
|
735
|
+
style,
|
|
736
|
+
...rest
|
|
737
|
+
}) {
|
|
738
|
+
const items = React7.useMemo(() => options.map(norm3), [options]);
|
|
739
|
+
const [uncontrolled, setUncontrolled] = React7.useState(defaultValue ?? []);
|
|
740
|
+
const [announcement, setAnnouncement] = React7.useState("");
|
|
741
|
+
const inputRef = React7.useRef(null);
|
|
742
|
+
const raw = value ?? uncontrolled;
|
|
743
|
+
const contentKey = raw.join("\0");
|
|
744
|
+
const values = React7.useMemo(() => raw, [contentKey]);
|
|
745
|
+
const labelOf = (v) => items.find((o) => o.value === v)?.label ?? v;
|
|
746
|
+
const isEditable = !rest.isDisabled && !rest.isReadOnly;
|
|
747
|
+
const commit = (next) => {
|
|
748
|
+
const added = next.find((v) => !values.includes(v));
|
|
749
|
+
const removed = values.find((v) => !next.includes(v));
|
|
750
|
+
if (added) setAnnouncement(`${labelOf(added)} added. ${next.length} selected.`);
|
|
751
|
+
else if (removed) setAnnouncement(`${labelOf(removed)} removed. ${next.length} selected.`);
|
|
752
|
+
if (value === void 0) setUncontrolled(next);
|
|
753
|
+
onChange?.(next);
|
|
754
|
+
};
|
|
755
|
+
const remove = (v) => {
|
|
756
|
+
commit(values.filter((x) => x !== v));
|
|
757
|
+
inputRef.current?.focus();
|
|
758
|
+
};
|
|
759
|
+
const onKeyDownCapture = (e) => {
|
|
760
|
+
const el = e.currentTarget;
|
|
761
|
+
if (!isEditable) return;
|
|
762
|
+
if (e.key === "Backspace" && el.value === "" && values.length > 0) {
|
|
763
|
+
e.preventDefault();
|
|
764
|
+
e.stopPropagation();
|
|
765
|
+
commit(values.slice(0, -1));
|
|
766
|
+
return;
|
|
767
|
+
}
|
|
768
|
+
if (e.key !== "Enter" || !allowsCustomValue) return;
|
|
769
|
+
const text = el.value.trim();
|
|
770
|
+
if (text === "" || el.getAttribute("aria-activedescendant")) return;
|
|
771
|
+
const match = items.find((o) => o.label.toLowerCase() === text.toLowerCase());
|
|
772
|
+
const next = match ? match.value : text;
|
|
773
|
+
e.preventDefault();
|
|
774
|
+
e.stopPropagation();
|
|
775
|
+
if (!values.includes(next)) commit([...values, next]);
|
|
776
|
+
};
|
|
777
|
+
return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
778
|
+
import_react_aria_components13.ComboBox,
|
|
779
|
+
{
|
|
780
|
+
className: cx("pire-field", className),
|
|
781
|
+
style,
|
|
782
|
+
selectionMode: "multiple",
|
|
783
|
+
value: values,
|
|
784
|
+
onChange: (keys) => commit(keys.map(String)),
|
|
785
|
+
onInputChange,
|
|
786
|
+
defaultItems: items,
|
|
787
|
+
menuTrigger: "input",
|
|
788
|
+
validationBehavior: "aria",
|
|
789
|
+
...rest,
|
|
790
|
+
children: [
|
|
791
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_react_aria_components13.Label, { className: "pire-field-label", children: [
|
|
792
|
+
label,
|
|
793
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
794
|
+
] }) : null,
|
|
795
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
|
|
796
|
+
import_react_aria_components13.Group,
|
|
797
|
+
{
|
|
798
|
+
className: "pire-control",
|
|
799
|
+
"data-size": size,
|
|
800
|
+
"data-full-width": String(fullWidth),
|
|
801
|
+
"data-multiline": "true",
|
|
802
|
+
"data-invalid": rest.isInvalid ? "true" : void 0,
|
|
803
|
+
"data-readonly": rest.isReadOnly ? "true" : void 0,
|
|
804
|
+
children: [
|
|
805
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
|
|
806
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("div", { className: "pire-chipfield", children: [
|
|
807
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.ButtonContext.Provider, { value: null, children: values.map((v) => (
|
|
808
|
+
/* Disabled follows the field, not `isEditable`: a read-only field's chips are
|
|
809
|
+
real, current values and should read as such — they simply lose the × . */
|
|
810
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
|
|
811
|
+
)) }),
|
|
812
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
|
|
813
|
+
import_react_aria_components13.Input,
|
|
814
|
+
{
|
|
815
|
+
ref: inputRef,
|
|
816
|
+
className: cx("pire-input", "pire-chipinput"),
|
|
817
|
+
placeholder: rest.placeholder,
|
|
818
|
+
onKeyDownCapture
|
|
819
|
+
}
|
|
820
|
+
)
|
|
821
|
+
] }),
|
|
822
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": "Show suggestions", style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "chevron-down", size: 16 }) })
|
|
823
|
+
]
|
|
824
|
+
}
|
|
825
|
+
),
|
|
826
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { "aria-live": "polite", children: announcement }) }),
|
|
827
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
828
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.FieldError, { className: "pire-field-error", children: errorMessage }),
|
|
829
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.ListBox, { className: "pire-listbox", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_react_aria_components13.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
|
|
830
|
+
/* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { flex: 1 }, children: item.label }),
|
|
831
|
+
item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { style: { font: "var(--type-code)", color: "var(--text-tertiary)" }, children: item.secondary }) : null
|
|
622
832
|
] }) }) })
|
|
623
833
|
]
|
|
624
834
|
}
|
|
@@ -626,8 +836,8 @@ function ComboBox({
|
|
|
626
836
|
}
|
|
627
837
|
|
|
628
838
|
// src/components/forms/NumberField.tsx
|
|
629
|
-
var
|
|
630
|
-
var
|
|
839
|
+
var import_react_aria_components14 = require("react-aria-components");
|
|
840
|
+
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
631
841
|
function NumberField({
|
|
632
842
|
label,
|
|
633
843
|
suffix,
|
|
@@ -640,13 +850,13 @@ function NumberField({
|
|
|
640
850
|
style,
|
|
641
851
|
...rest
|
|
642
852
|
}) {
|
|
643
|
-
return /* @__PURE__ */ (0,
|
|
644
|
-
label ? /* @__PURE__ */ (0,
|
|
853
|
+
return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components14.NumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
|
|
854
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components14.Label, { className: "pire-field-label", children: [
|
|
645
855
|
label,
|
|
646
|
-
rest.isRequired ? /* @__PURE__ */ (0,
|
|
856
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
647
857
|
] }) : null,
|
|
648
|
-
/* @__PURE__ */ (0,
|
|
649
|
-
|
|
858
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
|
|
859
|
+
import_react_aria_components14.Group,
|
|
650
860
|
{
|
|
651
861
|
className: "pire-control",
|
|
652
862
|
"data-size": size,
|
|
@@ -654,23 +864,23 @@ function NumberField({
|
|
|
654
864
|
"data-invalid": rest.isInvalid ? "true" : void 0,
|
|
655
865
|
"data-readonly": rest.isReadOnly ? "true" : void 0,
|
|
656
866
|
children: [
|
|
657
|
-
/* @__PURE__ */ (0,
|
|
658
|
-
suffix ? /* @__PURE__ */ (0,
|
|
659
|
-
hideStepper ? null : /* @__PURE__ */ (0,
|
|
660
|
-
/* @__PURE__ */ (0,
|
|
661
|
-
/* @__PURE__ */ (0,
|
|
867
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components14.Input, { className: "pire-input", "data-numeric": "true" }),
|
|
868
|
+
suffix ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-affix", children: suffix }) : null,
|
|
869
|
+
hideStepper ? null : /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { className: "pire-stepper", children: [
|
|
870
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components14.Button, { slot: "increment", className: "pire-stepper-btn", "aria-label": "Increase", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { name: "plus", size: 10 }) }),
|
|
871
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components14.Button, { slot: "decrement", className: "pire-stepper-btn", "aria-label": "Decrease", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { name: "minus", size: 10 }) })
|
|
662
872
|
] })
|
|
663
873
|
]
|
|
664
874
|
}
|
|
665
875
|
),
|
|
666
|
-
description ? /* @__PURE__ */ (0,
|
|
667
|
-
/* @__PURE__ */ (0,
|
|
876
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components14.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
877
|
+
/* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components14.FieldError, { className: "pire-field-error", children: errorMessage })
|
|
668
878
|
] });
|
|
669
879
|
}
|
|
670
880
|
|
|
671
881
|
// src/components/forms/DatePicker.tsx
|
|
672
|
-
var
|
|
673
|
-
var
|
|
882
|
+
var import_react_aria_components15 = require("react-aria-components");
|
|
883
|
+
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
674
884
|
function DatePicker({
|
|
675
885
|
label,
|
|
676
886
|
description,
|
|
@@ -681,13 +891,13 @@ function DatePicker({
|
|
|
681
891
|
style,
|
|
682
892
|
...rest
|
|
683
893
|
}) {
|
|
684
|
-
return /* @__PURE__ */ (0,
|
|
685
|
-
label ? /* @__PURE__ */ (0,
|
|
894
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components15.DatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
|
|
895
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components15.Label, { className: "pire-field-label", children: [
|
|
686
896
|
label,
|
|
687
|
-
rest.isRequired ? /* @__PURE__ */ (0,
|
|
897
|
+
rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
688
898
|
] }) : null,
|
|
689
|
-
/* @__PURE__ */ (0,
|
|
690
|
-
|
|
899
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
900
|
+
import_react_aria_components15.Group,
|
|
691
901
|
{
|
|
692
902
|
className: "pire-control",
|
|
693
903
|
"data-size": size,
|
|
@@ -695,36 +905,36 @@ function DatePicker({
|
|
|
695
905
|
"data-invalid": rest.isInvalid ? "true" : void 0,
|
|
696
906
|
"data-readonly": rest.isReadOnly ? "true" : void 0,
|
|
697
907
|
children: [
|
|
698
|
-
/* @__PURE__ */ (0,
|
|
699
|
-
/* @__PURE__ */ (0,
|
|
908
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.DateSegment, { segment, className: "pire-datesegment" }) }),
|
|
909
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": "Open calendar", style: { width: 24, height: 24 }, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { name: "calendar", size: 16 }) })
|
|
700
910
|
]
|
|
701
911
|
}
|
|
702
912
|
),
|
|
703
|
-
description ? /* @__PURE__ */ (0,
|
|
704
|
-
/* @__PURE__ */ (0,
|
|
705
|
-
/* @__PURE__ */ (0,
|
|
706
|
-
/* @__PURE__ */ (0,
|
|
707
|
-
/* @__PURE__ */ (0,
|
|
708
|
-
/* @__PURE__ */ (0,
|
|
709
|
-
/* @__PURE__ */ (0,
|
|
913
|
+
description ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
914
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.FieldError, { className: "pire-field-error", children: errorMessage }),
|
|
915
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Dialog, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components15.Calendar, { className: "pire-calendar", children: [
|
|
916
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("header", { className: "pire-calendar-head", children: [
|
|
917
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Button, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": "Previous month", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { name: "chevron-left", size: 16 }) }),
|
|
918
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Heading, { className: "pire-calendar-title" }),
|
|
919
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Button, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": "Next month", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { name: "chevron-right", size: 16 }) })
|
|
710
920
|
] }),
|
|
711
|
-
/* @__PURE__ */ (0,
|
|
712
|
-
/* @__PURE__ */ (0,
|
|
713
|
-
/* @__PURE__ */ (0,
|
|
921
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components15.CalendarGrid, { className: "pire-calendar-grid", children: [
|
|
922
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.CalendarHeaderCell, { children: day }) }),
|
|
923
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.CalendarCell, { date, className: "pire-calendar-cell" }) })
|
|
714
924
|
] })
|
|
715
925
|
] }) }) })
|
|
716
926
|
] });
|
|
717
927
|
}
|
|
718
928
|
|
|
719
929
|
// src/components/forms/ValueHelpField.tsx
|
|
720
|
-
var
|
|
930
|
+
var React9 = __toESM(require("react"), 1);
|
|
721
931
|
|
|
722
932
|
// src/components/patterns/ValueHelpDialog.tsx
|
|
723
|
-
var
|
|
933
|
+
var React8 = __toESM(require("react"), 1);
|
|
724
934
|
|
|
725
935
|
// src/components/feedback/Dialog.tsx
|
|
726
|
-
var
|
|
727
|
-
var
|
|
936
|
+
var import_react_aria_components16 = require("react-aria-components");
|
|
937
|
+
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
728
938
|
function Dialog({
|
|
729
939
|
isOpen,
|
|
730
940
|
onOpenChange,
|
|
@@ -743,8 +953,8 @@ function Dialog({
|
|
|
743
953
|
onClose?.();
|
|
744
954
|
onOpenChange?.(false);
|
|
745
955
|
};
|
|
746
|
-
return /* @__PURE__ */ (0,
|
|
747
|
-
|
|
956
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
957
|
+
import_react_aria_components16.ModalOverlay,
|
|
748
958
|
{
|
|
749
959
|
className: "pire-modal-overlay",
|
|
750
960
|
isOpen,
|
|
@@ -752,24 +962,24 @@ function Dialog({
|
|
|
752
962
|
onOpenChange: (o) => {
|
|
753
963
|
if (!o) close();
|
|
754
964
|
},
|
|
755
|
-
children: /* @__PURE__ */ (0,
|
|
756
|
-
title ? /* @__PURE__ */ (0,
|
|
757
|
-
/* @__PURE__ */ (0,
|
|
758
|
-
/* @__PURE__ */ (0,
|
|
759
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
965
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components16.Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_aria_components16.Dialog, { className: "pire-dialog", children: [
|
|
966
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("header", { className: "pire-dialog-head", children: [
|
|
967
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
968
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components16.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
|
|
969
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
760
970
|
] }),
|
|
761
|
-
showClose ? /* @__PURE__ */ (0,
|
|
971
|
+
showClose ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(IconButton, { icon: "x", label: "Close", size: "sm", onPress: close }) : null
|
|
762
972
|
] }) : null,
|
|
763
|
-
/* @__PURE__ */ (0,
|
|
764
|
-
footer ? /* @__PURE__ */ (0,
|
|
973
|
+
/* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "pire-dialog-body", children }),
|
|
974
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
|
|
765
975
|
] }) })
|
|
766
976
|
}
|
|
767
977
|
);
|
|
768
978
|
}
|
|
769
979
|
|
|
770
980
|
// src/components/data/DataTable.tsx
|
|
771
|
-
var
|
|
772
|
-
var
|
|
981
|
+
var import_react_aria_components17 = require("react-aria-components");
|
|
982
|
+
var import_jsx_runtime22 = require("react/jsx-runtime");
|
|
773
983
|
function DataTable({
|
|
774
984
|
columns,
|
|
775
985
|
rows,
|
|
@@ -791,8 +1001,8 @@ function DataTable({
|
|
|
791
1001
|
if (keys === "all") return onSelectionChange?.(rows.map((r) => r.id));
|
|
792
1002
|
onSelectionChange?.([...keys]);
|
|
793
1003
|
};
|
|
794
|
-
return /* @__PURE__ */ (0,
|
|
795
|
-
|
|
1004
|
+
return /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: cx("pire-table-wrap", className), style, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
|
|
1005
|
+
import_react_aria_components17.Table,
|
|
796
1006
|
{
|
|
797
1007
|
className: "pire-table",
|
|
798
1008
|
"data-density": density,
|
|
@@ -808,10 +1018,10 @@ function DataTable({
|
|
|
808
1018
|
if (row) onRowAction(row);
|
|
809
1019
|
} : void 0,
|
|
810
1020
|
children: [
|
|
811
|
-
/* @__PURE__ */ (0,
|
|
812
|
-
selectable ? /* @__PURE__ */ (0,
|
|
813
|
-
columns.map((c, i) => /* @__PURE__ */ (0,
|
|
814
|
-
|
|
1021
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_aria_components17.TableHeader, { className: "pire-thead-row", children: [
|
|
1022
|
+
selectable ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components17.Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Checkbox, { slot: "selection", "aria-label": "Select all rows" }) }) : null,
|
|
1023
|
+
columns.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1024
|
+
import_react_aria_components17.Column,
|
|
815
1025
|
{
|
|
816
1026
|
id: c.key,
|
|
817
1027
|
className: "pire-th",
|
|
@@ -820,9 +1030,9 @@ function DataTable({
|
|
|
820
1030
|
width: c.width,
|
|
821
1031
|
"data-align": c.numeric || c.align === "right" ? "right" : c.align,
|
|
822
1032
|
"data-allows-sorting": c.sortable ? "true" : void 0,
|
|
823
|
-
children: /* @__PURE__ */ (0,
|
|
1033
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "pire-th-inner", children: [
|
|
824
1034
|
c.label,
|
|
825
|
-
c.sortable ? /* @__PURE__ */ (0,
|
|
1035
|
+
c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
826
1036
|
Icon,
|
|
827
1037
|
{
|
|
828
1038
|
size: 12,
|
|
@@ -835,10 +1045,10 @@ function DataTable({
|
|
|
835
1045
|
c.key
|
|
836
1046
|
))
|
|
837
1047
|
] }),
|
|
838
|
-
/* @__PURE__ */ (0,
|
|
839
|
-
selectable ? /* @__PURE__ */ (0,
|
|
840
|
-
columns.map((c) => /* @__PURE__ */ (0,
|
|
841
|
-
|
|
1048
|
+
/* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components17.TableBody, { renderEmptyState: () => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "pire-table-empty", children: emptyLabel }), children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_aria_components17.Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
|
|
1049
|
+
selectable ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components17.Cell, { className: "pire-td", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Checkbox, { slot: "selection", "aria-label": "Select row" }) }) : null,
|
|
1050
|
+
columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
|
|
1051
|
+
import_react_aria_components17.Cell,
|
|
842
1052
|
{
|
|
843
1053
|
className: "pire-td",
|
|
844
1054
|
"data-numeric": c.numeric ? "true" : void 0,
|
|
@@ -854,7 +1064,7 @@ function DataTable({
|
|
|
854
1064
|
}
|
|
855
1065
|
|
|
856
1066
|
// src/components/patterns/ValueHelpDialog.tsx
|
|
857
|
-
var
|
|
1067
|
+
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
858
1068
|
function ValueHelpDialog({
|
|
859
1069
|
isOpen,
|
|
860
1070
|
title = "Select a record",
|
|
@@ -865,25 +1075,25 @@ function ValueHelpDialog({
|
|
|
865
1075
|
onSelect,
|
|
866
1076
|
onClose
|
|
867
1077
|
}) {
|
|
868
|
-
const [query, setQuery] =
|
|
869
|
-
|
|
1078
|
+
const [query, setQuery] = React8.useState("");
|
|
1079
|
+
React8.useEffect(() => {
|
|
870
1080
|
if (isOpen) setQuery("");
|
|
871
1081
|
}, [isOpen]);
|
|
872
|
-
const filtered =
|
|
1082
|
+
const filtered = React8.useMemo(() => {
|
|
873
1083
|
const q = query.trim().toLowerCase();
|
|
874
1084
|
if (!q) return rows;
|
|
875
1085
|
return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
|
|
876
1086
|
}, [rows, query]);
|
|
877
|
-
return /* @__PURE__ */ (0,
|
|
1087
|
+
return /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
878
1088
|
Dialog,
|
|
879
1089
|
{
|
|
880
1090
|
isOpen,
|
|
881
1091
|
size: "lg",
|
|
882
1092
|
title,
|
|
883
1093
|
onClose,
|
|
884
|
-
footer: /* @__PURE__ */ (0,
|
|
885
|
-
children: /* @__PURE__ */ (0,
|
|
886
|
-
/* @__PURE__ */ (0,
|
|
1094
|
+
footer: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Button, { variant: "tertiary", onPress: onClose, children: "Cancel" }),
|
|
1095
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
|
|
1096
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
887
1097
|
Input,
|
|
888
1098
|
{
|
|
889
1099
|
"aria-label": "Search records",
|
|
@@ -895,7 +1105,7 @@ function ValueHelpDialog({
|
|
|
895
1105
|
autoFocus: true
|
|
896
1106
|
}
|
|
897
1107
|
),
|
|
898
|
-
/* @__PURE__ */ (0,
|
|
1108
|
+
/* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
|
|
899
1109
|
DataTable,
|
|
900
1110
|
{
|
|
901
1111
|
"aria-label": typeof title === "string" ? title : "Records",
|
|
@@ -915,7 +1125,7 @@ function ValueHelpDialog({
|
|
|
915
1125
|
}
|
|
916
1126
|
|
|
917
1127
|
// src/components/forms/ValueHelpField.tsx
|
|
918
|
-
var
|
|
1128
|
+
var import_jsx_runtime24 = require("react/jsx-runtime");
|
|
919
1129
|
var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
|
|
920
1130
|
function ValueHelpField({
|
|
921
1131
|
label,
|
|
@@ -935,10 +1145,10 @@ function ValueHelpField({
|
|
|
935
1145
|
className,
|
|
936
1146
|
style
|
|
937
1147
|
}) {
|
|
938
|
-
const [open, setOpen] =
|
|
939
|
-
return /* @__PURE__ */ (0,
|
|
940
|
-
/* @__PURE__ */ (0,
|
|
941
|
-
/* @__PURE__ */ (0,
|
|
1148
|
+
const [open, setOpen] = React9.useState(false);
|
|
1149
|
+
return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: cx(className), style, children: [
|
|
1150
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
|
|
1151
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
942
1152
|
Input,
|
|
943
1153
|
{
|
|
944
1154
|
label,
|
|
@@ -952,7 +1162,7 @@ function ValueHelpField({
|
|
|
952
1162
|
errorMessage
|
|
953
1163
|
}
|
|
954
1164
|
),
|
|
955
|
-
allowsClear && value ? /* @__PURE__ */ (0,
|
|
1165
|
+
allowsClear && value ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
956
1166
|
IconButton,
|
|
957
1167
|
{
|
|
958
1168
|
icon: "x",
|
|
@@ -962,7 +1172,7 @@ function ValueHelpField({
|
|
|
962
1172
|
onPress: () => onChange?.(null)
|
|
963
1173
|
}
|
|
964
1174
|
) : null,
|
|
965
|
-
/* @__PURE__ */ (0,
|
|
1175
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
966
1176
|
IconButton,
|
|
967
1177
|
{
|
|
968
1178
|
icon: "search",
|
|
@@ -973,7 +1183,7 @@ function ValueHelpField({
|
|
|
973
1183
|
}
|
|
974
1184
|
)
|
|
975
1185
|
] }),
|
|
976
|
-
/* @__PURE__ */ (0,
|
|
1186
|
+
/* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
|
|
977
1187
|
ValueHelpDialog,
|
|
978
1188
|
{
|
|
979
1189
|
isOpen: open,
|
|
@@ -988,26 +1198,26 @@ function ValueHelpField({
|
|
|
988
1198
|
}
|
|
989
1199
|
|
|
990
1200
|
// src/components/navigation/ShellBar.tsx
|
|
991
|
-
var
|
|
1201
|
+
var import_jsx_runtime25 = require("react/jsx-runtime");
|
|
992
1202
|
var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
|
|
993
1203
|
function ShellBar({ product, monogram, title, onMenu, onSearch, actions, user, className, ...rest }) {
|
|
994
|
-
return /* @__PURE__ */ (0,
|
|
995
|
-
onMenu ? /* @__PURE__ */ (0,
|
|
996
|
-
monogram ? /* @__PURE__ */ (0,
|
|
997
|
-
product ? /* @__PURE__ */ (0,
|
|
998
|
-
title ? /* @__PURE__ */ (0,
|
|
999
|
-
/* @__PURE__ */ (0,
|
|
1000
|
-
onSearch ? /* @__PURE__ */ (0,
|
|
1204
|
+
return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("header", { className: cx("pire-shellbar", className), ...rest, children: [
|
|
1205
|
+
onMenu ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconButton, { icon: "menu", label: "Open navigation", variant: "inverse", size: "sm", onPress: onMenu }) : null,
|
|
1206
|
+
monogram ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
|
|
1207
|
+
product ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-shellbar-product", children: product }) : null,
|
|
1208
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-shellbar-title", children: title }) : null,
|
|
1209
|
+
/* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-shellbar-spacer" }),
|
|
1210
|
+
onSearch ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(IconButton, { icon: "search", label: "Search", variant: "inverse", size: "sm", onPress: onSearch }) : null,
|
|
1001
1211
|
actions,
|
|
1002
|
-
user ? /* @__PURE__ */ (0,
|
|
1212
|
+
user ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
|
|
1003
1213
|
] });
|
|
1004
1214
|
}
|
|
1005
1215
|
|
|
1006
1216
|
// src/components/navigation/SideNav.tsx
|
|
1007
|
-
var
|
|
1008
|
-
var
|
|
1217
|
+
var import_react_aria_components18 = require("react-aria-components");
|
|
1218
|
+
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
1009
1219
|
function SideNav({ groups, value, onChange, collapsed, footer, className, ...rest }) {
|
|
1010
|
-
return /* @__PURE__ */ (0,
|
|
1220
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1011
1221
|
"nav",
|
|
1012
1222
|
{
|
|
1013
1223
|
className: cx("pire-sidenav", className),
|
|
@@ -1015,40 +1225,40 @@ function SideNav({ groups, value, onChange, collapsed, footer, className, ...res
|
|
|
1015
1225
|
"aria-label": "Main navigation",
|
|
1016
1226
|
...rest,
|
|
1017
1227
|
children: [
|
|
1018
|
-
groups.map((group, gi) => /* @__PURE__ */ (0,
|
|
1019
|
-
group.label && !collapsed ? /* @__PURE__ */ (0,
|
|
1228
|
+
groups.map((group, gi) => /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("div", { className: "pire-sidenav-group", children: [
|
|
1229
|
+
group.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "pire-sidenav-label", children: group.label }) : null,
|
|
1020
1230
|
group.items.map((item) => {
|
|
1021
1231
|
const selected = item.id === value;
|
|
1022
|
-
const button = /* @__PURE__ */ (0,
|
|
1023
|
-
|
|
1232
|
+
const button = /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
|
|
1233
|
+
import_react_aria_components18.Button,
|
|
1024
1234
|
{
|
|
1025
1235
|
className: "pire-sidenav-item",
|
|
1026
1236
|
"data-selected": selected ? "true" : void 0,
|
|
1027
1237
|
"aria-current": selected ? "page" : void 0,
|
|
1028
1238
|
onPress: () => onChange?.(item.id),
|
|
1029
1239
|
children: [
|
|
1030
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
1031
|
-
collapsed ? null : /* @__PURE__ */ (0,
|
|
1032
|
-
item.count != null && !collapsed ? /* @__PURE__ */ (0,
|
|
1240
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: item.icon, size: 16 }) : null,
|
|
1241
|
+
collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { children: item.label }),
|
|
1242
|
+
item.count != null && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null
|
|
1033
1243
|
]
|
|
1034
1244
|
},
|
|
1035
1245
|
item.id
|
|
1036
1246
|
);
|
|
1037
|
-
return collapsed ? /* @__PURE__ */ (0,
|
|
1247
|
+
return collapsed ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
|
|
1038
1248
|
})
|
|
1039
1249
|
] }, group.label ?? gi)),
|
|
1040
|
-
footer ? /* @__PURE__ */ (0,
|
|
1250
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "pire-sidenav-footer", children: footer }) : null
|
|
1041
1251
|
]
|
|
1042
1252
|
}
|
|
1043
1253
|
);
|
|
1044
1254
|
}
|
|
1045
1255
|
|
|
1046
1256
|
// src/components/navigation/Tabs.tsx
|
|
1047
|
-
var
|
|
1048
|
-
var
|
|
1257
|
+
var import_react_aria_components19 = require("react-aria-components");
|
|
1258
|
+
var import_jsx_runtime27 = require("react/jsx-runtime");
|
|
1049
1259
|
function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
|
|
1050
|
-
return /* @__PURE__ */ (0,
|
|
1051
|
-
|
|
1260
|
+
return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
|
|
1261
|
+
import_react_aria_components19.Tabs,
|
|
1052
1262
|
{
|
|
1053
1263
|
className,
|
|
1054
1264
|
style,
|
|
@@ -1056,23 +1266,23 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
|
|
|
1056
1266
|
defaultSelectedKey: defaultValue,
|
|
1057
1267
|
onSelectionChange: (k) => onChange?.(String(k)),
|
|
1058
1268
|
children: [
|
|
1059
|
-
/* @__PURE__ */ (0,
|
|
1060
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
1269
|
+
/* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components19.Tab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
|
|
1270
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: item.icon, size: 16 }) : null,
|
|
1061
1271
|
item.label,
|
|
1062
|
-
item.count != null ? /* @__PURE__ */ (0,
|
|
1272
|
+
item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "pire-tab-count", children: item.count }) : null
|
|
1063
1273
|
] }) }),
|
|
1064
|
-
items.map((item) => /* @__PURE__ */ (0,
|
|
1274
|
+
items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
|
|
1065
1275
|
]
|
|
1066
1276
|
}
|
|
1067
1277
|
);
|
|
1068
1278
|
}
|
|
1069
1279
|
|
|
1070
1280
|
// src/components/navigation/Breadcrumb.tsx
|
|
1071
|
-
var
|
|
1072
|
-
var
|
|
1281
|
+
var import_react_aria_components20 = require("react-aria-components");
|
|
1282
|
+
var import_jsx_runtime28 = require("react/jsx-runtime");
|
|
1073
1283
|
function Breadcrumb({ items, onNavigate, className, style }) {
|
|
1074
|
-
return /* @__PURE__ */ (0,
|
|
1075
|
-
|
|
1284
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
|
|
1285
|
+
import_react_aria_components20.Breadcrumbs,
|
|
1076
1286
|
{
|
|
1077
1287
|
className: cx("pire-breadcrumbs", className),
|
|
1078
1288
|
style,
|
|
@@ -1080,9 +1290,9 @@ function Breadcrumb({ items, onNavigate, className, style }) {
|
|
|
1080
1290
|
onAction: (key) => onNavigate?.(String(key)),
|
|
1081
1291
|
children: (item) => {
|
|
1082
1292
|
const last = items[items.length - 1] === item;
|
|
1083
|
-
return /* @__PURE__ */ (0,
|
|
1084
|
-
last ? item.label : /* @__PURE__ */ (0,
|
|
1085
|
-
last ? null : /* @__PURE__ */ (0,
|
|
1293
|
+
return /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_aria_components20.Breadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
|
|
1294
|
+
last ? item.label : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_aria_components20.Link, { href: item.href, children: item.label }),
|
|
1295
|
+
last ? null : /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
|
|
1086
1296
|
] });
|
|
1087
1297
|
}
|
|
1088
1298
|
}
|
|
@@ -1090,7 +1300,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
|
|
|
1090
1300
|
}
|
|
1091
1301
|
|
|
1092
1302
|
// src/components/navigation/Pagination.tsx
|
|
1093
|
-
var
|
|
1303
|
+
var import_jsx_runtime29 = require("react/jsx-runtime");
|
|
1094
1304
|
function Pagination({
|
|
1095
1305
|
page = 1,
|
|
1096
1306
|
pageSize = 25,
|
|
@@ -1104,15 +1314,15 @@ function Pagination({
|
|
|
1104
1314
|
const pages = Math.max(1, Math.ceil(total / pageSize));
|
|
1105
1315
|
const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
1106
1316
|
const to = Math.min(total, page * pageSize);
|
|
1107
|
-
return /* @__PURE__ */ (0,
|
|
1108
|
-
/* @__PURE__ */ (0,
|
|
1317
|
+
return /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("nav", { className: cx("pire-pagination", className), style, "aria-label": "Pagination", children: [
|
|
1318
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "pire-pagination-count", children: [
|
|
1109
1319
|
from.toLocaleString(),
|
|
1110
1320
|
"\u2013",
|
|
1111
1321
|
to.toLocaleString(),
|
|
1112
1322
|
" of ",
|
|
1113
1323
|
total.toLocaleString()
|
|
1114
1324
|
] }),
|
|
1115
|
-
/* @__PURE__ */ (0,
|
|
1325
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1116
1326
|
IconButton,
|
|
1117
1327
|
{
|
|
1118
1328
|
icon: "chevron-left",
|
|
@@ -1123,13 +1333,13 @@ function Pagination({
|
|
|
1123
1333
|
onPress: () => onPageChange?.(page - 1)
|
|
1124
1334
|
}
|
|
1125
1335
|
),
|
|
1126
|
-
/* @__PURE__ */ (0,
|
|
1336
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "pire-pagination-count", "aria-live": "polite", children: [
|
|
1127
1337
|
"Page ",
|
|
1128
1338
|
page,
|
|
1129
1339
|
" of ",
|
|
1130
1340
|
pages
|
|
1131
1341
|
] }),
|
|
1132
|
-
/* @__PURE__ */ (0,
|
|
1342
|
+
/* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1133
1343
|
IconButton,
|
|
1134
1344
|
{
|
|
1135
1345
|
icon: "chevron-right",
|
|
@@ -1140,7 +1350,7 @@ function Pagination({
|
|
|
1140
1350
|
onPress: () => onPageChange?.(page + 1)
|
|
1141
1351
|
}
|
|
1142
1352
|
),
|
|
1143
|
-
onPageSizeChange ? /* @__PURE__ */ (0,
|
|
1353
|
+
onPageSizeChange ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
|
|
1144
1354
|
Select,
|
|
1145
1355
|
{
|
|
1146
1356
|
"aria-label": "Rows per page",
|
|
@@ -1156,7 +1366,7 @@ function Pagination({
|
|
|
1156
1366
|
}
|
|
1157
1367
|
|
|
1158
1368
|
// src/components/feedback/InlineMessage.tsx
|
|
1159
|
-
var
|
|
1369
|
+
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
1160
1370
|
var KIND_ICON = {
|
|
1161
1371
|
info: "info",
|
|
1162
1372
|
success: "check-circle-2",
|
|
@@ -1165,7 +1375,7 @@ var KIND_ICON = {
|
|
|
1165
1375
|
};
|
|
1166
1376
|
function InlineMessage({ kind = "info", title, action, onClose, children, className, ...rest }) {
|
|
1167
1377
|
const assertive = kind === "error" || kind === "warning";
|
|
1168
|
-
return /* @__PURE__ */ (0,
|
|
1378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
1169
1379
|
"div",
|
|
1170
1380
|
{
|
|
1171
1381
|
className: cx("pire-msg", className),
|
|
@@ -1174,21 +1384,21 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
|
|
|
1174
1384
|
"aria-live": assertive ? "assertive" : "polite",
|
|
1175
1385
|
...rest,
|
|
1176
1386
|
children: [
|
|
1177
|
-
/* @__PURE__ */ (0,
|
|
1178
|
-
/* @__PURE__ */ (0,
|
|
1179
|
-
title ? /* @__PURE__ */ (0,
|
|
1180
|
-
children ? /* @__PURE__ */ (0,
|
|
1387
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
|
|
1388
|
+
/* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
|
|
1389
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "pire-msg-title", children: title }) : null,
|
|
1390
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "pire-msg-body", children }) : null,
|
|
1181
1391
|
action
|
|
1182
1392
|
] }),
|
|
1183
|
-
onClose ? /* @__PURE__ */ (0,
|
|
1393
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(IconButton, { icon: "x", label: "Dismiss message", size: "sm", onPress: onClose }) : null
|
|
1184
1394
|
]
|
|
1185
1395
|
}
|
|
1186
1396
|
);
|
|
1187
1397
|
}
|
|
1188
1398
|
|
|
1189
1399
|
// src/components/feedback/ProgressBar.tsx
|
|
1190
|
-
var
|
|
1191
|
-
var
|
|
1400
|
+
var import_react_aria_components21 = require("react-aria-components");
|
|
1401
|
+
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
1192
1402
|
function ProgressBar({
|
|
1193
1403
|
value = 0,
|
|
1194
1404
|
minValue = 0,
|
|
@@ -1201,8 +1411,8 @@ function ProgressBar({
|
|
|
1201
1411
|
className,
|
|
1202
1412
|
style
|
|
1203
1413
|
}) {
|
|
1204
|
-
return /* @__PURE__ */ (0,
|
|
1205
|
-
|
|
1414
|
+
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
1415
|
+
import_react_aria_components21.ProgressBar,
|
|
1206
1416
|
{
|
|
1207
1417
|
className: cx("pire-progress", className),
|
|
1208
1418
|
"data-status": status,
|
|
@@ -1212,20 +1422,20 @@ function ProgressBar({
|
|
|
1212
1422
|
maxValue,
|
|
1213
1423
|
isIndeterminate,
|
|
1214
1424
|
style,
|
|
1215
|
-
children: ({ percentage, valueText }) => /* @__PURE__ */ (0,
|
|
1216
|
-
label || showValue ? /* @__PURE__ */ (0,
|
|
1217
|
-
label ? /* @__PURE__ */ (0,
|
|
1218
|
-
showValue && !isIndeterminate ? /* @__PURE__ */ (0,
|
|
1425
|
+
children: ({ percentage, valueText }) => /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
|
|
1426
|
+
label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: "pire-progress-head", children: [
|
|
1427
|
+
label ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(import_react_aria_components21.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", {}),
|
|
1428
|
+
showValue && !isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "pire-numeric", children: valueText }) : null
|
|
1219
1429
|
] }) : null,
|
|
1220
|
-
/* @__PURE__ */ (0,
|
|
1430
|
+
/* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "pire-progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
|
|
1221
1431
|
] })
|
|
1222
1432
|
}
|
|
1223
1433
|
);
|
|
1224
1434
|
}
|
|
1225
1435
|
|
|
1226
1436
|
// src/components/feedback/Toast.tsx
|
|
1227
|
-
var
|
|
1228
|
-
var
|
|
1437
|
+
var React10 = __toESM(require("react"), 1);
|
|
1438
|
+
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
1229
1439
|
var KIND_ICON2 = {
|
|
1230
1440
|
info: "info",
|
|
1231
1441
|
success: "check-circle-2",
|
|
@@ -1233,7 +1443,7 @@ var KIND_ICON2 = {
|
|
|
1233
1443
|
error: "alert-octagon"
|
|
1234
1444
|
};
|
|
1235
1445
|
function Toast({ kind = "success", onClose, position = "bottom-center", children, className, ...rest }) {
|
|
1236
|
-
return /* @__PURE__ */ (0,
|
|
1446
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
|
|
1237
1447
|
"div",
|
|
1238
1448
|
{
|
|
1239
1449
|
className: cx("pire-toast", className),
|
|
@@ -1242,39 +1452,84 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
|
|
|
1242
1452
|
"aria-live": kind === "error" ? "assertive" : "polite",
|
|
1243
1453
|
...rest,
|
|
1244
1454
|
children: [
|
|
1245
|
-
/* @__PURE__ */ (0,
|
|
1246
|
-
/* @__PURE__ */ (0,
|
|
1247
|
-
onClose ? /* @__PURE__ */ (0,
|
|
1455
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Icon, { name: KIND_ICON2[kind], size: 16 }),
|
|
1456
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { style: { flex: 1 }, children }),
|
|
1457
|
+
onClose ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(IconButton, { icon: "x", label: "Dismiss", size: "sm", variant: "inverse", onPress: onClose }) : null
|
|
1248
1458
|
]
|
|
1249
1459
|
}
|
|
1250
1460
|
);
|
|
1251
1461
|
}
|
|
1252
|
-
var ToastContext =
|
|
1462
|
+
var ToastContext = React10.createContext(null);
|
|
1253
1463
|
function ToastProvider({ children, timeout = 6e3 }) {
|
|
1254
|
-
const [toasts, setToasts] =
|
|
1255
|
-
const close =
|
|
1256
|
-
const add =
|
|
1464
|
+
const [toasts, setToasts] = React10.useState([]);
|
|
1465
|
+
const close = React10.useCallback((id) => setToasts((t) => t.filter((x) => x.id !== id)), []);
|
|
1466
|
+
const add = React10.useCallback((toast) => {
|
|
1257
1467
|
const id = Math.random().toString(36).slice(2);
|
|
1258
1468
|
setToasts((t) => [...t, { ...toast, id }]);
|
|
1259
1469
|
const ms = toast.timeout ?? timeout;
|
|
1260
1470
|
if (ms > 0) setTimeout(() => close(id), ms);
|
|
1261
1471
|
return id;
|
|
1262
1472
|
}, [close, timeout]);
|
|
1263
|
-
const value =
|
|
1264
|
-
return /* @__PURE__ */ (0,
|
|
1473
|
+
const value = React10.useMemo(() => ({ add, close }), [add, close]);
|
|
1474
|
+
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(ToastContext.Provider, { value, children: [
|
|
1265
1475
|
children,
|
|
1266
|
-
/* @__PURE__ */ (0,
|
|
1476
|
+
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "pire-toast-region", role: "region", "aria-label": "Notifications", children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
|
|
1267
1477
|
] });
|
|
1268
1478
|
}
|
|
1269
1479
|
function useToast() {
|
|
1270
|
-
const ctx =
|
|
1480
|
+
const ctx = React10.useContext(ToastContext);
|
|
1271
1481
|
if (!ctx) throw new Error("useToast must be used inside <ToastProvider>");
|
|
1272
1482
|
return ctx;
|
|
1273
1483
|
}
|
|
1274
1484
|
|
|
1485
|
+
// src/components/feedback/Skeleton.tsx
|
|
1486
|
+
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
1487
|
+
function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
|
|
1488
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1489
|
+
"div",
|
|
1490
|
+
{
|
|
1491
|
+
className: cx("pire-skeleton", className),
|
|
1492
|
+
"data-shape": shape,
|
|
1493
|
+
"aria-hidden": "true",
|
|
1494
|
+
style: { width, height, ...style },
|
|
1495
|
+
...rest
|
|
1496
|
+
}
|
|
1497
|
+
);
|
|
1498
|
+
}
|
|
1499
|
+
var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
|
|
1500
|
+
function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
|
|
1501
|
+
const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
|
|
1502
|
+
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1503
|
+
"div",
|
|
1504
|
+
{
|
|
1505
|
+
className: cx("pire-skeleton-row", className),
|
|
1506
|
+
"data-density": density,
|
|
1507
|
+
"aria-hidden": "true",
|
|
1508
|
+
style,
|
|
1509
|
+
...rest,
|
|
1510
|
+
children: cells.map((c, i) => {
|
|
1511
|
+
const align = c.numeric ? "right" : c.align ?? "left";
|
|
1512
|
+
return (
|
|
1513
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
|
|
1514
|
+
/* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
1515
|
+
"div",
|
|
1516
|
+
{
|
|
1517
|
+
className: "pire-skeleton-cell",
|
|
1518
|
+
"data-align": align,
|
|
1519
|
+
style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
|
|
1520
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
|
|
1521
|
+
},
|
|
1522
|
+
i
|
|
1523
|
+
)
|
|
1524
|
+
);
|
|
1525
|
+
})
|
|
1526
|
+
}
|
|
1527
|
+
);
|
|
1528
|
+
}
|
|
1529
|
+
|
|
1275
1530
|
// src/components/data/KpiTile.tsx
|
|
1276
|
-
var
|
|
1277
|
-
var
|
|
1531
|
+
var import_react_aria_components22 = require("react-aria-components");
|
|
1532
|
+
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
1278
1533
|
function KpiTile({
|
|
1279
1534
|
label,
|
|
1280
1535
|
value,
|
|
@@ -1290,50 +1545,50 @@ function KpiTile({
|
|
|
1290
1545
|
style
|
|
1291
1546
|
}) {
|
|
1292
1547
|
const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
|
|
1293
|
-
const body = /* @__PURE__ */ (0,
|
|
1294
|
-
/* @__PURE__ */ (0,
|
|
1295
|
-
icon ? /* @__PURE__ */ (0,
|
|
1548
|
+
const body = /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(import_jsx_runtime34.Fragment, { children: [
|
|
1549
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "pire-kpi-label", children: [
|
|
1550
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { name: icon, size: 16 }) : null,
|
|
1296
1551
|
label
|
|
1297
1552
|
] }),
|
|
1298
|
-
/* @__PURE__ */ (0,
|
|
1553
|
+
/* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "pire-kpi-value", children: [
|
|
1299
1554
|
value,
|
|
1300
|
-
unit ? /* @__PURE__ */ (0,
|
|
1555
|
+
unit ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-kpi-unit", children: unit }) : null
|
|
1301
1556
|
] }),
|
|
1302
|
-
delta ? /* @__PURE__ */ (0,
|
|
1303
|
-
deltaDirection ? /* @__PURE__ */ (0,
|
|
1557
|
+
delta ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
|
|
1558
|
+
deltaDirection ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
|
|
1304
1559
|
delta
|
|
1305
1560
|
] }) : null,
|
|
1306
|
-
footnote ? /* @__PURE__ */ (0,
|
|
1561
|
+
footnote ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-kpi-foot", children: footnote }) : null
|
|
1307
1562
|
] });
|
|
1308
1563
|
const props = { className: cx("pire-kpi", className), "data-status": status, style };
|
|
1309
|
-
return onPress ? /* @__PURE__ */ (0,
|
|
1564
|
+
return onPress ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components22.Button, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("div", { ...props, children: body });
|
|
1310
1565
|
}
|
|
1311
1566
|
|
|
1312
1567
|
// src/components/data/ObjectHeader.tsx
|
|
1313
|
-
var
|
|
1568
|
+
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
1314
1569
|
function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
|
|
1315
|
-
return /* @__PURE__ */ (0,
|
|
1570
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("header", { className: cx("pire-objheader", className), ...rest, children: [
|
|
1316
1571
|
breadcrumb,
|
|
1317
|
-
/* @__PURE__ */ (0,
|
|
1318
|
-
/* @__PURE__ */ (0,
|
|
1319
|
-
/* @__PURE__ */ (0,
|
|
1320
|
-
subtitle || id ? /* @__PURE__ */ (0,
|
|
1572
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "pire-objheader-row", children: [
|
|
1573
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { style: { minWidth: 0 }, children: [
|
|
1574
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("h1", { className: "pire-objheader-title", children: title }),
|
|
1575
|
+
subtitle || id ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { className: "pire-objheader-sub", children: [
|
|
1321
1576
|
subtitle,
|
|
1322
|
-
id ? /* @__PURE__ */ (0,
|
|
1577
|
+
id ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-objheader-id", children: id }) : null
|
|
1323
1578
|
] }) : null
|
|
1324
1579
|
] }),
|
|
1325
1580
|
badge,
|
|
1326
|
-
actions ? /* @__PURE__ */ (0,
|
|
1581
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "pire-objheader-actions", children: actions }) : null
|
|
1327
1582
|
] }),
|
|
1328
|
-
facts?.length ? /* @__PURE__ */ (0,
|
|
1329
|
-
/* @__PURE__ */ (0,
|
|
1330
|
-
/* @__PURE__ */ (0,
|
|
1583
|
+
facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("div", { children: [
|
|
1584
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("dt", { className: "pire-fact-label", children: fact.label }),
|
|
1585
|
+
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
|
|
1331
1586
|
] }, fact.label)) }) : null
|
|
1332
1587
|
] });
|
|
1333
1588
|
}
|
|
1334
1589
|
|
|
1335
1590
|
// src/components/data/FilterBar.tsx
|
|
1336
|
-
var
|
|
1591
|
+
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
1337
1592
|
function FilterBar({
|
|
1338
1593
|
children,
|
|
1339
1594
|
activeFilters = [],
|
|
@@ -1345,115 +1600,115 @@ function FilterBar({
|
|
|
1345
1600
|
className,
|
|
1346
1601
|
...rest
|
|
1347
1602
|
}) {
|
|
1348
|
-
return /* @__PURE__ */ (0,
|
|
1349
|
-
/* @__PURE__ */ (0,
|
|
1603
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("section", { className: cx("pire-filterbar", className), "aria-label": "Filters", ...rest, children: [
|
|
1604
|
+
/* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "pire-filterbar-controls", children: [
|
|
1350
1605
|
children,
|
|
1351
|
-
onGo ? /* @__PURE__ */ (0,
|
|
1606
|
+
onGo ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { variant: "primary", onPress: onGo, children: "Go" }) : null
|
|
1352
1607
|
] }),
|
|
1353
|
-
activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0,
|
|
1354
|
-
activeFilters.map((filter) => /* @__PURE__ */ (0,
|
|
1355
|
-
activeFilters.length && onClear ? /* @__PURE__ */ (0,
|
|
1356
|
-
resultLabel ? /* @__PURE__ */ (0,
|
|
1357
|
-
actions ? /* @__PURE__ */ (0,
|
|
1608
|
+
activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "pire-filterbar-foot", children: [
|
|
1609
|
+
activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
|
|
1610
|
+
activeFilters.length && onClear ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: "Clear all" }) : null,
|
|
1611
|
+
resultLabel ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
|
|
1612
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "pire-filterbar-actions", children: actions }) : null
|
|
1358
1613
|
] }) : null
|
|
1359
1614
|
] });
|
|
1360
1615
|
}
|
|
1361
1616
|
|
|
1362
1617
|
// src/components/data/DescriptionList.tsx
|
|
1363
|
-
var
|
|
1618
|
+
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
1364
1619
|
function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
|
|
1365
|
-
return /* @__PURE__ */ (0,
|
|
1620
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
1366
1621
|
"dl",
|
|
1367
1622
|
{
|
|
1368
1623
|
className: cx("pire-dl", className),
|
|
1369
1624
|
"data-layout": layout,
|
|
1370
1625
|
style: { ...layout === "grid" ? { "--pire-dl-cols": columns } : null, ...style },
|
|
1371
1626
|
...rest,
|
|
1372
|
-
children: items.map((item, i) => /* @__PURE__ */ (0,
|
|
1373
|
-
/* @__PURE__ */ (0,
|
|
1627
|
+
children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
|
|
1628
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("dt", { className: "pire-dl-term", children: [
|
|
1374
1629
|
item.label,
|
|
1375
1630
|
item.hint
|
|
1376
1631
|
] }),
|
|
1377
|
-
/* @__PURE__ */ (0,
|
|
1632
|
+
/* @__PURE__ */ (0, import_jsx_runtime37.jsx)("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
|
|
1378
1633
|
] }, i))
|
|
1379
1634
|
}
|
|
1380
1635
|
);
|
|
1381
1636
|
}
|
|
1382
1637
|
|
|
1383
1638
|
// src/components/data/Timeline.tsx
|
|
1384
|
-
var
|
|
1639
|
+
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
1385
1640
|
function Timeline({ entries, reverse = false, className, ...rest }) {
|
|
1386
1641
|
const list = reverse ? [...entries].reverse() : entries;
|
|
1387
|
-
return /* @__PURE__ */ (0,
|
|
1388
|
-
/* @__PURE__ */ (0,
|
|
1389
|
-
/* @__PURE__ */ (0,
|
|
1390
|
-
entry.actor ? /* @__PURE__ */ (0,
|
|
1642
|
+
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("li", { className: "pire-timeline-item", children: [
|
|
1643
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "pire-timeline-time", children: entry.time }),
|
|
1644
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "pire-timeline-text", children: entry.event }),
|
|
1645
|
+
entry.actor ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "pire-timeline-actor", children: entry.actor }) : null
|
|
1391
1646
|
] }, entry.id ?? i)) });
|
|
1392
1647
|
}
|
|
1393
1648
|
|
|
1394
1649
|
// src/components/data/LinkList.tsx
|
|
1395
|
-
var
|
|
1396
|
-
var
|
|
1650
|
+
var import_react_aria_components23 = require("react-aria-components");
|
|
1651
|
+
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
1397
1652
|
function LinkList({ items, onSelect, className, ...rest }) {
|
|
1398
|
-
return /* @__PURE__ */ (0,
|
|
1399
|
-
item.icon ? /* @__PURE__ */ (0,
|
|
1400
|
-
item.key ? /* @__PURE__ */ (0,
|
|
1401
|
-
item.text ? /* @__PURE__ */ (0,
|
|
1653
|
+
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_aria_components23.Button, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
|
|
1654
|
+
item.icon ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
|
|
1655
|
+
item.key ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "pire-linklist-key", children: item.key }) : null,
|
|
1656
|
+
item.text ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "pire-linklist-text", children: item.text }) : null,
|
|
1402
1657
|
item.trailing
|
|
1403
1658
|
] }, item.id)) });
|
|
1404
1659
|
}
|
|
1405
1660
|
|
|
1406
1661
|
// src/components/layout/PageHeader.tsx
|
|
1407
|
-
var
|
|
1662
|
+
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
1408
1663
|
function PageHeader({ title, subtitle, actions, className, ...rest }) {
|
|
1409
|
-
return /* @__PURE__ */ (0,
|
|
1410
|
-
/* @__PURE__ */ (0,
|
|
1411
|
-
/* @__PURE__ */ (0,
|
|
1412
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
1664
|
+
return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("header", { className: cx("pire-pageheader", className), ...rest, children: [
|
|
1665
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { minWidth: 0 }, children: [
|
|
1666
|
+
/* @__PURE__ */ (0, import_jsx_runtime40.jsx)("h1", { className: "pire-pageheader-title", children: title }),
|
|
1667
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("p", { className: "pire-pageheader-sub", children: subtitle }) : null
|
|
1413
1668
|
] }),
|
|
1414
|
-
actions ? /* @__PURE__ */ (0,
|
|
1669
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("div", { className: "pire-pageheader-actions", children: actions }) : null
|
|
1415
1670
|
] });
|
|
1416
1671
|
}
|
|
1417
1672
|
|
|
1418
1673
|
// src/components/layout/SectionHeader.tsx
|
|
1419
|
-
var
|
|
1674
|
+
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
1420
1675
|
function SectionHeader({ title, meta, actions, className, ...rest }) {
|
|
1421
|
-
return /* @__PURE__ */ (0,
|
|
1422
|
-
/* @__PURE__ */ (0,
|
|
1423
|
-
meta ? /* @__PURE__ */ (0,
|
|
1424
|
-
actions ? /* @__PURE__ */ (0,
|
|
1676
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { className: cx("pire-sectionhead", className), ...rest, children: [
|
|
1677
|
+
/* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "pire-eyebrow", children: title }),
|
|
1678
|
+
meta ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
|
|
1679
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "pire-sectionhead-actions", children: actions }) : null
|
|
1425
1680
|
] });
|
|
1426
1681
|
}
|
|
1427
1682
|
|
|
1428
1683
|
// src/components/layout/SelectionBar.tsx
|
|
1429
|
-
var
|
|
1684
|
+
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
1430
1685
|
function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
|
|
1431
1686
|
if (!count) return null;
|
|
1432
|
-
return /* @__PURE__ */ (0,
|
|
1433
|
-
/* @__PURE__ */ (0,
|
|
1687
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
|
|
1688
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-selectionbar-count", children: [
|
|
1434
1689
|
count.toLocaleString(),
|
|
1435
1690
|
" ",
|
|
1436
1691
|
noun,
|
|
1437
1692
|
count === 1 ? "" : "s",
|
|
1438
1693
|
" selected"
|
|
1439
1694
|
] }),
|
|
1440
|
-
children ? /* @__PURE__ */ (0,
|
|
1441
|
-
actions ? /* @__PURE__ */ (0,
|
|
1695
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
|
|
1696
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "pire-selectionbar-actions", children: actions }) : null
|
|
1442
1697
|
] });
|
|
1443
1698
|
}
|
|
1444
1699
|
|
|
1445
1700
|
// src/components/layout/FooterBar.tsx
|
|
1446
|
-
var
|
|
1701
|
+
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
1447
1702
|
function FooterBar({ note, actions, children, className, ...rest }) {
|
|
1448
|
-
return /* @__PURE__ */ (0,
|
|
1449
|
-
note ? /* @__PURE__ */ (0,
|
|
1703
|
+
return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("footer", { className: cx("pire-footerbar", className), ...rest, children: [
|
|
1704
|
+
note ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "pire-footerbar-note", children: note }) : null,
|
|
1450
1705
|
children,
|
|
1451
|
-
actions ? /* @__PURE__ */ (0,
|
|
1706
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "pire-footerbar-actions", children: actions }) : null
|
|
1452
1707
|
] });
|
|
1453
1708
|
}
|
|
1454
1709
|
|
|
1455
1710
|
// src/components/patterns/ConfirmDialog.tsx
|
|
1456
|
-
var
|
|
1711
|
+
var import_jsx_runtime44 = require("react/jsx-runtime");
|
|
1457
1712
|
function ConfirmDialog({
|
|
1458
1713
|
isOpen,
|
|
1459
1714
|
title,
|
|
@@ -1467,7 +1722,7 @@ function ConfirmDialog({
|
|
|
1467
1722
|
onConfirm,
|
|
1468
1723
|
onCancel
|
|
1469
1724
|
}) {
|
|
1470
|
-
return /* @__PURE__ */ (0,
|
|
1725
|
+
return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(
|
|
1471
1726
|
Dialog,
|
|
1472
1727
|
{
|
|
1473
1728
|
isOpen,
|
|
@@ -1477,12 +1732,12 @@ function ConfirmDialog({
|
|
|
1477
1732
|
onClose: onCancel,
|
|
1478
1733
|
isDismissable: !isBusy,
|
|
1479
1734
|
showClose: false,
|
|
1480
|
-
footer: /* @__PURE__ */ (0,
|
|
1481
|
-
/* @__PURE__ */ (0,
|
|
1482
|
-
/* @__PURE__ */ (0,
|
|
1735
|
+
footer: /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)(import_jsx_runtime44.Fragment, { children: [
|
|
1736
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
|
|
1737
|
+
/* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
|
|
1483
1738
|
] }),
|
|
1484
1739
|
children: [
|
|
1485
|
-
consequence ? /* @__PURE__ */ (0,
|
|
1740
|
+
consequence ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
|
|
1486
1741
|
children
|
|
1487
1742
|
]
|
|
1488
1743
|
}
|
|
@@ -1490,11 +1745,11 @@ function ConfirmDialog({
|
|
|
1490
1745
|
}
|
|
1491
1746
|
|
|
1492
1747
|
// src/components/patterns/SidePanel.tsx
|
|
1493
|
-
var
|
|
1494
|
-
var
|
|
1748
|
+
var import_react_aria_components24 = require("react-aria-components");
|
|
1749
|
+
var import_jsx_runtime45 = require("react/jsx-runtime");
|
|
1495
1750
|
function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
|
|
1496
|
-
return /* @__PURE__ */ (0,
|
|
1497
|
-
|
|
1751
|
+
return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
|
|
1752
|
+
import_react_aria_components24.ModalOverlay,
|
|
1498
1753
|
{
|
|
1499
1754
|
className: "pire-sidepanel-overlay",
|
|
1500
1755
|
isOpen,
|
|
@@ -1502,34 +1757,34 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
|
|
|
1502
1757
|
onOpenChange: (o) => {
|
|
1503
1758
|
if (!o) onClose?.();
|
|
1504
1759
|
},
|
|
1505
|
-
children: /* @__PURE__ */ (0,
|
|
1506
|
-
/* @__PURE__ */ (0,
|
|
1507
|
-
/* @__PURE__ */ (0,
|
|
1508
|
-
/* @__PURE__ */ (0,
|
|
1509
|
-
subtitle ? /* @__PURE__ */ (0,
|
|
1760
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components24.Modal, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)(import_react_aria_components24.Dialog, { className: "pire-dialog", style: { height: "100%" }, children: [
|
|
1761
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("header", { className: "pire-dialog-head", children: [
|
|
1762
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
1763
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(import_react_aria_components24.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
|
|
1764
|
+
subtitle ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
1510
1765
|
] }),
|
|
1511
|
-
/* @__PURE__ */ (0,
|
|
1766
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)(IconButton, { icon: "x", label: "Close panel", size: "sm", onPress: onClose })
|
|
1512
1767
|
] }),
|
|
1513
|
-
/* @__PURE__ */ (0,
|
|
1514
|
-
footer ? /* @__PURE__ */ (0,
|
|
1768
|
+
/* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
|
|
1769
|
+
footer ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
|
|
1515
1770
|
] }) })
|
|
1516
1771
|
}
|
|
1517
1772
|
);
|
|
1518
1773
|
}
|
|
1519
1774
|
|
|
1520
1775
|
// src/components/patterns/EmptyState.tsx
|
|
1521
|
-
var
|
|
1776
|
+
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
1522
1777
|
function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
|
|
1523
|
-
return /* @__PURE__ */ (0,
|
|
1524
|
-
/* @__PURE__ */ (0,
|
|
1525
|
-
title ? /* @__PURE__ */ (0,
|
|
1526
|
-
children ? /* @__PURE__ */ (0,
|
|
1778
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
|
|
1779
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
|
|
1780
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
|
|
1781
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
|
|
1527
1782
|
action
|
|
1528
1783
|
] });
|
|
1529
1784
|
}
|
|
1530
1785
|
|
|
1531
1786
|
// src/index.ts
|
|
1532
|
-
var
|
|
1787
|
+
var import_react_aria_components25 = require("react-aria-components");
|
|
1533
1788
|
// Annotate the CommonJS export names for ESM import in node:
|
|
1534
1789
|
0 && (module.exports = {
|
|
1535
1790
|
Avatar,
|
|
@@ -1559,6 +1814,7 @@ var import_react_aria_components23 = require("react-aria-components");
|
|
|
1559
1814
|
Menu,
|
|
1560
1815
|
MenuItem,
|
|
1561
1816
|
MenuTrigger,
|
|
1817
|
+
MultiComboBox,
|
|
1562
1818
|
NumberField,
|
|
1563
1819
|
ObjectHeader,
|
|
1564
1820
|
PageHeader,
|
|
@@ -1575,9 +1831,12 @@ var import_react_aria_components23 = require("react-aria-components");
|
|
|
1575
1831
|
ShellBar,
|
|
1576
1832
|
SideNav,
|
|
1577
1833
|
SidePanel,
|
|
1834
|
+
Skeleton,
|
|
1835
|
+
SkeletonTableRow,
|
|
1578
1836
|
Switch,
|
|
1579
1837
|
Tabs,
|
|
1580
1838
|
Tag,
|
|
1839
|
+
TextArea,
|
|
1581
1840
|
Timeline,
|
|
1582
1841
|
Toast,
|
|
1583
1842
|
ToastProvider,
|