@orianatech/pire 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/core/IconButton.d.cts +12 -0
- package/dist/components/core/IconButton.d.ts +12 -0
- package/dist/components/core/IconButton.d.ts.map +1 -1
- package/dist/components/data/DataTable.d.cts +7 -1
- package/dist/components/data/DataTable.d.ts +7 -1
- package/dist/components/data/DataTable.d.ts.map +1 -1
- package/dist/components/layout/PageBand.d.cts +15 -0
- package/dist/components/layout/PageBand.d.ts +16 -0
- package/dist/components/layout/PageBand.d.ts.map +1 -0
- package/dist/components.css +18 -0
- package/dist/i18n/messages.d.cts +2 -0
- package/dist/i18n/messages.d.ts +2 -0
- package/dist/i18n/messages.d.ts.map +1 -1
- package/dist/index.cjs +308 -240
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +394 -327
- package/dist/index.js.map +1 -1
- package/dist/tokens/base.css +3 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -252,9 +252,22 @@ function Tooltip({ label, placement = "top", delay = 500, children }) {
|
|
|
252
252
|
}
|
|
253
253
|
|
|
254
254
|
// src/components/core/IconButton.tsx
|
|
255
|
-
import { jsx as jsx4 } from "react/jsx-runtime";
|
|
256
|
-
var IconButton = React2.forwardRef(function IconButton2({
|
|
257
|
-
|
|
255
|
+
import { jsx as jsx4, jsxs as jsxs3 } from "react/jsx-runtime";
|
|
256
|
+
var IconButton = React2.forwardRef(function IconButton2({
|
|
257
|
+
icon,
|
|
258
|
+
label,
|
|
259
|
+
size = "md",
|
|
260
|
+
variant = "tertiary",
|
|
261
|
+
selected,
|
|
262
|
+
hideTooltip,
|
|
263
|
+
count,
|
|
264
|
+
countMax = 9,
|
|
265
|
+
countVariant = "number",
|
|
266
|
+
className,
|
|
267
|
+
...rest
|
|
268
|
+
}, ref) {
|
|
269
|
+
const showsCount = count != null && count > 0;
|
|
270
|
+
const button = /* @__PURE__ */ jsxs3(
|
|
258
271
|
AriaButton2,
|
|
259
272
|
{
|
|
260
273
|
ref,
|
|
@@ -264,15 +277,19 @@ var IconButton = React2.forwardRef(function IconButton2({ icon, label, size = "m
|
|
|
264
277
|
"data-size": size,
|
|
265
278
|
"data-variant": variant,
|
|
266
279
|
"data-selected": selected ? "true" : void 0,
|
|
280
|
+
"data-has-count": showsCount ? "true" : void 0,
|
|
267
281
|
...rest,
|
|
268
|
-
children:
|
|
282
|
+
children: [
|
|
283
|
+
/* @__PURE__ */ jsx4(Icon, { name: icon, size: size === "lg" ? 20 : 16 }),
|
|
284
|
+
showsCount ? /* @__PURE__ */ jsx4("span", { className: "pire-iconbtn-count", "data-variant": countVariant, "aria-hidden": "true", children: countVariant === "number" ? count > countMax ? `${countMax}+` : count : null }) : null
|
|
285
|
+
]
|
|
269
286
|
}
|
|
270
287
|
);
|
|
271
288
|
return hideTooltip ? button : /* @__PURE__ */ jsx4(Tooltip, { label, children: button });
|
|
272
289
|
});
|
|
273
290
|
|
|
274
291
|
// src/components/core/Badge.tsx
|
|
275
|
-
import { jsx as jsx5, jsxs as
|
|
292
|
+
import { jsx as jsx5, jsxs as jsxs4 } from "react/jsx-runtime";
|
|
276
293
|
var STATUS_ICON = {
|
|
277
294
|
positive: "check-circle-2",
|
|
278
295
|
critical: "alert-triangle",
|
|
@@ -281,7 +298,7 @@ var STATUS_ICON = {
|
|
|
281
298
|
neutral: "circle"
|
|
282
299
|
};
|
|
283
300
|
function Badge({ children, status = "neutral", showIcon = true, className, ...rest }) {
|
|
284
|
-
return /* @__PURE__ */
|
|
301
|
+
return /* @__PURE__ */ jsxs4("span", { className: cx("pire-badge", className), "data-status": status, ...rest, children: [
|
|
285
302
|
showIcon ? /* @__PURE__ */ jsx5(Icon, { name: STATUS_ICON[status], size: 12 }) : null,
|
|
286
303
|
children
|
|
287
304
|
] });
|
|
@@ -289,9 +306,9 @@ function Badge({ children, status = "neutral", showIcon = true, className, ...re
|
|
|
289
306
|
|
|
290
307
|
// src/components/core/Tag.tsx
|
|
291
308
|
import { Button as AriaButton3 } from "react-aria-components";
|
|
292
|
-
import { jsx as jsx6, jsxs as
|
|
309
|
+
import { jsx as jsx6, jsxs as jsxs5 } from "react/jsx-runtime";
|
|
293
310
|
function Tag({ children, onRemove, isDisabled, className, ...rest }) {
|
|
294
|
-
return /* @__PURE__ */
|
|
311
|
+
return /* @__PURE__ */ jsxs5("span", { className: cx("pire-tag", className), "data-disabled": isDisabled ? "true" : void 0, ...rest, children: [
|
|
295
312
|
children,
|
|
296
313
|
onRemove ? /* @__PURE__ */ jsx6(
|
|
297
314
|
AriaButton3,
|
|
@@ -307,12 +324,12 @@ function Tag({ children, onRemove, isDisabled, className, ...rest }) {
|
|
|
307
324
|
}
|
|
308
325
|
|
|
309
326
|
// src/components/core/Card.tsx
|
|
310
|
-
import { jsx as jsx7, jsxs as
|
|
327
|
+
import { jsx as jsx7, jsxs as jsxs6 } from "react/jsx-runtime";
|
|
311
328
|
function Card({ title, subtitle, icon, actions, footer, interactive, children, className, ...rest }) {
|
|
312
|
-
return /* @__PURE__ */
|
|
313
|
-
title || actions ? /* @__PURE__ */
|
|
329
|
+
return /* @__PURE__ */ jsxs6("section", { className: cx("pire-card", className), "data-interactive": interactive ? "true" : void 0, ...rest, children: [
|
|
330
|
+
title || actions ? /* @__PURE__ */ jsxs6("header", { className: "pire-card-head", children: [
|
|
314
331
|
icon ? /* @__PURE__ */ jsx7(Icon, { name: icon, size: 20, style: { color: "var(--text-secondary)" } }) : null,
|
|
315
|
-
/* @__PURE__ */
|
|
332
|
+
/* @__PURE__ */ jsxs6("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
316
333
|
/* @__PURE__ */ jsx7("h3", { className: "pire-card-title", children: title }),
|
|
317
334
|
subtitle ? /* @__PURE__ */ jsx7("p", { className: "pire-card-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
318
335
|
] }),
|
|
@@ -343,7 +360,7 @@ function Avatar({ name, size = "md", src, className, ...rest }) {
|
|
|
343
360
|
// src/components/core/SegmentedControl.tsx
|
|
344
361
|
import * as React4 from "react";
|
|
345
362
|
import { ToggleButtonGroup, ToggleButton } from "react-aria-components";
|
|
346
|
-
import { jsx as jsx9, jsxs as
|
|
363
|
+
import { jsx as jsx9, jsxs as jsxs7 } from "react/jsx-runtime";
|
|
347
364
|
function SegmentedControl({
|
|
348
365
|
options,
|
|
349
366
|
value,
|
|
@@ -370,7 +387,7 @@ function SegmentedControl({
|
|
|
370
387
|
const first = [...keys][0];
|
|
371
388
|
if (first != null) onChange?.(String(first));
|
|
372
389
|
},
|
|
373
|
-
children: options.map((option) => /* @__PURE__ */
|
|
390
|
+
children: options.map((option) => /* @__PURE__ */ jsxs7(
|
|
374
391
|
ToggleButton,
|
|
375
392
|
{
|
|
376
393
|
id: option.id,
|
|
@@ -453,9 +470,9 @@ function Heading({
|
|
|
453
470
|
|
|
454
471
|
// src/components/core/Link.tsx
|
|
455
472
|
import { Link as AriaLink } from "react-aria-components";
|
|
456
|
-
import { jsx as jsx12, jsxs as
|
|
473
|
+
import { jsx as jsx12, jsxs as jsxs8 } from "react/jsx-runtime";
|
|
457
474
|
function Link({ children, size, isExternal, className, rel, ...rest }) {
|
|
458
|
-
return /* @__PURE__ */
|
|
475
|
+
return /* @__PURE__ */ jsxs8(
|
|
459
476
|
AriaLink,
|
|
460
477
|
{
|
|
461
478
|
className: cx("pire-link", className),
|
|
@@ -495,15 +512,15 @@ function Separator({
|
|
|
495
512
|
}
|
|
496
513
|
|
|
497
514
|
// src/components/forms/FormField.tsx
|
|
498
|
-
import { jsx as jsx14, jsxs as
|
|
515
|
+
import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
|
|
499
516
|
function FormField({ label, htmlFor, isRequired, hint, error, layout = "stacked", children, className, ...rest }) {
|
|
500
|
-
return /* @__PURE__ */
|
|
501
|
-
/* @__PURE__ */
|
|
517
|
+
return /* @__PURE__ */ jsxs9("div", { className: cx("pire-field", className), "data-layout": layout, ...rest, children: [
|
|
518
|
+
/* @__PURE__ */ jsxs9("label", { className: "pire-field-label", htmlFor, children: [
|
|
502
519
|
label,
|
|
503
520
|
isRequired ? /* @__PURE__ */ jsx14("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
504
521
|
] }),
|
|
505
522
|
children,
|
|
506
|
-
error ? /* @__PURE__ */
|
|
523
|
+
error ? /* @__PURE__ */ jsxs9("span", { className: "pire-field-error", role: "alert", children: [
|
|
507
524
|
/* @__PURE__ */ jsx14(Icon, { name: "alert-circle", size: 12 }),
|
|
508
525
|
error
|
|
509
526
|
] }) : hint ? /* @__PURE__ */ jsx14("span", { className: "pire-field-hint", children: hint }) : null
|
|
@@ -512,7 +529,7 @@ function FormField({ label, htmlFor, isRequired, hint, error, layout = "stacked"
|
|
|
512
529
|
|
|
513
530
|
// src/components/forms/Input.tsx
|
|
514
531
|
import { TextField, Label, Input as AriaInput, Group, Text as Text2, FieldError } from "react-aria-components";
|
|
515
|
-
import { jsx as jsx15, jsxs as
|
|
532
|
+
import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
|
|
516
533
|
function Input({
|
|
517
534
|
label,
|
|
518
535
|
icon,
|
|
@@ -528,7 +545,7 @@ function Input({
|
|
|
528
545
|
onChange,
|
|
529
546
|
...rest
|
|
530
547
|
}) {
|
|
531
|
-
return /* @__PURE__ */
|
|
548
|
+
return /* @__PURE__ */ jsxs10(
|
|
532
549
|
TextField,
|
|
533
550
|
{
|
|
534
551
|
className: cx("pire-field", className),
|
|
@@ -537,11 +554,11 @@ function Input({
|
|
|
537
554
|
validationBehavior: "aria",
|
|
538
555
|
...rest,
|
|
539
556
|
children: [
|
|
540
|
-
label ? /* @__PURE__ */
|
|
557
|
+
label ? /* @__PURE__ */ jsxs10(Label, { className: "pire-field-label", children: [
|
|
541
558
|
label,
|
|
542
559
|
rest.isRequired ? /* @__PURE__ */ jsx15("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
543
560
|
] }) : null,
|
|
544
|
-
/* @__PURE__ */
|
|
561
|
+
/* @__PURE__ */ jsxs10(
|
|
545
562
|
Group,
|
|
546
563
|
{
|
|
547
564
|
className: "pire-control",
|
|
@@ -566,7 +583,7 @@ function Input({
|
|
|
566
583
|
// src/components/forms/TextArea.tsx
|
|
567
584
|
import * as React5 from "react";
|
|
568
585
|
import { TextField as TextField2, Label as Label2, TextArea as AriaTextArea, Group as Group2, Text as Text3, FieldError as FieldError2 } from "react-aria-components";
|
|
569
|
-
import { jsx as jsx16, jsxs as
|
|
586
|
+
import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
|
|
570
587
|
var useIsomorphicLayoutEffect = typeof document === "undefined" ? React5.useEffect : React5.useLayoutEffect;
|
|
571
588
|
function TextArea({
|
|
572
589
|
label,
|
|
@@ -607,7 +624,7 @@ function TextArea({
|
|
|
607
624
|
}
|
|
608
625
|
grow();
|
|
609
626
|
}, [autoGrow, grow, rest.value]);
|
|
610
|
-
return /* @__PURE__ */
|
|
627
|
+
return /* @__PURE__ */ jsxs11(
|
|
611
628
|
TextField2,
|
|
612
629
|
{
|
|
613
630
|
className: cx("pire-field", className),
|
|
@@ -616,7 +633,7 @@ function TextArea({
|
|
|
616
633
|
validationBehavior: "aria",
|
|
617
634
|
...rest,
|
|
618
635
|
children: [
|
|
619
|
-
label ? /* @__PURE__ */
|
|
636
|
+
label ? /* @__PURE__ */ jsxs11(Label2, { className: "pire-field-label", children: [
|
|
620
637
|
label,
|
|
621
638
|
rest.isRequired ? /* @__PURE__ */ jsx16("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
622
639
|
] }) : null,
|
|
@@ -660,7 +677,7 @@ import {
|
|
|
660
677
|
Text as Text4,
|
|
661
678
|
FieldError as FieldError3
|
|
662
679
|
} from "react-aria-components";
|
|
663
|
-
import { jsx as jsx17, jsxs as
|
|
680
|
+
import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
|
|
664
681
|
var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
|
|
665
682
|
function Select({
|
|
666
683
|
label,
|
|
@@ -678,7 +695,7 @@ function Select({
|
|
|
678
695
|
...rest
|
|
679
696
|
}) {
|
|
680
697
|
const items = options.map(norm);
|
|
681
|
-
return /* @__PURE__ */
|
|
698
|
+
return /* @__PURE__ */ jsxs12(
|
|
682
699
|
AriaSelect,
|
|
683
700
|
{
|
|
684
701
|
className: cx("pire-field", className),
|
|
@@ -690,11 +707,11 @@ function Select({
|
|
|
690
707
|
validationBehavior: "aria",
|
|
691
708
|
...rest,
|
|
692
709
|
children: [
|
|
693
|
-
label ? /* @__PURE__ */
|
|
710
|
+
label ? /* @__PURE__ */ jsxs12(Label3, { className: "pire-field-label", children: [
|
|
694
711
|
label,
|
|
695
712
|
rest.isRequired ? /* @__PURE__ */ jsx17("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
696
713
|
] }) : null,
|
|
697
|
-
/* @__PURE__ */
|
|
714
|
+
/* @__PURE__ */ jsxs12(
|
|
698
715
|
AriaButton4,
|
|
699
716
|
{
|
|
700
717
|
className: "pire-control",
|
|
@@ -717,11 +734,11 @@ function Select({
|
|
|
717
734
|
|
|
718
735
|
// src/components/forms/Checkbox.tsx
|
|
719
736
|
import { Checkbox as AriaCheckbox } from "react-aria-components";
|
|
720
|
-
import { Fragment, jsx as jsx18, jsxs as
|
|
737
|
+
import { Fragment, jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
|
|
721
738
|
function Checkbox({ label, hint, children, className, ...rest }) {
|
|
722
|
-
return /* @__PURE__ */ jsx18(AriaCheckbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */
|
|
739
|
+
return /* @__PURE__ */ jsx18(AriaCheckbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment, { children: [
|
|
723
740
|
/* @__PURE__ */ jsx18("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ jsx18(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ jsx18(Icon, { name: "check", size: 12 }) : null }),
|
|
724
|
-
/* @__PURE__ */
|
|
741
|
+
/* @__PURE__ */ jsxs13("span", { children: [
|
|
725
742
|
label ?? children,
|
|
726
743
|
hint ? /* @__PURE__ */ jsx18("span", { className: "pire-choice-hint", children: hint }) : null
|
|
727
744
|
] })
|
|
@@ -736,9 +753,9 @@ import {
|
|
|
736
753
|
Text as Text5,
|
|
737
754
|
FieldError as FieldError4
|
|
738
755
|
} from "react-aria-components";
|
|
739
|
-
import { jsx as jsx19, jsxs as
|
|
756
|
+
import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
|
|
740
757
|
function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
|
|
741
|
-
return /* @__PURE__ */
|
|
758
|
+
return /* @__PURE__ */ jsxs14(AriaRadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
|
|
742
759
|
label ? /* @__PURE__ */ jsx19(Label4, { className: "pire-field-label", children: label }) : null,
|
|
743
760
|
/* @__PURE__ */ jsx19("div", { className: "pire-radiogroup", children }),
|
|
744
761
|
description ? /* @__PURE__ */ jsx19(Text5, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
@@ -746,9 +763,9 @@ function RadioGroup({ label, description, errorMessage, children, className, ...
|
|
|
746
763
|
] });
|
|
747
764
|
}
|
|
748
765
|
function Radio({ label, hint, children, className, ...rest }) {
|
|
749
|
-
return /* @__PURE__ */
|
|
766
|
+
return /* @__PURE__ */ jsxs14(AriaRadio, { className: cx("pire-choice", className), ...rest, children: [
|
|
750
767
|
/* @__PURE__ */ jsx19("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
|
|
751
|
-
/* @__PURE__ */
|
|
768
|
+
/* @__PURE__ */ jsxs14("span", { children: [
|
|
752
769
|
label ?? children,
|
|
753
770
|
hint ? /* @__PURE__ */ jsx19("span", { className: "pire-choice-hint", children: hint }) : null
|
|
754
771
|
] })
|
|
@@ -757,9 +774,9 @@ function Radio({ label, hint, children, className, ...rest }) {
|
|
|
757
774
|
|
|
758
775
|
// src/components/forms/Switch.tsx
|
|
759
776
|
import { Switch as AriaSwitch } from "react-aria-components";
|
|
760
|
-
import { jsx as jsx20, jsxs as
|
|
777
|
+
import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
|
|
761
778
|
function Switch({ label, children, className, ...rest }) {
|
|
762
|
-
return /* @__PURE__ */
|
|
779
|
+
return /* @__PURE__ */ jsxs15(AriaSwitch, { className: cx("pire-choice", className), ...rest, children: [
|
|
763
780
|
/* @__PURE__ */ jsx20("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ jsx20("span", { className: "pire-switch-thumb" }) }),
|
|
764
781
|
/* @__PURE__ */ jsx20("span", { children: label ?? children })
|
|
765
782
|
] });
|
|
@@ -789,6 +806,7 @@ var enMessages = {
|
|
|
789
806
|
filterBarClearAll: "Clear all",
|
|
790
807
|
dataTableSelectAll: "Select all rows",
|
|
791
808
|
dataTableSelectRow: "Select row",
|
|
809
|
+
dataTableLoading: "Loading records",
|
|
792
810
|
dialogClose: "Close",
|
|
793
811
|
sidePanelClose: "Close panel",
|
|
794
812
|
inlineMessageDismiss: "Dismiss message",
|
|
@@ -819,6 +837,7 @@ var esMessages = {
|
|
|
819
837
|
filterBarClearAll: "Limpiar todo",
|
|
820
838
|
dataTableSelectAll: "Seleccionar todas las filas",
|
|
821
839
|
dataTableSelectRow: "Seleccionar fila",
|
|
840
|
+
dataTableLoading: "Cargando registros",
|
|
822
841
|
dialogClose: "Cerrar",
|
|
823
842
|
sidePanelClose: "Cerrar panel",
|
|
824
843
|
inlineMessageDismiss: "Descartar mensaje",
|
|
@@ -863,7 +882,7 @@ function useMessage(key, override) {
|
|
|
863
882
|
}
|
|
864
883
|
|
|
865
884
|
// src/components/forms/ComboBox.tsx
|
|
866
|
-
import { jsx as jsx22, jsxs as
|
|
885
|
+
import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
|
|
867
886
|
var norm2 = (o) => typeof o === "string" ? { value: o, label: o } : o;
|
|
868
887
|
function ComboBox({
|
|
869
888
|
label,
|
|
@@ -882,7 +901,7 @@ function ComboBox({
|
|
|
882
901
|
}) {
|
|
883
902
|
const msg = usePireMessages();
|
|
884
903
|
const items = options.map(norm2);
|
|
885
|
-
return /* @__PURE__ */
|
|
904
|
+
return /* @__PURE__ */ jsxs16(
|
|
886
905
|
AriaComboBox,
|
|
887
906
|
{
|
|
888
907
|
className: cx("pire-field", className),
|
|
@@ -896,11 +915,11 @@ function ComboBox({
|
|
|
896
915
|
validationBehavior: "aria",
|
|
897
916
|
...rest,
|
|
898
917
|
children: [
|
|
899
|
-
label ? /* @__PURE__ */
|
|
918
|
+
label ? /* @__PURE__ */ jsxs16(Label5, { className: "pire-field-label", children: [
|
|
900
919
|
label,
|
|
901
920
|
rest.isRequired ? /* @__PURE__ */ jsx22("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
902
921
|
] }) : null,
|
|
903
|
-
/* @__PURE__ */
|
|
922
|
+
/* @__PURE__ */ jsxs16(
|
|
904
923
|
Group3,
|
|
905
924
|
{
|
|
906
925
|
className: "pire-control",
|
|
@@ -916,7 +935,7 @@ function ComboBox({
|
|
|
916
935
|
),
|
|
917
936
|
description ? /* @__PURE__ */ jsx22(Text6, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
918
937
|
/* @__PURE__ */ jsx22(FieldError5, { className: "pire-field-error", children: errorMessage }),
|
|
919
|
-
/* @__PURE__ */ jsx22(Popover2, { className: "pire-popover", children: /* @__PURE__ */ jsx22(ListBox2, { className: "pire-listbox", children: (item) => /* @__PURE__ */
|
|
938
|
+
/* @__PURE__ */ jsx22(Popover2, { className: "pire-popover", children: /* @__PURE__ */ jsx22(ListBox2, { className: "pire-listbox", children: (item) => /* @__PURE__ */ jsxs16(ListBoxItem2, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
|
|
920
939
|
/* @__PURE__ */ jsx22("span", { style: { flex: 1 }, children: item.label }),
|
|
921
940
|
item.secondary ? /* @__PURE__ */ jsx22("span", { style: { font: "var(--type-code)", color: "var(--text-tertiary)" }, children: item.secondary }) : null
|
|
922
941
|
] }) }) })
|
|
@@ -941,7 +960,7 @@ import {
|
|
|
941
960
|
FieldError as FieldError6,
|
|
942
961
|
VisuallyHidden
|
|
943
962
|
} from "react-aria-components";
|
|
944
|
-
import { jsx as jsx23, jsxs as
|
|
963
|
+
import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
|
|
945
964
|
var norm3 = (o) => typeof o === "string" ? { value: o, label: o } : o;
|
|
946
965
|
function MultiComboBox({
|
|
947
966
|
label,
|
|
@@ -999,7 +1018,7 @@ function MultiComboBox({
|
|
|
999
1018
|
e.stopPropagation();
|
|
1000
1019
|
if (!values.includes(next)) commit([...values, next]);
|
|
1001
1020
|
};
|
|
1002
|
-
return /* @__PURE__ */
|
|
1021
|
+
return /* @__PURE__ */ jsxs17(
|
|
1003
1022
|
AriaComboBox2,
|
|
1004
1023
|
{
|
|
1005
1024
|
className: cx("pire-field", className),
|
|
@@ -1013,11 +1032,11 @@ function MultiComboBox({
|
|
|
1013
1032
|
validationBehavior: "aria",
|
|
1014
1033
|
...rest,
|
|
1015
1034
|
children: [
|
|
1016
|
-
label ? /* @__PURE__ */
|
|
1035
|
+
label ? /* @__PURE__ */ jsxs17(Label6, { className: "pire-field-label", children: [
|
|
1017
1036
|
label,
|
|
1018
1037
|
rest.isRequired ? /* @__PURE__ */ jsx23("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
1019
1038
|
] }) : null,
|
|
1020
|
-
/* @__PURE__ */
|
|
1039
|
+
/* @__PURE__ */ jsxs17(
|
|
1021
1040
|
Group4,
|
|
1022
1041
|
{
|
|
1023
1042
|
className: "pire-control",
|
|
@@ -1028,7 +1047,7 @@ function MultiComboBox({
|
|
|
1028
1047
|
"data-readonly": rest.isReadOnly ? "true" : void 0,
|
|
1029
1048
|
children: [
|
|
1030
1049
|
/* @__PURE__ */ jsx23(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
|
|
1031
|
-
/* @__PURE__ */
|
|
1050
|
+
/* @__PURE__ */ jsxs17("div", { className: "pire-chipfield", children: [
|
|
1032
1051
|
/* @__PURE__ */ jsx23(ButtonContext.Provider, { value: null, children: values.map((v) => (
|
|
1033
1052
|
/* Disabled follows the field, not `isEditable`: a read-only field's chips are
|
|
1034
1053
|
real, current values and should read as such — they simply lose the × . */
|
|
@@ -1051,7 +1070,7 @@ function MultiComboBox({
|
|
|
1051
1070
|
/* @__PURE__ */ jsx23(VisuallyHidden, { children: /* @__PURE__ */ jsx23("span", { "aria-live": "polite", children: announcement }) }),
|
|
1052
1071
|
description ? /* @__PURE__ */ jsx23(Text7, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
1053
1072
|
/* @__PURE__ */ jsx23(FieldError6, { className: "pire-field-error", children: errorMessage }),
|
|
1054
|
-
/* @__PURE__ */ jsx23(Popover3, { className: "pire-popover", children: /* @__PURE__ */ jsx23(ListBox3, { className: "pire-listbox", children: (item) => /* @__PURE__ */
|
|
1073
|
+
/* @__PURE__ */ jsx23(Popover3, { className: "pire-popover", children: /* @__PURE__ */ jsx23(ListBox3, { className: "pire-listbox", children: (item) => /* @__PURE__ */ jsxs17(ListBoxItem3, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
|
|
1055
1074
|
/* @__PURE__ */ jsx23("span", { style: { flex: 1 }, children: item.label }),
|
|
1056
1075
|
item.secondary ? /* @__PURE__ */ jsx23("span", { style: { font: "var(--type-code)", color: "var(--text-tertiary)" }, children: item.secondary }) : null
|
|
1057
1076
|
] }) }) })
|
|
@@ -1070,7 +1089,7 @@ import {
|
|
|
1070
1089
|
Text as Text8,
|
|
1071
1090
|
FieldError as FieldError7
|
|
1072
1091
|
} from "react-aria-components";
|
|
1073
|
-
import { jsx as jsx24, jsxs as
|
|
1092
|
+
import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
|
|
1074
1093
|
function NumberField({
|
|
1075
1094
|
label,
|
|
1076
1095
|
suffix,
|
|
@@ -1084,12 +1103,12 @@ function NumberField({
|
|
|
1084
1103
|
...rest
|
|
1085
1104
|
}) {
|
|
1086
1105
|
const msg = usePireMessages();
|
|
1087
|
-
return /* @__PURE__ */
|
|
1088
|
-
label ? /* @__PURE__ */
|
|
1106
|
+
return /* @__PURE__ */ jsxs18(AriaNumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
|
|
1107
|
+
label ? /* @__PURE__ */ jsxs18(Label7, { className: "pire-field-label", children: [
|
|
1089
1108
|
label,
|
|
1090
1109
|
rest.isRequired ? /* @__PURE__ */ jsx24("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
1091
1110
|
] }) : null,
|
|
1092
|
-
/* @__PURE__ */
|
|
1111
|
+
/* @__PURE__ */ jsxs18(
|
|
1093
1112
|
Group5,
|
|
1094
1113
|
{
|
|
1095
1114
|
className: "pire-control",
|
|
@@ -1100,7 +1119,7 @@ function NumberField({
|
|
|
1100
1119
|
children: [
|
|
1101
1120
|
/* @__PURE__ */ jsx24(AriaInput4, { className: "pire-input", "data-numeric": "true" }),
|
|
1102
1121
|
suffix ? /* @__PURE__ */ jsx24("span", { className: "pire-affix", children: suffix }) : null,
|
|
1103
|
-
hideStepper ? null : /* @__PURE__ */
|
|
1122
|
+
hideStepper ? null : /* @__PURE__ */ jsxs18("span", { className: "pire-stepper", children: [
|
|
1104
1123
|
/* @__PURE__ */ jsx24(AriaButton7, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ jsx24(Icon, { name: "plus", size: 10 }) }),
|
|
1105
1124
|
/* @__PURE__ */ jsx24(AriaButton7, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ jsx24(Icon, { name: "minus", size: 10 }) })
|
|
1106
1125
|
] })
|
|
@@ -1132,7 +1151,7 @@ import {
|
|
|
1132
1151
|
Text as Text9,
|
|
1133
1152
|
FieldError as FieldError8
|
|
1134
1153
|
} from "react-aria-components";
|
|
1135
|
-
import { jsx as jsx25, jsxs as
|
|
1154
|
+
import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
|
|
1136
1155
|
function DatePicker({
|
|
1137
1156
|
label,
|
|
1138
1157
|
description,
|
|
@@ -1144,12 +1163,12 @@ function DatePicker({
|
|
|
1144
1163
|
...rest
|
|
1145
1164
|
}) {
|
|
1146
1165
|
const msg = usePireMessages();
|
|
1147
|
-
return /* @__PURE__ */
|
|
1148
|
-
label ? /* @__PURE__ */
|
|
1166
|
+
return /* @__PURE__ */ jsxs19(AriaDatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
|
|
1167
|
+
label ? /* @__PURE__ */ jsxs19(Label8, { className: "pire-field-label", children: [
|
|
1149
1168
|
label,
|
|
1150
1169
|
rest.isRequired ? /* @__PURE__ */ jsx25("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
|
|
1151
1170
|
] }) : null,
|
|
1152
|
-
/* @__PURE__ */
|
|
1171
|
+
/* @__PURE__ */ jsxs19(
|
|
1153
1172
|
Group6,
|
|
1154
1173
|
{
|
|
1155
1174
|
className: "pire-control",
|
|
@@ -1165,13 +1184,13 @@ function DatePicker({
|
|
|
1165
1184
|
),
|
|
1166
1185
|
description ? /* @__PURE__ */ jsx25(Text9, { slot: "description", className: "pire-field-hint", children: description }) : null,
|
|
1167
1186
|
/* @__PURE__ */ jsx25(FieldError8, { className: "pire-field-error", children: errorMessage }),
|
|
1168
|
-
/* @__PURE__ */ jsx25(Popover4, { className: "pire-popover", children: /* @__PURE__ */ jsx25(AriaDialog, { children: /* @__PURE__ */
|
|
1169
|
-
/* @__PURE__ */
|
|
1187
|
+
/* @__PURE__ */ jsx25(Popover4, { className: "pire-popover", children: /* @__PURE__ */ jsx25(AriaDialog, { children: /* @__PURE__ */ jsxs19(Calendar, { className: "pire-calendar", children: [
|
|
1188
|
+
/* @__PURE__ */ jsxs19("header", { className: "pire-calendar-head", children: [
|
|
1170
1189
|
/* @__PURE__ */ jsx25(AriaButton8, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ jsx25(Icon, { name: "chevron-left", size: 16 }) }),
|
|
1171
1190
|
/* @__PURE__ */ jsx25(Heading2, { className: "pire-calendar-title" }),
|
|
1172
1191
|
/* @__PURE__ */ jsx25(AriaButton8, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ jsx25(Icon, { name: "chevron-right", size: 16 }) })
|
|
1173
1192
|
] }),
|
|
1174
|
-
/* @__PURE__ */
|
|
1193
|
+
/* @__PURE__ */ jsxs19(CalendarGrid, { className: "pire-calendar-grid", children: [
|
|
1175
1194
|
/* @__PURE__ */ jsx25(CalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx25(CalendarHeaderCell, { children: day }) }),
|
|
1176
1195
|
/* @__PURE__ */ jsx25(CalendarGridBody, { children: (date) => /* @__PURE__ */ jsx25(CalendarCell, { date, className: "pire-calendar-cell" }) })
|
|
1177
1196
|
] })
|
|
@@ -1187,7 +1206,7 @@ import * as React8 from "react";
|
|
|
1187
1206
|
|
|
1188
1207
|
// src/components/feedback/Dialog.tsx
|
|
1189
1208
|
import { ModalOverlay, Modal, Dialog as AriaDialog2, Heading as Heading3 } from "react-aria-components";
|
|
1190
|
-
import { jsx as jsx26, jsxs as
|
|
1209
|
+
import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
|
|
1191
1210
|
function Dialog({
|
|
1192
1211
|
isOpen,
|
|
1193
1212
|
onOpenChange,
|
|
@@ -1216,9 +1235,9 @@ function Dialog({
|
|
|
1216
1235
|
onOpenChange: (o) => {
|
|
1217
1236
|
if (!o) close();
|
|
1218
1237
|
},
|
|
1219
|
-
children: /* @__PURE__ */ jsx26(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */
|
|
1220
|
-
title ? /* @__PURE__ */
|
|
1221
|
-
/* @__PURE__ */
|
|
1238
|
+
children: /* @__PURE__ */ jsx26(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-dialog", children: [
|
|
1239
|
+
title ? /* @__PURE__ */ jsxs20("header", { className: "pire-dialog-head", children: [
|
|
1240
|
+
/* @__PURE__ */ jsxs20("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
1222
1241
|
/* @__PURE__ */ jsx26(Heading3, { slot: "title", className: "pire-dialog-title", children: title }),
|
|
1223
1242
|
subtitle ? /* @__PURE__ */ jsx26("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
1224
1243
|
] }),
|
|
@@ -1240,7 +1259,54 @@ import {
|
|
|
1240
1259
|
Row,
|
|
1241
1260
|
Cell
|
|
1242
1261
|
} from "react-aria-components";
|
|
1243
|
-
|
|
1262
|
+
|
|
1263
|
+
// src/components/feedback/Skeleton.tsx
|
|
1264
|
+
import { jsx as jsx27 } from "react/jsx-runtime";
|
|
1265
|
+
function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
|
|
1266
|
+
return /* @__PURE__ */ jsx27(
|
|
1267
|
+
"div",
|
|
1268
|
+
{
|
|
1269
|
+
className: cx("pire-skeleton", className),
|
|
1270
|
+
"data-shape": shape,
|
|
1271
|
+
"aria-hidden": "true",
|
|
1272
|
+
style: { width, height, ...style },
|
|
1273
|
+
...rest
|
|
1274
|
+
}
|
|
1275
|
+
);
|
|
1276
|
+
}
|
|
1277
|
+
var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
|
|
1278
|
+
function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
|
|
1279
|
+
const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
|
|
1280
|
+
return /* @__PURE__ */ jsx27(
|
|
1281
|
+
"div",
|
|
1282
|
+
{
|
|
1283
|
+
className: cx("pire-skeleton-row", className),
|
|
1284
|
+
"data-density": density,
|
|
1285
|
+
"aria-hidden": "true",
|
|
1286
|
+
style,
|
|
1287
|
+
...rest,
|
|
1288
|
+
children: cells.map((c, i) => {
|
|
1289
|
+
const align = c.numeric ? "right" : c.align ?? "left";
|
|
1290
|
+
return (
|
|
1291
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
|
|
1292
|
+
/* @__PURE__ */ jsx27(
|
|
1293
|
+
"div",
|
|
1294
|
+
{
|
|
1295
|
+
className: "pire-skeleton-cell",
|
|
1296
|
+
"data-align": align,
|
|
1297
|
+
style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
|
|
1298
|
+
children: /* @__PURE__ */ jsx27(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
|
|
1299
|
+
},
|
|
1300
|
+
i
|
|
1301
|
+
)
|
|
1302
|
+
);
|
|
1303
|
+
})
|
|
1304
|
+
}
|
|
1305
|
+
);
|
|
1306
|
+
}
|
|
1307
|
+
|
|
1308
|
+
// src/components/data/DataTable.tsx
|
|
1309
|
+
import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
|
|
1244
1310
|
function DataTable({
|
|
1245
1311
|
columns,
|
|
1246
1312
|
rows,
|
|
@@ -1253,6 +1319,9 @@ function DataTable({
|
|
|
1253
1319
|
onRowAction,
|
|
1254
1320
|
stickyHeader = true,
|
|
1255
1321
|
emptyLabel = "No records match the current filters.",
|
|
1322
|
+
isLoading,
|
|
1323
|
+
loadingRowCount,
|
|
1324
|
+
loadingLabel,
|
|
1256
1325
|
className,
|
|
1257
1326
|
style,
|
|
1258
1327
|
...rest
|
|
@@ -1263,70 +1332,91 @@ function DataTable({
|
|
|
1263
1332
|
if (keys === "all") return onSelectionChange?.(rows.map((r) => r.id));
|
|
1264
1333
|
onSelectionChange?.([...keys]);
|
|
1265
1334
|
};
|
|
1266
|
-
|
|
1267
|
-
|
|
1335
|
+
const skeletonRows = loadingRowCount ?? (rows.length || 5);
|
|
1336
|
+
const skeletonColumns = [
|
|
1337
|
+
...selectable ? [{ width: 44 }] : [],
|
|
1338
|
+
...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
|
|
1339
|
+
];
|
|
1340
|
+
const body = isLoading ? [] : rows;
|
|
1341
|
+
return /* @__PURE__ */ jsx28(
|
|
1342
|
+
"div",
|
|
1268
1343
|
{
|
|
1269
|
-
className: "pire-table",
|
|
1270
|
-
|
|
1271
|
-
"data-
|
|
1272
|
-
"aria-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
|
|
1322
|
-
|
|
1323
|
-
|
|
1344
|
+
className: cx("pire-table-wrap", className),
|
|
1345
|
+
style,
|
|
1346
|
+
"data-loading": isLoading ? "true" : void 0,
|
|
1347
|
+
"aria-busy": isLoading ? "true" : void 0,
|
|
1348
|
+
children: /* @__PURE__ */ jsxs21(
|
|
1349
|
+
Table,
|
|
1350
|
+
{
|
|
1351
|
+
className: "pire-table",
|
|
1352
|
+
"data-density": density,
|
|
1353
|
+
"data-sticky": String(stickyHeader),
|
|
1354
|
+
"aria-label": rest["aria-label"],
|
|
1355
|
+
selectionMode: selectable ? "multiple" : "none",
|
|
1356
|
+
selectedKeys: selected ? new Set(selected) : void 0,
|
|
1357
|
+
onSelectionChange: handleSelection,
|
|
1358
|
+
sortDescriptor,
|
|
1359
|
+
onSortChange: (d) => onSortChange?.({ key: String(d.column), dir: d.direction === "ascending" ? "asc" : "desc" }),
|
|
1360
|
+
onRowAction: onRowAction ? (key) => {
|
|
1361
|
+
const row = rows.find((r) => String(r.id) === String(key));
|
|
1362
|
+
if (row) onRowAction(row);
|
|
1363
|
+
} : void 0,
|
|
1364
|
+
children: [
|
|
1365
|
+
/* @__PURE__ */ jsxs21(TableHeader, { className: "pire-thead-row", children: [
|
|
1366
|
+
selectable ? /* @__PURE__ */ jsx28(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx28(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
|
|
1367
|
+
columns.map((c, i) => /* @__PURE__ */ jsx28(
|
|
1368
|
+
Column,
|
|
1369
|
+
{
|
|
1370
|
+
id: c.key,
|
|
1371
|
+
className: "pire-th",
|
|
1372
|
+
isRowHeader: i === 0 && !selectable,
|
|
1373
|
+
allowsSorting: c.sortable,
|
|
1374
|
+
width: c.width,
|
|
1375
|
+
"data-align": c.numeric || c.align === "right" ? "right" : c.align,
|
|
1376
|
+
"data-allows-sorting": c.sortable ? "true" : void 0,
|
|
1377
|
+
children: /* @__PURE__ */ jsxs21("span", { className: "pire-th-inner", children: [
|
|
1378
|
+
c.label,
|
|
1379
|
+
c.sortable ? /* @__PURE__ */ jsx28(
|
|
1380
|
+
Icon,
|
|
1381
|
+
{
|
|
1382
|
+
size: 12,
|
|
1383
|
+
name: sort?.key === c.key ? sort.dir === "asc" ? "arrow-up" : "arrow-down" : "chevrons-up-down",
|
|
1384
|
+
style: { color: sort?.key === c.key ? "var(--accent-subtle-fg)" : "var(--text-tertiary)" }
|
|
1385
|
+
}
|
|
1386
|
+
) : null
|
|
1387
|
+
] })
|
|
1388
|
+
},
|
|
1389
|
+
c.key
|
|
1390
|
+
))
|
|
1391
|
+
] }),
|
|
1392
|
+
/* @__PURE__ */ jsx28(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs21("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
|
|
1393
|
+
/* @__PURE__ */ jsx28("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
|
|
1394
|
+
Array.from({ length: skeletonRows }, (_, i) => (
|
|
1395
|
+
// biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
|
|
1396
|
+
/* @__PURE__ */ jsx28(SkeletonTableRow, { columns: skeletonColumns, density }, i)
|
|
1397
|
+
))
|
|
1398
|
+
] }) : /* @__PURE__ */ jsx28("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ jsxs21(Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
|
|
1399
|
+
selectable ? /* @__PURE__ */ jsx28(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx28(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
|
|
1400
|
+
columns.map((c) => /* @__PURE__ */ jsx28(
|
|
1401
|
+
Cell,
|
|
1402
|
+
{
|
|
1403
|
+
className: "pire-td",
|
|
1404
|
+
"data-numeric": c.numeric ? "true" : void 0,
|
|
1405
|
+
style: { textAlign: c.align && !c.numeric ? c.align : void 0 },
|
|
1406
|
+
children: c.render ? c.render(row) : row[c.key]
|
|
1407
|
+
},
|
|
1408
|
+
c.key
|
|
1409
|
+
))
|
|
1410
|
+
] }, row.id)) })
|
|
1411
|
+
]
|
|
1412
|
+
}
|
|
1413
|
+
)
|
|
1324
1414
|
}
|
|
1325
|
-
)
|
|
1415
|
+
);
|
|
1326
1416
|
}
|
|
1327
1417
|
|
|
1328
1418
|
// src/components/patterns/ValueHelpDialog.tsx
|
|
1329
|
-
import { jsx as
|
|
1419
|
+
import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
|
|
1330
1420
|
function ValueHelpDialog({
|
|
1331
1421
|
isOpen,
|
|
1332
1422
|
title = "Select a record",
|
|
@@ -1347,16 +1437,16 @@ function ValueHelpDialog({
|
|
|
1347
1437
|
if (!q) return rows;
|
|
1348
1438
|
return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
|
|
1349
1439
|
}, [rows, query]);
|
|
1350
|
-
return /* @__PURE__ */
|
|
1440
|
+
return /* @__PURE__ */ jsx29(
|
|
1351
1441
|
Dialog,
|
|
1352
1442
|
{
|
|
1353
1443
|
isOpen,
|
|
1354
1444
|
size: "lg",
|
|
1355
1445
|
title,
|
|
1356
1446
|
onClose,
|
|
1357
|
-
footer: /* @__PURE__ */
|
|
1358
|
-
children: /* @__PURE__ */
|
|
1359
|
-
/* @__PURE__ */
|
|
1447
|
+
footer: /* @__PURE__ */ jsx29(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
|
|
1448
|
+
children: /* @__PURE__ */ jsxs22("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
|
|
1449
|
+
/* @__PURE__ */ jsx29(
|
|
1360
1450
|
Input,
|
|
1361
1451
|
{
|
|
1362
1452
|
"aria-label": msg.valueHelpDialogSearch,
|
|
@@ -1368,7 +1458,7 @@ function ValueHelpDialog({
|
|
|
1368
1458
|
autoFocus: true
|
|
1369
1459
|
}
|
|
1370
1460
|
),
|
|
1371
|
-
/* @__PURE__ */
|
|
1461
|
+
/* @__PURE__ */ jsx29(
|
|
1372
1462
|
DataTable,
|
|
1373
1463
|
{
|
|
1374
1464
|
"aria-label": typeof title === "string" ? title : "Records",
|
|
@@ -1388,7 +1478,7 @@ function ValueHelpDialog({
|
|
|
1388
1478
|
}
|
|
1389
1479
|
|
|
1390
1480
|
// src/components/forms/ValueHelpField.tsx
|
|
1391
|
-
import { jsx as
|
|
1481
|
+
import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
|
|
1392
1482
|
var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
|
|
1393
1483
|
function ValueHelpField({
|
|
1394
1484
|
label,
|
|
@@ -1410,9 +1500,9 @@ function ValueHelpField({
|
|
|
1410
1500
|
}) {
|
|
1411
1501
|
const msg = usePireMessages();
|
|
1412
1502
|
const [open, setOpen] = React9.useState(false);
|
|
1413
|
-
return /* @__PURE__ */
|
|
1414
|
-
/* @__PURE__ */
|
|
1415
|
-
/* @__PURE__ */
|
|
1503
|
+
return /* @__PURE__ */ jsxs23("div", { className: cx(className), style, children: [
|
|
1504
|
+
/* @__PURE__ */ jsxs23("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
|
|
1505
|
+
/* @__PURE__ */ jsx30(
|
|
1416
1506
|
Input,
|
|
1417
1507
|
{
|
|
1418
1508
|
label,
|
|
@@ -1426,7 +1516,7 @@ function ValueHelpField({
|
|
|
1426
1516
|
errorMessage
|
|
1427
1517
|
}
|
|
1428
1518
|
),
|
|
1429
|
-
allowsClear && value ? /* @__PURE__ */
|
|
1519
|
+
allowsClear && value ? /* @__PURE__ */ jsx30(
|
|
1430
1520
|
IconButton,
|
|
1431
1521
|
{
|
|
1432
1522
|
icon: "x",
|
|
@@ -1436,7 +1526,7 @@ function ValueHelpField({
|
|
|
1436
1526
|
onPress: () => onChange?.(null)
|
|
1437
1527
|
}
|
|
1438
1528
|
) : null,
|
|
1439
|
-
/* @__PURE__ */
|
|
1529
|
+
/* @__PURE__ */ jsx30(
|
|
1440
1530
|
IconButton,
|
|
1441
1531
|
{
|
|
1442
1532
|
icon: "search",
|
|
@@ -1447,7 +1537,7 @@ function ValueHelpField({
|
|
|
1447
1537
|
}
|
|
1448
1538
|
)
|
|
1449
1539
|
] }),
|
|
1450
|
-
/* @__PURE__ */
|
|
1540
|
+
/* @__PURE__ */ jsx30(
|
|
1451
1541
|
ValueHelpDialog,
|
|
1452
1542
|
{
|
|
1453
1543
|
isOpen: open,
|
|
@@ -1462,7 +1552,7 @@ function ValueHelpField({
|
|
|
1462
1552
|
}
|
|
1463
1553
|
|
|
1464
1554
|
// src/components/navigation/ShellBar.tsx
|
|
1465
|
-
import { jsx as
|
|
1555
|
+
import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
|
|
1466
1556
|
var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
|
|
1467
1557
|
function ShellBar({
|
|
1468
1558
|
product,
|
|
@@ -1477,22 +1567,22 @@ function ShellBar({
|
|
|
1477
1567
|
className,
|
|
1478
1568
|
...rest
|
|
1479
1569
|
}) {
|
|
1480
|
-
return /* @__PURE__ */
|
|
1481
|
-
onMenu ? /* @__PURE__ */
|
|
1482
|
-
monogram ? /* @__PURE__ */
|
|
1483
|
-
product ? /* @__PURE__ */
|
|
1484
|
-
title ? /* @__PURE__ */
|
|
1485
|
-
/* @__PURE__ */
|
|
1486
|
-
onSearch ? /* @__PURE__ */
|
|
1570
|
+
return /* @__PURE__ */ jsxs24("header", { className: cx("pire-shellbar", className), ...rest, children: [
|
|
1571
|
+
onMenu ? /* @__PURE__ */ jsx31(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
|
|
1572
|
+
monogram ? /* @__PURE__ */ jsx31("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
|
|
1573
|
+
product ? /* @__PURE__ */ jsx31("span", { className: "pire-shellbar-product", children: product }) : null,
|
|
1574
|
+
title ? /* @__PURE__ */ jsx31("span", { className: "pire-shellbar-title", children: title }) : null,
|
|
1575
|
+
/* @__PURE__ */ jsx31("span", { className: "pire-shellbar-spacer" }),
|
|
1576
|
+
onSearch ? /* @__PURE__ */ jsx31(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
|
|
1487
1577
|
actions,
|
|
1488
|
-
user ? /* @__PURE__ */
|
|
1578
|
+
user ? /* @__PURE__ */ jsx31("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
|
|
1489
1579
|
] });
|
|
1490
1580
|
}
|
|
1491
1581
|
|
|
1492
1582
|
// src/components/navigation/SideNav.tsx
|
|
1493
1583
|
import * as React10 from "react";
|
|
1494
1584
|
import { Button as AriaButton9, Disclosure, DisclosureGroup, DisclosurePanel } from "react-aria-components";
|
|
1495
|
-
import { jsx as
|
|
1585
|
+
import { jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
|
|
1496
1586
|
function findActiveParent(groups, value) {
|
|
1497
1587
|
if (value == null) return void 0;
|
|
1498
1588
|
for (const group of groups) {
|
|
@@ -1540,7 +1630,7 @@ function SideNav({
|
|
|
1540
1630
|
};
|
|
1541
1631
|
const renderRow = (item, onPress, isGroup) => {
|
|
1542
1632
|
const selected = !isGroup && item.id === value;
|
|
1543
|
-
const button = /* @__PURE__ */
|
|
1633
|
+
const button = /* @__PURE__ */ jsxs25(
|
|
1544
1634
|
AriaButton9,
|
|
1545
1635
|
{
|
|
1546
1636
|
className: "pire-sidenav-item",
|
|
@@ -1550,17 +1640,17 @@ function SideNav({
|
|
|
1550
1640
|
"aria-label": collapsed ? item.label : void 0,
|
|
1551
1641
|
onPress,
|
|
1552
1642
|
children: [
|
|
1553
|
-
item.icon ? /* @__PURE__ */
|
|
1554
|
-
collapsed ? null : /* @__PURE__ */
|
|
1555
|
-
item.count != null && !collapsed ? /* @__PURE__ */
|
|
1643
|
+
item.icon ? /* @__PURE__ */ jsx32(Icon, { name: item.icon, size: 16 }) : null,
|
|
1644
|
+
collapsed ? null : /* @__PURE__ */ jsx32("span", { children: item.label }),
|
|
1645
|
+
item.count != null && !collapsed ? /* @__PURE__ */ jsx32("span", { className: "pire-sidenav-count", children: item.count }) : null
|
|
1556
1646
|
]
|
|
1557
1647
|
},
|
|
1558
1648
|
item.id
|
|
1559
1649
|
);
|
|
1560
|
-
return collapsed ? /* @__PURE__ */
|
|
1650
|
+
return collapsed ? /* @__PURE__ */ jsx32(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
|
|
1561
1651
|
};
|
|
1562
|
-
const renderSection = (item) => /* @__PURE__ */
|
|
1563
|
-
/* @__PURE__ */
|
|
1652
|
+
const renderSection = (item) => /* @__PURE__ */ jsxs25(Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
|
|
1653
|
+
/* @__PURE__ */ jsxs25(
|
|
1564
1654
|
AriaButton9,
|
|
1565
1655
|
{
|
|
1566
1656
|
slot: "trigger",
|
|
@@ -1568,16 +1658,16 @@ function SideNav({
|
|
|
1568
1658
|
"data-kind": "group",
|
|
1569
1659
|
"data-active-child": item.id === activeParent ? "true" : void 0,
|
|
1570
1660
|
children: [
|
|
1571
|
-
item.icon ? /* @__PURE__ */
|
|
1572
|
-
/* @__PURE__ */
|
|
1573
|
-
item.count != null ? /* @__PURE__ */
|
|
1574
|
-
/* @__PURE__ */
|
|
1661
|
+
item.icon ? /* @__PURE__ */ jsx32(Icon, { name: item.icon, size: 16 }) : null,
|
|
1662
|
+
/* @__PURE__ */ jsx32("span", { children: item.label }),
|
|
1663
|
+
item.count != null ? /* @__PURE__ */ jsx32("span", { className: "pire-sidenav-count", children: item.count }) : null,
|
|
1664
|
+
/* @__PURE__ */ jsx32(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
|
|
1575
1665
|
]
|
|
1576
1666
|
}
|
|
1577
1667
|
),
|
|
1578
|
-
/* @__PURE__ */
|
|
1668
|
+
/* @__PURE__ */ jsx32(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
|
|
1579
1669
|
const selected = child.id === value;
|
|
1580
|
-
return /* @__PURE__ */
|
|
1670
|
+
return /* @__PURE__ */ jsxs25(
|
|
1581
1671
|
AriaButton9,
|
|
1582
1672
|
{
|
|
1583
1673
|
className: "pire-sidenav-item pire-sidenav-subitem",
|
|
@@ -1585,15 +1675,15 @@ function SideNav({
|
|
|
1585
1675
|
"aria-current": selected ? "page" : void 0,
|
|
1586
1676
|
onPress: () => onChange?.(child.id),
|
|
1587
1677
|
children: [
|
|
1588
|
-
/* @__PURE__ */
|
|
1589
|
-
child.count != null ? /* @__PURE__ */
|
|
1678
|
+
/* @__PURE__ */ jsx32("span", { children: child.label }),
|
|
1679
|
+
child.count != null ? /* @__PURE__ */ jsx32("span", { className: "pire-sidenav-count", children: child.count }) : null
|
|
1590
1680
|
]
|
|
1591
1681
|
},
|
|
1592
1682
|
child.id
|
|
1593
1683
|
);
|
|
1594
1684
|
}) })
|
|
1595
1685
|
] }, item.id);
|
|
1596
|
-
return /* @__PURE__ */
|
|
1686
|
+
return /* @__PURE__ */ jsxs25(
|
|
1597
1687
|
"nav",
|
|
1598
1688
|
{
|
|
1599
1689
|
className: cx("pire-sidenav", className),
|
|
@@ -1608,9 +1698,9 @@ function SideNav({
|
|
|
1608
1698
|
if (isGroup && !collapsed) return renderSection(item);
|
|
1609
1699
|
return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
|
|
1610
1700
|
});
|
|
1611
|
-
return /* @__PURE__ */
|
|
1612
|
-
group.label && !collapsed ? /* @__PURE__ */
|
|
1613
|
-
hasSections ? /* @__PURE__ */
|
|
1701
|
+
return /* @__PURE__ */ jsxs25("div", { className: "pire-sidenav-group", children: [
|
|
1702
|
+
group.label && !collapsed ? /* @__PURE__ */ jsx32("div", { className: "pire-sidenav-label", children: group.label }) : null,
|
|
1703
|
+
hasSections ? /* @__PURE__ */ jsx32(
|
|
1614
1704
|
DisclosureGroup,
|
|
1615
1705
|
{
|
|
1616
1706
|
className: "pire-sidenav-tree",
|
|
@@ -1622,7 +1712,7 @@ function SideNav({
|
|
|
1622
1712
|
) : rows
|
|
1623
1713
|
] }, group.label ?? gi);
|
|
1624
1714
|
}),
|
|
1625
|
-
footer ? /* @__PURE__ */
|
|
1715
|
+
footer ? /* @__PURE__ */ jsx32("div", { className: "pire-sidenav-footer", children: footer }) : null
|
|
1626
1716
|
]
|
|
1627
1717
|
}
|
|
1628
1718
|
);
|
|
@@ -1630,9 +1720,9 @@ function SideNav({
|
|
|
1630
1720
|
|
|
1631
1721
|
// src/components/navigation/Tabs.tsx
|
|
1632
1722
|
import { Tabs as AriaTabs, TabList, Tab as AriaTab, TabPanel } from "react-aria-components";
|
|
1633
|
-
import { jsx as
|
|
1723
|
+
import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
|
|
1634
1724
|
function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
|
|
1635
|
-
return /* @__PURE__ */
|
|
1725
|
+
return /* @__PURE__ */ jsxs26(
|
|
1636
1726
|
AriaTabs,
|
|
1637
1727
|
{
|
|
1638
1728
|
className,
|
|
@@ -1641,12 +1731,12 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
|
|
|
1641
1731
|
defaultSelectedKey: defaultValue,
|
|
1642
1732
|
onSelectionChange: (k) => onChange?.(String(k)),
|
|
1643
1733
|
children: [
|
|
1644
|
-
/* @__PURE__ */
|
|
1645
|
-
item.icon ? /* @__PURE__ */
|
|
1734
|
+
/* @__PURE__ */ jsx33(TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ jsxs26(AriaTab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
|
|
1735
|
+
item.icon ? /* @__PURE__ */ jsx33(Icon, { name: item.icon, size: 16 }) : null,
|
|
1646
1736
|
item.label,
|
|
1647
|
-
item.count != null ? /* @__PURE__ */
|
|
1737
|
+
item.count != null ? /* @__PURE__ */ jsx33("span", { className: "pire-tab-count", children: item.count }) : null
|
|
1648
1738
|
] }) }),
|
|
1649
|
-
items.map((item) => /* @__PURE__ */
|
|
1739
|
+
items.map((item) => /* @__PURE__ */ jsx33(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
|
|
1650
1740
|
]
|
|
1651
1741
|
}
|
|
1652
1742
|
);
|
|
@@ -1654,9 +1744,9 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
|
|
|
1654
1744
|
|
|
1655
1745
|
// src/components/navigation/Breadcrumb.tsx
|
|
1656
1746
|
import { Breadcrumbs as AriaBreadcrumbs, Breadcrumb as AriaBreadcrumb, Link as Link2 } from "react-aria-components";
|
|
1657
|
-
import { jsx as
|
|
1747
|
+
import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
|
|
1658
1748
|
function Breadcrumb({ items, onNavigate, className, style }) {
|
|
1659
|
-
return /* @__PURE__ */
|
|
1749
|
+
return /* @__PURE__ */ jsx34(
|
|
1660
1750
|
AriaBreadcrumbs,
|
|
1661
1751
|
{
|
|
1662
1752
|
className: cx("pire-breadcrumbs", className),
|
|
@@ -1665,9 +1755,9 @@ function Breadcrumb({ items, onNavigate, className, style }) {
|
|
|
1665
1755
|
onAction: (key) => onNavigate?.(String(key)),
|
|
1666
1756
|
children: (item) => {
|
|
1667
1757
|
const last = items[items.length - 1] === item;
|
|
1668
|
-
return /* @__PURE__ */
|
|
1669
|
-
last ? item.label : /* @__PURE__ */
|
|
1670
|
-
last ? null : /* @__PURE__ */
|
|
1758
|
+
return /* @__PURE__ */ jsxs27(AriaBreadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
|
|
1759
|
+
last ? item.label : /* @__PURE__ */ jsx34(Link2, { href: item.href, children: item.label }),
|
|
1760
|
+
last ? null : /* @__PURE__ */ jsx34(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
|
|
1671
1761
|
] });
|
|
1672
1762
|
}
|
|
1673
1763
|
}
|
|
@@ -1675,7 +1765,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
|
|
|
1675
1765
|
}
|
|
1676
1766
|
|
|
1677
1767
|
// src/components/navigation/Pagination.tsx
|
|
1678
|
-
import { jsx as
|
|
1768
|
+
import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
|
|
1679
1769
|
function Pagination({
|
|
1680
1770
|
page = 1,
|
|
1681
1771
|
pageSize = 25,
|
|
@@ -1690,9 +1780,9 @@ function Pagination({
|
|
|
1690
1780
|
const pages = Math.max(1, Math.ceil(total / pageSize));
|
|
1691
1781
|
const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
|
|
1692
1782
|
const to = Math.min(total, page * pageSize);
|
|
1693
|
-
return /* @__PURE__ */
|
|
1694
|
-
/* @__PURE__ */
|
|
1695
|
-
/* @__PURE__ */
|
|
1783
|
+
return /* @__PURE__ */ jsxs28("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
|
|
1784
|
+
/* @__PURE__ */ jsx35("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
|
|
1785
|
+
/* @__PURE__ */ jsx35(
|
|
1696
1786
|
IconButton,
|
|
1697
1787
|
{
|
|
1698
1788
|
icon: "chevron-left",
|
|
@@ -1703,8 +1793,8 @@ function Pagination({
|
|
|
1703
1793
|
onPress: () => onPageChange?.(page - 1)
|
|
1704
1794
|
}
|
|
1705
1795
|
),
|
|
1706
|
-
/* @__PURE__ */
|
|
1707
|
-
/* @__PURE__ */
|
|
1796
|
+
/* @__PURE__ */ jsx35("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
|
|
1797
|
+
/* @__PURE__ */ jsx35(
|
|
1708
1798
|
IconButton,
|
|
1709
1799
|
{
|
|
1710
1800
|
icon: "chevron-right",
|
|
@@ -1715,7 +1805,7 @@ function Pagination({
|
|
|
1715
1805
|
onPress: () => onPageChange?.(page + 1)
|
|
1716
1806
|
}
|
|
1717
1807
|
),
|
|
1718
|
-
onPageSizeChange ? /* @__PURE__ */
|
|
1808
|
+
onPageSizeChange ? /* @__PURE__ */ jsx35(
|
|
1719
1809
|
Select,
|
|
1720
1810
|
{
|
|
1721
1811
|
"aria-label": msg.paginationRowsPerPage,
|
|
@@ -1738,11 +1828,11 @@ import {
|
|
|
1738
1828
|
Separator as AriaSeparator2,
|
|
1739
1829
|
Header
|
|
1740
1830
|
} from "react-aria-components";
|
|
1741
|
-
import { jsx as
|
|
1831
|
+
import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
|
|
1742
1832
|
function Menu({ minWidth, className, style, ...rest }) {
|
|
1743
1833
|
const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
|
|
1744
1834
|
const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
|
|
1745
|
-
return /* @__PURE__ */
|
|
1835
|
+
return /* @__PURE__ */ jsx36(
|
|
1746
1836
|
AriaMenu,
|
|
1747
1837
|
{
|
|
1748
1838
|
className: cx("pire-menu", className),
|
|
@@ -1760,35 +1850,35 @@ function MenuItem({
|
|
|
1760
1850
|
className,
|
|
1761
1851
|
...rest
|
|
1762
1852
|
}) {
|
|
1763
|
-
return /* @__PURE__ */
|
|
1853
|
+
return /* @__PURE__ */ jsxs29(
|
|
1764
1854
|
AriaMenuItem,
|
|
1765
1855
|
{
|
|
1766
1856
|
className: cx("pire-menu-item", className),
|
|
1767
1857
|
"data-tone": tone === "danger" ? "danger" : void 0,
|
|
1768
1858
|
...rest,
|
|
1769
1859
|
children: [
|
|
1770
|
-
icon ? /* @__PURE__ */
|
|
1771
|
-
/* @__PURE__ */
|
|
1772
|
-
/* @__PURE__ */
|
|
1773
|
-
description ? /* @__PURE__ */
|
|
1860
|
+
icon ? /* @__PURE__ */ jsx36(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
|
|
1861
|
+
/* @__PURE__ */ jsxs29("span", { className: "pire-menu-item-body", children: [
|
|
1862
|
+
/* @__PURE__ */ jsx36("span", { className: "pire-menu-item-label", children }),
|
|
1863
|
+
description ? /* @__PURE__ */ jsx36("span", { className: "pire-menu-item-desc", children: description }) : null
|
|
1774
1864
|
] }),
|
|
1775
|
-
shortcut ? /* @__PURE__ */
|
|
1865
|
+
shortcut ? /* @__PURE__ */ jsx36("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
|
|
1776
1866
|
]
|
|
1777
1867
|
}
|
|
1778
1868
|
);
|
|
1779
1869
|
}
|
|
1780
1870
|
function MenuSection({ title, children, className, ...rest }) {
|
|
1781
|
-
return /* @__PURE__ */
|
|
1782
|
-
title ? /* @__PURE__ */
|
|
1871
|
+
return /* @__PURE__ */ jsxs29(AriaMenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
|
|
1872
|
+
title ? /* @__PURE__ */ jsx36(Header, { className: "pire-menu-section-title", children: title }) : null,
|
|
1783
1873
|
children
|
|
1784
1874
|
] });
|
|
1785
1875
|
}
|
|
1786
1876
|
function MenuSeparator({ className }) {
|
|
1787
|
-
return /* @__PURE__ */
|
|
1877
|
+
return /* @__PURE__ */ jsx36(AriaSeparator2, { className: cx("pire-menu-separator", className) });
|
|
1788
1878
|
}
|
|
1789
1879
|
|
|
1790
1880
|
// src/components/feedback/InlineMessage.tsx
|
|
1791
|
-
import { jsx as
|
|
1881
|
+
import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
|
|
1792
1882
|
var KIND_ICON = {
|
|
1793
1883
|
info: "info",
|
|
1794
1884
|
success: "check-circle-2",
|
|
@@ -1798,7 +1888,7 @@ var KIND_ICON = {
|
|
|
1798
1888
|
function InlineMessage({ kind = "info", title, action, onClose, children, className, ...rest }) {
|
|
1799
1889
|
const msg = usePireMessages();
|
|
1800
1890
|
const assertive = kind === "error" || kind === "warning";
|
|
1801
|
-
return /* @__PURE__ */
|
|
1891
|
+
return /* @__PURE__ */ jsxs30(
|
|
1802
1892
|
"div",
|
|
1803
1893
|
{
|
|
1804
1894
|
className: cx("pire-msg", className),
|
|
@@ -1807,13 +1897,13 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
|
|
|
1807
1897
|
"aria-live": assertive ? "assertive" : "polite",
|
|
1808
1898
|
...rest,
|
|
1809
1899
|
children: [
|
|
1810
|
-
/* @__PURE__ */
|
|
1811
|
-
/* @__PURE__ */
|
|
1812
|
-
title ? /* @__PURE__ */
|
|
1813
|
-
children ? /* @__PURE__ */
|
|
1900
|
+
/* @__PURE__ */ jsx37(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
|
|
1901
|
+
/* @__PURE__ */ jsxs30("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
|
|
1902
|
+
title ? /* @__PURE__ */ jsx37("span", { className: "pire-msg-title", children: title }) : null,
|
|
1903
|
+
children ? /* @__PURE__ */ jsx37("span", { className: "pire-msg-body", children }) : null,
|
|
1814
1904
|
action
|
|
1815
1905
|
] }),
|
|
1816
|
-
onClose ? /* @__PURE__ */
|
|
1906
|
+
onClose ? /* @__PURE__ */ jsx37(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
|
|
1817
1907
|
]
|
|
1818
1908
|
}
|
|
1819
1909
|
);
|
|
@@ -1821,7 +1911,7 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
|
|
|
1821
1911
|
|
|
1822
1912
|
// src/components/feedback/ProgressBar.tsx
|
|
1823
1913
|
import { ProgressBar as AriaProgressBar, Label as Label9 } from "react-aria-components";
|
|
1824
|
-
import { Fragment as Fragment2, jsx as
|
|
1914
|
+
import { Fragment as Fragment2, jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
|
|
1825
1915
|
function ProgressBar({
|
|
1826
1916
|
value = 0,
|
|
1827
1917
|
minValue = 0,
|
|
@@ -1834,7 +1924,7 @@ function ProgressBar({
|
|
|
1834
1924
|
className,
|
|
1835
1925
|
style
|
|
1836
1926
|
}) {
|
|
1837
|
-
return /* @__PURE__ */
|
|
1927
|
+
return /* @__PURE__ */ jsx38(
|
|
1838
1928
|
AriaProgressBar,
|
|
1839
1929
|
{
|
|
1840
1930
|
className: cx("pire-progress", className),
|
|
@@ -1845,12 +1935,12 @@ function ProgressBar({
|
|
|
1845
1935
|
maxValue,
|
|
1846
1936
|
isIndeterminate,
|
|
1847
1937
|
style,
|
|
1848
|
-
children: ({ percentage, valueText }) => /* @__PURE__ */
|
|
1849
|
-
label || showValue ? /* @__PURE__ */
|
|
1850
|
-
label ? /* @__PURE__ */
|
|
1851
|
-
showValue && !isIndeterminate ? /* @__PURE__ */
|
|
1938
|
+
children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs31(Fragment2, { children: [
|
|
1939
|
+
label || showValue ? /* @__PURE__ */ jsxs31("div", { className: "pire-progress-head", children: [
|
|
1940
|
+
label ? /* @__PURE__ */ jsx38(Label9, { children: label }) : /* @__PURE__ */ jsx38("span", {}),
|
|
1941
|
+
showValue && !isIndeterminate ? /* @__PURE__ */ jsx38("span", { className: "pire-numeric", children: valueText }) : null
|
|
1852
1942
|
] }) : null,
|
|
1853
|
-
/* @__PURE__ */
|
|
1943
|
+
/* @__PURE__ */ jsx38("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx38("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
|
|
1854
1944
|
] })
|
|
1855
1945
|
}
|
|
1856
1946
|
);
|
|
@@ -1858,7 +1948,7 @@ function ProgressBar({
|
|
|
1858
1948
|
|
|
1859
1949
|
// src/components/feedback/Toast.tsx
|
|
1860
1950
|
import * as React11 from "react";
|
|
1861
|
-
import { jsx as
|
|
1951
|
+
import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
|
|
1862
1952
|
var KIND_ICON2 = {
|
|
1863
1953
|
info: "info",
|
|
1864
1954
|
success: "check-circle-2",
|
|
@@ -1867,7 +1957,7 @@ var KIND_ICON2 = {
|
|
|
1867
1957
|
};
|
|
1868
1958
|
function Toast({ kind = "success", onClose, position = "bottom-center", children, className, ...rest }) {
|
|
1869
1959
|
const msg = usePireMessages();
|
|
1870
|
-
return /* @__PURE__ */
|
|
1960
|
+
return /* @__PURE__ */ jsxs32(
|
|
1871
1961
|
"div",
|
|
1872
1962
|
{
|
|
1873
1963
|
className: cx("pire-toast", className),
|
|
@@ -1876,9 +1966,9 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
|
|
|
1876
1966
|
"aria-live": kind === "error" ? "assertive" : "polite",
|
|
1877
1967
|
...rest,
|
|
1878
1968
|
children: [
|
|
1879
|
-
/* @__PURE__ */
|
|
1880
|
-
/* @__PURE__ */
|
|
1881
|
-
onClose ? /* @__PURE__ */
|
|
1969
|
+
/* @__PURE__ */ jsx39(Icon, { name: KIND_ICON2[kind], size: 16 }),
|
|
1970
|
+
/* @__PURE__ */ jsx39("span", { style: { flex: 1 }, children }),
|
|
1971
|
+
onClose ? /* @__PURE__ */ jsx39(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
|
|
1882
1972
|
]
|
|
1883
1973
|
}
|
|
1884
1974
|
);
|
|
@@ -1896,9 +1986,9 @@ function ToastProvider({ children, timeout = 6e3 }) {
|
|
|
1896
1986
|
return id;
|
|
1897
1987
|
}, [close, timeout]);
|
|
1898
1988
|
const value = React11.useMemo(() => ({ add, close }), [add, close]);
|
|
1899
|
-
return /* @__PURE__ */
|
|
1989
|
+
return /* @__PURE__ */ jsxs32(ToastContext.Provider, { value, children: [
|
|
1900
1990
|
children,
|
|
1901
|
-
/* @__PURE__ */
|
|
1991
|
+
/* @__PURE__ */ jsx39("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ jsx39(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
|
|
1902
1992
|
] });
|
|
1903
1993
|
}
|
|
1904
1994
|
function useToast() {
|
|
@@ -1907,54 +1997,9 @@ function useToast() {
|
|
|
1907
1997
|
return ctx;
|
|
1908
1998
|
}
|
|
1909
1999
|
|
|
1910
|
-
// src/components/feedback/Skeleton.tsx
|
|
1911
|
-
import { jsx as jsx39 } from "react/jsx-runtime";
|
|
1912
|
-
function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
|
|
1913
|
-
return /* @__PURE__ */ jsx39(
|
|
1914
|
-
"div",
|
|
1915
|
-
{
|
|
1916
|
-
className: cx("pire-skeleton", className),
|
|
1917
|
-
"data-shape": shape,
|
|
1918
|
-
"aria-hidden": "true",
|
|
1919
|
-
style: { width, height, ...style },
|
|
1920
|
-
...rest
|
|
1921
|
-
}
|
|
1922
|
-
);
|
|
1923
|
-
}
|
|
1924
|
-
var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
|
|
1925
|
-
function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
|
|
1926
|
-
const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
|
|
1927
|
-
return /* @__PURE__ */ jsx39(
|
|
1928
|
-
"div",
|
|
1929
|
-
{
|
|
1930
|
-
className: cx("pire-skeleton-row", className),
|
|
1931
|
-
"data-density": density,
|
|
1932
|
-
"aria-hidden": "true",
|
|
1933
|
-
style,
|
|
1934
|
-
...rest,
|
|
1935
|
-
children: cells.map((c, i) => {
|
|
1936
|
-
const align = c.numeric ? "right" : c.align ?? "left";
|
|
1937
|
-
return (
|
|
1938
|
-
// biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
|
|
1939
|
-
/* @__PURE__ */ jsx39(
|
|
1940
|
-
"div",
|
|
1941
|
-
{
|
|
1942
|
-
className: "pire-skeleton-cell",
|
|
1943
|
-
"data-align": align,
|
|
1944
|
-
style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
|
|
1945
|
-
children: /* @__PURE__ */ jsx39(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
|
|
1946
|
-
},
|
|
1947
|
-
i
|
|
1948
|
-
)
|
|
1949
|
-
);
|
|
1950
|
-
})
|
|
1951
|
-
}
|
|
1952
|
-
);
|
|
1953
|
-
}
|
|
1954
|
-
|
|
1955
2000
|
// src/components/data/KpiTile.tsx
|
|
1956
2001
|
import { Button as AriaButton10 } from "react-aria-components";
|
|
1957
|
-
import { Fragment as Fragment3, jsx as jsx40, jsxs as
|
|
2002
|
+
import { Fragment as Fragment3, jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
|
|
1958
2003
|
function KpiTile({
|
|
1959
2004
|
label,
|
|
1960
2005
|
value,
|
|
@@ -1970,16 +2015,16 @@ function KpiTile({
|
|
|
1970
2015
|
style
|
|
1971
2016
|
}) {
|
|
1972
2017
|
const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
|
|
1973
|
-
const body = /* @__PURE__ */
|
|
1974
|
-
/* @__PURE__ */
|
|
2018
|
+
const body = /* @__PURE__ */ jsxs33(Fragment3, { children: [
|
|
2019
|
+
/* @__PURE__ */ jsxs33("span", { className: "pire-kpi-label", children: [
|
|
1975
2020
|
icon ? /* @__PURE__ */ jsx40(Icon, { name: icon, size: 16 }) : null,
|
|
1976
2021
|
label
|
|
1977
2022
|
] }),
|
|
1978
|
-
/* @__PURE__ */
|
|
2023
|
+
/* @__PURE__ */ jsxs33("span", { className: "pire-kpi-value", children: [
|
|
1979
2024
|
value,
|
|
1980
2025
|
unit ? /* @__PURE__ */ jsx40("span", { className: "pire-kpi-unit", children: unit }) : null
|
|
1981
2026
|
] }),
|
|
1982
|
-
delta ? /* @__PURE__ */
|
|
2027
|
+
delta ? /* @__PURE__ */ jsxs33("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
|
|
1983
2028
|
deltaDirection ? /* @__PURE__ */ jsx40(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
|
|
1984
2029
|
delta
|
|
1985
2030
|
] }) : null,
|
|
@@ -1990,14 +2035,14 @@ function KpiTile({
|
|
|
1990
2035
|
}
|
|
1991
2036
|
|
|
1992
2037
|
// src/components/data/ObjectHeader.tsx
|
|
1993
|
-
import { jsx as jsx41, jsxs as
|
|
2038
|
+
import { jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
|
|
1994
2039
|
function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
|
|
1995
|
-
return /* @__PURE__ */
|
|
2040
|
+
return /* @__PURE__ */ jsxs34("header", { className: cx("pire-objheader", className), ...rest, children: [
|
|
1996
2041
|
breadcrumb,
|
|
1997
|
-
/* @__PURE__ */
|
|
1998
|
-
/* @__PURE__ */
|
|
2042
|
+
/* @__PURE__ */ jsxs34("div", { className: "pire-objheader-row", children: [
|
|
2043
|
+
/* @__PURE__ */ jsxs34("div", { style: { minWidth: 0 }, children: [
|
|
1999
2044
|
/* @__PURE__ */ jsx41("h1", { className: "pire-objheader-title", children: title }),
|
|
2000
|
-
subtitle || id ? /* @__PURE__ */
|
|
2045
|
+
subtitle || id ? /* @__PURE__ */ jsxs34("div", { className: "pire-objheader-sub", children: [
|
|
2001
2046
|
subtitle,
|
|
2002
2047
|
id ? /* @__PURE__ */ jsx41("span", { className: "pire-objheader-id", children: id }) : null
|
|
2003
2048
|
] }) : null
|
|
@@ -2005,7 +2050,7 @@ function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions,
|
|
|
2005
2050
|
badge,
|
|
2006
2051
|
actions ? /* @__PURE__ */ jsx41("div", { className: "pire-objheader-actions", children: actions }) : null
|
|
2007
2052
|
] }),
|
|
2008
|
-
facts?.length ? /* @__PURE__ */ jsx41("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */
|
|
2053
|
+
facts?.length ? /* @__PURE__ */ jsx41("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs34("div", { children: [
|
|
2009
2054
|
/* @__PURE__ */ jsx41("dt", { className: "pire-fact-label", children: fact.label }),
|
|
2010
2055
|
/* @__PURE__ */ jsx41("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
|
|
2011
2056
|
] }, fact.label)) }) : null
|
|
@@ -2013,7 +2058,7 @@ function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions,
|
|
|
2013
2058
|
}
|
|
2014
2059
|
|
|
2015
2060
|
// src/components/data/FilterBar.tsx
|
|
2016
|
-
import { jsx as jsx42, jsxs as
|
|
2061
|
+
import { jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
|
|
2017
2062
|
function FilterBar({
|
|
2018
2063
|
children,
|
|
2019
2064
|
activeFilters = [],
|
|
@@ -2030,12 +2075,12 @@ function FilterBar({
|
|
|
2030
2075
|
const label = useMessage("filterBarLabel", rest["aria-label"]);
|
|
2031
2076
|
const go = useMessage("filterBarGo", goLabel);
|
|
2032
2077
|
const clearAll = useMessage("filterBarClearAll", clearAllLabel);
|
|
2033
|
-
return /* @__PURE__ */
|
|
2034
|
-
/* @__PURE__ */
|
|
2078
|
+
return /* @__PURE__ */ jsxs35("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
|
|
2079
|
+
/* @__PURE__ */ jsxs35("div", { className: "pire-filterbar-controls", children: [
|
|
2035
2080
|
children,
|
|
2036
2081
|
onGo ? /* @__PURE__ */ jsx42(Button, { variant: "primary", onPress: onGo, children: go }) : null
|
|
2037
2082
|
] }),
|
|
2038
|
-
activeFilters.length || resultLabel || actions ? /* @__PURE__ */
|
|
2083
|
+
activeFilters.length || resultLabel || actions ? /* @__PURE__ */ jsxs35("div", { className: "pire-filterbar-foot", children: [
|
|
2039
2084
|
activeFilters.map((filter) => /* @__PURE__ */ jsx42(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
|
|
2040
2085
|
activeFilters.length && onClear ? /* @__PURE__ */ jsx42(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
|
|
2041
2086
|
resultLabel ? /* @__PURE__ */ jsx42("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
|
|
@@ -2045,7 +2090,7 @@ function FilterBar({
|
|
|
2045
2090
|
}
|
|
2046
2091
|
|
|
2047
2092
|
// src/components/data/DescriptionList.tsx
|
|
2048
|
-
import { jsx as jsx43, jsxs as
|
|
2093
|
+
import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
|
|
2049
2094
|
function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
|
|
2050
2095
|
return /* @__PURE__ */ jsx43(
|
|
2051
2096
|
"dl",
|
|
@@ -2054,8 +2099,8 @@ function DescriptionList({ items, layout = "rows", columns = 3, className, style
|
|
|
2054
2099
|
"data-layout": layout,
|
|
2055
2100
|
style: { ...layout === "grid" ? { "--pire-dl-cols": columns } : null, ...style },
|
|
2056
2101
|
...rest,
|
|
2057
|
-
children: items.map((item, i) => /* @__PURE__ */
|
|
2058
|
-
/* @__PURE__ */
|
|
2102
|
+
children: items.map((item, i) => /* @__PURE__ */ jsxs36("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
|
|
2103
|
+
/* @__PURE__ */ jsxs36("dt", { className: "pire-dl-term", children: [
|
|
2059
2104
|
item.label,
|
|
2060
2105
|
item.hint
|
|
2061
2106
|
] }),
|
|
@@ -2066,10 +2111,10 @@ function DescriptionList({ items, layout = "rows", columns = 3, className, style
|
|
|
2066
2111
|
}
|
|
2067
2112
|
|
|
2068
2113
|
// src/components/data/Timeline.tsx
|
|
2069
|
-
import { jsx as jsx44, jsxs as
|
|
2114
|
+
import { jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
|
|
2070
2115
|
function Timeline({ entries, reverse = false, className, ...rest }) {
|
|
2071
2116
|
const list = reverse ? [...entries].reverse() : entries;
|
|
2072
|
-
return /* @__PURE__ */ jsx44("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */
|
|
2117
|
+
return /* @__PURE__ */ jsx44("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs37("li", { className: "pire-timeline-item", children: [
|
|
2073
2118
|
/* @__PURE__ */ jsx44("span", { className: "pire-timeline-time", children: entry.time }),
|
|
2074
2119
|
/* @__PURE__ */ jsx44("span", { className: "pire-timeline-text", children: entry.event }),
|
|
2075
2120
|
entry.actor ? /* @__PURE__ */ jsx44("span", { className: "pire-timeline-actor", children: entry.actor }) : null
|
|
@@ -2078,9 +2123,9 @@ function Timeline({ entries, reverse = false, className, ...rest }) {
|
|
|
2078
2123
|
|
|
2079
2124
|
// src/components/data/LinkList.tsx
|
|
2080
2125
|
import { Button as AriaButton11 } from "react-aria-components";
|
|
2081
|
-
import { jsx as jsx45, jsxs as
|
|
2126
|
+
import { jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
|
|
2082
2127
|
function LinkList({ items, onSelect, className, ...rest }) {
|
|
2083
|
-
return /* @__PURE__ */ jsx45("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */
|
|
2128
|
+
return /* @__PURE__ */ jsx45("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ jsxs38(AriaButton11, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
|
|
2084
2129
|
item.icon ? /* @__PURE__ */ jsx45(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
|
|
2085
2130
|
item.key ? /* @__PURE__ */ jsx45("span", { className: "pire-linklist-key", children: item.key }) : null,
|
|
2086
2131
|
item.text ? /* @__PURE__ */ jsx45("span", { className: "pire-linklist-text", children: item.text }) : null,
|
|
@@ -2088,57 +2133,78 @@ function LinkList({ items, onSelect, className, ...rest }) {
|
|
|
2088
2133
|
] }, item.id)) });
|
|
2089
2134
|
}
|
|
2090
2135
|
|
|
2136
|
+
// src/components/layout/PageBand.tsx
|
|
2137
|
+
import { jsx as jsx46 } from "react/jsx-runtime";
|
|
2138
|
+
function PageBand({
|
|
2139
|
+
surface = "card",
|
|
2140
|
+
hasBorder = true,
|
|
2141
|
+
children,
|
|
2142
|
+
className,
|
|
2143
|
+
...rest
|
|
2144
|
+
}) {
|
|
2145
|
+
return /* @__PURE__ */ jsx46(
|
|
2146
|
+
"div",
|
|
2147
|
+
{
|
|
2148
|
+
className: cx("pire-pageband", className),
|
|
2149
|
+
"data-surface": surface,
|
|
2150
|
+
"data-border": hasBorder ? "true" : void 0,
|
|
2151
|
+
...rest,
|
|
2152
|
+
children
|
|
2153
|
+
}
|
|
2154
|
+
);
|
|
2155
|
+
}
|
|
2156
|
+
|
|
2091
2157
|
// src/components/layout/PageHeader.tsx
|
|
2092
|
-
import { jsx as
|
|
2158
|
+
import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
|
|
2093
2159
|
function PageHeader({ title, subtitle, actions, className, ...rest }) {
|
|
2094
|
-
return /* @__PURE__ */
|
|
2095
|
-
/* @__PURE__ */
|
|
2096
|
-
/* @__PURE__ */
|
|
2097
|
-
subtitle ? /* @__PURE__ */
|
|
2160
|
+
return /* @__PURE__ */ jsxs39("header", { className: cx("pire-pageheader", className), ...rest, children: [
|
|
2161
|
+
/* @__PURE__ */ jsxs39("div", { style: { minWidth: 0 }, children: [
|
|
2162
|
+
/* @__PURE__ */ jsx47("h1", { className: "pire-pageheader-title", children: title }),
|
|
2163
|
+
subtitle ? /* @__PURE__ */ jsx47("p", { className: "pire-pageheader-sub", children: subtitle }) : null
|
|
2098
2164
|
] }),
|
|
2099
|
-
actions ? /* @__PURE__ */
|
|
2165
|
+
actions ? /* @__PURE__ */ jsx47("div", { className: "pire-pageheader-actions", children: actions }) : null
|
|
2100
2166
|
] });
|
|
2101
2167
|
}
|
|
2102
2168
|
|
|
2103
2169
|
// src/components/layout/SectionHeader.tsx
|
|
2104
|
-
import { jsx as
|
|
2170
|
+
import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
|
|
2105
2171
|
function SectionHeader({ title, meta, actions, className, ...rest }) {
|
|
2106
|
-
return /* @__PURE__ */
|
|
2107
|
-
/* @__PURE__ */
|
|
2108
|
-
meta ? /* @__PURE__ */
|
|
2109
|
-
actions ? /* @__PURE__ */
|
|
2172
|
+
return /* @__PURE__ */ jsxs40("div", { className: cx("pire-sectionhead", className), ...rest, children: [
|
|
2173
|
+
/* @__PURE__ */ jsx48("span", { className: "pire-eyebrow", children: title }),
|
|
2174
|
+
meta ? /* @__PURE__ */ jsx48("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
|
|
2175
|
+
actions ? /* @__PURE__ */ jsx48("div", { className: "pire-sectionhead-actions", children: actions }) : null
|
|
2110
2176
|
] });
|
|
2111
2177
|
}
|
|
2112
2178
|
|
|
2113
2179
|
// src/components/layout/SelectionBar.tsx
|
|
2114
|
-
import { jsx as
|
|
2180
|
+
import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
|
|
2115
2181
|
function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
|
|
2116
2182
|
if (!count) return null;
|
|
2117
|
-
return /* @__PURE__ */
|
|
2118
|
-
/* @__PURE__ */
|
|
2183
|
+
return /* @__PURE__ */ jsxs41("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
|
|
2184
|
+
/* @__PURE__ */ jsxs41("span", { className: "pire-selectionbar-count", children: [
|
|
2119
2185
|
count.toLocaleString(),
|
|
2120
2186
|
" ",
|
|
2121
2187
|
noun,
|
|
2122
2188
|
count === 1 ? "" : "s",
|
|
2123
2189
|
" selected"
|
|
2124
2190
|
] }),
|
|
2125
|
-
children ? /* @__PURE__ */
|
|
2126
|
-
actions ? /* @__PURE__ */
|
|
2191
|
+
children ? /* @__PURE__ */ jsx49("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
|
|
2192
|
+
actions ? /* @__PURE__ */ jsx49("div", { className: "pire-selectionbar-actions", children: actions }) : null
|
|
2127
2193
|
] });
|
|
2128
2194
|
}
|
|
2129
2195
|
|
|
2130
2196
|
// src/components/layout/FooterBar.tsx
|
|
2131
|
-
import { jsx as
|
|
2197
|
+
import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
|
|
2132
2198
|
function FooterBar({ note, actions, children, className, ...rest }) {
|
|
2133
|
-
return /* @__PURE__ */
|
|
2134
|
-
note ? /* @__PURE__ */
|
|
2199
|
+
return /* @__PURE__ */ jsxs42("footer", { className: cx("pire-footerbar", className), ...rest, children: [
|
|
2200
|
+
note ? /* @__PURE__ */ jsx50("span", { className: "pire-footerbar-note", children: note }) : null,
|
|
2135
2201
|
children,
|
|
2136
|
-
actions ? /* @__PURE__ */
|
|
2202
|
+
actions ? /* @__PURE__ */ jsx50("div", { className: "pire-footerbar-actions", children: actions }) : null
|
|
2137
2203
|
] });
|
|
2138
2204
|
}
|
|
2139
2205
|
|
|
2140
2206
|
// src/components/patterns/ConfirmDialog.tsx
|
|
2141
|
-
import { Fragment as Fragment4, jsx as
|
|
2207
|
+
import { Fragment as Fragment4, jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
|
|
2142
2208
|
function ConfirmDialog({
|
|
2143
2209
|
isOpen,
|
|
2144
2210
|
title,
|
|
@@ -2152,7 +2218,7 @@ function ConfirmDialog({
|
|
|
2152
2218
|
onConfirm,
|
|
2153
2219
|
onCancel
|
|
2154
2220
|
}) {
|
|
2155
|
-
return /* @__PURE__ */
|
|
2221
|
+
return /* @__PURE__ */ jsxs43(
|
|
2156
2222
|
Dialog,
|
|
2157
2223
|
{
|
|
2158
2224
|
isOpen,
|
|
@@ -2162,12 +2228,12 @@ function ConfirmDialog({
|
|
|
2162
2228
|
onClose: onCancel,
|
|
2163
2229
|
isDismissable: !isBusy,
|
|
2164
2230
|
showClose: false,
|
|
2165
|
-
footer: /* @__PURE__ */
|
|
2166
|
-
/* @__PURE__ */
|
|
2167
|
-
/* @__PURE__ */
|
|
2231
|
+
footer: /* @__PURE__ */ jsxs43(Fragment4, { children: [
|
|
2232
|
+
/* @__PURE__ */ jsx51(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
|
|
2233
|
+
/* @__PURE__ */ jsx51(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
|
|
2168
2234
|
] }),
|
|
2169
2235
|
children: [
|
|
2170
|
-
consequence ? /* @__PURE__ */
|
|
2236
|
+
consequence ? /* @__PURE__ */ jsx51(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
|
|
2171
2237
|
children
|
|
2172
2238
|
]
|
|
2173
2239
|
}
|
|
@@ -2176,10 +2242,10 @@ function ConfirmDialog({
|
|
|
2176
2242
|
|
|
2177
2243
|
// src/components/patterns/SidePanel.tsx
|
|
2178
2244
|
import { ModalOverlay as ModalOverlay2, Modal as Modal2, Dialog as AriaDialog3, Heading as Heading4 } from "react-aria-components";
|
|
2179
|
-
import { jsx as
|
|
2245
|
+
import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
|
|
2180
2246
|
function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
|
|
2181
2247
|
const msg = usePireMessages();
|
|
2182
|
-
return /* @__PURE__ */
|
|
2248
|
+
return /* @__PURE__ */ jsx52(
|
|
2183
2249
|
ModalOverlay2,
|
|
2184
2250
|
{
|
|
2185
2251
|
className: "pire-sidepanel-overlay",
|
|
@@ -2188,28 +2254,28 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
|
|
|
2188
2254
|
onOpenChange: (o) => {
|
|
2189
2255
|
if (!o) onClose?.();
|
|
2190
2256
|
},
|
|
2191
|
-
children: /* @__PURE__ */
|
|
2192
|
-
/* @__PURE__ */
|
|
2193
|
-
/* @__PURE__ */
|
|
2194
|
-
/* @__PURE__ */
|
|
2195
|
-
subtitle ? /* @__PURE__ */
|
|
2257
|
+
children: /* @__PURE__ */ jsx52(Modal2, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs44(AriaDialog3, { className: "pire-dialog", style: { height: "100%" }, children: [
|
|
2258
|
+
/* @__PURE__ */ jsxs44("header", { className: "pire-dialog-head", children: [
|
|
2259
|
+
/* @__PURE__ */ jsxs44("div", { style: { flex: 1, minWidth: 0 }, children: [
|
|
2260
|
+
/* @__PURE__ */ jsx52(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
|
|
2261
|
+
subtitle ? /* @__PURE__ */ jsx52("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
|
|
2196
2262
|
] }),
|
|
2197
|
-
/* @__PURE__ */
|
|
2263
|
+
/* @__PURE__ */ jsx52(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
|
|
2198
2264
|
] }),
|
|
2199
|
-
/* @__PURE__ */
|
|
2200
|
-
footer ? /* @__PURE__ */
|
|
2265
|
+
/* @__PURE__ */ jsx52("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
|
|
2266
|
+
footer ? /* @__PURE__ */ jsx52("footer", { className: "pire-dialog-foot", children: footer }) : null
|
|
2201
2267
|
] }) })
|
|
2202
2268
|
}
|
|
2203
2269
|
);
|
|
2204
2270
|
}
|
|
2205
2271
|
|
|
2206
2272
|
// src/components/patterns/EmptyState.tsx
|
|
2207
|
-
import { jsx as
|
|
2273
|
+
import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
|
|
2208
2274
|
function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
|
|
2209
|
-
return /* @__PURE__ */
|
|
2210
|
-
/* @__PURE__ */
|
|
2211
|
-
title ? /* @__PURE__ */
|
|
2212
|
-
children ? /* @__PURE__ */
|
|
2275
|
+
return /* @__PURE__ */ jsxs45("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
|
|
2276
|
+
/* @__PURE__ */ jsx53(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
|
|
2277
|
+
title ? /* @__PURE__ */ jsx53("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
|
|
2278
|
+
children ? /* @__PURE__ */ jsx53("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
|
|
2213
2279
|
action
|
|
2214
2280
|
] });
|
|
2215
2281
|
}
|
|
@@ -2251,6 +2317,7 @@ export {
|
|
|
2251
2317
|
MultiComboBox,
|
|
2252
2318
|
NumberField,
|
|
2253
2319
|
ObjectHeader,
|
|
2320
|
+
PageBand,
|
|
2254
2321
|
PageHeader,
|
|
2255
2322
|
Pagination,
|
|
2256
2323
|
PireIntlProvider,
|