@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/index.cjs CHANGED
@@ -42,26 +42,27 @@ __export(src_exports, {
42
42
  DatePicker: () => DatePicker,
43
43
  DescriptionList: () => DescriptionList,
44
44
  Dialog: () => Dialog,
45
- DialogTrigger: () => import_react_aria_components23.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: () => import_react_aria_components23.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: () => import_react_aria_components23.Menu,
58
- MenuItem: () => import_react_aria_components23.MenuItem,
59
- MenuTrigger: () => import_react_aria_components23.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: () => import_react_aria_components23.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: () => import_react_aria_components23.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/Select.tsx
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, import_jsx_runtime12.jsxs)(
485
- import_react_aria_components7.Select,
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, import_jsx_runtime12.jsxs)(import_react_aria_components7.Label, { className: "pire-field-label", children: [
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, import_jsx_runtime12.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
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, import_jsx_runtime12.jsxs)(
501
- import_react_aria_components7.Button,
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, import_jsx_runtime12.jsx)(import_react_aria_components7.SelectValue, { className: "pire-select-value" }),
509
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
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, import_jsx_runtime12.jsx)(import_react_aria_components7.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
514
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.FieldError, { className: "pire-field-error", children: errorMessage }),
515
- /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.ListBox, { className: "pire-listbox", items, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_react_aria_components7.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label }) }) })
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 import_react_aria_components8 = require("react-aria-components");
523
- var import_jsx_runtime13 = require("react/jsx-runtime");
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, import_jsx_runtime13.jsx)(import_react_aria_components8.Checkbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)(import_jsx_runtime13.Fragment, { children: [
526
- /* @__PURE__ */ (0, import_jsx_runtime13.jsx)("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(Icon, { name: "check", size: 12 }) : null }),
527
- /* @__PURE__ */ (0, import_jsx_runtime13.jsxs)("span", { children: [
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, import_jsx_runtime13.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
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 import_react_aria_components9 = require("react-aria-components");
536
- var import_jsx_runtime14 = require("react/jsx-runtime");
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, import_jsx_runtime14.jsxs)(import_react_aria_components9.RadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
539
- label ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Label, { className: "pire-field-label", children: label }) : null,
540
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("div", { className: "pire-radiogroup", children }),
541
- description ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
542
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(import_react_aria_components9.FieldError, { className: "pire-field-error", children: errorMessage })
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, import_jsx_runtime14.jsxs)(import_react_aria_components9.Radio, { className: cx("pire-choice", className), ...rest, children: [
547
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
548
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { children: [
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, import_jsx_runtime14.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
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 import_react_aria_components10 = require("react-aria-components");
557
- var import_jsx_runtime15 = require("react/jsx-runtime");
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, import_jsx_runtime15.jsxs)(import_react_aria_components10.Switch, { className: cx("pire-choice", className), ...rest, children: [
560
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-switch-thumb" }) }),
561
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { children: label ?? children })
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 import_react_aria_components11 = require("react-aria-components");
567
- var import_jsx_runtime16 = require("react/jsx-runtime");
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, import_jsx_runtime16.jsxs)(
586
- import_react_aria_components11.ComboBox,
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, import_jsx_runtime16.jsxs)(import_react_aria_components11.Label, { className: "pire-field-label", children: [
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, import_jsx_runtime16.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
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, import_jsx_runtime16.jsxs)(
604
- import_react_aria_components11.Group,
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, import_jsx_runtime16.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
612
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components11.Input, { className: "pire-input", placeholder: rest.placeholder }),
613
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components11.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": "Show suggestions", style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Icon, { name: "chevron-down", size: 16 }) })
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, import_jsx_runtime16.jsx)(import_react_aria_components11.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
618
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components11.FieldError, { className: "pire-field-error", children: errorMessage }),
619
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components11.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components11.ListBox, { className: "pire-listbox", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_aria_components11.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
620
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { flex: 1 }, children: item.label }),
621
- item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { style: { font: "var(--type-code)", color: "var(--text-tertiary)" }, children: item.secondary }) : null
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 import_react_aria_components12 = require("react-aria-components");
630
- var import_jsx_runtime17 = require("react/jsx-runtime");
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, import_jsx_runtime17.jsxs)(import_react_aria_components12.NumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
644
- label ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_react_aria_components12.Label, { className: "pire-field-label", children: [
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, import_jsx_runtime17.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
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, import_jsx_runtime17.jsxs)(
649
- import_react_aria_components12.Group,
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, import_jsx_runtime17.jsx)(import_react_aria_components12.Input, { className: "pire-input", "data-numeric": "true" }),
658
- suffix ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "pire-affix", children: suffix }) : null,
659
- hideStepper ? null : /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)("span", { className: "pire-stepper", children: [
660
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.Button, { slot: "increment", className: "pire-stepper-btn", "aria-label": "Increase", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { name: "plus", size: 10 }) }),
661
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.Button, { slot: "decrement", className: "pire-stepper-btn", "aria-label": "Decrease", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { name: "minus", size: 10 }) })
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, import_jsx_runtime17.jsx)(import_react_aria_components12.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
667
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components12.FieldError, { className: "pire-field-error", children: errorMessage })
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 import_react_aria_components13 = require("react-aria-components");
673
- var import_jsx_runtime18 = require("react/jsx-runtime");
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, import_jsx_runtime18.jsxs)(import_react_aria_components13.DatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
685
- label ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_react_aria_components13.Label, { className: "pire-field-label", children: [
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, import_jsx_runtime18.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
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, import_jsx_runtime18.jsxs)(
690
- import_react_aria_components13.Group,
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, import_jsx_runtime18.jsx)(import_react_aria_components13.DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.DateSegment, { segment, className: "pire-datesegment" }) }),
699
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": "Open calendar", style: { width: 24, height: 24 }, children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "calendar", size: 16 }) })
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, import_jsx_runtime18.jsx)(import_react_aria_components13.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
704
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.FieldError, { className: "pire-field-error", children: errorMessage }),
705
- /* @__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.Dialog, { children: /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_react_aria_components13.Calendar, { className: "pire-calendar", children: [
706
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("header", { className: "pire-calendar-head", children: [
707
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Button, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": "Previous month", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "chevron-left", size: 16 }) }),
708
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Heading, { className: "pire-calendar-title" }),
709
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.Button, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": "Next month", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "chevron-right", size: 16 }) })
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, import_jsx_runtime18.jsxs)(import_react_aria_components13.CalendarGrid, { className: "pire-calendar-grid", children: [
712
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.CalendarHeaderCell, { children: day }) }),
713
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components13.CalendarCell, { date, className: "pire-calendar-cell" }) })
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 React7 = __toESM(require("react"), 1);
930
+ var React9 = __toESM(require("react"), 1);
721
931
 
722
932
  // src/components/patterns/ValueHelpDialog.tsx
723
- var React6 = __toESM(require("react"), 1);
933
+ var React8 = __toESM(require("react"), 1);
724
934
 
725
935
  // src/components/feedback/Dialog.tsx
726
- var import_react_aria_components14 = require("react-aria-components");
727
- var import_jsx_runtime19 = require("react/jsx-runtime");
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, import_jsx_runtime19.jsx)(
747
- import_react_aria_components14.ModalOverlay,
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, import_jsx_runtime19.jsx)(import_react_aria_components14.Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components14.Dialog, { className: "pire-dialog", children: [
756
- title ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("header", { className: "pire-dialog-head", children: [
757
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
758
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components14.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
759
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
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, import_jsx_runtime19.jsx)(IconButton, { icon: "x", label: "Close", size: "sm", onPress: close }) : null
971
+ showClose ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(IconButton, { icon: "x", label: "Close", size: "sm", onPress: close }) : null
762
972
  ] }) : null,
763
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "pire-dialog-body", children }),
764
- footer ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
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 import_react_aria_components15 = require("react-aria-components");
772
- var import_jsx_runtime20 = require("react/jsx-runtime");
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, import_jsx_runtime20.jsx)("div", { className: cx("pire-table-wrap", className), style, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
795
- import_react_aria_components15.Table,
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, import_jsx_runtime20.jsxs)(import_react_aria_components15.TableHeader, { className: "pire-thead-row", children: [
812
- selectable ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Checkbox, { slot: "selection", "aria-label": "Select all rows" }) }) : null,
813
- columns.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
814
- import_react_aria_components15.Column,
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, import_jsx_runtime20.jsxs)("span", { className: "pire-th-inner", children: [
1033
+ children: /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("span", { className: "pire-th-inner", children: [
824
1034
  c.label,
825
- c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
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, import_jsx_runtime20.jsx)(import_react_aria_components15.TableBody, { renderEmptyState: () => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "pire-table-empty", children: emptyLabel }), children: rows.map((row) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components15.Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
839
- selectable ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components15.Cell, { className: "pire-td", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Checkbox, { slot: "selection", "aria-label": "Select row" }) }) : null,
840
- columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
841
- import_react_aria_components15.Cell,
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 import_jsx_runtime21 = require("react/jsx-runtime");
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] = React6.useState("");
869
- React6.useEffect(() => {
1078
+ const [query, setQuery] = React8.useState("");
1079
+ React8.useEffect(() => {
870
1080
  if (isOpen) setQuery("");
871
1081
  }, [isOpen]);
872
- const filtered = React6.useMemo(() => {
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, import_jsx_runtime21.jsx)(
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, import_jsx_runtime21.jsx)(Button, { variant: "tertiary", onPress: onClose, children: "Cancel" }),
885
- children: /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
886
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
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, import_jsx_runtime21.jsx)(
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 import_jsx_runtime22 = require("react/jsx-runtime");
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] = React7.useState(false);
939
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { className: cx(className), style, children: [
940
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
941
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
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, import_jsx_runtime22.jsx)(
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, import_jsx_runtime22.jsx)(
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, import_jsx_runtime22.jsx)(
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 import_jsx_runtime23 = require("react/jsx-runtime");
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, import_jsx_runtime23.jsxs)("header", { className: cx("pire-shellbar", className), ...rest, children: [
995
- onMenu ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconButton, { icon: "menu", label: "Open navigation", variant: "inverse", size: "sm", onPress: onMenu }) : null,
996
- monogram ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
997
- product ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-shellbar-product", children: product }) : null,
998
- title ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-shellbar-title", children: title }) : null,
999
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-shellbar-spacer" }),
1000
- onSearch ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(IconButton, { icon: "search", label: "Search", variant: "inverse", size: "sm", onPress: onSearch }) : null,
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, import_jsx_runtime23.jsx)("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
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 import_react_aria_components16 = require("react-aria-components");
1008
- var import_jsx_runtime24 = require("react/jsx-runtime");
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, import_jsx_runtime24.jsxs)(
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, import_jsx_runtime24.jsxs)("div", { className: "pire-sidenav-group", children: [
1019
- group.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "pire-sidenav-label", children: group.label }) : null,
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, import_jsx_runtime24.jsxs)(
1023
- import_react_aria_components16.Button,
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, import_jsx_runtime24.jsx)(Icon, { name: item.icon, size: 16 }) : null,
1031
- collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { children: item.label }),
1032
- item.count != null && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null
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, import_jsx_runtime24.jsx)(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
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, import_jsx_runtime24.jsx)("div", { className: "pire-sidenav-footer", children: footer }) : null
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 import_react_aria_components17 = require("react-aria-components");
1048
- var import_jsx_runtime25 = require("react/jsx-runtime");
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, import_jsx_runtime25.jsxs)(
1051
- import_react_aria_components17.Tabs,
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, import_jsx_runtime25.jsx)(import_react_aria_components17.TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components17.Tab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
1060
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon, { name: item.icon, size: 16 }) : null,
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, import_jsx_runtime25.jsx)("span", { className: "pire-tab-count", children: item.count }) : null
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, import_jsx_runtime25.jsx)(import_react_aria_components17.TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
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 import_react_aria_components18 = require("react-aria-components");
1072
- var import_jsx_runtime26 = require("react/jsx-runtime");
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, import_jsx_runtime26.jsx)(
1075
- import_react_aria_components18.Breadcrumbs,
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, import_jsx_runtime26.jsxs)(import_react_aria_components18.Breadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
1084
- last ? item.label : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Link, { href: item.href, children: item.label }),
1085
- last ? null : /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
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 import_jsx_runtime27 = require("react/jsx-runtime");
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, import_jsx_runtime27.jsxs)("nav", { className: cx("pire-pagination", className), style, "aria-label": "Pagination", children: [
1108
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("span", { className: "pire-pagination-count", children: [
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, import_jsx_runtime27.jsx)(
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, import_jsx_runtime27.jsxs)("span", { className: "pire-pagination-count", "aria-live": "polite", children: [
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, import_jsx_runtime27.jsx)(
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, import_jsx_runtime27.jsx)(
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 import_jsx_runtime28 = require("react/jsx-runtime");
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, import_jsx_runtime28.jsxs)(
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, import_jsx_runtime28.jsx)(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
1178
- /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
1179
- title ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "pire-msg-title", children: title }) : null,
1180
- children ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("span", { className: "pire-msg-body", children }) : null,
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, import_jsx_runtime28.jsx)(IconButton, { icon: "x", label: "Dismiss message", size: "sm", onPress: onClose }) : null
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 import_react_aria_components19 = require("react-aria-components");
1191
- var import_jsx_runtime29 = require("react/jsx-runtime");
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, import_jsx_runtime29.jsx)(
1205
- import_react_aria_components19.ProgressBar,
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, import_jsx_runtime29.jsxs)(import_jsx_runtime29.Fragment, { children: [
1216
- label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "pire-progress-head", children: [
1217
- label ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components19.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", {}),
1218
- showValue && !isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "pire-numeric", children: valueText }) : null
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, import_jsx_runtime29.jsx)("div", { className: "pire-progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
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 React8 = __toESM(require("react"), 1);
1228
- var import_jsx_runtime30 = require("react/jsx-runtime");
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, import_jsx_runtime30.jsxs)(
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, import_jsx_runtime30.jsx)(Icon, { name: KIND_ICON2[kind], size: 16 }),
1246
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { style: { flex: 1 }, children }),
1247
- onClose ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(IconButton, { icon: "x", label: "Dismiss", size: "sm", variant: "inverse", onPress: onClose }) : null
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 = React8.createContext(null);
1462
+ var ToastContext = React10.createContext(null);
1253
1463
  function ToastProvider({ children, timeout = 6e3 }) {
1254
- const [toasts, setToasts] = React8.useState([]);
1255
- const close = React8.useCallback((id) => setToasts((t) => t.filter((x) => x.id !== id)), []);
1256
- const add = React8.useCallback((toast) => {
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 = React8.useMemo(() => ({ add, close }), [add, close]);
1264
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(ToastContext.Provider, { value, children: [
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, import_jsx_runtime30.jsx)("div", { className: "pire-toast-region", role: "region", "aria-label": "Notifications", children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
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 = React8.useContext(ToastContext);
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 import_react_aria_components20 = require("react-aria-components");
1277
- var import_jsx_runtime31 = require("react/jsx-runtime");
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, import_jsx_runtime31.jsxs)(import_jsx_runtime31.Fragment, { children: [
1294
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "pire-kpi-label", children: [
1295
- icon ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { name: icon, size: 16 }) : null,
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, import_jsx_runtime31.jsxs)("span", { className: "pire-kpi-value", children: [
1553
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "pire-kpi-value", children: [
1299
1554
  value,
1300
- unit ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("span", { className: "pire-kpi-unit", children: unit }) : null
1555
+ unit ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-kpi-unit", children: unit }) : null
1301
1556
  ] }),
1302
- delta ? /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
1303
- deltaDirection ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
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, import_jsx_runtime31.jsx)("span", { className: "pire-kpi-foot", children: footnote }) : null
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, import_jsx_runtime31.jsx)(import_react_aria_components20.Button, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { ...props, children: body });
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 import_jsx_runtime32 = require("react/jsx-runtime");
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, import_jsx_runtime32.jsxs)("header", { className: cx("pire-objheader", className), ...rest, children: [
1570
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("header", { className: cx("pire-objheader", className), ...rest, children: [
1316
1571
  breadcrumb,
1317
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "pire-objheader-row", children: [
1318
- /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { style: { minWidth: 0 }, children: [
1319
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("h1", { className: "pire-objheader-title", children: title }),
1320
- subtitle || id ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "pire-objheader-sub", children: [
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, import_jsx_runtime32.jsx)("span", { className: "pire-objheader-id", children: id }) : null
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, import_jsx_runtime32.jsx)("div", { className: "pire-objheader-actions", children: actions }) : null
1581
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("div", { className: "pire-objheader-actions", children: actions }) : null
1327
1582
  ] }),
1328
- facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { children: [
1329
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dt", { className: "pire-fact-label", children: fact.label }),
1330
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
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 import_jsx_runtime33 = require("react/jsx-runtime");
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, import_jsx_runtime33.jsxs)("section", { className: cx("pire-filterbar", className), "aria-label": "Filters", ...rest, children: [
1349
- /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "pire-filterbar-controls", children: [
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, import_jsx_runtime33.jsx)(Button, { variant: "primary", onPress: onGo, children: "Go" }) : null
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, import_jsx_runtime33.jsxs)("div", { className: "pire-filterbar-foot", children: [
1354
- activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
1355
- activeFilters.length && onClear ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: "Clear all" }) : null,
1356
- resultLabel ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
1357
- actions ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "pire-filterbar-actions", children: actions }) : null
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 import_jsx_runtime34 = require("react/jsx-runtime");
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, import_jsx_runtime34.jsx)(
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, import_jsx_runtime34.jsxs)("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
1373
- /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("dt", { className: "pire-dl-term", children: [
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, import_jsx_runtime34.jsx)("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
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 import_jsx_runtime35 = require("react/jsx-runtime");
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, import_jsx_runtime35.jsx)("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("li", { className: "pire-timeline-item", children: [
1388
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-timeline-time", children: entry.time }),
1389
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-timeline-text", children: entry.event }),
1390
- entry.actor ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-timeline-actor", children: entry.actor }) : null
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 import_react_aria_components21 = require("react-aria-components");
1396
- var import_jsx_runtime36 = require("react/jsx-runtime");
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, import_jsx_runtime36.jsx)("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components21.Button, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
1399
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
1400
- item.key ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-linklist-key", children: item.key }) : null,
1401
- item.text ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-linklist-text", children: item.text }) : null,
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 import_jsx_runtime37 = require("react/jsx-runtime");
1662
+ var import_jsx_runtime40 = require("react/jsx-runtime");
1408
1663
  function PageHeader({ title, subtitle, actions, className, ...rest }) {
1409
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("header", { className: cx("pire-pageheader", className), ...rest, children: [
1410
- /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { style: { minWidth: 0 }, children: [
1411
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("h1", { className: "pire-pageheader-title", children: title }),
1412
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("p", { className: "pire-pageheader-sub", children: subtitle }) : null
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, import_jsx_runtime37.jsx)("div", { className: "pire-pageheader-actions", children: actions }) : null
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 import_jsx_runtime38 = require("react/jsx-runtime");
1674
+ var import_jsx_runtime41 = require("react/jsx-runtime");
1420
1675
  function SectionHeader({ title, meta, actions, className, ...rest }) {
1421
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)("div", { className: cx("pire-sectionhead", className), ...rest, children: [
1422
- /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "pire-eyebrow", children: title }),
1423
- meta ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
1424
- actions ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("div", { className: "pire-sectionhead-actions", children: actions }) : null
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 import_jsx_runtime39 = require("react/jsx-runtime");
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, import_jsx_runtime39.jsxs)("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
1433
- /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("span", { className: "pire-selectionbar-count", children: [
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, import_jsx_runtime39.jsx)("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
1441
- actions ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("div", { className: "pire-selectionbar-actions", children: actions }) : null
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 import_jsx_runtime40 = require("react/jsx-runtime");
1701
+ var import_jsx_runtime43 = require("react/jsx-runtime");
1447
1702
  function FooterBar({ note, actions, children, className, ...rest }) {
1448
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("footer", { className: cx("pire-footerbar", className), ...rest, children: [
1449
- note ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-footerbar-note", children: note }) : null,
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, import_jsx_runtime40.jsx)("div", { className: "pire-footerbar-actions", children: actions }) : null
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 import_jsx_runtime41 = require("react/jsx-runtime");
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, import_jsx_runtime41.jsxs)(
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, import_jsx_runtime41.jsxs)(import_jsx_runtime41.Fragment, { children: [
1481
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
1482
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
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, import_jsx_runtime41.jsx)(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
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 import_react_aria_components22 = require("react-aria-components");
1494
- var import_jsx_runtime42 = require("react/jsx-runtime");
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, import_jsx_runtime42.jsx)(
1497
- import_react_aria_components22.ModalOverlay,
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, import_jsx_runtime42.jsx)(import_react_aria_components22.Modal, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_react_aria_components22.Dialog, { className: "pire-dialog", style: { height: "100%" }, children: [
1506
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("header", { className: "pire-dialog-head", children: [
1507
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
1508
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components22.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
1509
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
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, import_jsx_runtime42.jsx)(IconButton, { icon: "x", label: "Close panel", size: "sm", onPress: onClose })
1766
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(IconButton, { icon: "x", label: "Close panel", size: "sm", onPress: onClose })
1512
1767
  ] }),
1513
- /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
1514
- footer ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
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 import_jsx_runtime43 = require("react/jsx-runtime");
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, import_jsx_runtime43.jsxs)("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
1524
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
1525
- title ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
1526
- children ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
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 import_react_aria_components23 = require("react-aria-components");
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,