@orianatech/pire 0.13.0 → 0.15.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.
Files changed (35) hide show
  1. package/dist/components/core/Icon.d.ts.map +1 -1
  2. package/dist/components/core/Kbd.d.cts +17 -0
  3. package/dist/components/core/Kbd.d.ts +18 -0
  4. package/dist/components/core/Kbd.d.ts.map +1 -0
  5. package/dist/components/core/icon-data.generated.d.ts.map +1 -1
  6. package/dist/components/core/icon-map.d.cts +9 -0
  7. package/dist/components/core/icon-map.d.ts +9 -0
  8. package/dist/components/core/icon-map.d.ts.map +1 -1
  9. package/dist/components/forms/ValueHelpField.d.cts +12 -1
  10. package/dist/components/forms/ValueHelpField.d.ts +12 -1
  11. package/dist/components/forms/ValueHelpField.d.ts.map +1 -1
  12. package/dist/components/navigation/Menu.d.cts +7 -2
  13. package/dist/components/navigation/Menu.d.ts +7 -2
  14. package/dist/components/navigation/Menu.d.ts.map +1 -1
  15. package/dist/components/navigation/ShellBar.d.cts +13 -1
  16. package/dist/components/navigation/ShellBar.d.ts +13 -1
  17. package/dist/components/navigation/ShellBar.d.ts.map +1 -1
  18. package/dist/components/patterns/CommandPalette.d.cts +97 -0
  19. package/dist/components/patterns/CommandPalette.d.ts +98 -0
  20. package/dist/components/patterns/CommandPalette.d.ts.map +1 -0
  21. package/dist/components/patterns/ValueHelpDialog.d.cts +22 -1
  22. package/dist/components/patterns/ValueHelpDialog.d.ts +22 -1
  23. package/dist/components/patterns/ValueHelpDialog.d.ts.map +1 -1
  24. package/dist/components.css +76 -2
  25. package/dist/i18n/messages.d.cts +26 -0
  26. package/dist/i18n/messages.d.ts +26 -0
  27. package/dist/i18n/messages.d.ts.map +1 -1
  28. package/dist/index.cjs +909 -521
  29. package/dist/index.cjs.map +1 -1
  30. package/dist/index.d.cts +3 -0
  31. package/dist/index.d.ts +3 -0
  32. package/dist/index.d.ts.map +1 -1
  33. package/dist/index.js +803 -408
  34. package/dist/index.js.map +1 -1
  35. package/package.json +1 -1
package/dist/index.cjs CHANGED
@@ -38,13 +38,14 @@ __export(src_exports, {
38
38
  Card: () => Card,
39
39
  Checkbox: () => Checkbox,
40
40
  ComboBox: () => ComboBox,
41
+ CommandPalette: () => CommandPalette,
41
42
  ConfirmDialog: () => ConfirmDialog,
42
43
  DataTable: () => DataTable,
43
44
  DatePicker: () => DatePicker,
44
45
  DateRangePicker: () => DateRangePicker,
45
46
  DescriptionList: () => DescriptionList,
46
47
  Dialog: () => Dialog,
47
- DialogTrigger: () => import_react_aria_components32.DialogTrigger,
48
+ DialogTrigger: () => import_react_aria_components34.DialogTrigger,
48
49
  DonutChart: () => DonutChart,
49
50
  EmptyState: () => EmptyState,
50
51
  FileDropZone: () => FileDropZone,
@@ -53,11 +54,13 @@ __export(src_exports, {
53
54
  FooterBar: () => FooterBar,
54
55
  FormField: () => FormField,
55
56
  Heading: () => Heading,
56
- I18nProvider: () => import_react_aria_components32.I18nProvider,
57
+ I18nProvider: () => import_react_aria_components34.I18nProvider,
58
+ ICON_NAMES: () => ICON_NAMES,
57
59
  Icon: () => Icon,
58
60
  IconButton: () => IconButton,
59
61
  InlineMessage: () => InlineMessage,
60
62
  Input: () => Input,
63
+ Kbd: () => Kbd,
61
64
  KpiTile: () => KpiTile,
62
65
  LineChart: () => LineChart,
63
66
  Link: () => Link,
@@ -66,7 +69,7 @@ __export(src_exports, {
66
69
  MenuItem: () => MenuItem,
67
70
  MenuSection: () => MenuSection,
68
71
  MenuSeparator: () => MenuSeparator,
69
- MenuTrigger: () => import_react_aria_components32.MenuTrigger,
72
+ MenuTrigger: () => import_react_aria_components34.MenuTrigger,
70
73
  MultiComboBox: () => MultiComboBox,
71
74
  NumberField: () => NumberField,
72
75
  ObjectHeader: () => ObjectHeader,
@@ -74,11 +77,11 @@ __export(src_exports, {
74
77
  PageHeader: () => PageHeader,
75
78
  Pagination: () => Pagination,
76
79
  PireIntlProvider: () => PireIntlProvider,
77
- Popover: () => import_react_aria_components32.Popover,
80
+ Popover: () => import_react_aria_components34.Popover,
78
81
  ProgressBar: () => ProgressBar,
79
82
  Radio: () => Radio,
80
83
  RadioGroup: () => RadioGroup,
81
- RouterProvider: () => import_react_aria_components32.RouterProvider,
84
+ RouterProvider: () => import_react_aria_components34.RouterProvider,
82
85
  SectionHeader: () => SectionHeader,
83
86
  SegmentedControl: () => SegmentedControl,
84
87
  Select: () => Select,
@@ -90,7 +93,7 @@ __export(src_exports, {
90
93
  Skeleton: () => Skeleton,
91
94
  SkeletonTableRow: () => SkeletonTableRow,
92
95
  Strong: () => Strong,
93
- SubmenuTrigger: () => import_react_aria_components32.SubmenuTrigger,
96
+ SubmenuTrigger: () => import_react_aria_components34.SubmenuTrigger,
94
97
  Switch: () => Switch,
95
98
  Tabs: () => Tabs,
96
99
  Tag: () => Tag,
@@ -108,6 +111,7 @@ __export(src_exports, {
108
111
  esMessages: () => esMessages,
109
112
  formatFileSize: () => formatFileSize,
110
113
  rangeLengthInDays: () => rangeLengthInDays,
114
+ useCommandPaletteShortcut: () => useCommandPaletteShortcut,
111
115
  usePireMessages: () => usePireMessages,
112
116
  useToast: () => useToast
113
117
  });
@@ -117,16 +121,30 @@ module.exports = __toCommonJS(src_exports);
117
121
  var ICON_MARKUP = {
118
122
  "add": '<path d="M17 15 17 8 15 8 15 15 8 15 8 17 15 17 15 24 17 24 17 17 24 17 24 15z"/>',
119
123
  "apps": '<path d="M8,4V8H4V4Zm2-2H2v8h8Zm8,2V8H14V4Zm2-2H12v8h8Zm8,2V8H24V4Zm2-2H22v8h8ZM8,14v4H4V14Zm2-2H2v8h8Zm8,2v4H14V14Zm2-2H12v8h8Zm8,2v4H24V14Zm2-2H22v8h8ZM8,24v4H4V24Zm2-2H2v8h8Zm8,2v4H14V24Zm2-2H12v8h8Zm8,2v4H24V24Zm2-2H22v8h8Z"/>',
124
+ "archive": '<path d="M14 19H18V21H14z"/><path d="M6,2V28a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V2ZM24,28H8V16H24Zm0-14H8V10H24ZM8,8V4H24V8Z"/>',
120
125
  "arrow--down": '<path d="M24.59 16.59 17 24.17 17 4 15 4 15 24.17 7.41 16.59 6 18 16 28 26 18 24.59 16.59z"/>',
126
+ "arrow--left": '<path d="M14 26 15.41 24.59 7.83 17 28 17 28 15 7.83 15 15.41 7.41 14 6 4 16 14 26z"/>',
121
127
  "arrow--right": '<path d="M18 6 16.57 7.393 24.15 15 4 15 4 17 24.15 17 16.57 24.573 18 26 28 16 18 6z"/>',
122
128
  "arrow--up": '<path d="M16 4 6 14 7.41 15.41 15 7.83 15 28 17 28 17 7.83 24.59 15.41 26 14 16 4z"/>',
123
129
  "arrows--vertical": '<path d="M27.6 20.6 24 24.2 24 4 22 4 22 24.2 18.4 20.6 17 22 23 28 29 22z"/><path d="M9 4 3 10 4.4 11.4 8 7.8 8 28 10 28 10 7.8 13.6 11.4 15 10z"/>',
130
+ "asterisk": '<path d="M28.316 13.949 27.684 12.051 17 15.612 17 4 15 4 15 15.612 4.316 12.051 3.684 13.949 14.368 17.51 7.2 27.066 8.8 28.267 16 18.667 23.2 28.267 24.8 27.066 17.632 17.51 28.316 13.949z"/>',
124
131
  "attachment": '<path d="M28.1,18.9L13.1,3.9c-2.5-2.6-6.6-2.6-9.2-0.1S1.3,10.5,3.9,13c0,0,0.1,0.1,0.1,0.1L6.8,16l1.4-1.4l-2.9-2.9 C3.6,10,3.6,7.1,5.3,5.4s4.6-1.8,6.3-0.1c0,0,0,0,0.1,0.1l14.9,14.9c1.8,1.7,1.8,4.6,0.1,6.3c-1.7,1.8-4.6,1.8-6.3,0.1 c0,0,0,0-0.1-0.1l-7.4-7.4c-1-1-0.9-2.6,0-3.5c1-0.9,2.5-0.9,3.5,0l4.1,4.1l1.4-1.4c0,0-4.2-4.2-4.2-4.2c-1.8-1.7-4.6-1.6-6.3,0.2 c-1.6,1.7-1.6,4.4,0,6.2l7.5,7.5c2.5,2.6,6.6,2.6,9.2,0.1S30.7,21.5,28.1,18.9C28.1,19,28.1,18.9,28.1,18.9L28.1,18.9z"/>',
132
+ "bank--vault": '<path d="M26,30h-2v-2H8v2h-2v-2h-2c-1.103,0-2-.8975-2-2V4c0-1.103.897-2,2-2h24c1.1025,0,2,.897,2,2v22c0,1.1025-.8975,2-2,2h-2v2ZM4,4v22h24.002l-.002-22H4ZM17,22h-2v-2.1006c-.626-.127-1.2207-.374-1.7573-.7285l-2.5356,2.5361-1.4141-1.4141,2.5366-2.5371c-.3555-.5371-.6021-1.1318-.729-1.7559h-2.1006v-2h2.1001c.1274-.626.374-1.2207.7285-1.7573l-2.5356-2.5356,1.4141-1.4141,2.5366,2.5366c.5376-.3555,1.1318-.6021,1.7563-.729v-2.1006h2v2.1006c.626.127,1.2207.3735,1.7568.728l2.5361-2.5356,1.4141,1.4141-2.5361,2.5356c.3545.5366.6016,1.1313.7285,1.7573h2.1006v2h-2.1006c-.127.626-.374,1.2207-.7285,1.7568l2.5361,2.5361-1.4141,1.4141-2.5371-2.5371c-.5371.3555-1.1318.6025-1.7559.7295v2.1006ZM16,12c-.7954,0-1.5513.3135-2.1279.8818-.5586.5669-.8721,1.3228-.8721,2.1182,0,.7949.3135,1.5508.8823,2.1279,1.1318,1.1162,3.0908,1.127,4.2456-.0098.5586-.5674.8721-1.3232.8721-2.1182,0-.793-.3115-1.5464-.877-2.1226-.5771-.5659-1.3306-.8774-2.123-.8774Z"/>',
133
+ "barcode": '<path d="M2 6H4V28H2z"/><path d="M12 6H14V26H12z"/><path d="M6 6H10V26H6z"/><path d="M16 6H20V26H16z"/><path d="M22 6H26V26H22z"/><path d="M28 6H30V28H28z"/>',
134
+ "book": '<path d="M19 10H26V12H19z"/><path d="M19 15H26V17H19z"/><path d="M19 20H26V22H19z"/><path d="M6 10H13V12H6z"/><path d="M6 15H13V17H6z"/><path d="M6 20H13V22H6z"/><path d="M28,5H4A2.002,2.002,0,0,0,2,7V25a2.002,2.002,0,0,0,2,2H28a2.002,2.002,0,0,0,2-2V7A2.002,2.002,0,0,0,28,5ZM4,7H15V25H4ZM17,25V7H28V25Z"/>',
135
+ "bookmark": '<path d="M24,4V26.75l-7.1-3.59-.9-.45-.9.45L8,26.75V4H24m0-2H8A2,2,0,0,0,6,4V30L16,25,26,30V4A2,2,0,0,0,24,2Z"/>',
125
136
  "box": '<path d="M20,21H12a2,2,0,0,1-2-2V17a2,2,0,0,1,2-2h8a2,2,0,0,1,2,2v2A2,2,0,0,1,20,21Zm-8-4v2h8V17Z"/><path d="M28,4H4A2,2,0,0,0,2,6v4a2,2,0,0,0,2,2V28a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V12a2,2,0,0,0,2-2V6A2,2,0,0,0,28,4ZM26,28H6V12H26Zm2-18H4V6H28v4Z"/>',
126
137
  "building": '<path d="M28,2H16a2.002,2.002,0,0,0-2,2V14H4a2.002,2.002,0,0,0-2,2V30H30V4A2.0023,2.0023,0,0,0,28,2ZM9,28V21h4v7Zm19,0H15V20a1,1,0,0,0-1-1H8a1,1,0,0,0-1,1v8H4V16H16V4H28Z"/><path d="M18 8H20V10H18z"/><path d="M24 8H26V10H24z"/><path d="M18 14H20V16H18z"/><path d="M24 14H26V16H24z"/><path d="M18 20H20V22H18z"/><path d="M24 20H26V22H24z"/>',
127
138
  "building--insights-1": '<path d="M28,2H16a2.002,2.002,0,0,0-2,2V14H4a2.002,2.002,0,0,0-2,2V30H30V4A2.0023,2.0023,0,0,0,28,2ZM9,28V21h4v7Zm19,0H15V20a1,1,0,0,0-1-1H8a1,1,0,0,0-1,1v8H4V16H16V4H28Z"/><path d="M18 8H20V10H18z"/><path d="M24 8H26V10H24z"/><path d="M18 14H20V16H18z"/><path d="M24 14H26V16H24z"/><path d="M18 20H20V22H18z"/><path d="M24 20H26V22H24z"/><path d="M9,12H7a5.0059,5.0059,0,0,1,5-5V9A3.0033,3.0033,0,0,0,9,12Z"/><path d="M4,12H2A10.0114,10.0114,0,0,1,12,2V4A8.0092,8.0092,0,0,0,4,12Z"/>',
128
139
  "calculator": '<path d="M26,4V28H6V4H26m0-2H6A2,2,0,0,0,4,4V28a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V4A2,2,0,0,0,26,2Z"/><path d="M9 23H11V25H9z"/><path d="M21 23H23V25H21z"/><path d="M9 18H11V20H9z"/><path d="M21 18H23V20H21z"/><path d="M9 13H11V15H9z"/><path d="M15 23H17V25H15z"/><path d="M15 18H17V20H15z"/><path d="M15 13H17V15H15z"/><path d="M21 13H23V15H21z"/><path d="M9 7H23V10H9z"/>',
129
140
  "calendar": '<path d="M26,4h-4V2h-2v2h-8V2h-2v2H6C4.9,4,4,4.9,4,6v20c0,1.1,0.9,2,2,2h20c1.1,0,2-0.9,2-2V6C28,4.9,27.1,4,26,4z M26,26H6V12h20 V26z M26,10H6V6h4v2h2V6h8v2h2V6h4V10z"/>',
141
+ "calendar--add": '<switch><foreignObject width="1" height="1" x="0" y="0" requiredExtensions="http://ns.adobe.com/AdobeIllustrator/10.0/"/><g><path d="M30 22 24 22 24 16 22 16 22 22 16 22 16 24 22 24 22 30 24 30 24 24 30 24z"/><path d="M28,6c0-1.1-0.9-2-2-2h-4V2h-2v2h-8V2h-2v2H6C4.9,4,4,4.9,4,6v20c0,1.1,0.9,2,2,2h8v-2H6V6h4v2h2V6h8v2h2V6h4v8h2V6z"/></g></switch>',
142
+ "calendar--heat-map": '<path d="M26,4H22V2H20V4H12V2H10V4H6A2.0025,2.0025,0,0,0,4,6V26a2.0025,2.0025,0,0,0,2,2H26a2.0025,2.0025,0,0,0,2-2V6A2.0025,2.0025,0,0,0,26,4ZM6,6h4V8h2V6h8V8h2V6h4l0,4H6Zm0,6h5v6H6ZM19,26H13V20h6Zm0-8H13V12h6Zm2,8V20h5l.0012,6Z"/>',
143
+ "chart--area": '<path d="M20.4761,8.0151,13.4473,4.2109a2.0076,2.0076,0,0,0-2.1158.2051L4,10.001V2H2V28a2,2,0,0,0,2,2H30V5.7354ZM28,20.209l-7.62,1.8022-7.0288-2.8838a1.99,1.99,0,0,0-2.022.37L4,25.8359v-4.455l8.375-9.4,7.0186,5.62a2.0155,2.0155,0,0,0,2.0459.2119L28,14.6025ZM12.5239,5.9849l7.03,3.8042a2.012,2.012,0,0,0,1.3408.16L28,8.2646v4.1138L20.6187,16.02,13.6,10.4a1.99,1.99,0,0,0-2.6885.2642L4,18.3838v-5.87ZM4.5513,28,12.62,20.9888l7.0288,2.8838a1.9977,1.9977,0,0,0,1.147.0771L28,22.2612V28Z"/>',
144
+ "chart--bar": '<path d="M4,2H2V28a2,2,0,0,0,2,2H30V28H4V25H26V17H4V13H18V5H4ZM24,19v4H4V19ZM16,7v4H4V7Z"/>',
145
+ "chart--column": '<path d="M27,28V6H19V28H15V14H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,28H9V16h4Zm12,0H21V8h4Z"/>',
146
+ "chart--line": '<path d="M4.67,28l6.39-12,7.3,6.49a2,2,0,0,0,1.7.47,2,2,0,0,0,1.42-1.07L27,10.9,25.18,10,19.69,21l-7.3-6.49A2,2,0,0,0,10.71,14a2,2,0,0,0-1.42,1L4,25V2H2V28a2,2,0,0,0,2,2H30V28Z"/>',
147
+ "chart--pie": '<path d="M16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4ZM26,15H17V6.05A10,10,0,0,1,26,15ZM15.42,26A10,10,0,0,1,15,6.05v9a2,2,0,0,0,2,2h9A10,10,0,0,1,15.42,26Z"/>',
130
148
  "checkmark": '<path d="M13 24 4 15 5.414 13.586 13 21.171 26.586 7.586 28 9 13 24z"/>',
131
149
  "checkmark--filled": '<path d="M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2ZM14,21.5908l-5-5L10.5906,15,14,18.4092,21.41,11l1.5957,1.5859Z"/><path fill="none" d="M14 21.591 9 16.591 10.591 15 14 18.409 21.41 11 23.005 12.585 14 21.591z" data-icon-path="inner-path"/>',
132
150
  "checkmark--outline": '<path d="M14 21.414 9 16.413 10.413 15 14 18.586 21.585 11 23 12.415 14 21.414z"/><path d="M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,26A12,12,0,1,1,28,16,12,12,0,0,1,16,28Z"/>',
@@ -134,48 +152,109 @@ var ICON_MARKUP = {
134
152
  "chevron--left": '<path d="M10 16 20 6 21.4 7.4 12.8 16 21.4 24.6 20 26z"/>',
135
153
  "chevron--right": '<path d="M22 16 12 26 10.6 24.6 19.2 16 10.6 7.4 12 6z"/>',
136
154
  "chevron--sort": '<path d="M16 28 9 21 10.41 19.59 16 25.17 21.59 19.59 23 21 16 28z"/><path d="M16 4 23 11 21.59 12.41 16 6.83 10.41 12.41 9 11 16 4z"/>',
155
+ "chevron--up": '<path d="M16 10 26 20 24.6 21.4 16 12.8 7.4 21.4 6 20z"/>',
137
156
  "circle-dash": '<path d="M7.7,4.7a14.7,14.7,0,0,0-3,3.1L6.3,9A13.26,13.26,0,0,1,8.9,6.3Z"/><path d="M4.6,12.3l-1.9-.6A12.51,12.51,0,0,0,2,16H4A11.48,11.48,0,0,1,4.6,12.3Z"/><path d="M2.7,20.4a14.4,14.4,0,0,0,2,3.9l1.6-1.2a12.89,12.89,0,0,1-1.7-3.3Z"/><path d="M7.8,27.3a14.4,14.4,0,0,0,3.9,2l.6-1.9A12.89,12.89,0,0,1,9,25.7Z"/><path d="M11.7,2.7l.6,1.9A11.48,11.48,0,0,1,16,4V2A12.51,12.51,0,0,0,11.7,2.7Z"/><path d="M24.2,27.3a15.18,15.18,0,0,0,3.1-3.1L25.7,23A11.53,11.53,0,0,1,23,25.7Z"/><path d="M27.4,19.7l1.9.6A15.47,15.47,0,0,0,30,16H28A11.48,11.48,0,0,1,27.4,19.7Z"/><path d="M29.2,11.6a14.4,14.4,0,0,0-2-3.9L25.6,8.9a12.89,12.89,0,0,1,1.7,3.3Z"/><path d="M24.1,4.6a14.4,14.4,0,0,0-3.9-2l-.6,1.9a12.89,12.89,0,0,1,3.3,1.7Z"/><path d="M20.3,29.3l-.6-1.9A11.48,11.48,0,0,1,16,28v2A21.42,21.42,0,0,0,20.3,29.3Z"/>',
138
157
  "close": '<path d="M17.4141 16 24 9.4141 22.5859 8 16 14.5859 9.4143 8 8 9.4141 14.5859 16 8 22.5859 9.4143 24 16 17.4141 22.5859 24 24 22.5859 17.4141 16z"/>',
158
+ "cloud--download": '<path d="M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"/><path d="M17 26.17 17 14 15 14 15 26.17 12.41 23.59 11 25 16 30 21 25 19.59 23.59 17 26.17z"/>',
159
+ "cloud--upload": '<path d="M11 18 12.41 19.41 15 16.83 15 29 17 29 17 16.83 19.59 19.41 21 18 16 13 11 18z"/><path d="M23.5,22H23V20h.5a4.5,4.5,0,0,0,.36-9L23,11l-.1-.82a7,7,0,0,0-13.88,0L9,11,8.14,11a4.5,4.5,0,0,0,.36,9H9v2H8.5A6.5,6.5,0,0,1,7.2,9.14a9,9,0,0,1,17.6,0A6.5,6.5,0,0,1,23.5,22Z"/>',
139
160
  "color-palette": '<circle cx="10" cy="12" r="2"/><circle cx="16" cy="9" r="2"/><circle cx="22" cy="12" r="2"/><circle cx="23" cy="18" r="2"/><circle cx="19" cy="23" r="2"/><path d="M16.54,2A14,14,0,0,0,2,16a4.82,4.82,0,0,0,6.09,4.65l1.12-.31A3,3,0,0,1,13,23.24V27a3,3,0,0,0,3,3A14,14,0,0,0,30,15.46,14.05,14.05,0,0,0,16.54,2Zm8.11,22.31A11.93,11.93,0,0,1,16,28a1,1,0,0,1-1-1V23.24a5,5,0,0,0-5-5,5.07,5.07,0,0,0-1.33.18l-1.12.31A2.82,2.82,0,0,1,4,16,12,12,0,0,1,16.47,4,12.18,12.18,0,0,1,28,15.53,11.89,11.89,0,0,1,24.65,24.32Z"/>',
140
161
  "copy": '<path d="M28,10V28H10V10H28m0-2H10a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2Z"/><path d="M4,18H2V4A2,2,0,0,1,4,2H18V4H4Z"/>',
162
+ "currency": '<path d="M21,12V10H17V7H15v3H13a2.002,2.002,0,0,0-2,2v3a2.002,2.002,0,0,0,2,2h6v3H11v2h4v3h2V22h2a2.0023,2.0023,0,0,0,2-2V17a2.002,2.002,0,0,0-2-2H13V12Z"/><path d="M16,4A12,12,0,1,1,4,16,12.0353,12.0353,0,0,1,16,4m0-2A14,14,0,1,0,30,16,14.0412,14.0412,0,0,0,16,2Z"/>',
163
+ "currency--dollar": '<path d="M23,20.5151c0-4.6152-3.78-5.1411-6.8171-5.563-3.31-.4609-5.1829-.86-5.1829-3.71C11,8.8491,13.5071,8,15.6538,8a6.7538,6.7538,0,0,1,5.5681,2.6279l1.5562-1.2558A8.6508,8.6508,0,0,0,17,6.0962V3H15V6.022c-3.6152.2192-6,2.26-6,5.22,0,4.73,3.83,5.2627,6.9075,5.69C19.16,17.3848,21,17.7744,21,20.5151,21,23.5474,17.8674,24,16,24c-3.4294,0-4.8782-.9639-6.2219-2.6279L8.2219,22.6279A8.4382,8.4382,0,0,0,15,25.9648V29h2V25.9551C20.7256,25.6509,23,23.6279,23,20.5151Z"/>',
164
+ "currency--euro": '<path d="M17,26c-3.6162,0-6.3328-2.2974-7.4456-6H19V18H9.1321A15.2782,15.2782,0,0,1,9,16c0-.33.01-.6641.0259-1H19V13H9.2371C9.8447,9.3525,11.81,6,17,6c3.8533,0,5.5315,1.6465,7.1282,4.4893l1.7436-.9786C24.2649,6.6484,22.0779,4,17,4,10.6448,4,7,8.374,7,16c0,7.0654,4.1121,12,10,12,5.0779,0,7.2649-2.6484,8.8718-5.5107l-1.7436-.9786C22.5315,24.3535,20.8533,26,17,26Z"/>',
165
+ "data--base": '<path d="M24,3H8A2,2,0,0,0,6,5V27a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V5A2,2,0,0,0,24,3Zm0,2v6H8V5ZM8,19V13H24v6Zm0,8V21H24v6Z"/><circle cx="11" cy="8" r="1"/><circle cx="11" cy="16" r="1"/><circle cx="11" cy="24" r="1"/>',
166
+ "debug": '<path d="M29.83,20l.34-2L25,17.15V13c0-.08,0-.15,0-.23l5.06-1.36-.51-1.93-4.83,1.29A9,9,0,0,0,20,5V2H18V4.23a8.81,8.81,0,0,0-4,0V2H12V5a9,9,0,0,0-4.71,5.82L2.46,9.48,2,11.41,7,12.77c0,.08,0,.15,0,.23v4.15L1.84,18l.32,2L7,19.18a8.9,8.9,0,0,0,.82,3.57L3.29,27.29l1.42,1.42,4.19-4.2a9,9,0,0,0,14.2,0l4.19,4.2,1.42-1.42-4.54-4.54A8.9,8.9,0,0,0,25,19.18ZM15,25.92A7,7,0,0,1,9,19V13h6ZM9.29,11a7,7,0,0,1,13.42,0ZM23,19a7,7,0,0,1-6,6.92V13h6Z"/>',
167
+ "delivery--parcel": '<path d="M29.4819,8.624l-10-5.5a1,1,0,0,0-.9638,0l-10,5.5a1,1,0,0,0,0,1.752L18,15.5913V26.3086l-3.0362-1.6693L14,26.3912l4.5181,2.4848a.9984.9984,0,0,0,.9638,0l10-5.5A1,1,0,0,0,30,22.5V9.5A1,1,0,0,0,29.4819,8.624ZM19,5.1416,26.9248,9.5,19,13.8584,11.0752,9.5Zm9,16.7671-8,4.4V15.5913l8-4.4Z"/><path d="M2 14H10V16H2z" transform="matrix(-1 0 0 -1 12 30)"/><path d="M4 22H12V24H4z" transform="matrix(-1 0 0 -1 16 46)"/><path d="M6 18H14V20H6z" transform="matrix(-1 0 0 -1 20 38)"/>',
141
168
  "delivery-truck": '<path d="M29.92,16.61l-3-7A1,1,0,0,0,26,9H23V7a1,1,0,0,0-1-1H3A1,1,0,0,0,2,7V24a1,1,0,0,0,1,1H5.14a4,4,0,0,0,7.72,0h6.28a4,4,0,0,0,7.72,0H29a1,1,0,0,0,1-1V17A1,1,0,0,0,29.92,16.61ZM23,11h2.34l2.14,5H23ZM9,26a2,2,0,1,1,2-2A2,2,0,0,1,9,26Zm10.14-3H12.86a4,4,0,0,0-7.72,0H4V8H21V20.56A4,4,0,0,0,19.14,23ZM23,26a2,2,0,1,1,2-2A2,2,0,0,1,23,26Zm5-3H26.86A4,4,0,0,0,23,20V18h5Z"/>',
142
169
  "document": '<path d="M25.7,9.3l-7-7C18.5,2.1,18.3,2,18,2H8C6.9,2,6,2.9,6,4v24c0,1.1,0.9,2,2,2h16c1.1,0,2-0.9,2-2V10C26,9.7,25.9,9.5,25.7,9.3 z M18,4.4l5.6,5.6H18V4.4z M24,28H8V4h8v6c0,1.1,0.9,2,2,2h6V28z"/><path d="M10 22H22V24H10z"/><path d="M10 16H22V18H10z"/>',
170
+ "document--add": '<path d="M30 24 26 24 26 20 24 20 24 24 20 24 20 26 24 26 24 30 26 30 26 26 30 26 30 24z"/><path d="M16,28H8V4h8v6a2.0058,2.0058,0,0,0,2,2h6v4h2V10a.9092.9092,0,0,0-.3-.7l-7-7A.9087.9087,0,0,0,18,2H8A2.0058,2.0058,0,0,0,6,4V28a2.0058,2.0058,0,0,0,2,2h8ZM18,4.4,23.6,10H18Z"/>',
143
171
  "download": '<path d="M26,24v4H6V24H4v4H4a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2h0V24Z"/><path d="M26 14 24.59 12.59 17 20.17 17 2 15 2 15 20.17 7.41 12.59 6 14 16 24 26 14z"/>',
144
172
  "edit": '<path d="M2 26H30V28H2z"/><path d="M25.4,9c0.8-0.8,0.8-2,0-2.8c0,0,0,0,0,0l-3.6-3.6c-0.8-0.8-2-0.8-2.8,0c0,0,0,0,0,0l-15,15V24h6.4L25.4,9z M20.4,4L24,7.6 l-3,3L17.4,7L20.4,4z M6,22v-3.6l10-10l3.6,3.6l-10,10H6z"/>',
173
+ "email": '<path d="M28,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V8A2,2,0,0,0,28,6ZM25.8,8,16,14.78,6.2,8ZM4,24V8.91l11.43,7.91a1,1,0,0,0,1.14,0L28,8.91V24Z"/>',
145
174
  "error--filled": '<path fill="none" d="M14.9 7.2H17.1V24.799H14.9z" data-icon-path="inner-path" transform="rotate(-45 16 16)"/><path d="M16,2A13.914,13.914,0,0,0,2,16,13.914,13.914,0,0,0,16,30,13.914,13.914,0,0,0,30,16,13.914,13.914,0,0,0,16,2Zm5.4449,21L9,10.5557,10.5557,9,23,21.4448Z"/>',
175
+ "events": '<path d="M26,14H24v2h2a3.0033,3.0033,0,0,1,3,3v4h2V19A5.0058,5.0058,0,0,0,26,14Z"/><path d="M24,4a3,3,0,1,1-3,3,3,3,0,0,1,3-3m0-2a5,5,0,1,0,5,5A5,5,0,0,0,24,2Z"/><path d="M23,30H21V28a3.0033,3.0033,0,0,0-3-3H14a3.0033,3.0033,0,0,0-3,3v2H9V28a5.0059,5.0059,0,0,1,5-5h4a5.0059,5.0059,0,0,1,5,5Z"/><path d="M16,13a3,3,0,1,1-3,3,3,3,0,0,1,3-3m0-2a5,5,0,1,0,5,5A5,5,0,0,0,16,11Z"/><path d="M8,14H6a5.0059,5.0059,0,0,0-5,5v4H3V19a3.0033,3.0033,0,0,1,3-3H8Z"/><path d="M8,4A3,3,0,1,1,5,7,3,3,0,0,1,8,4M8,2a5,5,0,1,0,5,5A5,5,0,0,0,8,2Z"/>',
146
176
  "filter": '<path d="M18,28H14a2,2,0,0,1-2-2V18.41L4.59,11A2,2,0,0,1,4,9.59V6A2,2,0,0,1,6,4H26a2,2,0,0,1,2,2V9.59A2,2,0,0,1,27.41,11L20,18.41V26A2,2,0,0,1,18,28ZM6,6V9.59l8,8V26h4V17.59l8-8V6Z"/>',
177
+ "filter--edit": '<path d="M26,6H4V9.17l7.41,7.42.59.58V26h4V24h2v2a2,2,0,0,1-2,2H12a2,2,0,0,1-2-2V18L2.59,10.59A2,2,0,0,1,2,9.17V6A2,2,0,0,1,4,4H26Z"/><path d="M29.71,11.29l-3-3a1,1,0,0,0-1.42,0L16,17.59V22h4.41l9.3-9.29A1,1,0,0,0,29.71,11.29ZM19.59,20H18V18.41l5-5L24.59,15ZM26,13.59,24.41,12,26,10.41,27.59,12Z"/>',
147
178
  "flash": '<path d="M11.61,29.92a1,1,0,0,1-.6-1.07L12.83,17H8a1,1,0,0,1-1-1.23l3-13A1,1,0,0,1,11,2H21a1,1,0,0,1,.78.37,1,1,0,0,1,.2.85L20.25,11H25a1,1,0,0,1,.9.56,1,1,0,0,1-.11,1l-13,17A1,1,0,0,1,12,30,1.09,1.09,0,0,1,11.61,29.92ZM17.75,13l2-9H11.8L9.26,15h5.91L13.58,25.28,23,13Z"/>',
179
+ "flow": '<path d="M27,22.14V17a2,2,0,0,0-2-2H17V9.86a4,4,0,1,0-2,0V15H7a2,2,0,0,0-2,2v5.14a4,4,0,1,0,2,0V17H25v5.14a4,4,0,1,0,2,0ZM8,26a2,2,0,1,1-2-2A2,2,0,0,1,8,26ZM14,6a2,2,0,1,1,2,2A2,2,0,0,1,14,6ZM26,28a2,2,0,1,1,2-2A2,2,0,0,1,26,28Z"/>',
180
+ "folder": '<path d="M11.17,6l3.42,3.41.58.59H28V26H4V6h7.17m0-2H4A2,2,0,0,0,2,6V26a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10a2,2,0,0,0-2-2H16L12.59,4.59A2,2,0,0,0,11.17,4Z"/>',
181
+ "function": '<path d="M19.6262,29.5256,19.11,27.5935A12.0035,12.0035,0,0,0,25.2312,8.3323l1.5376-1.2788a14.0033,14.0033,0,0,1-7.1426,22.4721Z"/><path d="M10,29H8V25.18l.8037-.1607C10.2617,24.728,12,23.6206,12,20V18.6182l-4-2V14.3818l4-2V12c0-5.4673,3.9253-9,10-9h2V6.82l-.8037.1607C21.7383,7.272,20,8.3794,20,12v.3818l4,2v2.2364l-4,2V20C20,25.4673,16.0747,29,10,29Zm0-2c4.9346,0,8-2.6821,8-7V17.3818L21.7642,15.5,18,13.6182V12c0-4.5781,2.3853-6.1924,4-6.76V5c-4.9346,0-8,2.6821-8,7v1.6182L10.2358,15.5,14,17.3818V20c0,4.5781-2.3853,6.1924-4,6.76Z"/><path d="M5.2312,24.9465A14.0032,14.0032,0,0,1,12.3779,2.4734l.5161,1.9321A12.0035,12.0035,0,0,0,6.7688,23.6677Z"/>',
182
+ "globe": '<path d="M14,4a7,7,0,1,1-7,7,7,7,0,0,1,7-7m0-2a9,9,0,1,0,9,9A9,9,0,0,0,14,2Z"/><path d="M28,11a13.9563,13.9563,0,0,0-4.1051-9.8949L22.4813,2.5187A11.9944,11.9944,0,0,1,5.5568,19.5194l-.0381-.0381L4.1051,20.8949A13.9563,13.9563,0,0,0,14,25v3H10v2H20V28H16V24.84A14.0094,14.0094,0,0,0,28,11Z"/>',
148
183
  "grid": '<path d="M12,4H6A2,2,0,0,0,4,6v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V6A2,2,0,0,0,12,4Zm0,8H6V6h6Z"/><path d="M26,4H20a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V6A2,2,0,0,0,26,4Zm0,8H20V6h6Z"/><path d="M12,18H6a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V20A2,2,0,0,0,12,18Zm0,8H6V20h6Z"/><path d="M26,18H20a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h6a2,2,0,0,0,2-2V20A2,2,0,0,0,26,18Zm0,8H20V20h6Z"/>',
149
184
  "hashtag": '<path d="M28,12V10H22V4H20v6H12V4H10v6H4v2h6v8H4v2h6v6h2V22h8v6h2V22h6V20H22V12Zm-8,8H12V12h8Z"/>',
150
185
  "help": '<path d="M16,2A14,14,0,1,0,30,16,14,14,0,0,0,16,2Zm0,26A12,12,0,1,1,28,16,12,12,0,0,1,16,28Z"/><circle cx="16" cy="23.5" r="1.5"/><path d="M17,8H15.5A4.49,4.49,0,0,0,11,12.5V13h2v-.5A2.5,2.5,0,0,1,15.5,10H17a2.5,2.5,0,0,1,0,5H15v4.5h2V17a4.5,4.5,0,0,0,0-9Z"/>',
151
186
  "home": '<path d="M16.6123,2.2138a1.01,1.01,0,0,0-1.2427,0L1,13.4194l1.2427,1.5717L4,13.6209V26a2.0041,2.0041,0,0,0,2,2H26a2.0037,2.0037,0,0,0,2-2V13.63L29.7573,15,31,13.4282ZM18,26H14V18h4Zm2,0V18a2.0023,2.0023,0,0,0-2-2H14a2.002,2.002,0,0,0-2,2v8H6V12.0615l10-7.79,10,7.8005V26Z"/>',
187
+ "idea": '<path d="M11 24H21V26H11z"/><path d="M13 28H19V30H13z"/><path d="M16,2A10,10,0,0,0,6,12a9.19,9.19,0,0,0,3.46,7.62c1,.93,1.54,1.46,1.54,2.38h2c0-1.84-1.11-2.87-2.19-3.86A7.2,7.2,0,0,1,8,12a8,8,0,0,1,16,0,7.2,7.2,0,0,1-2.82,6.14c-1.07,1-2.18,2-2.18,3.86h2c0-.92.53-1.45,1.54-2.39A9.18,9.18,0,0,0,26,12,10,10,0,0,0,16,2Z"/>',
188
+ "identification": '<path d="M28,6V26H4V6H28m0-2H4A2,2,0,0,0,2,6V26a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V6a2,2,0,0,0-2-2Z"/><path d="M6 10H13V12H6z"/><path d="M6 14H10V16H6z"/><path d="M23,18H17a3,3,0,0,0-3,3v2h2V21a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1v2h2V21A3,3,0,0,0,23,18Z"/><path d="M20,17a4,4,0,1,0-4-4A4,4,0,0,0,20,17Zm0-6a2,2,0,1,1-2,2A2,2,0,0,1,20,11Z"/>',
152
189
  "information": '<path d="M17 22 17 14 13 14 13 16 15 16 15 22 12 22 12 24 20 24 20 22 17 22z"/><path d="M16,8a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,16,8Z"/><path d="M16,30A14,14,0,1,1,30,16,14,14,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4Z"/>',
190
+ "information--square": '<path d="M17 22 17 14 13 14 13 16 15 16 15 22 12 22 12 24 20 24 20 22 17 22z"/><path d="M16,8a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,16,8Z"/><path d="M26,28H6a2.0023,2.0023,0,0,1-2-2V6A2.0023,2.0023,0,0,1,6,4H26a2.0023,2.0023,0,0,1,2,2V26A2.0023,2.0023,0,0,1,26,28ZM6,6V26H26V6Z"/>',
191
+ "inventory-management": '<path d="M19 24H23V28H19z"/><path d="M26 24H30V28H26z"/><path d="M19 17H23V21H19z"/><path d="M26 17H30V21H26z"/><path d="M17,24H4V10H28v5h2V10a2.0023,2.0023,0,0,0-2-2H22V4a2.0023,2.0023,0,0,0-2-2H12a2.002,2.002,0,0,0-2,2V8H4a2.002,2.002,0,0,0-2,2V24a2.0023,2.0023,0,0,0,2,2H17ZM12,4h8V8H12Z"/>',
153
192
  "launch": '<path d="M26,28H6a2.0027,2.0027,0,0,1-2-2V6A2.0027,2.0027,0,0,1,6,4H16V6H6V26H26V16h2V26A2.0027,2.0027,0,0,1,26,28Z"/><path d="M20 2 20 4 26.586 4 18 12.586 19.414 14 28 5.414 28 12 30 12 30 2 20 2z"/>',
154
193
  "layers": '<path d="M16,24a.9967.9967,0,0,1-.4741-.12l-13-7L3.4741,15.12,16,21.8643,28.5259,15.12l.9482,1.7607-13,7A.9967.9967,0,0,1,16,24Z"/><path d="M16,30a.9967.9967,0,0,1-.4741-.12l-13-7L3.4741,21.12,16,27.8643,28.5259,21.12l.9482,1.7607-13,7A.9967.9967,0,0,1,16,30Z"/><path d="M16,18a.9967.9967,0,0,1-.4741-.12l-13-7a1,1,0,0,1,0-1.7607l13-7a.9982.9982,0,0,1,.9482,0l13,7a1,1,0,0,1,0,1.7607l-13,7A.9967.9967,0,0,1,16,18ZM5.1094,10,16,15.8643,26.8906,10,16,4.1358Z"/>',
194
+ "license": '<path d="M10 6H22V8H10z"/><path d="M10 10H22V12H10z"/><path d="M10 24H16V26H10z"/><path d="M10 14H16V16H10z"/><path d="M24,30H8a2.0023,2.0023,0,0,1-2-2V4A2.0023,2.0023,0,0,1,8,2H24a2.0023,2.0023,0,0,1,2,2V28A2.0023,2.0023,0,0,1,24,30ZM8,4V28H24V4Z"/>',
155
195
  "list": '<path d="M10 6H28V8H10z"/><path d="M10 24H28V26H10z"/><path d="M10 15H28V17H10z"/><path d="M4 15H6V17H4z"/><path d="M4 6H6V8H4z"/><path d="M4 24H6V26H4z"/>',
156
196
  "list--boxes": '<path d="M16 8H30V10H16z"/><path d="M16 22H30V24H16z"/><path d="M10,14H4a2.0023,2.0023,0,0,1-2-2V6A2.0023,2.0023,0,0,1,4,4h6a2.0023,2.0023,0,0,1,2,2v6A2.0023,2.0023,0,0,1,10,14ZM4,6v6h6.0012L10,6Z"/><path d="M10,28H4a2.0023,2.0023,0,0,1-2-2V20a2.0023,2.0023,0,0,1,2-2h6a2.0023,2.0023,0,0,1,2,2v6A2.0023,2.0023,0,0,1,10,28ZM4,20v6h6.0012L10,20Z"/>',
157
197
  "list--checked": '<path d="M16 22H30V24H16z"/><path d="M14 19.4 12.6 18 6 24.6 3.4 22 2 23.4 6 27.4z"/><path d="M16 8H30V10H16z"/><path d="M14 5.4 12.6 4 6 10.6 3.4 8 2 9.4 6 13.4z"/>',
158
198
  "location": '<path d="M16,18a5,5,0,1,1,5-5A5.0057,5.0057,0,0,1,16,18Zm0-8a3,3,0,1,0,3,3A3.0033,3.0033,0,0,0,16,10Z"/><path d="M16,30,7.5645,20.0513c-.0479-.0571-.3482-.4515-.3482-.4515A10.8888,10.8888,0,0,1,5,13a11,11,0,0,1,22,0,10.8844,10.8844,0,0,1-2.2148,6.5973l-.0015.0025s-.3.3944-.3447.4474ZM8.8125,18.395c.001.0007.2334.3082.2866.3744L16,26.9079l6.91-8.15c.0439-.0552.2783-.3649.2788-.3657A8.901,8.901,0,0,0,25,13,9,9,0,1,0,7,13a8.9054,8.9054,0,0,0,1.8125,5.395Z"/>',
199
+ "location--company": '<path d="M16,30,7.5645,20.0513c-.0479-.0571-.3482-.4515-.3482-.4515A10.8888,10.8888,0,0,1,5,13a11,11,0,0,1,22,0,10.8844,10.8844,0,0,1-2.2148,6.5973l-.0015.0025s-.3.3944-.3447.4474ZM8.8125,18.395c.001.0007.2334.3082.2866.3744L16,26.9079l6.91-8.15c.0439-.0552.2783-.3649.2788-.3657A8.901,8.901,0,0,0,25,13,9,9,0,0,0,7,13a8.9054,8.9054,0,0,0,1.8125,5.395Z"/><path d="M21,18H19V10H13v8H11V10a2.0021,2.0021,0,0,1,2-2h6a2.0021,2.0021,0,0,1,2,2Z"/><path d="M15 16H17V18H15z"/><path d="M15 12H17V14H15z"/>',
159
200
  "locked": '<path d="M24,14H22V8A6,6,0,0,0,10,8v6H8a2,2,0,0,0-2,2V28a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V16A2,2,0,0,0,24,14ZM12,8a4,4,0,0,1,8,0v6H12ZM24,28H8V16H24Z"/>',
201
+ "login": '<path d="M26,30H14a2,2,0,0,1-2-2V25h2v3H26V4H14V7H12V4a2,2,0,0,1,2-2H26a2,2,0,0,1,2,2V28A2,2,0,0,1,26,30Z"/><path d="M14.59 20.59 18.17 17 4 17 4 15 18.17 15 14.59 11.41 16 10 22 16 16 22 14.59 20.59z"/>',
202
+ "logout": '<path d="M6,30H18a2.0023,2.0023,0,0,0,2-2V25H18v3H6V4H18V7h2V4a2.0023,2.0023,0,0,0-2-2H6A2.0023,2.0023,0,0,0,4,4V28A2.0023,2.0023,0,0,0,6,30Z"/><path d="M20.586 20.586 24.172 17 10 17 10 15 24.172 15 20.586 11.414 22 10 28 16 22 22 20.586 20.586z"/>',
203
+ "maximize": '<path d="M20 2 20 4 26.586 4 18 12.582 19.414 14 28 5.414 28 12 30 12 30 2 20 2z"/><path d="M14 19.416 12.592 18 4 26.586 4 20 2 20 2 30 12 30 12 28 5.414 28 14 19.416z"/>',
160
204
  "menu": '<path d="M4 6H28V8H4z"/><path d="M4 24H28V26H4z"/><path d="M4 12H28V14H4z"/><path d="M4 18H28V20H4z"/>',
161
205
  "minimize": '<path d="M4 18 4 20 10.586 20 2 28.582 3.414 30 12 21.414 12 28 14 28 14 18 4 18z"/><path d="M30 3.416 28.592 2 20 10.586 20 4 18 4 18 14 28 14 28 12 21.414 12 30 3.416z"/>',
162
206
  "misuse": '<path d="M16,2C8.3,2,2,8.3,2,16s6.3,14,14,14s14-6.3,14-14S23.7,2,16,2z M21.4,23L16,17.6L10.6,23L9,21.4l5.4-5.4L9,10.6L10.6,9 l5.4,5.4L21.4,9l1.6,1.6L17.6,16l5.4,5.4L21.4,23z"/><path fill="none" d="M21.4,23L16,17.6L10.6,23L9,21.4l5.4-5.4L9,10.6L10.6,9l5.4,5.4L21.4,9l1.6,1.6L17.6,16 l5.4,5.4L21.4,23z" data-icon-path="inner-path" opacity="0"/>',
207
+ "money": '<path d="M2 22H30V24H2z"/><path d="M2 26H30V28H2z"/><path d="M24,10a2,2,0,1,0,2,2,2,2,0,0,0-2-2Z"/><path d="M16,16a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,16,16Zm0-6a2,2,0,1,0,2,2A2.002,2.002,0,0,0,16,10Z"/><path d="M8,10a2,2,0,1,0,2,2,2,2,0,0,0-2-2Z"/><path d="M28,20H4a2.0051,2.0051,0,0,1-2-2V6A2.0051,2.0051,0,0,1,4,4H28a2.0051,2.0051,0,0,1,2,2V18A2.0027,2.0027,0,0,1,28,20ZM28,6H4V18H28Z"/>',
208
+ "notebook": '<path d="M19 10H26V12H19z"/><path d="M19 15H26V17H19z"/><path d="M19 20H26V22H19z"/><path d="M28,5H4A2.002,2.002,0,0,0,2,7V25a2.0023,2.0023,0,0,0,2,2H28a2.0027,2.0027,0,0,0,2-2V7A2.0023,2.0023,0,0,0,28,5ZM4,7H15V25H4ZM17,25V7H28l.002,18Z"/>',
163
209
  "notification": '<path d="M28.7071,19.293,26,16.5859V13a10.0136,10.0136,0,0,0-9-9.9492V1H15V3.0508A10.0136,10.0136,0,0,0,6,13v3.5859L3.2929,19.293A1,1,0,0,0,3,20v3a1,1,0,0,0,1,1h7v.7768a5.152,5.152,0,0,0,4.5,5.1987A5.0057,5.0057,0,0,0,21,25V24h7a1,1,0,0,0,1-1V20A1,1,0,0,0,28.7071,19.293ZM19,25a3,3,0,0,1-6,0V24h6Zm8-3H5V20.4141L7.707,17.707A1,1,0,0,0,8,17V13a8,8,0,0,1,16,0v4a1,1,0,0,0,.293.707L27,20.4141Z"/>',
210
+ "overflow-menu--horizontal": '<circle cx="8" cy="16" r="2"/><circle cx="16" cy="16" r="2"/><circle cx="24" cy="16" r="2"/>',
164
211
  "overflow-menu--vertical": '<circle cx="16" cy="8" r="2"/><circle cx="16" cy="16" r="2"/><circle cx="16" cy="24" r="2"/>',
212
+ "partnership": '<path d="M8,9a4,4,0,1,1,4-4A4,4,0,0,1,8,9ZM8,3a2,2,0,1,0,2,2A2,2,0,0,0,8,3Z"/><path d="M24,9a4,4,0,1,1,4-4A4,4,0,0,1,24,9Zm0-6a2,2,0,1,0,2,2A2,2,0,0,0,24,3Z"/><path d="M26,30H22a2,2,0,0,1-2-2V21h2v7h4V19h2V13a1,1,0,0,0-1-1H20.58L16,20l-4.58-8H5a1,1,0,0,0-1,1v6H6v9h4V21h2v7a2,2,0,0,1-2,2H6a2,2,0,0,1-2-2V21a2,2,0,0,1-2-2V13a3,3,0,0,1,3-3h7.58L16,16l3.42-6H27a3,3,0,0,1,3,3v6a2,2,0,0,1-2,2v7A2,2,0,0,1,26,30Z"/>',
213
+ "payment--methods": '<path d="M5,26V15.8281l-3.5859,3.586L0,18l6-6,6,6-1.4141,1.4141-3.5859-3.586v10.1719h12v2H7c-1.104-.0013-1.9987-.896-2-2Z"/><path d="M31,18h-3v-2h-2v2h-1c-1.1046,0-2,.8954-2,2v2c0,1.1046,.8954,2,2,2h4v2h-6s0,2,0,2h3v2h2v-2h1c1.1046,0,2-.8954,2-2v-2c0-1.1046-.8954-2-2-2h-4v-2h6v-2Z"/><path d="M28,12V6c-.0012-1.104-.896-1.9988-2-2H12v2h14v6"/><path d="M2 6H7V8H2z"/><path d="M2 2H10V4H2z"/>',
214
+ "percentage": '<path d="M9,14a5,5,0,1,1,5-5A5.0055,5.0055,0,0,1,9,14ZM9,6a3,3,0,1,0,3,3A3.0033,3.0033,0,0,0,9,6Z"/><path d="M.029 15H31.97V17H.029z" transform="rotate(-45 16 16)"/><path d="M23,28a5,5,0,1,1,5-5A5.0055,5.0055,0,0,1,23,28Zm0-8a3,3,0,1,0,3,3A3.0033,3.0033,0,0,0,23,20Z"/>',
215
+ "phone": '<path d="M26,29h-.17C6.18,27.87,3.39,11.29,3,6.23A3,3,0,0,1,5.76,3h5.51a2,2,0,0,1,1.86,1.26L14.65,8a2,2,0,0,1-.44,2.16l-2.13,2.15a9.37,9.37,0,0,0,7.58,7.6l2.17-2.15A2,2,0,0,1,24,17.35l3.77,1.51A2,2,0,0,1,29,20.72V26A3,3,0,0,1,26,29ZM6,5A1,1,0,0,0,5,6v.08C5.46,12,8.41,26,25.94,27A1,1,0,0,0,27,26.06V20.72l-3.77-1.51-2.87,2.85L19.88,22C11.18,20.91,10,12.21,10,12.12l-.06-.48,2.84-2.87L11.28,5Z"/>',
216
+ "piggy-bank": '<path d="M16.5,14H20V12H18V11H16v1.0508A2.5,2.5,0,0,0,16.5,17h1a.5.5,0,0,1,0,1H14v2h2v1h2V19.9492A2.5,2.5,0,0,0,17.5,15h-1a.5.5,0,0,1,0-1Z"/><path d="M29,13H26.98A5.7789,5.7789,0,0,0,25,8.8525V5a1,1,0,0,0-1.6-.8L19.6665,7H15c-5.5095,0-9.4634,3.2412-9.9485,8H5a1.0009,1.0009,0,0,1-1-1V12H2v2a3.0033,3.0033,0,0,0,3,3h.07A9.1733,9.1733,0,0,0,9,23.5566V27a1,1,0,0,0,1,1h4a1,1,0,0,0,1-1V25h3v2a1,1,0,0,0,1,1h4a1,1,0,0,0,1-1V23.6372A5.0926,5.0926,0,0,0,26.8188,20H29a1,1,0,0,0,1-1V14A1,1,0,0,0,29,13Zm-1,5H25.124c-.3052,2.7529-.8235,3.4854-3.124,4.3154V26H20V23H13v3H11V22.3779A7.013,7.013,0,0,1,7,16c0-4.8354,4.0181-7,8-7h5.3335L23,7V9.7764c2.4182,1.8593,1.9126,3.186,2.0183,5.2236H28Z"/>',
217
+ "portfolio": '<path d="M28,10H22V6a2,2,0,0,0-2-2H12a2,2,0,0,0-2,2v4H4a2,2,0,0,0-2,2V26a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V12A2,2,0,0,0,28,10ZM12,6h8v4H12ZM4,26V12H28V26Z"/>',
165
218
  "printer": '<path d="M28,9H25V3H7V9H4a2,2,0,0,0-2,2V21a2,2,0,0,0,2,2H7v6H25V23h3a2,2,0,0,0,2-2V11A2,2,0,0,0,28,9ZM9,5H23V9H9ZM23,27H9V17H23Zm5-6H25V15H7v6H4V11H28Z"/>',
219
+ "purchase": '<path d="M28,6H4A2,2,0,0,0,2,8V24a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V8A2,2,0,0,0,28,6Zm0,2v3H4V8ZM4,24V13H28V24Z"/><path d="M6 20H16V22H6z"/>',
166
220
  "qr-code": '<path d="M24 26H26V28H24z" transform="rotate(-90 25 27)"/><path d="M18 22H20V24H18z" transform="rotate(-90 19 23)"/><path d="M18 30 22 30 22 28 20 28 20 26 18 26 18 30z"/><path d="M25 23H29V25H25z" transform="rotate(-90 27 24)"/><path d="M28 26 30 26 30 30 26 30 26 28 28 28 28 26z"/><path d="M26 20 26 18 30 18 30 22 28 22 28 20 26 20z"/><path d="M24 20 22 20 22 24 20 24 20 26 24 26 24 20z"/><path d="M19 17H21V21H19z" transform="rotate(-90 20 19)"/><path d="M6 22H10V26H6z"/><path d="M14,30H2V18H14ZM4,28h8V20H4Z"/><path d="M22 6H26V10H22z"/><path d="M30,14H18V2H30ZM20,12h8V4H20Z"/><path d="M6 6H10V10H6z"/><path d="M14,14H2V2H14ZM4,12h8V4H4Z"/>',
221
+ "receipt": '<path d="M21 16H23V18H21z"/><path d="M9 16H17V18H9z"/><path d="M21 12H23V14H21z"/><path d="M9 12H17V14H9z"/><path d="M9 8H23V10H9z"/><path d="M25,2H7A2.002,2.002,0,0,0,5,4V29a1,1,0,0,0,1,1H7a.9987.9987,0,0,0,.8-.4L10,26.667,12.2,29.6a1.0353,1.0353,0,0,0,1.6,0L16,26.667,18.2,29.6a1.0353,1.0353,0,0,0,1.6,0L22,26.667,24.2,29.6a.9993.9993,0,0,0,.8.4h1a1,1,0,0,0,1-1V4A2.0023,2.0023,0,0,0,25,2Zm0,25.333L22.8,24.4a1.0353,1.0353,0,0,0-1.6,0L19,27.333,16.8,24.4a1.0353,1.0353,0,0,0-1.6,0L13,27.333,10.8,24.4a1.0353,1.0353,0,0,0-1.6,0L7,27.333V4H25Z"/>',
167
222
  "recently-viewed": '<path d="M20.59 22 15 16.41 15 7 17 7 17 15.58 22 20.59 20.59 22z"/><path d="M16,2A13.94,13.94,0,0,0,6,6.23V2H4v8h8V8H7.08A12,12,0,1,1,4,16H2A14,14,0,1,0,16,2Z"/>',
223
+ "redo": '<path d="M12,10H24.1851L20.5977,6.4141,22,5,28,11,22,17l-1.4023-1.4146L24.1821,12H12a6,6,0,0,0,0,12h8v2H12a8,8,0,0,1,0-16Z"/>',
168
224
  "renew": '<path d="M12,10H6.78A11,11,0,0,1,27,16h2A13,13,0,0,0,6,7.68V4H4v8h8Z"/><path d="M20,22h5.22A11,11,0,0,1,5,16H3a13,13,0,0,0,23,8.32V28h2V20H20Z"/>',
225
+ "repeat": '<path d="M6,6H26.1719l-3.586-3.5859L24,1l6,6-6,6-1.4141-1.4141L26.1719,8H6v7H4V8A2.0024,2.0024,0,0,1,6,6Z"/><path d="M9.4141,20.4141,5.8281,24H26V17h2v7a2.0024,2.0024,0,0,1-2,2H5.8281L9.414,29.5859,8,31,2,25l6-6Z"/>',
226
+ "report": '<path d="M10 18H18V20H10z"/><path d="M10 13H22V15H10z"/><path d="M10 23H15V25H10z"/><path d="M25,5H22V4a2,2,0,0,0-2-2H12a2,2,0,0,0-2,2V5H7A2,2,0,0,0,5,7V28a2,2,0,0,0,2,2H25a2,2,0,0,0,2-2V7A2,2,0,0,0,25,5ZM12,4h8V8H12ZM25,28H7V7h3v3H22V7h3Z"/>',
227
+ "request-quote": '<path d="M22,22v6H6V4H16V2H6A2,2,0,0,0,4,4V28a2,2,0,0,0,2,2H22a2,2,0,0,0,2-2V22Z"/><path d="M29.54,5.76l-3.3-3.3a1.6,1.6,0,0,0-2.24,0l-14,14V22h5.53l14-14a1.6,1.6,0,0,0,0-2.24ZM14.7,20H12V17.3l9.44-9.45,2.71,2.71ZM25.56,9.15,22.85,6.44l2.27-2.27,2.71,2.71Z"/>',
228
+ "reset": '<path d="M18,28A12,12,0,1,0,6,16v6.2L2.4,18.6,1,20l6,6,6-6-1.4-1.4L8,22.2V16H8A10,10,0,1,1,18,26Z"/>',
229
+ "rule": '<path d="M10 16H22V18H10z"/><path d="M10 10H22V12H10z"/><path d="M16,30,9.8242,26.7071A10.9815,10.9815,0,0,1,4,17V4A2.0022,2.0022,0,0,1,6,2H26a2.0022,2.0022,0,0,1,2,2V17a10.9815,10.9815,0,0,1-5.8242,9.7069ZM6,4V17a8.9852,8.9852,0,0,0,4.7656,7.9423L16,27.7333l5.2344-2.791A8.9852,8.9852,0,0,0,26,17V4Z"/>',
230
+ "save": '<path d="M27.71,9.29l-5-5A1,1,0,0,0,22,4H6A2,2,0,0,0,4,6V26a2,2,0,0,0,2,2H26a2,2,0,0,0,2-2V10A1,1,0,0,0,27.71,9.29ZM12,6h8v4H12Zm8,20H12V18h8Zm2,0V18a2,2,0,0,0-2-2H12a2,2,0,0,0-2,2v8H6V6h4v4a2,2,0,0,0,2,2h8a2,2,0,0,0,2-2V6.41l4,4V26Z"/>',
231
+ "scales": '<path d="M20,16a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L25.896,7.5562a.8913.8913,0,0,0-.0454-.0816A1,1,0,0,0,25,7H18.8218A3.0155,3.0155,0,0,0,17,5.1841V2H15V5.1841A3.0155,3.0155,0,0,0,13.1782,7H7a1,1,0,0,0-.8945.5527l-4,8A1,1,0,0,0,2,16a5,5,0,0,0,10,0,1,1,0,0,0-.1055-.4473L8.6182,9h4.56A3.0147,3.0147,0,0,0,15,10.8154V28H6v2H26V28H17V10.8159A3.0155,3.0155,0,0,0,18.8218,9h4.56l-3.2763,6.5527A1,1,0,0,0,20,16ZM7,19a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,7,19Zm2.3821-4H4.6179L7,10.2363ZM16,9a1,1,0,1,1,1-1A1.0009,1.0009,0,0,1,16,9Zm9,10a2.9958,2.9958,0,0,1-2.8152-2h5.63A2.9956,2.9956,0,0,1,25,19Zm0-8.7637L27.3821,15H22.6179Z"/>',
169
232
  "search": '<path d="M29,27.5859l-7.5521-7.5521a11.0177,11.0177,0,1,0-1.4141,1.4141L27.5859,29ZM4,13a9,9,0,1,1,9,9A9.01,9.01,0,0,1,4,13Z"/>',
233
+ "send": '<path d="M27.45,15.11l-22-11a1,1,0,0,0-1.08.12,1,1,0,0,0-.33,1L7,16,4,26.74A1,1,0,0,0,5,28a1,1,0,0,0,.45-.11l22-11a1,1,0,0,0,0-1.78Zm-20.9,10L8.76,17H18V15H8.76L6.55,6.89,24.76,16Z"/>',
170
234
  "settings": '<path d="M27,16.76c0-.25,0-.5,0-.76s0-.51,0-.77l1.92-1.68A2,2,0,0,0,29.3,11L26.94,7a2,2,0,0,0-1.73-1,2,2,0,0,0-.64.1l-2.43.82a11.35,11.35,0,0,0-1.31-.75l-.51-2.52a2,2,0,0,0-2-1.61H13.64a2,2,0,0,0-2,1.61l-.51,2.52a11.48,11.48,0,0,0-1.32.75L7.43,6.06A2,2,0,0,0,6.79,6,2,2,0,0,0,5.06,7L2.7,11a2,2,0,0,0,.41,2.51L5,15.24c0,.25,0,.5,0,.76s0,.51,0,.77L3.11,18.45A2,2,0,0,0,2.7,21L5.06,25a2,2,0,0,0,1.73,1,2,2,0,0,0,.64-.1l2.43-.82a11.35,11.35,0,0,0,1.31.75l.51,2.52a2,2,0,0,0,2,1.61h4.72a2,2,0,0,0,2-1.61l.51-2.52a11.48,11.48,0,0,0,1.32-.75l2.42.82a2,2,0,0,0,.64.1,2,2,0,0,0,1.73-1L29.3,21a2,2,0,0,0-.41-2.51ZM25.21,24l-3.43-1.16a8.86,8.86,0,0,1-2.71,1.57L18.36,28H13.64l-.71-3.55a9.36,9.36,0,0,1-2.7-1.57L6.79,24,4.43,20l2.72-2.4a8.9,8.9,0,0,1,0-3.13L4.43,12,6.79,8l3.43,1.16a8.86,8.86,0,0,1,2.71-1.57L13.64,4h4.72l.71,3.55a9.36,9.36,0,0,1,2.7,1.57L25.21,8,27.57,12l-2.72,2.4a8.9,8.9,0,0,1,0,3.13L27.57,20Z"/><path d="M16,22a6,6,0,1,1,6-6A5.94,5.94,0,0,1,16,22Zm0-10a3.91,3.91,0,0,0-4,4,3.91,3.91,0,0,0,4,4,3.91,3.91,0,0,0,4-4A3.91,3.91,0,0,0,16,12Z"/>',
171
235
  "settings--adjust": '<path d="M30,8h-4.1c-0.5-2.3-2.5-4-4.9-4s-4.4,1.7-4.9,4H2v2h14.1c0.5,2.3,2.5,4,4.9,4s4.4-1.7,4.9-4H30V8z M21,12c-1.7,0-3-1.3-3-3 s1.3-3,3-3s3,1.3,3,3S22.7,12,21,12z"/><path d="M2,24h4.1c0.5,2.3,2.5,4,4.9,4s4.4-1.7,4.9-4H30v-2H15.9c-0.5-2.3-2.5-4-4.9-4s-4.4,1.7-4.9,4H2V24z M11,20c1.7,0,3,1.3,3,3 s-1.3,3-3,3s-3-1.3-3-3S9.3,20,11,20z"/>',
236
+ "shopping--bag": '<path d="M28.76,11.35A1,1,0,0,0,28,11H22V7a3,3,0,0,0-3-3H13a3,3,0,0,0-3,3v4H4a1,1,0,0,0-1,1.15L4.88,24.3a2,2,0,0,0,2,1.7H25.14a2,2,0,0,0,2-1.7L29,12.15A1,1,0,0,0,28.76,11.35ZM12,7a1,1,0,0,1,1-1h6a1,1,0,0,1,1,1v4H12ZM25.14,24H6.86L5.17,13H26.83Z"/>',
172
237
  "shopping--cart": '<circle cx="10" cy="28" r="2"/><circle cx="24" cy="28" r="2"/><path d="M28,7H5.82L5,2.8A1,1,0,0,0,4,2H0V4H3.18L7,23.2A1,1,0,0,0,8,24H26V22H8.82L8,18H26a1,1,0,0,0,1-.78l2-9A1,1,0,0,0,28,7Zm-2.8,9H7.62L6.22,9H26.75Z"/>',
238
+ "sort--ascending": '<path d="M18 22 19.414 20.586 23 24.172 23 4 25 4 25 24.172 28.586 20.586 30 22 24 28 18 22z"/><path d="M2 18H16V20H2z"/><path d="M6 12H16V14H6z"/><path d="M10 6H16V8H10z"/>',
239
+ "sort--descending": '<path d="M18 22 19.414 20.586 23 24.172 23 4 25 4 25 24.172 28.586 20.586 30 22 24 28 18 22z"/><path d="M2 6H16V8H2z"/><path d="M6 12H16V14H6z"/><path d="M10 18H16V20H10z"/>',
240
+ "star": '<path d="M16,6.52l2.76,5.58.46,1,1,.15,6.16.89L22,18.44l-.75.73.18,1,1.05,6.13-5.51-2.89L16,23l-.93.49L9.56,26.34l1-6.13.18-1L10,18.44,5.58,14.09l6.16-.89,1-.15.46-1L16,6.52M16,2l-4.55,9.22L1.28,12.69l7.36,7.18L6.9,30,16,25.22,25.1,30,23.36,19.87l7.36-7.17L20.55,11.22Z"/>',
241
+ "star--filled": '<path d="M16,2l-4.55,9.22L1.28,12.69l7.36,7.18L6.9,30,16,25.22,25.1,30,23.36,19.87l7.36-7.17L20.55,11.22Z"/>',
173
242
  "subtract": '<path d="M8 15H24V17H8z"/>',
243
+ "table--split": '<path d="M27,3H5A2,2,0,0,0,3,5V27a2,2,0,0,0,2,2H27a2,2,0,0,0,2-2V5A2,2,0,0,0,27,3Zm0,2V9H5V5ZM17,11H27v7H17Zm-2,7H5V11H15ZM5,20H15v7H5Zm12,7V20H27v7Z"/>',
244
+ "tag": '<path d="M10,14a4,4,0,1,1,4-4A4.0045,4.0045,0,0,1,10,14Zm0-6a2,2,0,1,0,1.998,2.0044A2.002,2.002,0,0,0,10,8Z"/><path d="M16.6436,29.4145,2.5858,15.3555A2,2,0,0,1,2,13.9414V4A2,2,0,0,1,4,2h9.9413a2,2,0,0,1,1.4142.5858L29.4144,16.6436a2.0005,2.0005,0,0,1,0,2.8285l-9.9424,9.9425a2.0008,2.0008,0,0,1-2.8285,0ZM4,4v9.9417L18.0578,28,28,18.0579,13.9416,4Z"/>',
245
+ "task": '<path d="M14 20.18 10.41 16.59 9 18 14 23 23 14 21.59 12.58 14 20.18z"/><path d="M25,5H22V4a2,2,0,0,0-2-2H12a2,2,0,0,0-2,2V5H7A2,2,0,0,0,5,7V28a2,2,0,0,0,2,2H25a2,2,0,0,0,2-2V7A2,2,0,0,0,25,5ZM12,4h8V8H12ZM25,28H7V7h3v3H22V7h3Z"/>',
246
+ "task--complete": '<path d="M22 27.18 19.41 24.59 18 26 22 30 30 22 28.59 20.59 22 27.18z"/><path d="M25,5H22V4a2.0058,2.0058,0,0,0-2-2H12a2.0058,2.0058,0,0,0-2,2V5H7A2.0058,2.0058,0,0,0,5,7V28a2.0058,2.0058,0,0,0,2,2h9V28H7V7h3v3H22V7h3V18h2V7A2.0058,2.0058,0,0,0,25,5ZM20,8H12V4h8Z"/>',
174
247
  "text--font": '<path d="M25,12H20v2h5a1.0008,1.0008,0,0,1,1,1v2H22a3.0033,3.0033,0,0,0-3,3v1a3.0033,3.0033,0,0,0,3,3h6V15A3.0033,3.0033,0,0,0,25,12ZM22,22a1.0008,1.0008,0,0,1-1-1V20a1.0008,1.0008,0,0,1,1-1h4v3Z"/><path d="M16,24h2L12,7H10L4,24H6l1.6936-5h6.6135ZM8.3711,17l2.4966-7.3711.2668.0005L13.63,17Z"/>',
175
248
  "time": '<path d="M16,30A14,14,0,1,1,30,16,14,14,0,0,1,16,30ZM16,4A12,12,0,1,0,28,16,12,12,0,0,0,16,4Z"/><path d="M20.59 22 15 16.41 15 7 17 7 17 15.58 22 20.59 20.59 22z"/>',
176
249
  "trash-can": '<path d="M12 12H14V24H12z"/><path d="M18 12H20V24H18z"/><path d="M4,6V8H6V28a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V8h2V6ZM8,28V8H24V28Z"/><path d="M12 2H20V4H12z"/>',
250
+ "undo": '<path d="M20,10H7.8149l3.5874-3.5859L10,5,4,11,10,17l1.4023-1.4146L7.8179,12H20a6,6,0,0,1,0,12H12v2h8a8,8,0,0,0,0-16Z"/>',
177
251
  "user": '<path d="M16,4a5,5,0,1,1-5,5,5,5,0,0,1,5-5m0-2a7,7,0,1,0,7,7A7,7,0,0,0,16,2Z"/><path d="M26,30H24V25a5,5,0,0,0-5-5H13a5,5,0,0,0-5,5v5H6V25a7,7,0,0,1,7-7h6a7,7,0,0,1,7,7Z"/>',
252
+ "user--admin": '<path d="M12,4A5,5,0,1,1,7,9a5,5,0,0,1,5-5m0-2a7,7,0,1,0,7,7A7,7,0,0,0,12,2Z"/><path d="M22,30H20V25a5,5,0,0,0-5-5H9a5,5,0,0,0-5,5v5H2V25a7,7,0,0,1,7-7h6a7,7,0,0,1,7,7Z"/><path d="M25 16.18 22.41 13.59 21 15 25 19 32 12 30.59 10.59 25 16.18z"/>',
253
+ "user--follow": '<path d="M32 14 28 14 28 10 26 10 26 14 22 14 22 16 26 16 26 20 28 20 28 16 32 16 32 14z"/><path d="M12,4A5,5,0,1,1,7,9a5,5,0,0,1,5-5m0-2a7,7,0,1,0,7,7A7,7,0,0,0,12,2Z"/><path d="M22,30H20V25a5,5,0,0,0-5-5H9a5,5,0,0,0-5,5v5H2V25a7,7,0,0,1,7-7h6a7,7,0,0,1,7,7Z"/>',
254
+ "user--multiple": '<path d="M30,30H28V25a5.0057,5.0057,0,0,0-5-5V18a7.0078,7.0078,0,0,1,7,7Z"/><path d="M22,30H20V25a5.0059,5.0059,0,0,0-5-5H9a5.0059,5.0059,0,0,0-5,5v5H2V25a7.0082,7.0082,0,0,1,7-7h6a7.0082,7.0082,0,0,1,7,7Z"/><path d="M20,2V4a5,5,0,0,1,0,10v2A7,7,0,0,0,20,2Z"/><path d="M12,4A5,5,0,1,1,7,9a5,5,0,0,1,5-5m0-2a7,7,0,1,0,7,7A7,7,0,0,0,12,2Z"/>',
255
+ "user--profile": '<path d="M12,4A5,5,0,1,1,7,9a5,5,0,0,1,5-5m0-2a7,7,0,1,0,7,7A7,7,0,0,0,12,2Z"/><path d="M22,30H20V25a5,5,0,0,0-5-5H9a5,5,0,0,0-5,5v5H2V25a7,7,0,0,1,7-7h6a7,7,0,0,1,7,7Z"/><path d="M22 4H32V6H22z"/><path d="M22 9H32V11H22z"/><path d="M22 14H29V16H22z"/>',
178
256
  "view": '<path d="M30.94,15.66A16.69,16.69,0,0,0,16,5,16.69,16.69,0,0,0,1.06,15.66a1,1,0,0,0,0,.68A16.69,16.69,0,0,0,16,27,16.69,16.69,0,0,0,30.94,16.34,1,1,0,0,0,30.94,15.66ZM16,25c-5.3,0-10.9-3.93-12.93-9C5.1,10.93,10.7,7,16,7s10.9,3.93,12.93,9C26.9,21.07,21.3,25,16,25Z"/><path d="M16,10a6,6,0,1,0,6,6A6,6,0,0,0,16,10Zm0,10a4,4,0,1,1,4-4A4,4,0,0,1,16,20Z"/>',
257
+ "wallet": '<path d="M22 17H24V19H22z"/><path d="M28,8H4V5H26V3H4A2,2,0,0,0,2,5V26a2,2,0,0,0,2,2H28a2,2,0,0,0,2-2V10A2,2,0,0,0,28,8ZM4,26V10H28v3H20a2,2,0,0,0-2,2v6a2,2,0,0,0,2,2h8v3ZM28,15v6H20V15Z"/>',
179
258
  "warning--alt": '<path d="M16,23a1.5,1.5,0,1,0,1.5,1.5A1.5,1.5,0,0,0,16,23Z"/><path d="M15 12H17V21H15z"/><path d="M29,30H3a1,1,0,0,1-.8872-1.4614l13-25a1,1,0,0,1,1.7744,0l13,25A1,1,0,0,1,29,30ZM4.6507,28H27.3493l.002-.0033L16.002,6.1714h-.004L4.6487,27.9967Z"/>',
180
259
  "warning--filled": '<path d="M16,2C8.3,2,2,8.3,2,16s6.3,14,14,14s14-6.3,14-14C30,8.3,23.7,2,16,2z M14.9,8h2.2v11h-2.2V8z M16,25 c-0.8,0-1.5-0.7-1.5-1.5S15.2,22,16,22c0.8,0,1.5,0.7,1.5,1.5S16.8,25,16,25z"/><path fill="none" d="M17.5,23.5c0,0.8-0.7,1.5-1.5,1.5c-0.8,0-1.5-0.7-1.5-1.5S15.2,22,16,22 C16.8,22,17.5,22.7,17.5,23.5z M17.1,8h-2.2v11h2.2V8z" data-icon-path="inner-path" opacity="0"/>'
181
260
  };
@@ -248,8 +327,96 @@ var CARBON_MAP = {
248
327
  "pencil": "edit",
249
328
  "lock": "locked",
250
329
  "eye": "view",
251
- "minimize-2": "minimize"
330
+ "minimize-2": "minimize",
331
+ /* --- Direction and chrome, completing the sets above --------------------
332
+ `chevron-up` and `arrow-left` were missing while their three siblings shipped, so a collapsible
333
+ that pointed down had nothing to point back up with. */
334
+ "chevron-up": "chevron--up",
335
+ "arrow-left": "arrow--left",
336
+ "more-horizontal": "overflow-menu--horizontal",
337
+ "maximize-2": "maximize",
338
+ "log-out": "logout",
339
+ "log-in": "login",
340
+ "archive": "archive",
341
+ "folder": "folder",
342
+ "book": "book",
343
+ "notebook": "notebook",
344
+ "asterisk": "asterisk",
345
+ "bookmark": "bookmark",
346
+ "star": "star",
347
+ "star-filled": "star--filled",
348
+ "tag": "tag",
349
+ "repeat": "repeat",
350
+ "undo-2": "undo",
351
+ "redo-2": "redo",
352
+ "rotate-ccw": "reset",
353
+ "table": "table--split",
354
+ "database": "data--base",
355
+ "function-square": "function",
356
+ /* --- Money -------------------------------------------------------------
357
+ `credit-card` is here because its absence shipped: it resolved to nothing, rendered an empty
358
+ box, and reached production on the payment notifications. Carbon spells it `payment--methods`,
359
+ which is exactly the kind of mismatch this map exists to absorb. */
360
+ "credit-card": "payment--methods",
361
+ "wallet": "wallet",
362
+ "banknote": "money",
363
+ "coins": "currency",
364
+ "dollar-sign": "currency--dollar",
365
+ "euro": "currency--euro",
366
+ "receipt": "receipt",
367
+ "percent": "percentage",
368
+ "piggy-bank": "piggy-bank",
369
+ "landmark": "bank--vault",
370
+ "scale": "scales",
371
+ "purchase": "purchase",
372
+ /* --- Documents and ERP objects ----------------------------------------- */
373
+ "file-signature": "request-quote",
374
+ "scroll-text": "license",
375
+ "file-plus": "document--add",
376
+ "save": "save",
377
+ "file-bar-chart": "report",
378
+ "list-todo": "task",
379
+ "check-square": "task--complete",
380
+ "gavel": "rule",
381
+ "id-card": "identification",
382
+ "briefcase": "portfolio",
383
+ "handshake": "partnership",
384
+ "lightbulb": "idea",
385
+ "inventory": "inventory-management",
386
+ "package-2": "delivery--parcel",
387
+ "shopping-bag": "shopping--bag",
388
+ "barcode": "barcode",
389
+ "qr-code": "qr-code",
390
+ "git-branch": "flow",
391
+ "bug": "debug",
392
+ /* --- People and contact ------------------------------------------------- */
393
+ "users": "user--multiple",
394
+ "user-plus": "user--follow",
395
+ "user-cog": "user--admin",
396
+ "user-circle": "user--profile",
397
+ "mail": "email",
398
+ "phone": "phone",
399
+ "send": "send",
400
+ "globe": "globe",
401
+ "building": "location--company",
402
+ /* --- Charts and time ---------------------------------------------------- */
403
+ "bar-chart-3": "chart--column",
404
+ "bar-chart-horizontal": "chart--bar",
405
+ "line-chart": "chart--line",
406
+ "pie-chart": "chart--pie",
407
+ "area-chart": "chart--area",
408
+ "calendar-days": "events",
409
+ "calendar-plus": "calendar--add",
410
+ "calendar-heatmap": "calendar--heat-map",
411
+ /* --- Transfer ----------------------------------------------------------- */
412
+ "cloud-upload": "cloud--upload",
413
+ "cloud-download": "cloud--download",
414
+ "filter-x": "filter--edit",
415
+ "arrow-up-narrow-wide": "sort--ascending",
416
+ "arrow-down-wide-narrow": "sort--descending",
417
+ "badge-info": "information--square"
252
418
  };
419
+ var ICON_NAMES = Object.freeze(Object.keys(CARBON_MAP).sort());
253
420
 
254
421
  // src/components/core/Icon.tsx
255
422
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -302,7 +469,14 @@ function Icon({ name, size = 16, label, pack, style, ...rest }) {
302
469
  "data-icon": name,
303
470
  ...rest,
304
471
  style: { display: "inline-block", flex: "0 0 auto", width: size, height: size, ...style },
305
- children: markup === void 0 ? null : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
472
+ children: markup === void 0 ? (
473
+ // A broken icon has to look broken. In development the box gets a dashed outline so the
474
+ // gap is visible on screen instead of only in a console warning that is easy to lose in a
475
+ // busy log — which is how a missing `credit-card` reached production as a blank square.
476
+ // Production still renders nothing at all: a dev diagnostic must never become a user's
477
+ // first sight of a defect. Deliberately not an <svg>, so nothing reads it as a real glyph.
478
+ IS_DEV ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "pire-icon-missing", title: `Unknown icon: ${name}` }) : null
479
+ ) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
306
480
  "svg",
307
481
  {
308
482
  viewBox: "0 0 32 32",
@@ -626,25 +800,31 @@ function Separator({
626
800
  );
627
801
  }
628
802
 
629
- // src/components/forms/FormField.tsx
803
+ // src/components/core/Kbd.tsx
630
804
  var import_jsx_runtime14 = require("react/jsx-runtime");
805
+ function Kbd({ children, size = "md", className, ...rest }) {
806
+ return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("kbd", { className: cx("pire-kbd", className), "data-size": size, ...rest, children });
807
+ }
808
+
809
+ // src/components/forms/FormField.tsx
810
+ var import_jsx_runtime15 = require("react/jsx-runtime");
631
811
  function FormField({ label, htmlFor, isRequired, hint, error, layout = "stacked", children, className, ...rest }) {
632
- return /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("div", { className: cx("pire-field", className), "data-layout": layout, ...rest, children: [
633
- /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("label", { className: "pire-field-label", htmlFor, children: [
812
+ return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("div", { className: cx("pire-field", className), "data-layout": layout, ...rest, children: [
813
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("label", { className: "pire-field-label", htmlFor, children: [
634
814
  label,
635
- isRequired ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
815
+ isRequired ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
636
816
  ] }),
637
817
  children,
638
- error ? /* @__PURE__ */ (0, import_jsx_runtime14.jsxs)("span", { className: "pire-field-error", role: "alert", children: [
639
- /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(Icon, { name: "alert-circle", size: 12 }),
818
+ error ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)("span", { className: "pire-field-error", role: "alert", children: [
819
+ /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon, { name: "alert-circle", size: 12 }),
640
820
  error
641
- ] }) : hint ? /* @__PURE__ */ (0, import_jsx_runtime14.jsx)("span", { className: "pire-field-hint", children: hint }) : null
821
+ ] }) : hint ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-field-hint", children: hint }) : null
642
822
  ] });
643
823
  }
644
824
 
645
825
  // src/components/forms/Input.tsx
646
826
  var import_react_aria_components9 = require("react-aria-components");
647
- var import_jsx_runtime15 = require("react/jsx-runtime");
827
+ var import_jsx_runtime16 = require("react/jsx-runtime");
648
828
  function Input({
649
829
  label,
650
830
  icon,
@@ -660,7 +840,7 @@ function Input({
660
840
  onChange,
661
841
  ...rest
662
842
  }) {
663
- return /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
843
+ return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
664
844
  import_react_aria_components9.TextField,
665
845
  {
666
846
  className: cx("pire-field", className),
@@ -669,11 +849,11 @@ function Input({
669
849
  validationBehavior: "aria",
670
850
  ...rest,
671
851
  children: [
672
- label ? /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(import_react_aria_components9.Label, { className: "pire-field-label", children: [
852
+ label ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_aria_components9.Label, { className: "pire-field-label", children: [
673
853
  label,
674
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
854
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
675
855
  ] }) : null,
676
- /* @__PURE__ */ (0, import_jsx_runtime15.jsxs)(
856
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
677
857
  import_react_aria_components9.Group,
678
858
  {
679
859
  className: "pire-control",
@@ -682,14 +862,14 @@ function Input({
682
862
  "data-invalid": rest.isInvalid ? "true" : void 0,
683
863
  "data-readonly": rest.isReadOnly ? "true" : void 0,
684
864
  children: [
685
- icon ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Icon, { name: icon, size: 16, className: "pire-leading-icon" }) : null,
686
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Input, { ref: inputRef, className: "pire-input", "data-numeric": numeric ? "true" : void 0 }),
687
- suffix ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)("span", { className: "pire-affix", children: suffix }) : null
865
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(Icon, { name: icon, size: 16, className: "pire-leading-icon" }) : null,
866
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components9.Input, { ref: inputRef, className: "pire-input", "data-numeric": numeric ? "true" : void 0 }),
867
+ suffix ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "pire-affix", children: suffix }) : null
688
868
  ]
689
869
  }
690
870
  ),
691
- description ? /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
692
- /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_react_aria_components9.FieldError, { className: "pire-field-error", children: errorMessage })
871
+ description ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components9.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
872
+ /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components9.FieldError, { className: "pire-field-error", children: errorMessage })
693
873
  ]
694
874
  }
695
875
  );
@@ -698,7 +878,7 @@ function Input({
698
878
  // src/components/forms/TextArea.tsx
699
879
  var React5 = __toESM(require("react"), 1);
700
880
  var import_react_aria_components10 = require("react-aria-components");
701
- var import_jsx_runtime16 = require("react/jsx-runtime");
881
+ var import_jsx_runtime17 = require("react/jsx-runtime");
702
882
  var useIsomorphicLayoutEffect = typeof document === "undefined" ? React5.useEffect : React5.useLayoutEffect;
703
883
  function TextArea({
704
884
  label,
@@ -739,7 +919,7 @@ function TextArea({
739
919
  }
740
920
  grow();
741
921
  }, [autoGrow, grow, rest.value]);
742
- return /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(
922
+ return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
743
923
  import_react_aria_components10.TextField,
744
924
  {
745
925
  className: cx("pire-field", className),
@@ -748,11 +928,11 @@ function TextArea({
748
928
  validationBehavior: "aria",
749
929
  ...rest,
750
930
  children: [
751
- label ? /* @__PURE__ */ (0, import_jsx_runtime16.jsxs)(import_react_aria_components10.Label, { className: "pire-field-label", children: [
931
+ label ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_react_aria_components10.Label, { className: "pire-field-label", children: [
752
932
  label,
753
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
933
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
754
934
  ] }) : null,
755
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
935
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
756
936
  import_react_aria_components10.Group,
757
937
  {
758
938
  className: "pire-control",
@@ -761,7 +941,7 @@ function TextArea({
761
941
  "data-multiline": "true",
762
942
  "data-invalid": rest.isInvalid ? "true" : void 0,
763
943
  "data-readonly": rest.isReadOnly ? "true" : void 0,
764
- children: /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
944
+ children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
765
945
  import_react_aria_components10.TextArea,
766
946
  {
767
947
  ref,
@@ -773,8 +953,8 @@ function TextArea({
773
953
  )
774
954
  }
775
955
  ),
776
- description ? /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
777
- /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_react_aria_components10.FieldError, { className: "pire-field-error", children: errorMessage })
956
+ description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components10.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
957
+ /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components10.FieldError, { className: "pire-field-error", children: errorMessage })
778
958
  ]
779
959
  }
780
960
  );
@@ -808,10 +988,14 @@ var enMessages = {
808
988
  dateRangePresetsLabel: "Date range shortcuts",
809
989
  numberFieldIncrease: "Increase",
810
990
  numberFieldDecrease: "Decrease",
991
+ valueHelpFieldPlaceholder: "Not selected",
811
992
  valueHelpFieldClear: "Clear selection",
812
993
  valueHelpFieldOpenNamed: "Select {label}",
813
994
  valueHelpFieldOpen: "Open value help",
814
995
  valueHelpDialogSearch: "Search records",
996
+ valueHelpDialogTitle: "Select a record",
997
+ valueHelpDialogSearchPlaceholder: "Search by ID or name",
998
+ valueHelpDialogEmpty: "No records found",
815
999
  valueHelpDialogCancel: "Cancel",
816
1000
  paginationLabel: "Pagination",
817
1001
  paginationRange: "{from}\u2013{to} of {total}",
@@ -824,6 +1008,15 @@ var enMessages = {
824
1008
  fileUploadRemoveNamed: "Remove {name}",
825
1009
  fileUploadUploading: "Uploading",
826
1010
  fileDropZonePrompt: "Drag files here, or choose them",
1011
+ shellBarUserMenu: "Account menu for {user}",
1012
+ commandPaletteLabel: "Command palette",
1013
+ commandPaletteSearchLabel: "Search commands and records",
1014
+ commandPalettePlaceholder: "Search for a screen, an action or a record\u2026",
1015
+ commandPaletteEmpty: "Nothing matches that",
1016
+ commandPaletteLoading: "Searching\u2026",
1017
+ commandPaletteHintNavigate: "navigate",
1018
+ commandPaletteHintSelect: "open",
1019
+ commandPaletteHintClose: "close",
827
1020
  chartCategoryHeader: "Category",
828
1021
  chartNoValue: "No data",
829
1022
  chartEmpty: "No data for this period"
@@ -849,10 +1042,14 @@ var esMessages = {
849
1042
  dateRangePresetsLabel: "Atajos de rango de fechas",
850
1043
  numberFieldIncrease: "Aumentar",
851
1044
  numberFieldDecrease: "Disminuir",
1045
+ valueHelpFieldPlaceholder: "Sin seleccionar",
852
1046
  valueHelpFieldClear: "Limpiar selecci\xF3n",
853
1047
  valueHelpFieldOpenNamed: "Seleccionar {label}",
854
1048
  valueHelpFieldOpen: "Abrir ayuda de valores",
855
1049
  valueHelpDialogSearch: "Buscar registros",
1050
+ valueHelpDialogTitle: "Seleccionar un registro",
1051
+ valueHelpDialogSearchPlaceholder: "Buscar por c\xF3digo o nombre",
1052
+ valueHelpDialogEmpty: "No se encontraron registros",
856
1053
  valueHelpDialogCancel: "Cancelar",
857
1054
  paginationLabel: "Paginaci\xF3n",
858
1055
  paginationRange: "{from}\u2013{to} de {total}",
@@ -865,20 +1062,29 @@ var esMessages = {
865
1062
  fileUploadRemoveNamed: "Quitar {name}",
866
1063
  fileUploadUploading: "Subiendo",
867
1064
  fileDropZonePrompt: "Arrastr\xE1 archivos ac\xE1, o elegilos",
1065
+ shellBarUserMenu: "Men\xFA de cuenta de {user}",
1066
+ commandPaletteLabel: "Paleta de comandos",
1067
+ commandPaletteSearchLabel: "Buscar comandos y registros",
1068
+ commandPalettePlaceholder: "Busc\xE1 una pantalla, una acci\xF3n o un registro\u2026",
1069
+ commandPaletteEmpty: "No hay coincidencias",
1070
+ commandPaletteLoading: "Buscando\u2026",
1071
+ commandPaletteHintNavigate: "navegar",
1072
+ commandPaletteHintSelect: "abrir",
1073
+ commandPaletteHintClose: "cerrar",
868
1074
  chartCategoryHeader: "Categor\xEDa",
869
1075
  chartNoValue: "Sin datos",
870
1076
  chartEmpty: "Sin datos para este per\xEDodo"
871
1077
  };
872
1078
 
873
1079
  // src/i18n/PireIntlProvider.tsx
874
- var import_jsx_runtime17 = require("react/jsx-runtime");
1080
+ var import_jsx_runtime18 = require("react/jsx-runtime");
875
1081
  var MessagesContext = React6.createContext(enMessages);
876
1082
  function PireIntlProvider({ messages, children }) {
877
1083
  const value = React6.useMemo(
878
1084
  () => messages ? { ...enMessages, ...messages } : enMessages,
879
1085
  [messages]
880
1086
  );
881
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(MessagesContext.Provider, { value, children });
1087
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MessagesContext.Provider, { value, children });
882
1088
  }
883
1089
  function usePireMessages() {
884
1090
  return React6.useContext(MessagesContext);
@@ -889,7 +1095,7 @@ function useMessage(key, override) {
889
1095
  }
890
1096
 
891
1097
  // src/components/forms/Select.tsx
892
- var import_jsx_runtime18 = require("react/jsx-runtime");
1098
+ var import_jsx_runtime19 = require("react/jsx-runtime");
893
1099
  var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
894
1100
  function Select({
895
1101
  label,
@@ -909,7 +1115,7 @@ function Select({
909
1115
  }) {
910
1116
  const msg = usePireMessages();
911
1117
  const items = options.map(norm);
912
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1118
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
913
1119
  import_react_aria_components11.Select,
914
1120
  {
915
1121
  className: cx("pire-field", className),
@@ -922,11 +1128,11 @@ function Select({
922
1128
  validationBehavior: "aria",
923
1129
  ...rest,
924
1130
  children: [
925
- label ? /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_react_aria_components11.Label, { className: "pire-field-label", children: [
1131
+ label ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components11.Label, { className: "pire-field-label", children: [
926
1132
  label,
927
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1133
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
928
1134
  ] }) : null,
929
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(
1135
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
930
1136
  import_react_aria_components11.Button,
931
1137
  {
932
1138
  className: "pire-control",
@@ -934,20 +1140,20 @@ function Select({
934
1140
  "data-full-width": String(fullWidth),
935
1141
  "data-invalid": rest.isInvalid ? "true" : void 0,
936
1142
  children: [
937
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.SelectValue, { className: "pire-select-value" }),
938
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
1143
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.SelectValue, { className: "pire-select-value" }),
1144
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
939
1145
  ]
940
1146
  }
941
1147
  ),
942
- description ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
943
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.FieldError, { className: "pire-field-error", children: errorMessage }),
944
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(
1148
+ description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1149
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.FieldError, { className: "pire-field-error", children: errorMessage }),
1150
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
945
1151
  import_react_aria_components11.ListBox,
946
1152
  {
947
1153
  className: "pire-listbox",
948
1154
  items,
949
- renderEmptyState: () => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: emptyLabel ?? msg.selectEmpty }),
950
- children: (item) => /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components11.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label })
1155
+ renderEmptyState: () => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: emptyLabel ?? msg.selectEmpty }),
1156
+ children: (item) => /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components11.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label })
951
1157
  }
952
1158
  ) })
953
1159
  ]
@@ -957,51 +1163,51 @@ function Select({
957
1163
 
958
1164
  // src/components/forms/Checkbox.tsx
959
1165
  var import_react_aria_components12 = require("react-aria-components");
960
- var import_jsx_runtime19 = require("react/jsx-runtime");
1166
+ var import_jsx_runtime20 = require("react/jsx-runtime");
961
1167
  function Checkbox({ label, hint, children, className, ...rest }) {
962
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components12.Checkbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_jsx_runtime19.Fragment, { children: [
963
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(Icon, { name: "check", size: 12 }) : null }),
964
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { children: [
1168
+ return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components12.Checkbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_jsx_runtime20.Fragment, { children: [
1169
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(Icon, { name: "check", size: 12 }) : null }),
1170
+ /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { children: [
965
1171
  label ?? children,
966
- hint ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
1172
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
967
1173
  ] })
968
1174
  ] }) });
969
1175
  }
970
1176
 
971
1177
  // src/components/forms/Radio.tsx
972
1178
  var import_react_aria_components13 = require("react-aria-components");
973
- var import_jsx_runtime20 = require("react/jsx-runtime");
1179
+ var import_jsx_runtime21 = require("react/jsx-runtime");
974
1180
  function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
975
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components13.RadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
976
- label ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components13.Label, { className: "pire-field-label", children: label }) : null,
977
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("div", { className: "pire-radiogroup", children }),
978
- description ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components13.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
979
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_react_aria_components13.FieldError, { className: "pire-field-error", children: errorMessage })
1181
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_aria_components13.RadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
1182
+ label ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.Label, { className: "pire-field-label", children: label }) : null,
1183
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: "pire-radiogroup", children }),
1184
+ description ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1185
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_react_aria_components13.FieldError, { className: "pire-field-error", children: errorMessage })
980
1186
  ] });
981
1187
  }
982
1188
  function Radio({ label, hint, children, className, ...rest }) {
983
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components13.Radio, { className: cx("pire-choice", className), ...rest, children: [
984
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
985
- /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)("span", { children: [
1189
+ return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_aria_components13.Radio, { className: cx("pire-choice", className), ...rest, children: [
1190
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
1191
+ /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)("span", { children: [
986
1192
  label ?? children,
987
- hint ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
1193
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
988
1194
  ] })
989
1195
  ] });
990
1196
  }
991
1197
 
992
1198
  // src/components/forms/Switch.tsx
993
1199
  var import_react_aria_components14 = require("react-aria-components");
994
- var import_jsx_runtime21 = require("react/jsx-runtime");
1200
+ var import_jsx_runtime22 = require("react/jsx-runtime");
995
1201
  function Switch({ label, children, className, ...rest }) {
996
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(import_react_aria_components14.Switch, { className: cx("pire-choice", className), ...rest, children: [
997
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "pire-switch-thumb" }) }),
998
- /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { children: label ?? children })
1202
+ return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_aria_components14.Switch, { className: cx("pire-choice", className), ...rest, children: [
1203
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "pire-switch-thumb" }) }),
1204
+ /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { children: label ?? children })
999
1205
  ] });
1000
1206
  }
1001
1207
 
1002
1208
  // src/components/forms/ComboBox.tsx
1003
1209
  var import_react_aria_components15 = require("react-aria-components");
1004
- var import_jsx_runtime22 = require("react/jsx-runtime");
1210
+ var import_jsx_runtime23 = require("react/jsx-runtime");
1005
1211
  var norm2 = (o) => typeof o === "string" ? { value: o, label: o } : o;
1006
1212
  function ComboBox({
1007
1213
  label,
@@ -1028,7 +1234,7 @@ function ComboBox({
1028
1234
  const items = options.map(norm2);
1029
1235
  const collection = isFilteredExternally ? { items } : { defaultItems: items };
1030
1236
  const showsStatus = isLoading || isFilteredExternally && items.length === 0 && emptyLabel != null;
1031
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1237
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1032
1238
  import_react_aria_components15.ComboBox,
1033
1239
  {
1034
1240
  className: cx("pire-field", className),
@@ -1047,11 +1253,11 @@ function ComboBox({
1047
1253
  validationBehavior: "aria",
1048
1254
  ...rest,
1049
1255
  children: [
1050
- label ? /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_aria_components15.Label, { className: "pire-field-label", children: [
1256
+ label ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_react_aria_components15.Label, { className: "pire-field-label", children: [
1051
1257
  label,
1052
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1258
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1053
1259
  ] }) : null,
1054
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1260
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1055
1261
  import_react_aria_components15.Group,
1056
1262
  {
1057
1263
  className: "pire-control",
@@ -1059,15 +1265,15 @@ function ComboBox({
1059
1265
  "data-full-width": String(fullWidth),
1060
1266
  "data-invalid": rest.isInvalid ? "true" : void 0,
1061
1267
  children: [
1062
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1063
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.Input, { className: "pire-input", placeholder: rest.placeholder }),
1064
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon, { name: "chevron-down", size: 16 }) })
1268
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1269
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.Input, { className: "pire-input", placeholder: rest.placeholder }),
1270
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { name: "chevron-down", size: 16 }) })
1065
1271
  ]
1066
1272
  }
1067
1273
  ),
1068
- description ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1069
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.FieldError, { className: "pire-field-error", children: errorMessage }),
1070
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(
1274
+ description ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1275
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.FieldError, { className: "pire-field-error", children: errorMessage }),
1276
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components15.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1071
1277
  import_react_aria_components15.ListBox,
1072
1278
  {
1073
1279
  className: "pire-listbox",
@@ -1075,10 +1281,10 @@ function ComboBox({
1075
1281
  const el = e.currentTarget;
1076
1282
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
1077
1283
  } : void 0,
1078
- renderEmptyState: showsStatus ? () => /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1079
- children: (item) => /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(import_react_aria_components15.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
1080
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "pire-option-label", children: item.label }),
1081
- item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "pire-option-secondary", children: item.secondary }) : null
1284
+ renderEmptyState: showsStatus ? () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1285
+ children: (item) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_react_aria_components15.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
1286
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-option-label", children: item.label }),
1287
+ item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-option-secondary", children: item.secondary }) : null
1082
1288
  ] })
1083
1289
  }
1084
1290
  ) })
@@ -1090,7 +1296,7 @@ function ComboBox({
1090
1296
  // src/components/forms/MultiComboBox.tsx
1091
1297
  var React7 = __toESM(require("react"), 1);
1092
1298
  var import_react_aria_components16 = require("react-aria-components");
1093
- var import_jsx_runtime23 = require("react/jsx-runtime");
1299
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1094
1300
  var norm3 = (o) => typeof o === "string" ? { value: o, label: o } : o;
1095
1301
  function MultiComboBox({
1096
1302
  label,
@@ -1155,7 +1361,7 @@ function MultiComboBox({
1155
1361
  e.stopPropagation();
1156
1362
  if (!values.includes(next)) commit([...values, next]);
1157
1363
  };
1158
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1364
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1159
1365
  import_react_aria_components16.ComboBox,
1160
1366
  {
1161
1367
  className: cx("pire-field", className),
@@ -1172,11 +1378,11 @@ function MultiComboBox({
1172
1378
  validationBehavior: "aria",
1173
1379
  ...rest,
1174
1380
  children: [
1175
- label ? /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_react_aria_components16.Label, { className: "pire-field-label", children: [
1381
+ label ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react_aria_components16.Label, { className: "pire-field-label", children: [
1176
1382
  label,
1177
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1383
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1178
1384
  ] }) : null,
1179
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1385
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1180
1386
  import_react_aria_components16.Group,
1181
1387
  {
1182
1388
  className: "pire-control",
@@ -1186,14 +1392,14 @@ function MultiComboBox({
1186
1392
  "data-invalid": rest.isInvalid ? "true" : void 0,
1187
1393
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1188
1394
  children: [
1189
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1190
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "pire-chipfield", children: [
1191
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.ButtonContext.Provider, { value: null, children: values.map((v) => (
1395
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1396
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("div", { className: "pire-chipfield", children: [
1397
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components16.ButtonContext.Provider, { value: null, children: values.map((v) => (
1192
1398
  /* Disabled follows the field, not `isEditable`: a read-only field's chips are
1193
1399
  real, current values and should read as such — they simply lose the × . */
1194
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
1400
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
1195
1401
  )) }),
1196
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1402
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1197
1403
  import_react_aria_components16.Input,
1198
1404
  {
1199
1405
  ref: inputRef,
@@ -1203,14 +1409,14 @@ function MultiComboBox({
1203
1409
  }
1204
1410
  )
1205
1411
  ] }),
1206
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { name: "chevron-down", size: 16 }) })
1412
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components16.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { name: "chevron-down", size: 16 }) })
1207
1413
  ]
1208
1414
  }
1209
1415
  ),
1210
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { "aria-live": "polite", children: announcement }) }),
1211
- description ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1212
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.FieldError, { className: "pire-field-error", children: errorMessage }),
1213
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1416
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components16.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { "aria-live": "polite", children: announcement }) }),
1417
+ description ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components16.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1418
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components16.FieldError, { className: "pire-field-error", children: errorMessage }),
1419
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components16.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1214
1420
  import_react_aria_components16.ListBox,
1215
1421
  {
1216
1422
  className: "pire-listbox",
@@ -1218,10 +1424,10 @@ function MultiComboBox({
1218
1424
  const el = e.currentTarget;
1219
1425
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
1220
1426
  } : void 0,
1221
- renderEmptyState: showsStatus ? () => /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1222
- children: (item) => /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(import_react_aria_components16.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
1223
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-option-label", children: item.label }),
1224
- item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-option-secondary", children: item.secondary }) : null
1427
+ renderEmptyState: showsStatus ? () => /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1428
+ children: (item) => /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react_aria_components16.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
1429
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-option-label", children: item.label }),
1430
+ item.secondary ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-option-secondary", children: item.secondary }) : null
1225
1431
  ] })
1226
1432
  }
1227
1433
  ) })
@@ -1232,7 +1438,7 @@ function MultiComboBox({
1232
1438
 
1233
1439
  // src/components/forms/NumberField.tsx
1234
1440
  var import_react_aria_components17 = require("react-aria-components");
1235
- var import_jsx_runtime24 = require("react/jsx-runtime");
1441
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1236
1442
  function NumberField({
1237
1443
  label,
1238
1444
  suffix,
@@ -1246,12 +1452,12 @@ function NumberField({
1246
1452
  ...rest
1247
1453
  }) {
1248
1454
  const msg = usePireMessages();
1249
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react_aria_components17.NumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1250
- label ? /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react_aria_components17.Label, { className: "pire-field-label", children: [
1455
+ return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components17.NumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1456
+ label ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components17.Label, { className: "pire-field-label", children: [
1251
1457
  label,
1252
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1458
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1253
1459
  ] }) : null,
1254
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1460
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1255
1461
  import_react_aria_components17.Group,
1256
1462
  {
1257
1463
  className: "pire-control",
@@ -1260,23 +1466,23 @@ function NumberField({
1260
1466
  "data-invalid": rest.isInvalid ? "true" : void 0,
1261
1467
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1262
1468
  children: [
1263
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.Input, { className: "pire-input", "data-numeric": "true" }),
1264
- suffix ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-affix", children: suffix }) : null,
1265
- hideStepper ? null : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "pire-stepper", children: [
1266
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.Button, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { name: "plus", size: 10 }) }),
1267
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.Button, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(Icon, { name: "minus", size: 10 }) })
1469
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components17.Input, { className: "pire-input", "data-numeric": "true" }),
1470
+ suffix ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-affix", children: suffix }) : null,
1471
+ hideStepper ? null : /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("span", { className: "pire-stepper", children: [
1472
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components17.Button, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon, { name: "plus", size: 10 }) }),
1473
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components17.Button, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon, { name: "minus", size: 10 }) })
1268
1474
  ] })
1269
1475
  ]
1270
1476
  }
1271
1477
  ),
1272
- description ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1273
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.FieldError, { className: "pire-field-error", children: errorMessage })
1478
+ description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components17.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1479
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components17.FieldError, { className: "pire-field-error", children: errorMessage })
1274
1480
  ] });
1275
1481
  }
1276
1482
 
1277
1483
  // src/components/forms/DatePicker.tsx
1278
1484
  var import_react_aria_components18 = require("react-aria-components");
1279
- var import_jsx_runtime25 = require("react/jsx-runtime");
1485
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1280
1486
  function DatePicker({
1281
1487
  label,
1282
1488
  description,
@@ -1288,12 +1494,12 @@ function DatePicker({
1288
1494
  ...rest
1289
1495
  }) {
1290
1496
  const msg = usePireMessages();
1291
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components18.DatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1292
- label ? /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components18.Label, { className: "pire-field-label", children: [
1497
+ return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components18.DatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1498
+ label ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components18.Label, { className: "pire-field-label", children: [
1293
1499
  label,
1294
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1500
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1295
1501
  ] }) : null,
1296
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1502
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1297
1503
  import_react_aria_components18.Group,
1298
1504
  {
1299
1505
  className: "pire-control",
@@ -1302,22 +1508,22 @@ function DatePicker({
1302
1508
  "data-invalid": rest.isInvalid ? "true" : void 0,
1303
1509
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1304
1510
  children: [
1305
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.DateSegment, { segment, className: "pire-datesegment" }) }),
1306
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerOpenCalendar, style: { width: 24, height: 24 }, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon, { name: "calendar", size: 16 }) })
1511
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.DateSegment, { segment, className: "pire-datesegment" }) }),
1512
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Button, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerOpenCalendar, style: { width: 24, height: 24 }, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "calendar", size: 16 }) })
1307
1513
  ]
1308
1514
  }
1309
1515
  ),
1310
- description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1311
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.FieldError, { className: "pire-field-error", children: errorMessage }),
1312
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Dialog, { children: /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components18.Calendar, { className: "pire-calendar", children: [
1313
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("header", { className: "pire-calendar-head", children: [
1314
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Button, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon, { name: "chevron-left", size: 16 }) }),
1315
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Heading, { className: "pire-calendar-title" }),
1316
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Button, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(Icon, { name: "chevron-right", size: 16 }) })
1516
+ description ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1517
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.FieldError, { className: "pire-field-error", children: errorMessage }),
1518
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Dialog, { children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components18.Calendar, { className: "pire-calendar", children: [
1519
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("header", { className: "pire-calendar-head", children: [
1520
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Button, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-left", size: 16 }) }),
1521
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Heading, { className: "pire-calendar-title" }),
1522
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.Button, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-right", size: 16 }) })
1317
1523
  ] }),
1318
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components18.CalendarGrid, { className: "pire-calendar-grid", children: [
1319
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.CalendarHeaderCell, { children: day }) }),
1320
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.CalendarCell, { date, className: "pire-calendar-cell" }) })
1524
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components18.CalendarGrid, { className: "pire-calendar-grid", children: [
1525
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.CalendarHeaderCell, { children: day }) }),
1526
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components18.CalendarCell, { date, className: "pire-calendar-cell" }) })
1321
1527
  ] })
1322
1528
  ] }) }) })
1323
1529
  ] });
@@ -1325,7 +1531,7 @@ function DatePicker({
1325
1531
 
1326
1532
  // src/components/forms/DateRangePicker.tsx
1327
1533
  var import_react_aria_components19 = require("react-aria-components");
1328
- var import_jsx_runtime26 = require("react/jsx-runtime");
1534
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1329
1535
  function rangeLengthInDays(range) {
1330
1536
  return range.end.toDate("UTC").getTime() / 864e5 - range.start.toDate("UTC").getTime() / 864e5 + 1;
1331
1537
  }
@@ -1346,7 +1552,7 @@ function DateRangePicker({
1346
1552
  const msg = usePireMessages();
1347
1553
  const current = rest.value ?? rest.defaultValue ?? null;
1348
1554
  const tooLong = maxRangeDays != null && current != null && rangeLengthInDays(current) > maxRangeDays;
1349
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1555
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1350
1556
  import_react_aria_components19.DateRangePicker,
1351
1557
  {
1352
1558
  className: cx("pire-field", className),
@@ -1357,11 +1563,11 @@ function DateRangePicker({
1357
1563
  ...rest,
1358
1564
  isInvalid: rest.isInvalid || tooLong,
1359
1565
  children: [
1360
- label ? /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.Label, { className: "pire-field-label", children: [
1566
+ label ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components19.Label, { className: "pire-field-label", children: [
1361
1567
  label,
1362
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1568
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1363
1569
  ] }) : null,
1364
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1570
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1365
1571
  import_react_aria_components19.Group,
1366
1572
  {
1367
1573
  className: "pire-control pire-daterange-control",
@@ -1370,29 +1576,29 @@ function DateRangePicker({
1370
1576
  "data-invalid": rest.isInvalid || tooLong ? "true" : void 0,
1371
1577
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1372
1578
  children: [
1373
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateInput, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateSegment, { segment, className: "pire-datesegment" }) }),
1374
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1375
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateInput, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.DateSegment, { segment, className: "pire-datesegment" }) }),
1376
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1579
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.DateInput, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.DateSegment, { segment, className: "pire-datesegment" }) }),
1580
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1581
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.DateInput, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.DateSegment, { segment, className: "pire-datesegment" }) }),
1582
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1377
1583
  import_react_aria_components19.Button,
1378
1584
  {
1379
1585
  className: "pire-iconbtn",
1380
1586
  "data-size": "sm",
1381
1587
  "aria-label": msg.datePickerOpenCalendar,
1382
1588
  style: { width: 24, height: 24 },
1383
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "calendar", size: 16 })
1589
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: "calendar", size: 16 })
1384
1590
  }
1385
1591
  )
1386
1592
  ]
1387
1593
  }
1388
1594
  ),
1389
- description ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1390
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.FieldError, { className: "pire-field-error", children: errorMessage }),
1391
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.Dialog, { className: "pire-daterange-dialog", children: [
1595
+ description ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1596
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.FieldError, { className: "pire-field-error", children: errorMessage }),
1597
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components19.Dialog, { className: "pire-daterange-dialog", children: [
1392
1598
  presets?.length ? (
1393
1599
  // Before the calendar in the DOM, so keyboard users reach the shortcut without
1394
1600
  // arrowing through a month first.
1395
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1601
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1396
1602
  import_react_aria_components19.Button,
1397
1603
  {
1398
1604
  className: "pire-daterange-preset",
@@ -1402,33 +1608,33 @@ function DateRangePicker({
1402
1608
  preset.id
1403
1609
  )) })
1404
1610
  ) : null,
1405
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.RangeCalendar, { className: "pire-calendar", children: [
1406
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("header", { className: "pire-calendar-head", children: [
1407
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1611
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components19.RangeCalendar, { className: "pire-calendar", children: [
1612
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "pire-calendar-head", children: [
1613
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1408
1614
  import_react_aria_components19.Button,
1409
1615
  {
1410
1616
  slot: "previous",
1411
1617
  className: "pire-iconbtn",
1412
1618
  "data-size": "sm",
1413
1619
  "aria-label": msg.datePickerPreviousMonth,
1414
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-left", size: 16 })
1620
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: "chevron-left", size: 16 })
1415
1621
  }
1416
1622
  ),
1417
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Heading, { className: "pire-calendar-title" }),
1418
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
1623
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.Heading, { className: "pire-calendar-title" }),
1624
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1419
1625
  import_react_aria_components19.Button,
1420
1626
  {
1421
1627
  slot: "next",
1422
1628
  className: "pire-iconbtn",
1423
1629
  "data-size": "sm",
1424
1630
  "aria-label": msg.datePickerNextMonth,
1425
- children: /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(Icon, { name: "chevron-right", size: 16 })
1631
+ children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(Icon, { name: "chevron-right", size: 16 })
1426
1632
  }
1427
1633
  )
1428
1634
  ] }),
1429
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.CalendarGrid, { className: "pire-calendar-grid", children: [
1430
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarHeaderCell, { children: day }) }),
1431
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.CalendarCell, { date, className: "pire-calendar-cell" }) })
1635
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components19.CalendarGrid, { className: "pire-calendar-grid", children: [
1636
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.CalendarGridHeader, { children: (day) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.CalendarHeaderCell, { children: day }) }),
1637
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.CalendarGridBody, { children: (date) => /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components19.CalendarCell, { date, className: "pire-calendar-cell" }) })
1432
1638
  ] })
1433
1639
  ] })
1434
1640
  ] }) })
@@ -1445,7 +1651,7 @@ var React8 = __toESM(require("react"), 1);
1445
1651
 
1446
1652
  // src/components/feedback/Dialog.tsx
1447
1653
  var import_react_aria_components20 = require("react-aria-components");
1448
- var import_jsx_runtime27 = require("react/jsx-runtime");
1654
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1449
1655
  function Dialog({
1450
1656
  isOpen,
1451
1657
  onOpenChange,
@@ -1465,7 +1671,7 @@ function Dialog({
1465
1671
  onClose?.();
1466
1672
  onOpenChange?.(false);
1467
1673
  };
1468
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1674
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1469
1675
  import_react_aria_components20.ModalOverlay,
1470
1676
  {
1471
1677
  className: "pire-modal-overlay",
@@ -1474,16 +1680,16 @@ function Dialog({
1474
1680
  onOpenChange: (o) => {
1475
1681
  if (!o) close();
1476
1682
  },
1477
- children: /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components20.Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(import_react_aria_components20.Dialog, { className: "pire-dialog", children: [
1478
- title ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "pire-dialog-head", children: [
1479
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
1480
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components20.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
1481
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1683
+ children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_aria_components20.Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)(import_react_aria_components20.Dialog, { className: "pire-dialog", children: [
1684
+ title ? /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("header", { className: "pire-dialog-head", children: [
1685
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
1686
+ /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(import_react_aria_components20.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
1687
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1482
1688
  ] }),
1483
- showClose ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1689
+ showClose ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1484
1690
  ] }) : null,
1485
- children ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "pire-dialog-body", children }) : null,
1486
- footer ? /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
1691
+ children ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("div", { className: "pire-dialog-body", children }) : null,
1692
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime28.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
1487
1693
  ] }) })
1488
1694
  }
1489
1695
  );
@@ -1493,9 +1699,9 @@ function Dialog({
1493
1699
  var import_react_aria_components21 = require("react-aria-components");
1494
1700
 
1495
1701
  // src/components/feedback/Skeleton.tsx
1496
- var import_jsx_runtime28 = require("react/jsx-runtime");
1702
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1497
1703
  function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
1498
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1704
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1499
1705
  "div",
1500
1706
  {
1501
1707
  className: cx("pire-skeleton", className),
@@ -1509,7 +1715,7 @@ function Skeleton({ shape = "text", width, height, className, style, ...rest })
1509
1715
  var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
1510
1716
  function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
1511
1717
  const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
1512
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1718
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1513
1719
  "div",
1514
1720
  {
1515
1721
  className: cx("pire-skeleton-row", className),
@@ -1521,13 +1727,13 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1521
1727
  const align = c.numeric ? "right" : c.align ?? "left";
1522
1728
  return (
1523
1729
  // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
1524
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1730
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1525
1731
  "div",
1526
1732
  {
1527
1733
  className: "pire-skeleton-cell",
1528
1734
  "data-align": align,
1529
1735
  style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
1530
- children: /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1736
+ children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1531
1737
  },
1532
1738
  i
1533
1739
  )
@@ -1538,7 +1744,7 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1538
1744
  }
1539
1745
 
1540
1746
  // src/components/data/DataTable.tsx
1541
- var import_jsx_runtime29 = require("react/jsx-runtime");
1747
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1542
1748
  function DataTable({
1543
1749
  columns,
1544
1750
  rows,
@@ -1570,14 +1776,14 @@ function DataTable({
1570
1776
  ...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
1571
1777
  ];
1572
1778
  const body = isLoading ? [] : rows;
1573
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1779
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1574
1780
  "div",
1575
1781
  {
1576
1782
  className: cx("pire-table-wrap", className),
1577
1783
  style,
1578
1784
  "data-loading": isLoading ? "true" : void 0,
1579
1785
  "aria-busy": isLoading ? "true" : void 0,
1580
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1786
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1581
1787
  import_react_aria_components21.Table,
1582
1788
  {
1583
1789
  className: "pire-table",
@@ -1594,9 +1800,9 @@ function DataTable({
1594
1800
  if (row) onRowAction(row);
1595
1801
  } : void 0,
1596
1802
  children: [
1597
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_aria_components21.TableHeader, { className: "pire-thead-row", children: [
1598
- selectable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components21.Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1599
- columns.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1803
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_aria_components21.TableHeader, { className: "pire-thead-row", children: [
1804
+ selectable ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components21.Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1805
+ columns.map((c, i) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1600
1806
  import_react_aria_components21.Column,
1601
1807
  {
1602
1808
  id: c.key,
@@ -1606,9 +1812,9 @@ function DataTable({
1606
1812
  width: c.width,
1607
1813
  "data-align": c.numeric || c.align === "right" ? "right" : c.align,
1608
1814
  "data-allows-sorting": c.sortable ? "true" : void 0,
1609
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("span", { className: "pire-th-inner", children: [
1815
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("span", { className: "pire-th-inner", children: [
1610
1816
  c.label,
1611
- c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1817
+ c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1612
1818
  Icon,
1613
1819
  {
1614
1820
  size: 12,
@@ -1621,15 +1827,15 @@ function DataTable({
1621
1827
  c.key
1622
1828
  ))
1623
1829
  ] }),
1624
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components21.TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1625
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1830
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components21.TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1831
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1626
1832
  Array.from({ length: skeletonRows }, (_, i) => (
1627
1833
  // biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
1628
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1834
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1629
1835
  ))
1630
- ] }) : /* @__PURE__ */ (0, import_jsx_runtime29.jsx)("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_aria_components21.Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
1631
- selectable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(import_react_aria_components21.Cell, { className: "pire-td", children: /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1632
- columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1836
+ ] }) : /* @__PURE__ */ (0, import_jsx_runtime30.jsx)("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(import_react_aria_components21.Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
1837
+ selectable ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_react_aria_components21.Cell, { className: "pire-td", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1838
+ columns.map((c) => /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1633
1839
  import_react_aria_components21.Cell,
1634
1840
  {
1635
1841
  className: "pire-td",
@@ -1648,14 +1854,18 @@ function DataTable({
1648
1854
  }
1649
1855
 
1650
1856
  // src/components/patterns/ValueHelpDialog.tsx
1651
- var import_jsx_runtime30 = require("react/jsx-runtime");
1857
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1652
1858
  function ValueHelpDialog({
1653
1859
  isOpen,
1654
- title = "Select a record",
1860
+ title,
1655
1861
  columns = [],
1656
1862
  rows = [],
1657
- searchPlaceholder = "Search by ID or name",
1863
+ searchPlaceholder,
1658
1864
  emptyLabel,
1865
+ onSearch,
1866
+ isFilteredExternally,
1867
+ isLoading,
1868
+ onLoadMore,
1659
1869
  onSelect,
1660
1870
  onClose
1661
1871
  }) {
@@ -1665,52 +1875,61 @@ function ValueHelpDialog({
1665
1875
  if (isOpen) setQuery("");
1666
1876
  }, [isOpen]);
1667
1877
  const filtered = React8.useMemo(() => {
1878
+ if (isFilteredExternally) return rows;
1668
1879
  const q = query.trim().toLowerCase();
1669
1880
  if (!q) return rows;
1670
1881
  return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
1671
- }, [rows, query]);
1672
- return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1882
+ }, [rows, query, isFilteredExternally]);
1883
+ const handleSearch = (value) => {
1884
+ setQuery(value);
1885
+ onSearch?.(value);
1886
+ };
1887
+ return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1673
1888
  Dialog,
1674
1889
  {
1675
1890
  isOpen,
1676
1891
  size: "lg",
1677
- title,
1892
+ title: title ?? msg.valueHelpDialogTitle,
1678
1893
  onClose,
1679
- footer: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1680
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1681
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1894
+ footer: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1895
+ children: /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1896
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1682
1897
  Input,
1683
1898
  {
1684
1899
  "aria-label": msg.valueHelpDialogSearch,
1685
1900
  icon: "search",
1686
1901
  type: "search",
1687
1902
  value: query,
1688
- onChange: setQuery,
1689
- placeholder: searchPlaceholder,
1903
+ onChange: handleSearch,
1904
+ placeholder: searchPlaceholder ?? msg.valueHelpDialogSearchPlaceholder,
1690
1905
  autoFocus: true
1691
1906
  }
1692
1907
  ),
1693
- /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1908
+ /* @__PURE__ */ (0, import_jsx_runtime31.jsx)("div", { onScroll: onLoadMore ? (event) => {
1909
+ const el = event.currentTarget;
1910
+ if (el.scrollHeight - el.scrollTop - el.clientHeight < 64) onLoadMore();
1911
+ } : void 0, style: { overflow: "auto", maxHeight: "48vh" }, children: /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1694
1912
  DataTable,
1695
1913
  {
1696
- "aria-label": typeof title === "string" ? title : "Records",
1914
+ "aria-label": typeof title === "string" ? title : msg.valueHelpDialogTitle,
1697
1915
  density: "condensed",
1698
1916
  columns,
1699
1917
  rows: filtered,
1700
- emptyLabel: emptyLabel ?? `No records match \u201C${query}\u201D.`,
1918
+ isLoading,
1919
+ emptyLabel: emptyLabel ?? msg.valueHelpDialogEmpty,
1701
1920
  onRowAction: (row) => {
1702
1921
  onSelect?.(row);
1703
1922
  onClose?.();
1704
1923
  }
1705
1924
  }
1706
- )
1925
+ ) })
1707
1926
  ] })
1708
1927
  }
1709
1928
  );
1710
1929
  }
1711
1930
 
1712
1931
  // src/components/forms/ValueHelpField.tsx
1713
- var import_jsx_runtime31 = require("react/jsx-runtime");
1932
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1714
1933
  var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
1715
1934
  function ValueHelpField({
1716
1935
  label,
@@ -1720,7 +1939,12 @@ function ValueHelpField({
1720
1939
  rows = [],
1721
1940
  columns = [],
1722
1941
  dialogTitle,
1723
- placeholder = "Not selected",
1942
+ onSearch,
1943
+ isFilteredExternally,
1944
+ isLoading,
1945
+ onLoadMore,
1946
+ emptyLabel,
1947
+ placeholder,
1724
1948
  description,
1725
1949
  errorMessage,
1726
1950
  isInvalid,
@@ -1732,51 +1956,54 @@ function ValueHelpField({
1732
1956
  }) {
1733
1957
  const msg = usePireMessages();
1734
1958
  const [open, setOpen] = React9.useState(false);
1735
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx(className), style, children: [
1736
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
1737
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1738
- Input,
1739
- {
1740
- label,
1741
- isReadOnly: true,
1742
- isInvalid,
1743
- isDisabled,
1744
- isRequired,
1745
- value: value ? format(value) : "",
1746
- placeholder,
1747
- description,
1748
- errorMessage
1749
- }
1750
- ),
1751
- allowsClear && value ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1752
- IconButton,
1753
- {
1754
- icon: "x",
1755
- label: msg.valueHelpFieldClear,
1756
- variant: "outlined",
1757
- isDisabled,
1758
- onPress: () => onChange?.(null)
1759
- }
1760
- ) : null,
1761
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1762
- IconButton,
1763
- {
1764
- icon: "search",
1765
- label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1766
- variant: "outlined",
1767
- isDisabled,
1768
- onPress: () => setOpen(true)
1769
- }
1770
- )
1771
- ] }),
1772
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1959
+ return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: cx(className), style, children: [
1960
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1961
+ Input,
1962
+ {
1963
+ label,
1964
+ isReadOnly: true,
1965
+ isInvalid,
1966
+ isDisabled,
1967
+ isRequired,
1968
+ value: value ? format(value) : "",
1969
+ placeholder: placeholder ?? msg.valueHelpFieldPlaceholder,
1970
+ description,
1971
+ errorMessage,
1972
+ suffix: /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("span", { className: "pire-valuehelp-actions", children: [
1973
+ allowsClear && value ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1974
+ IconButton,
1975
+ {
1976
+ icon: "x",
1977
+ label: msg.valueHelpFieldClear,
1978
+ isDisabled,
1979
+ onPress: () => onChange?.(null)
1980
+ }
1981
+ ) : null,
1982
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1983
+ IconButton,
1984
+ {
1985
+ icon: "search",
1986
+ label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1987
+ isDisabled,
1988
+ onPress: () => setOpen(true)
1989
+ }
1990
+ )
1991
+ ] })
1992
+ }
1993
+ ),
1994
+ /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
1773
1995
  ValueHelpDialog,
1774
1996
  {
1775
1997
  isOpen: open,
1776
1998
  onClose: () => setOpen(false),
1777
- title: dialogTitle ?? label ?? "Select a record",
1999
+ title: dialogTitle ?? label,
1778
2000
  columns,
1779
2001
  rows,
2002
+ onSearch,
2003
+ isFilteredExternally,
2004
+ isLoading,
2005
+ onLoadMore,
2006
+ emptyLabel,
1780
2007
  onSelect: (row) => onChange?.(row)
1781
2008
  }
1782
2009
  )
@@ -1789,7 +2016,7 @@ var import_react_aria_components23 = require("react-aria-components");
1789
2016
 
1790
2017
  // src/components/feedback/ProgressBar.tsx
1791
2018
  var import_react_aria_components22 = require("react-aria-components");
1792
- var import_jsx_runtime32 = require("react/jsx-runtime");
2019
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1793
2020
  function ProgressBar({
1794
2021
  value = 0,
1795
2022
  minValue = 0,
@@ -1802,7 +2029,7 @@ function ProgressBar({
1802
2029
  className,
1803
2030
  style
1804
2031
  }) {
1805
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2032
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1806
2033
  import_react_aria_components22.ProgressBar,
1807
2034
  {
1808
2035
  className: cx("pire-progress", className),
@@ -1813,19 +2040,19 @@ function ProgressBar({
1813
2040
  maxValue,
1814
2041
  isIndeterminate,
1815
2042
  style,
1816
- children: ({ percentage, valueText }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
1817
- label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "pire-progress-head", children: [
1818
- label ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_aria_components22.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", {}),
1819
- showValue && !isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", { className: "pire-numeric", children: valueText }) : null
2043
+ children: ({ percentage, valueText }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(import_jsx_runtime33.Fragment, { children: [
2044
+ label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("div", { className: "pire-progress-head", children: [
2045
+ label ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components22.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", {}),
2046
+ showValue && !isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-numeric", children: valueText }) : null
1820
2047
  ] }) : null,
1821
- /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "pire-progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
2048
+ /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "pire-progress-track", children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
1822
2049
  ] })
1823
2050
  }
1824
2051
  );
1825
2052
  }
1826
2053
 
1827
2054
  // src/components/forms/FileUpload.tsx
1828
- var import_jsx_runtime33 = require("react/jsx-runtime");
2055
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1829
2056
  var isImage = (file) => file.type.startsWith("image/");
1830
2057
  function formatFileSize(bytes) {
1831
2058
  if (bytes < 1024) return `${bytes} B`;
@@ -1897,7 +2124,7 @@ function FileUpload({
1897
2124
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
1898
2125
  };
1899
2126
  const remove = (target) => commit(files.filter((f) => f.file !== target));
1900
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
2127
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1901
2128
  "div",
1902
2129
  {
1903
2130
  className: cx("pire-field", "pire-fileupload", className),
@@ -1905,24 +2132,24 @@ function FileUpload({
1905
2132
  "data-full-width": String(fullWidth),
1906
2133
  "data-invalid": isInvalid ? "true" : void 0,
1907
2134
  children: [
1908
- label ? /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("span", { className: "pire-field-label", children: [
2135
+ label ? /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("span", { className: "pire-field-label", children: [
1909
2136
  label,
1910
- isRequired ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
2137
+ isRequired ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1911
2138
  ] }) : null,
1912
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2139
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1913
2140
  import_react_aria_components23.FileTrigger,
1914
2141
  {
1915
2142
  acceptedFileTypes,
1916
2143
  allowsMultiple,
1917
2144
  onSelect: accept,
1918
- children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
2145
+ children: /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
1919
2146
  }
1920
2147
  ),
1921
- files.length ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)("li", { className: "pire-fileupload-item", children: [
1922
- previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
1923
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
1924
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
1925
- isDisabled || isReadOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2148
+ files.length ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("li", { className: "pire-fileupload-item", children: [
2149
+ previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
2150
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
2151
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
2152
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1926
2153
  IconButton,
1927
2154
  {
1928
2155
  icon: "x",
@@ -1932,16 +2159,17 @@ function FileUpload({
1932
2159
  }
1933
2160
  )
1934
2161
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
1935
- uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
1936
- description ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components23.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1937
- isInvalid && errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-field-error", children: errorMessage }) : null
2162
+ uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
2163
+ description ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(import_react_aria_components23.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
2164
+ isInvalid && errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-field-error", children: errorMessage }) : null
1938
2165
  ]
1939
2166
  }
1940
2167
  );
1941
2168
  }
1942
2169
 
1943
2170
  // src/components/navigation/ShellBar.tsx
1944
- var import_jsx_runtime34 = require("react/jsx-runtime");
2171
+ var import_react_aria_components24 = require("react-aria-components");
2172
+ var import_jsx_runtime35 = require("react/jsx-runtime");
1945
2173
  var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
1946
2174
  function ShellBar({
1947
2175
  product,
@@ -1953,33 +2181,51 @@ function ShellBar({
1953
2181
  searchLabel = "Search",
1954
2182
  actions,
1955
2183
  user,
2184
+ userMenu,
2185
+ userMenuLabel,
1956
2186
  className,
1957
2187
  ...rest
1958
2188
  }) {
1959
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("header", { className: cx("pire-shellbar", className), ...rest, children: [
1960
- onMenu ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
1961
- monogram ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
1962
- product ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-product", children: product }) : null,
1963
- title ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-title", children: title }) : null,
1964
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-spacer" }),
1965
- onSearch ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
2189
+ const msg = usePireMessages();
2190
+ return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("header", { className: cx("pire-shellbar", className), ...rest, children: [
2191
+ onMenu ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
2192
+ monogram ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
2193
+ product ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-shellbar-product", children: product }) : null,
2194
+ title ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-shellbar-title", children: title }) : null,
2195
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-shellbar-spacer" }),
2196
+ onSearch ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
1966
2197
  actions,
1967
- user ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
2198
+ user && userMenu ? (
2199
+ // A real button, not the img-role span: the avatar is where "my profile", "switch company"
2200
+ // and "sign out" live in any ERP, and a span accepts neither focus nor onPress. Popover is
2201
+ // rendered here rather than expected from the consumer so the panel keeps shell placement.
2202
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react_aria_components24.MenuTrigger, { children: [
2203
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
2204
+ import_react_aria_components24.Button,
2205
+ {
2206
+ className: "pire-avatar pire-avatar-trigger",
2207
+ "aria-label": (userMenuLabel ?? msg.shellBarUserMenu).replace("{user}", user),
2208
+ children: initials2(user)
2209
+ }
2210
+ ),
2211
+ /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components24.Popover, { className: "pire-popover", children: userMenu })
2212
+ ] })
2213
+ ) : user ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
1968
2214
  ] });
1969
2215
  }
1970
2216
 
1971
2217
  // src/components/navigation/SideNav.tsx
1972
2218
  var React11 = __toESM(require("react"), 1);
1973
- var import_react_aria_components25 = require("react-aria-components");
2219
+ var import_react_aria_components26 = require("react-aria-components");
1974
2220
 
1975
2221
  // src/components/navigation/Menu.tsx
1976
- var import_react_aria_components24 = require("react-aria-components");
1977
- var import_jsx_runtime35 = require("react/jsx-runtime");
2222
+ var import_react_aria_components25 = require("react-aria-components");
2223
+ var import_jsx_runtime36 = require("react/jsx-runtime");
1978
2224
  function Menu({ minWidth, className, style, ...rest }) {
1979
2225
  const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
1980
2226
  const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
1981
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1982
- import_react_aria_components24.Menu,
2227
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2228
+ import_react_aria_components25.Menu,
1983
2229
  {
1984
2230
  className: cx("pire-menu", className),
1985
2231
  style: menuStyle,
@@ -1987,6 +2233,11 @@ function Menu({ minWidth, className, style, ...rest }) {
1987
2233
  }
1988
2234
  );
1989
2235
  }
2236
+ var shortcutKeys = (shortcut) => {
2237
+ if (shortcut == null) return [];
2238
+ const parts = Array.isArray(shortcut) ? shortcut : shortcut.split(/[+\s]+/);
2239
+ return parts.map((part) => part.trim()).filter(Boolean);
2240
+ };
1990
2241
  function MenuItem({
1991
2242
  children,
1992
2243
  icon,
@@ -1996,35 +2247,36 @@ function MenuItem({
1996
2247
  className,
1997
2248
  ...rest
1998
2249
  }) {
1999
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
2000
- import_react_aria_components24.MenuItem,
2250
+ const keys = shortcutKeys(shortcut);
2251
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2252
+ import_react_aria_components25.MenuItem,
2001
2253
  {
2002
2254
  className: cx("pire-menu-item", className),
2003
2255
  "data-tone": tone === "danger" ? "danger" : void 0,
2004
2256
  ...rest,
2005
2257
  children: [
2006
- icon ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
2007
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "pire-menu-item-body", children: [
2008
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-menu-item-label", children }),
2009
- description ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-menu-item-desc", children: description }) : null
2258
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
2259
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("span", { className: "pire-menu-item-body", children: [
2260
+ /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-menu-item-label", children }),
2261
+ description ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-menu-item-desc", children: description }) : null
2010
2262
  ] }),
2011
- shortcut ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
2263
+ keys.length ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-menu-item-shortcut", children: keys.map((cap, index) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Kbd, { size: "sm", children: cap }, `${cap}-${index}`)) }) : null
2012
2264
  ]
2013
2265
  }
2014
2266
  );
2015
2267
  }
2016
2268
  function MenuSection({ title, children, className, ...rest }) {
2017
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react_aria_components24.MenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
2018
- title ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components24.Header, { className: "pire-menu-section-title", children: title }) : null,
2269
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.MenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
2270
+ title ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components25.Header, { className: "pire-menu-section-title", children: title }) : null,
2019
2271
  children
2020
2272
  ] });
2021
2273
  }
2022
2274
  function MenuSeparator({ className }) {
2023
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_react_aria_components24.Separator, { className: cx("pire-menu-separator", className) });
2275
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components25.Separator, { className: cx("pire-menu-separator", className) });
2024
2276
  }
2025
2277
 
2026
2278
  // src/components/navigation/SideNav.tsx
2027
- var import_jsx_runtime36 = require("react/jsx-runtime");
2279
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2028
2280
  function findActiveParent(groups, value) {
2029
2281
  if (value == null) return void 0;
2030
2282
  for (const group of groups) {
@@ -2073,8 +2325,8 @@ function SideNav({
2073
2325
  };
2074
2326
  const renderRow = (item, onPress, isGroup) => {
2075
2327
  const selected = !isGroup && item.id === value;
2076
- const button = /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2077
- import_react_aria_components25.Button,
2328
+ const button = /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2329
+ import_react_aria_components26.Button,
2078
2330
  {
2079
2331
  className: "pire-sidenav-item",
2080
2332
  "data-selected": selected ? "true" : void 0,
@@ -2083,70 +2335,70 @@ function SideNav({
2083
2335
  "aria-label": collapsed ? item.label : void 0,
2084
2336
  onPress,
2085
2337
  children: [
2086
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2087
- collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label }),
2088
- item.count != null && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null
2338
+ item.icon ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2339
+ collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: item.label }),
2340
+ item.count != null && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null
2089
2341
  ]
2090
2342
  },
2091
2343
  item.id
2092
2344
  );
2093
- return collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2345
+ return collapsed ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2094
2346
  };
2095
- const renderRailFlyout = (item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.MenuTrigger, { children: [
2096
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2097
- import_react_aria_components25.Button,
2347
+ const renderRailFlyout = (item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_aria_components26.MenuTrigger, { children: [
2348
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2349
+ import_react_aria_components26.Button,
2098
2350
  {
2099
2351
  className: "pire-sidenav-item",
2100
2352
  "aria-label": item.label,
2101
2353
  "data-active-child": item.id === activeParent ? "true" : void 0,
2102
- children: item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null
2354
+ children: item.icon ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { name: item.icon, size: 16 }) : null
2103
2355
  }
2104
2356
  ),
2105
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components25.Popover, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2357
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components26.Popover, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2106
2358
  Menu,
2107
2359
  {
2108
2360
  "aria-label": item.label,
2109
2361
  className: "pire-sidenav-flyout",
2110
2362
  onAction: (key) => onChange?.(String(key)),
2111
- children: (item.items ?? []).map((child) => /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(MenuItem, { id: child.id, children: child.label }, child.id))
2363
+ children: (item.items ?? []).map((child) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(MenuItem, { id: child.id, children: child.label }, child.id))
2112
2364
  }
2113
2365
  ) })
2114
2366
  ] }, item.id);
2115
- const renderSection = (item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
2116
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2117
- import_react_aria_components25.Button,
2367
+ const renderSection = (item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_aria_components26.Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
2368
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2369
+ import_react_aria_components26.Button,
2118
2370
  {
2119
2371
  slot: "trigger",
2120
2372
  className: "pire-sidenav-item",
2121
2373
  "data-kind": "group",
2122
2374
  "data-active-child": item.id === activeParent ? "true" : void 0,
2123
2375
  children: [
2124
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2125
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label }),
2126
- item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null,
2127
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2376
+ item.icon ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2377
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: item.label }),
2378
+ item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null,
2379
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2128
2380
  ]
2129
2381
  }
2130
2382
  ),
2131
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_react_aria_components25.DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2383
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components26.DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2132
2384
  const selected = child.id === value;
2133
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2134
- import_react_aria_components25.Button,
2385
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2386
+ import_react_aria_components26.Button,
2135
2387
  {
2136
2388
  className: "pire-sidenav-item pire-sidenav-subitem",
2137
2389
  "data-selected": selected ? "true" : void 0,
2138
2390
  "aria-current": selected ? "page" : void 0,
2139
2391
  onPress: () => onChange?.(child.id),
2140
2392
  children: [
2141
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: child.label }),
2142
- child.count != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: child.count }) : null
2393
+ /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { children: child.label }),
2394
+ child.count != null ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "pire-sidenav-count", children: child.count }) : null
2143
2395
  ]
2144
2396
  },
2145
2397
  child.id
2146
2398
  );
2147
2399
  }) })
2148
2400
  ] }, item.id);
2149
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2401
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2150
2402
  "nav",
2151
2403
  {
2152
2404
  className: cx("pire-sidenav", className),
@@ -2162,10 +2414,10 @@ function SideNav({
2162
2414
  if (isGroup && collapsed && railFlyout) return renderRailFlyout(item);
2163
2415
  return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
2164
2416
  });
2165
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "pire-sidenav-group", children: [
2166
- group.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "pire-sidenav-label", children: group.label }) : null,
2167
- hasSections ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2168
- import_react_aria_components25.DisclosureGroup,
2417
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)("div", { className: "pire-sidenav-group", children: [
2418
+ group.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "pire-sidenav-label", children: group.label }) : null,
2419
+ hasSections ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
2420
+ import_react_aria_components26.DisclosureGroup,
2169
2421
  {
2170
2422
  className: "pire-sidenav-tree",
2171
2423
  allowsMultipleExpanded: true,
@@ -2176,18 +2428,18 @@ function SideNav({
2176
2428
  ) : rows
2177
2429
  ] }, group.label ?? gi);
2178
2430
  }),
2179
- footer ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "pire-sidenav-footer", children: footer }) : null
2431
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("div", { className: "pire-sidenav-footer", children: footer }) : null
2180
2432
  ]
2181
2433
  }
2182
2434
  );
2183
2435
  }
2184
2436
 
2185
2437
  // src/components/navigation/Tabs.tsx
2186
- var import_react_aria_components26 = require("react-aria-components");
2187
- var import_jsx_runtime37 = require("react/jsx-runtime");
2438
+ var import_react_aria_components27 = require("react-aria-components");
2439
+ var import_jsx_runtime38 = require("react/jsx-runtime");
2188
2440
  function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
2189
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2190
- import_react_aria_components26.Tabs,
2441
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2442
+ import_react_aria_components27.Tabs,
2191
2443
  {
2192
2444
  className,
2193
2445
  style,
@@ -2195,23 +2447,23 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2195
2447
  defaultSelectedKey: defaultValue,
2196
2448
  onSelectionChange: (k) => onChange?.(String(k)),
2197
2449
  children: [
2198
- /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components26.TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(import_react_aria_components26.Tab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
2199
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2450
+ /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components27.TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_aria_components27.Tab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
2451
+ item.icon ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2200
2452
  item.label,
2201
- item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime37.jsx)("span", { className: "pire-tab-count", children: item.count }) : null
2453
+ item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime38.jsx)("span", { className: "pire-tab-count", children: item.count }) : null
2202
2454
  ] }) }),
2203
- items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_react_aria_components26.TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2455
+ items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components27.TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2204
2456
  ]
2205
2457
  }
2206
2458
  );
2207
2459
  }
2208
2460
 
2209
2461
  // src/components/navigation/Breadcrumb.tsx
2210
- var import_react_aria_components27 = require("react-aria-components");
2211
- var import_jsx_runtime38 = require("react/jsx-runtime");
2462
+ var import_react_aria_components28 = require("react-aria-components");
2463
+ var import_jsx_runtime39 = require("react/jsx-runtime");
2212
2464
  function Breadcrumb({ items, onNavigate, className, style }) {
2213
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2214
- import_react_aria_components27.Breadcrumbs,
2465
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2466
+ import_react_aria_components28.Breadcrumbs,
2215
2467
  {
2216
2468
  className: cx("pire-breadcrumbs", className),
2217
2469
  style,
@@ -2219,9 +2471,9 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2219
2471
  onAction: (key) => onNavigate?.(String(key)),
2220
2472
  children: (item) => {
2221
2473
  const last = items[items.length - 1] === item;
2222
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_aria_components27.Breadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2223
- last ? item.label : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components27.Link, { href: item.href, children: item.label }),
2224
- last ? null : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2474
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)(import_react_aria_components28.Breadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2475
+ last ? item.label : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(import_react_aria_components28.Link, { href: item.href, children: item.label }),
2476
+ last ? null : /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2225
2477
  ] });
2226
2478
  }
2227
2479
  }
@@ -2229,7 +2481,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2229
2481
  }
2230
2482
 
2231
2483
  // src/components/navigation/Pagination.tsx
2232
- var import_jsx_runtime39 = require("react/jsx-runtime");
2484
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2233
2485
  function Pagination({
2234
2486
  page = 1,
2235
2487
  pageSize = 25,
@@ -2244,9 +2496,9 @@ function Pagination({
2244
2496
  const pages = Math.max(1, Math.ceil(total / pageSize));
2245
2497
  const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
2246
2498
  const to = Math.min(total, page * pageSize);
2247
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2248
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2249
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2499
+ return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2500
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2501
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2250
2502
  IconButton,
2251
2503
  {
2252
2504
  icon: "chevron-left",
@@ -2257,8 +2509,8 @@ function Pagination({
2257
2509
  onPress: () => onPageChange?.(page - 1)
2258
2510
  }
2259
2511
  ),
2260
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2261
- /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2512
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2513
+ /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2262
2514
  IconButton,
2263
2515
  {
2264
2516
  icon: "chevron-right",
@@ -2269,7 +2521,7 @@ function Pagination({
2269
2521
  onPress: () => onPageChange?.(page + 1)
2270
2522
  }
2271
2523
  ),
2272
- onPageSizeChange ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2524
+ onPageSizeChange ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2273
2525
  Select,
2274
2526
  {
2275
2527
  "aria-label": msg.paginationRowsPerPage,
@@ -2285,7 +2537,7 @@ function Pagination({
2285
2537
  }
2286
2538
 
2287
2539
  // src/components/feedback/InlineMessage.tsx
2288
- var import_jsx_runtime40 = require("react/jsx-runtime");
2540
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2289
2541
  var KIND_ICON = {
2290
2542
  info: "info",
2291
2543
  success: "check-circle-2",
@@ -2295,7 +2547,7 @@ var KIND_ICON = {
2295
2547
  function InlineMessage({ kind = "info", title, action, onClose, children, className, ...rest }) {
2296
2548
  const msg = usePireMessages();
2297
2549
  const assertive = kind === "error" || kind === "warning";
2298
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2550
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2299
2551
  "div",
2300
2552
  {
2301
2553
  className: cx("pire-msg", className),
@@ -2304,13 +2556,13 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2304
2556
  "aria-live": assertive ? "assertive" : "polite",
2305
2557
  ...rest,
2306
2558
  children: [
2307
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2308
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2309
- title ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-msg-title", children: title }) : null,
2310
- children ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-msg-body", children }) : null,
2559
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2560
+ /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2561
+ title ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "pire-msg-title", children: title }) : null,
2562
+ children ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { className: "pire-msg-body", children }) : null,
2311
2563
  action
2312
2564
  ] }),
2313
- onClose ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2565
+ onClose ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2314
2566
  ]
2315
2567
  }
2316
2568
  );
@@ -2318,7 +2570,7 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2318
2570
 
2319
2571
  // src/components/feedback/Toast.tsx
2320
2572
  var React12 = __toESM(require("react"), 1);
2321
- var import_jsx_runtime41 = require("react/jsx-runtime");
2573
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2322
2574
  var KIND_ICON2 = {
2323
2575
  info: "info",
2324
2576
  success: "check-circle-2",
@@ -2327,7 +2579,7 @@ var KIND_ICON2 = {
2327
2579
  };
2328
2580
  function Toast({ kind = "success", onClose, position = "bottom-center", children, className, ...rest }) {
2329
2581
  const msg = usePireMessages();
2330
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2582
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
2331
2583
  "div",
2332
2584
  {
2333
2585
  className: cx("pire-toast", className),
@@ -2336,9 +2588,9 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
2336
2588
  "aria-live": kind === "error" ? "assertive" : "polite",
2337
2589
  ...rest,
2338
2590
  children: [
2339
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { name: KIND_ICON2[kind], size: 16 }),
2340
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { flex: 1 }, children }),
2341
- onClose ? /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2591
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { name: KIND_ICON2[kind], size: 16 }),
2592
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { style: { flex: 1 }, children }),
2593
+ onClose ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2342
2594
  ]
2343
2595
  }
2344
2596
  );
@@ -2356,9 +2608,9 @@ function ToastProvider({ children, timeout = 6e3 }) {
2356
2608
  return id;
2357
2609
  }, [close, timeout]);
2358
2610
  const value = React12.useMemo(() => ({ add, close }), [add, close]);
2359
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(ToastContext.Provider, { value, children: [
2611
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(ToastContext.Provider, { value, children: [
2360
2612
  children,
2361
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
2613
+ /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
2362
2614
  ] });
2363
2615
  }
2364
2616
  function useToast() {
@@ -2368,8 +2620,8 @@ function useToast() {
2368
2620
  }
2369
2621
 
2370
2622
  // src/components/data/KpiTile.tsx
2371
- var import_react_aria_components28 = require("react-aria-components");
2372
- var import_jsx_runtime42 = require("react/jsx-runtime");
2623
+ var import_react_aria_components29 = require("react-aria-components");
2624
+ var import_jsx_runtime43 = require("react/jsx-runtime");
2373
2625
  function KpiTile({
2374
2626
  label,
2375
2627
  value,
@@ -2385,50 +2637,50 @@ function KpiTile({
2385
2637
  style
2386
2638
  }) {
2387
2639
  const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
2388
- const body = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
2389
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-label", children: [
2390
- icon ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { name: icon, size: 16 }) : null,
2640
+ const body = /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)(import_jsx_runtime43.Fragment, { children: [
2641
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "pire-kpi-label", children: [
2642
+ icon ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { name: icon, size: 16 }) : null,
2391
2643
  label
2392
2644
  ] }),
2393
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-value", children: [
2645
+ /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "pire-kpi-value", children: [
2394
2646
  value,
2395
- unit ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pire-kpi-unit", children: unit }) : null
2647
+ unit ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "pire-kpi-unit", children: unit }) : null
2396
2648
  ] }),
2397
- delta ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2398
- deltaDirection ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2649
+ delta ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2650
+ deltaDirection ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2399
2651
  delta
2400
2652
  ] }) : null,
2401
- footnote ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pire-kpi-foot", children: footnote }) : null
2653
+ footnote ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "pire-kpi-foot", children: footnote }) : null
2402
2654
  ] });
2403
2655
  const props = { className: cx("pire-kpi", className), "data-status": status, style };
2404
- return onPress ? /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_react_aria_components28.Button, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ (0, import_jsx_runtime42.jsx)("div", { ...props, children: body });
2656
+ return onPress ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)(import_react_aria_components29.Button, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { ...props, children: body });
2405
2657
  }
2406
2658
 
2407
2659
  // src/components/data/ObjectHeader.tsx
2408
- var import_jsx_runtime43 = require("react/jsx-runtime");
2660
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2409
2661
  function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
2410
- return /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("header", { className: cx("pire-objheader", className), ...rest, children: [
2662
+ return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("header", { className: cx("pire-objheader", className), ...rest, children: [
2411
2663
  breadcrumb,
2412
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "pire-objheader-row", children: [
2413
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { minWidth: 0 }, children: [
2414
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h1", { className: "pire-objheader-title", children: title }),
2415
- subtitle || id ? /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "pire-objheader-sub", children: [
2664
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-objheader-row", children: [
2665
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { style: { minWidth: 0 }, children: [
2666
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("h1", { className: "pire-objheader-title", children: title }),
2667
+ subtitle || id ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-objheader-sub", children: [
2416
2668
  subtitle,
2417
- id ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("span", { className: "pire-objheader-id", children: id }) : null
2669
+ id ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "pire-objheader-id", children: id }) : null
2418
2670
  ] }) : null
2419
2671
  ] }),
2420
2672
  badge,
2421
- actions ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("div", { className: "pire-objheader-actions", children: actions }) : null
2673
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "pire-objheader-actions", children: actions }) : null
2422
2674
  ] }),
2423
- facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { children: [
2424
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dt", { className: "pire-fact-label", children: fact.label }),
2425
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2675
+ facts?.length ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { children: [
2676
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("dt", { className: "pire-fact-label", children: fact.label }),
2677
+ /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2426
2678
  ] }, fact.label)) }) : null
2427
2679
  ] });
2428
2680
  }
2429
2681
 
2430
2682
  // src/components/data/FilterBar.tsx
2431
- var import_jsx_runtime44 = require("react/jsx-runtime");
2683
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2432
2684
  function FilterBar({
2433
2685
  children,
2434
2686
  activeFilters = [],
@@ -2445,49 +2697,49 @@ function FilterBar({
2445
2697
  const label = useMessage("filterBarLabel", rest["aria-label"]);
2446
2698
  const go = useMessage("filterBarGo", goLabel);
2447
2699
  const clearAll = useMessage("filterBarClearAll", clearAllLabel);
2448
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2449
- /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-filterbar-controls", children: [
2700
+ return /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2701
+ /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "pire-filterbar-controls", children: [
2450
2702
  children,
2451
- onGo ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: "primary", onPress: onGo, children: go }) : null
2703
+ onGo ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { variant: "primary", onPress: onGo, children: go }) : null
2452
2704
  ] }),
2453
- activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-filterbar-foot", children: [
2454
- activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2455
- activeFilters.length && onClear ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2456
- resultLabel ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2457
- actions ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("div", { className: "pire-filterbar-actions", children: actions }) : null
2705
+ activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "pire-filterbar-foot", children: [
2706
+ activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2707
+ activeFilters.length && onClear ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2708
+ resultLabel ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2709
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("div", { className: "pire-filterbar-actions", children: actions }) : null
2458
2710
  ] }) : null
2459
2711
  ] });
2460
2712
  }
2461
2713
 
2462
2714
  // src/components/data/DescriptionList.tsx
2463
- var import_jsx_runtime45 = require("react/jsx-runtime");
2715
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2464
2716
  function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
2465
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2717
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2466
2718
  "dl",
2467
2719
  {
2468
2720
  className: cx("pire-dl", className),
2469
2721
  "data-layout": layout,
2470
2722
  style: { ...layout === "grid" ? { "--pire-dl-cols": columns } : null, ...style },
2471
2723
  ...rest,
2472
- children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
2473
- /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("dt", { className: "pire-dl-term", children: [
2724
+ children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
2725
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("dt", { className: "pire-dl-term", children: [
2474
2726
  item.label,
2475
2727
  item.hint
2476
2728
  ] }),
2477
- /* @__PURE__ */ (0, import_jsx_runtime45.jsx)("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2729
+ /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2478
2730
  ] }, i))
2479
2731
  }
2480
2732
  );
2481
2733
  }
2482
2734
 
2483
2735
  // src/components/data/Timeline.tsx
2484
- var import_jsx_runtime46 = require("react/jsx-runtime");
2736
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2485
2737
  function Timeline({ entries, reverse = false, className, ...rest }) {
2486
2738
  const list = reverse ? [...entries].reverse() : entries;
2487
- return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("li", { className: "pire-timeline-item", children: [
2488
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-time", children: entry.time }),
2489
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-text", children: entry.event }),
2490
- entry.actor ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2739
+ return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("li", { className: "pire-timeline-item", children: [
2740
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-timeline-time", children: entry.time }),
2741
+ /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-timeline-text", children: entry.event }),
2742
+ entry.actor ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2491
2743
  ] }, entry.id ?? i)) });
2492
2744
  }
2493
2745
 
@@ -2570,7 +2822,7 @@ function alignToCategories(series, categoryCount) {
2570
2822
  }
2571
2823
 
2572
2824
  // src/components/data/ChartFrame.tsx
2573
- var import_jsx_runtime47 = require("react/jsx-runtime");
2825
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2574
2826
  function seriesLegend(series) {
2575
2827
  return series.map((one, index) => ({
2576
2828
  key: one.id,
@@ -2593,29 +2845,29 @@ function ChartFrame({
2593
2845
  children
2594
2846
  }) {
2595
2847
  const msg = usePireMessages();
2596
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("figure", { className: cx("pire-chart", className), style, children: [
2597
- title || description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("figcaption", { className: "pire-chart-head", children: [
2598
- title ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-chart-title", children: title }) : null,
2599
- description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-chart-desc", children: description }) : null
2848
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("figure", { className: cx("pire-chart", className), style, children: [
2849
+ title || description ? /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("figcaption", { className: "pire-chart-head", children: [
2850
+ title ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-title", children: title }) : null,
2851
+ description ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-desc", children: description }) : null
2600
2852
  ] }) : null,
2601
- legend && legend.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("ul", { className: "pire-chart-legend", children: legend.map((item) => /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("li", { className: "pire-chart-legend-item", children: [
2602
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-chart-swatch", style: { background: item.color } }),
2853
+ legend && legend.length > 1 ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("ul", { className: "pire-chart-legend", children: legend.map((item) => /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("li", { className: "pire-chart-legend-item", children: [
2854
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-swatch", style: { background: item.color } }),
2603
2855
  item.label
2604
2856
  ] }, item.key)) }) : null,
2605
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2606
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("table", { children: [
2607
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("caption", { children: label }),
2608
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("tr", { children: [
2609
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { scope: "col", children: msg.chartCategoryHeader }),
2610
- series.map((one) => /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { scope: "col", children: one.label }, one.id))
2857
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2858
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("table", { children: [
2859
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("caption", { children: label }),
2860
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("tr", { children: [
2861
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { scope: "col", children: msg.chartCategoryHeader }),
2862
+ series.map((one) => /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { scope: "col", children: one.label }, one.id))
2611
2863
  ] }) }),
2612
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("tbody", { children: categories.map((category, categoryIndex) => (
2864
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("tbody", { children: categories.map((category, categoryIndex) => (
2613
2865
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2614
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("tr", { children: [
2615
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { scope: "row", children: category }),
2866
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("tr", { children: [
2867
+ /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("th", { scope: "row", children: category }),
2616
2868
  series.map((one) => {
2617
2869
  const value = one.values[categoryIndex];
2618
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("td", { children: value == null ? msg.chartNoValue : formatValue(value) }, one.id);
2870
+ return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("td", { children: value == null ? msg.chartNoValue : formatValue(value) }, one.id);
2619
2871
  })
2620
2872
  ] }, categoryIndex)
2621
2873
  )) })
@@ -2624,7 +2876,7 @@ function ChartFrame({
2624
2876
  }
2625
2877
 
2626
2878
  // src/components/data/BarChart.tsx
2627
- var import_jsx_runtime48 = require("react/jsx-runtime");
2879
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2628
2880
  function BarChart({
2629
2881
  categories,
2630
2882
  series: rawSeries,
@@ -2656,7 +2908,7 @@ function BarChart({
2656
2908
  const value = series[0].values[categoryIndex];
2657
2909
  return value == null ? msg.chartNoValue : formatValue(value);
2658
2910
  };
2659
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2911
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2660
2912
  ChartFrame,
2661
2913
  {
2662
2914
  label,
@@ -2669,7 +2921,7 @@ function BarChart({
2669
2921
  showDataTable,
2670
2922
  className,
2671
2923
  style,
2672
- children: !hasData ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2924
+ children: !hasData ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2673
2925
  "div",
2674
2926
  {
2675
2927
  className: "pire-chart-bars",
@@ -2678,12 +2930,12 @@ function BarChart({
2678
2930
  style: { "--pire-chart-height": `${height}px` },
2679
2931
  children: categories.map((category, categoryIndex) => (
2680
2932
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2681
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "pire-chart-group", children: [
2682
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-cat", children: category }),
2683
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("div", { className: "pire-chart-track", children: series.map((one, seriesIndex) => {
2933
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "pire-chart-group", children: [
2934
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "pire-chart-cat", children: category }),
2935
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "pire-chart-track", children: series.map((one, seriesIndex) => {
2684
2936
  const value = one.values[categoryIndex];
2685
2937
  if (value == null) return null;
2686
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2938
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2687
2939
  "div",
2688
2940
  {
2689
2941
  className: "pire-chart-bar",
@@ -2692,8 +2944,8 @@ function BarChart({
2692
2944
  "--pire-bar-color": seriesColor(one, seriesIndex)
2693
2945
  },
2694
2946
  children: [
2695
- withValues && orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2696
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("span", { className: "pire-chart-tip", role: "presentation", children: [
2947
+ withValues && orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2948
+ /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { className: "pire-chart-tip", role: "presentation", children: [
2697
2949
  series.length > 1 ? `${one.label}: ` : "",
2698
2950
  formatValue(value)
2699
2951
  ] })
@@ -2702,7 +2954,7 @@ function BarChart({
2702
2954
  one.id
2703
2955
  );
2704
2956
  }) }),
2705
- withValues && orientation === "horizontal" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-val", children: horizontalLabelFor(categoryIndex) }) : null
2957
+ withValues && orientation === "horizontal" ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("span", { className: "pire-chart-val", children: horizontalLabelFor(categoryIndex) }) : null
2706
2958
  ] }, categoryIndex)
2707
2959
  ))
2708
2960
  }
@@ -2713,7 +2965,7 @@ function BarChart({
2713
2965
 
2714
2966
  // src/components/data/LineChart.tsx
2715
2967
  var React13 = __toESM(require("react"), 1);
2716
- var import_jsx_runtime49 = require("react/jsx-runtime");
2968
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2717
2969
  var PLOT_INSET = { top: 10, right: 14, bottom: 24, left: 58 };
2718
2970
  var MARKER_LIMIT = 20;
2719
2971
  var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? React13.useEffect : React13.useLayoutEffect;
@@ -2780,7 +3032,7 @@ function LineChart({
2780
3032
  return `M${xAt(present[0].index)} ${baseline} L${line} L${xAt(last.index)} ${baseline} Z`;
2781
3033
  };
2782
3034
  const labelEvery = Math.max(1, Math.ceil(categories.length / Math.max(2, Math.floor(innerWidth / 64))));
2783
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3035
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2784
3036
  ChartFrame,
2785
3037
  {
2786
3038
  label,
@@ -2793,8 +3045,8 @@ function LineChart({
2793
3045
  showDataTable,
2794
3046
  className,
2795
3047
  style,
2796
- children: !hasData ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("div", { className: "pire-chart-lines", ref: plotRef, style: { height }, children: [
2797
- width > 0 ? /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
3048
+ children: !hasData ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "pire-chart-lines", ref: plotRef, style: { height }, children: [
3049
+ width > 0 ? /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)(
2798
3050
  "svg",
2799
3051
  {
2800
3052
  width,
@@ -2803,7 +3055,7 @@ function LineChart({
2803
3055
  "aria-hidden": "true",
2804
3056
  focusable: "false",
2805
3057
  children: [
2806
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("g", { className: "pire-chart-grid", children: scale.ticks.map((tick) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3058
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("g", { className: "pire-chart-grid", children: scale.ticks.map((tick) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2807
3059
  "line",
2808
3060
  {
2809
3061
  x1: PLOT_INSET.left,
@@ -2813,8 +3065,8 @@ function LineChart({
2813
3065
  },
2814
3066
  tick
2815
3067
  )) }),
2816
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("g", { className: "pire-chart-tick", children: [
2817
- scale.ticks.map((tick) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3068
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("g", { className: "pire-chart-tick", children: [
3069
+ scale.ticks.map((tick) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2818
3070
  "text",
2819
3071
  {
2820
3072
  x: PLOT_INSET.left - 8,
@@ -2827,10 +3079,10 @@ function LineChart({
2827
3079
  )),
2828
3080
  categories.map((category, index) => index % labelEvery === 0 ? (
2829
3081
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2830
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("text", { x: xAt(index), y: height - 6, textAnchor: "middle", children: category }, index)
3082
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("text", { x: xAt(index), y: height - 6, textAnchor: "middle", children: category }, index)
2831
3083
  ) : null)
2832
3084
  ] }),
2833
- showArea && series[0] ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3085
+ showArea && series[0] ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2834
3086
  "path",
2835
3087
  {
2836
3088
  d: areaFor(series[0].values),
@@ -2838,10 +3090,10 @@ function LineChart({
2838
3090
  style: { fill: seriesColor(series[0], 0) }
2839
3091
  }
2840
3092
  ) : null,
2841
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("g", { className: "pire-chart-line", fill: "none", children: series.map((one, index) => /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("path", { d: pathFor(one.values), stroke: seriesColor(one, index) }, one.id)) }),
2842
- withMarkers ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("g", { className: "pire-chart-marker", children: series.map((one, seriesIndex) => one.values.map((value, index) => value == null ? null : (
3093
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("g", { className: "pire-chart-line", fill: "none", children: series.map((one, index) => /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("path", { d: pathFor(one.values), stroke: seriesColor(one, index) }, one.id)) }),
3094
+ withMarkers ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("g", { className: "pire-chart-marker", children: series.map((one, seriesIndex) => one.values.map((value, index) => value == null ? null : (
2843
3095
  // biome-ignore lint/suspicious/noArrayIndexKey: a series is positional — the index is the point's identity, and category labels repeat.
2844
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3096
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2845
3097
  "circle",
2846
3098
  {
2847
3099
  cx: xAt(index),
@@ -2855,18 +3107,18 @@ function LineChart({
2855
3107
  ]
2856
3108
  }
2857
3109
  ) : null,
2858
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3110
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2859
3111
  "div",
2860
3112
  {
2861
3113
  className: "pire-chart-hover",
2862
3114
  style: { inset: `${PLOT_INSET.top}px ${PLOT_INSET.right}px ${PLOT_INSET.bottom}px ${PLOT_INSET.left}px` },
2863
3115
  children: categories.map((category, categoryIndex) => (
2864
3116
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2865
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("div", { className: "pire-chart-band", children: /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { className: "pire-chart-tip", role: "presentation", children: [
2866
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)("strong", { children: category }),
3117
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "pire-chart-band", children: /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: "pire-chart-tip", role: "presentation", children: [
3118
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("strong", { children: category }),
2867
3119
  series.map((one) => {
2868
3120
  const value = one.values[categoryIndex];
2869
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("span", { className: "pire-chart-tip-row", children: [
3121
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("span", { className: "pire-chart-tip-row", children: [
2870
3122
  one.label,
2871
3123
  ": ",
2872
3124
  value == null ? "No data" : formatValue(value)
@@ -2883,7 +3135,7 @@ function LineChart({
2883
3135
 
2884
3136
  // src/components/data/DonutChart.tsx
2885
3137
  var React14 = __toESM(require("react"), 1);
2886
- var import_jsx_runtime50 = require("react/jsx-runtime");
3138
+ var import_jsx_runtime51 = require("react/jsx-runtime");
2887
3139
  var SEGMENT_GAP_DEGREES = 1.5;
2888
3140
  function DonutChart({
2889
3141
  categories,
@@ -2920,7 +3172,7 @@ function DonutChart({
2920
3172
  }));
2921
3173
  const hovered = hoveredIndex == null ? null : segments.find((segment) => segment.index === hoveredIndex) ?? null;
2922
3174
  let arcStart = 0;
2923
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3175
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2924
3176
  ChartFrame,
2925
3177
  {
2926
3178
  label,
@@ -2933,8 +3185,8 @@ function DonutChart({
2933
3185
  showDataTable,
2934
3186
  className,
2935
3187
  style,
2936
- children: !hasData ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "pire-chart-donut", style: { height: size }, children: [
2937
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3188
+ children: !hasData ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "pire-chart-donut", style: { height: size }, children: [
3189
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2938
3190
  "svg",
2939
3191
  {
2940
3192
  width: size,
@@ -2942,13 +3194,13 @@ function DonutChart({
2942
3194
  "aria-hidden": "true",
2943
3195
  focusable: "false",
2944
3196
  onMouseLeave: () => setHoveredIndex(null),
2945
- children: /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("g", { transform: `rotate(-90 ${size / 2} ${size / 2})`, children: segments.map((segment) => {
3197
+ children: /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("g", { transform: `rotate(-90 ${size / 2} ${size / 2})`, children: segments.map((segment) => {
2946
3198
  const arcLength = segment.value / total * circumference;
2947
3199
  const offset = arcStart;
2948
3200
  arcStart += arcLength;
2949
3201
  return (
2950
3202
  // biome-ignore lint/a11y/noStaticElementInteractions: pointer-only enhancement inside an aria-hidden plot — the arcs carry nothing the data table does not, so there is nothing here for a keyboard to reach.
2951
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3203
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2952
3204
  "circle",
2953
3205
  {
2954
3206
  className: "pire-chart-arc",
@@ -2968,9 +3220,9 @@ function DonutChart({
2968
3220
  }) })
2969
3221
  }
2970
3222
  ),
2971
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "pire-chart-donut-center", style: { width: size - thickness * 2 - 8 }, children: [
2972
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
2973
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "pire-chart-donut-caption", children: hovered ? hovered.category : centerCaption })
3223
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)("div", { className: "pire-chart-donut-center", style: { width: size - thickness * 2 - 8 }, children: [
3224
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
3225
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "pire-chart-donut-caption", children: hovered ? hovered.category : centerCaption })
2974
3226
  ] })
2975
3227
  ] })
2976
3228
  }
@@ -2981,15 +3233,15 @@ function colorForSegment(index) {
2981
3233
  }
2982
3234
 
2983
3235
  // src/components/data/LinkList.tsx
2984
- var import_react_aria_components29 = require("react-aria-components");
2985
- var import_jsx_runtime51 = require("react/jsx-runtime");
3236
+ var import_react_aria_components30 = require("react-aria-components");
3237
+ var import_jsx_runtime52 = require("react/jsx-runtime");
2986
3238
  function LinkList({ items, onSelect, emphasis = "key", className, ...rest }) {
2987
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: cx("pire-linklist", className), role: "list", "data-emphasis": emphasis, ...rest, children: items.map((item) => {
2988
- const keySlot = item.key ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "pire-linklist-key", children: item.key }) : null;
2989
- const textSlot = item.text ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "pire-linklist-text", children: item.text }) : null;
3239
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: cx("pire-linklist", className), role: "list", "data-emphasis": emphasis, ...rest, children: items.map((item) => {
3240
+ const keySlot = item.key ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "pire-linklist-key", children: item.key }) : null;
3241
+ const textSlot = item.text ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "pire-linklist-text", children: item.text }) : null;
2990
3242
  const [first, second] = emphasis === "text" ? [textSlot, keySlot] : [keySlot, textSlot];
2991
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { role: "listitem", className: "pire-linklist-row", children: /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(import_react_aria_components29.Button, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
2992
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
3243
+ return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { role: "listitem", className: "pire-linklist-row", children: /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(import_react_aria_components30.Button, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
3244
+ item.icon ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
2993
3245
  first,
2994
3246
  second,
2995
3247
  item.trailing
@@ -2998,7 +3250,7 @@ function LinkList({ items, onSelect, emphasis = "key", className, ...rest }) {
2998
3250
  }
2999
3251
 
3000
3252
  // src/components/layout/PageBand.tsx
3001
- var import_jsx_runtime52 = require("react/jsx-runtime");
3253
+ var import_jsx_runtime53 = require("react/jsx-runtime");
3002
3254
  function PageBand({
3003
3255
  surface = "card",
3004
3256
  hasBorder = true,
@@ -3006,7 +3258,7 @@ function PageBand({
3006
3258
  className,
3007
3259
  ...rest
3008
3260
  }) {
3009
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3261
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
3010
3262
  "div",
3011
3263
  {
3012
3264
  className: cx("pire-pageband", className),
@@ -3019,56 +3271,56 @@ function PageBand({
3019
3271
  }
3020
3272
 
3021
3273
  // src/components/layout/PageHeader.tsx
3022
- var import_jsx_runtime53 = require("react/jsx-runtime");
3274
+ var import_jsx_runtime54 = require("react/jsx-runtime");
3023
3275
  function PageHeader({ title, subtitle, actions, className, ...rest }) {
3024
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("header", { className: cx("pire-pageheader", className), ...rest, children: [
3025
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { style: { minWidth: 0 }, children: [
3026
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h1", { className: "pire-pageheader-title", children: title }),
3027
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("p", { className: "pire-pageheader-sub", children: subtitle }) : null
3276
+ return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("header", { className: cx("pire-pageheader", className), ...rest, children: [
3277
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { style: { minWidth: 0 }, children: [
3278
+ /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("h1", { className: "pire-pageheader-title", children: title }),
3279
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "pire-pageheader-sub", children: subtitle }) : null
3028
3280
  ] }),
3029
- actions ? /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("div", { className: "pire-pageheader-actions", children: actions }) : null
3281
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "pire-pageheader-actions", children: actions }) : null
3030
3282
  ] });
3031
3283
  }
3032
3284
 
3033
3285
  // src/components/layout/SectionHeader.tsx
3034
- var import_jsx_runtime54 = require("react/jsx-runtime");
3286
+ var import_jsx_runtime55 = require("react/jsx-runtime");
3035
3287
  function SectionHeader({ title, meta, actions, className, ...rest }) {
3036
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cx("pire-sectionhead", className), ...rest, children: [
3037
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "pire-eyebrow", children: title }),
3038
- meta ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3039
- actions ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("div", { className: "pire-sectionhead-actions", children: actions }) : null
3288
+ return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cx("pire-sectionhead", className), ...rest, children: [
3289
+ /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "pire-eyebrow", children: title }),
3290
+ meta ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3291
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "pire-sectionhead-actions", children: actions }) : null
3040
3292
  ] });
3041
3293
  }
3042
3294
 
3043
3295
  // src/components/layout/SelectionBar.tsx
3044
- var import_jsx_runtime55 = require("react/jsx-runtime");
3296
+ var import_jsx_runtime56 = require("react/jsx-runtime");
3045
3297
  function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
3046
3298
  if (!count) return null;
3047
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
3048
- /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("span", { className: "pire-selectionbar-count", children: [
3299
+ return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
3300
+ /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("span", { className: "pire-selectionbar-count", children: [
3049
3301
  count.toLocaleString(),
3050
3302
  " ",
3051
3303
  noun,
3052
3304
  count === 1 ? "" : "s",
3053
3305
  " selected"
3054
3306
  ] }),
3055
- children ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3056
- actions ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "pire-selectionbar-actions", children: actions }) : null
3307
+ children ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3308
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "pire-selectionbar-actions", children: actions }) : null
3057
3309
  ] });
3058
3310
  }
3059
3311
 
3060
3312
  // src/components/layout/FooterBar.tsx
3061
- var import_jsx_runtime56 = require("react/jsx-runtime");
3313
+ var import_jsx_runtime57 = require("react/jsx-runtime");
3062
3314
  function FooterBar({ note, actions, children, className, ...rest }) {
3063
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("footer", { className: cx("pire-footerbar", className), ...rest, children: [
3064
- note ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("span", { className: "pire-footerbar-note", children: note }) : null,
3315
+ return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)("footer", { className: cx("pire-footerbar", className), ...rest, children: [
3316
+ note ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("span", { className: "pire-footerbar-note", children: note }) : null,
3065
3317
  children,
3066
- actions ? /* @__PURE__ */ (0, import_jsx_runtime56.jsx)("div", { className: "pire-footerbar-actions", children: actions }) : null
3318
+ actions ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)("div", { className: "pire-footerbar-actions", children: actions }) : null
3067
3319
  ] });
3068
3320
  }
3069
3321
 
3070
3322
  // src/components/patterns/ConfirmDialog.tsx
3071
- var import_jsx_runtime57 = require("react/jsx-runtime");
3323
+ var import_jsx_runtime58 = require("react/jsx-runtime");
3072
3324
  function ConfirmDialog({
3073
3325
  isOpen,
3074
3326
  title,
@@ -3082,7 +3334,7 @@ function ConfirmDialog({
3082
3334
  onConfirm,
3083
3335
  onCancel
3084
3336
  }) {
3085
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
3337
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
3086
3338
  Dialog,
3087
3339
  {
3088
3340
  isOpen,
@@ -3092,25 +3344,157 @@ function ConfirmDialog({
3092
3344
  onClose: onCancel,
3093
3345
  isDismissable: !isBusy,
3094
3346
  showClose: false,
3095
- footer: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
3096
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3097
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
3347
+ footer: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_jsx_runtime58.Fragment, { children: [
3348
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3349
+ /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
3098
3350
  ] }),
3099
3351
  children: [
3100
- consequence ? /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
3352
+ consequence ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
3101
3353
  children
3102
3354
  ]
3103
3355
  }
3104
3356
  );
3105
3357
  }
3106
3358
 
3359
+ // src/components/patterns/CommandPalette.tsx
3360
+ var React15 = __toESM(require("react"), 1);
3361
+ var import_react_aria_components31 = require("react-aria-components");
3362
+ var import_jsx_runtime59 = require("react/jsx-runtime");
3363
+ var RESULTS_SECTION_KEY = "__pire_results__";
3364
+ var searchableText = (item) => [item.label, item.description, item.keywords].filter(Boolean).join(" ");
3365
+ function CommandPalette({
3366
+ isOpen,
3367
+ onOpenChange,
3368
+ groups = [],
3369
+ resultsGroup,
3370
+ onAction,
3371
+ onSearch,
3372
+ isLoading,
3373
+ emptyLabel,
3374
+ loadingLabel,
3375
+ placeholder,
3376
+ footer,
3377
+ showFooter = true,
3378
+ "aria-label": ariaLabel,
3379
+ className,
3380
+ style
3381
+ }) {
3382
+ const msg = usePireMessages();
3383
+ const [query, setQuery] = React15.useState("");
3384
+ const { contains } = (0, import_react_aria_components31.useFilter)({ sensitivity: "base" });
3385
+ React15.useEffect(() => {
3386
+ if (isOpen) setQuery("");
3387
+ }, [isOpen]);
3388
+ const searchableById = React15.useMemo(() => {
3389
+ const byId = /* @__PURE__ */ new Map();
3390
+ for (const group of groups) for (const item of group.items) byId.set(item.id, searchableText(item));
3391
+ return byId;
3392
+ }, [groups]);
3393
+ const filter = React15.useCallback((textValue, inputValue, node) => {
3394
+ if (node.parentKey === RESULTS_SECTION_KEY) return true;
3395
+ return contains(searchableById.get(String(node.key)) ?? textValue, inputValue);
3396
+ }, [contains, searchableById]);
3397
+ const handleInputChange = (value) => {
3398
+ setQuery(value);
3399
+ onSearch?.(value);
3400
+ };
3401
+ const sections = [...groups, ...resultsGroup ? [{ ...resultsGroup, id: RESULTS_SECTION_KEY }] : []];
3402
+ const status = isLoading ? loadingLabel ?? msg.commandPaletteLoading : emptyLabel ?? msg.commandPaletteEmpty;
3403
+ return /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3404
+ import_react_aria_components31.ModalOverlay,
3405
+ {
3406
+ className: "pire-cp-overlay",
3407
+ isOpen,
3408
+ isDismissable: true,
3409
+ onOpenChange: (open) => {
3410
+ if (!open) onOpenChange?.(false);
3411
+ },
3412
+ children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_aria_components31.Modal, { className: cx("pire-cp-modal", className), style, children: /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react_aria_components31.Dialog, { className: "pire-cp-dialog", "aria-label": ariaLabel ?? msg.commandPaletteLabel, children: [
3413
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react_aria_components31.Autocomplete, { filter, inputValue: query, onInputChange: handleInputChange, children: [
3414
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react_aria_components31.SearchField, { className: "pire-cp-search", "aria-label": msg.commandPaletteSearchLabel, children: [
3415
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: "search", size: 18, className: "pire-cp-search-icon" }),
3416
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3417
+ import_react_aria_components31.Input,
3418
+ {
3419
+ className: "pire-cp-input",
3420
+ autoFocus: true,
3421
+ placeholder: placeholder ?? msg.commandPalettePlaceholder
3422
+ }
3423
+ )
3424
+ ] }),
3425
+ isLoading ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "pire-cp-loading", role: "status", "aria-live": "polite", children: loadingLabel ?? msg.commandPaletteLoading }) : null,
3426
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3427
+ import_react_aria_components31.Menu,
3428
+ {
3429
+ className: "pire-cp-list",
3430
+ onAction: (key) => onAction?.(String(key)),
3431
+ renderEmptyState: () => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "pire-cp-status", children: status }),
3432
+ children: sections.map((section) => /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_react_aria_components31.MenuSection, { id: section.id, className: "pire-cp-section", children: [
3433
+ section.label ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_react_aria_components31.Header, { className: "pire-cp-section-title", children: section.label }) : null,
3434
+ section.items.map((item) => /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
3435
+ MenuItem,
3436
+ {
3437
+ id: item.id,
3438
+ textValue: item.label,
3439
+ icon: item.icon,
3440
+ description: item.description,
3441
+ shortcut: item.shortcut,
3442
+ isDisabled: item.isDisabled,
3443
+ children: item.label
3444
+ },
3445
+ item.id
3446
+ ))
3447
+ ] }, section.id))
3448
+ }
3449
+ )
3450
+ ] }),
3451
+ showFooter ? (
3452
+ // aria-hidden: the glyphs are a sighted affordance for discovering the keys. A screen
3453
+ // reader already announces the listbox semantics that make those keys work, so reading
3454
+ // "up arrow down arrow navigate" out loud is noise on every open.
3455
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "pire-cp-foot", "aria-hidden": "true", children: footer ?? /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(import_jsx_runtime59.Fragment, { children: [
3456
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { className: "pire-cp-hint", children: [
3457
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Kbd, { children: "\u2191" }),
3458
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Kbd, { children: "\u2193" }),
3459
+ msg.commandPaletteHintNavigate
3460
+ ] }),
3461
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { className: "pire-cp-hint", children: [
3462
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Kbd, { children: "\u21B5" }),
3463
+ msg.commandPaletteHintSelect
3464
+ ] }),
3465
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("span", { className: "pire-cp-hint", children: [
3466
+ /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Kbd, { children: "esc" }),
3467
+ msg.commandPaletteHintClose
3468
+ ] })
3469
+ ] }) })
3470
+ ) : null
3471
+ ] }) })
3472
+ }
3473
+ );
3474
+ }
3475
+ function useCommandPaletteShortcut(onTrigger, { key = "k", isDisabled } = {}) {
3476
+ const handler = React15.useRef(onTrigger);
3477
+ handler.current = onTrigger;
3478
+ React15.useEffect(() => {
3479
+ if (isDisabled) return;
3480
+ const onKeyDown = (event) => {
3481
+ if (!(event.metaKey || event.ctrlKey) || event.altKey) return;
3482
+ if (event.key.toLowerCase() !== key.toLowerCase()) return;
3483
+ event.preventDefault();
3484
+ handler.current();
3485
+ };
3486
+ document.addEventListener("keydown", onKeyDown);
3487
+ return () => document.removeEventListener("keydown", onKeyDown);
3488
+ }, [key, isDisabled]);
3489
+ }
3490
+
3107
3491
  // src/components/patterns/SidePanel.tsx
3108
- var import_react_aria_components30 = require("react-aria-components");
3109
- var import_jsx_runtime58 = require("react/jsx-runtime");
3492
+ var import_react_aria_components32 = require("react-aria-components");
3493
+ var import_jsx_runtime60 = require("react/jsx-runtime");
3110
3494
  function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
3111
3495
  const msg = usePireMessages();
3112
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3113
- import_react_aria_components30.ModalOverlay,
3496
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3497
+ import_react_aria_components32.ModalOverlay,
3114
3498
  {
3115
3499
  className: "pire-sidepanel-overlay",
3116
3500
  isOpen,
@@ -3118,36 +3502,36 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
3118
3502
  onOpenChange: (o) => {
3119
3503
  if (!o) onClose?.();
3120
3504
  },
3121
- children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_aria_components30.Modal, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(import_react_aria_components30.Dialog, { className: "pire-dialog", style: { height: "100%" }, children: [
3122
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("header", { className: "pire-dialog-head", children: [
3123
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
3124
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_aria_components30.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
3125
- subtitle ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
3505
+ children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_aria_components32.Modal, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(import_react_aria_components32.Dialog, { className: "pire-dialog", style: { height: "100%" }, children: [
3506
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("header", { className: "pire-dialog-head", children: [
3507
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
3508
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(import_react_aria_components32.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
3509
+ subtitle ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
3126
3510
  ] }),
3127
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
3511
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
3128
3512
  ] }),
3129
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3130
- footer ? /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
3513
+ /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3514
+ footer ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("footer", { className: "pire-dialog-foot", children: footer }) : null
3131
3515
  ] }) })
3132
3516
  }
3133
3517
  );
3134
3518
  }
3135
3519
 
3136
3520
  // src/components/patterns/EmptyState.tsx
3137
- var import_jsx_runtime59 = require("react/jsx-runtime");
3521
+ var import_jsx_runtime61 = require("react/jsx-runtime");
3138
3522
  function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
3139
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3140
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3141
- title ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3142
- children ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
3523
+ return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3524
+ /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3525
+ title ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3526
+ children ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
3143
3527
  action
3144
3528
  ] });
3145
3529
  }
3146
3530
 
3147
3531
  // src/components/patterns/FileDropZone.tsx
3148
- var React15 = __toESM(require("react"), 1);
3149
- var import_react_aria_components31 = require("react-aria-components");
3150
- var import_jsx_runtime60 = require("react/jsx-runtime");
3532
+ var React16 = __toESM(require("react"), 1);
3533
+ var import_react_aria_components33 = require("react-aria-components");
3534
+ var import_jsx_runtime62 = require("react/jsx-runtime");
3151
3535
  var isImage2 = (file) => file.type.startsWith("image/");
3152
3536
  function FileDropZone({
3153
3537
  label,
@@ -3173,10 +3557,10 @@ function FileDropZone({
3173
3557
  style
3174
3558
  }) {
3175
3559
  const msg = usePireMessages();
3176
- const [uncontrolled, setUncontrolled] = React15.useState(defaultValue ?? []);
3560
+ const [uncontrolled, setUncontrolled] = React16.useState(defaultValue ?? []);
3177
3561
  const files = value ?? uncontrolled;
3178
- const created = React15.useRef([]);
3179
- React15.useEffect(() => () => {
3562
+ const created = React16.useRef([]);
3563
+ React16.useEffect(() => () => {
3180
3564
  for (const url of created.current) URL.revokeObjectURL(url);
3181
3565
  }, []);
3182
3566
  const commit = (next) => {
@@ -3196,43 +3580,43 @@ function FileDropZone({
3196
3580
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
3197
3581
  };
3198
3582
  const remove = (target) => commit(files.filter((f) => f.file !== target));
3199
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3200
- label ? /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("span", { className: "pire-field-label", children: [
3583
+ return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3584
+ label ? /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("span", { className: "pire-field-label", children: [
3201
3585
  label,
3202
- isRequired ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
3586
+ isRequired ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
3203
3587
  ] }) : null,
3204
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
3205
- import_react_aria_components31.DropZone,
3588
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
3589
+ import_react_aria_components33.DropZone,
3206
3590
  {
3207
3591
  className: "pire-dropzone",
3208
3592
  "data-height": height,
3209
3593
  isDisabled: isDisabled || isReadOnly,
3210
3594
  onDrop: async (e) => {
3211
3595
  const dropped = await Promise.all(
3212
- e.items.filter(import_react_aria_components31.isFileDropItem).map((item) => item.getFile())
3596
+ e.items.filter(import_react_aria_components33.isFileDropItem).map((item) => item.getFile())
3213
3597
  );
3214
3598
  accept(dropped);
3215
3599
  },
3216
3600
  children: [
3217
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3218
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3219
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3220
- import_react_aria_components31.FileTrigger,
3601
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3602
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3603
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
3604
+ import_react_aria_components33.FileTrigger,
3221
3605
  {
3222
3606
  acceptedFileTypes,
3223
3607
  allowsMultiple,
3224
3608
  onSelect: (list) => accept(list ? [...list] : []),
3225
- children: /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
3609
+ children: /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
3226
3610
  }
3227
3611
  )
3228
3612
  ]
3229
3613
  }
3230
3614
  ),
3231
- files.length ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("li", { className: "pire-fileupload-item", children: [
3232
- previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
3233
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
3234
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3235
- isDisabled || isReadOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3615
+ files.length ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)("li", { className: "pire-fileupload-item", children: [
3616
+ previewUrl ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
3617
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
3618
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3619
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
3236
3620
  IconButton,
3237
3621
  {
3238
3622
  icon: "x",
@@ -3242,14 +3626,14 @@ function FileDropZone({
3242
3626
  }
3243
3627
  )
3244
3628
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
3245
- uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3246
- description ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-field-hint", children: description }) : null,
3247
- isInvalid && errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-field-error", children: errorMessage }) : null
3629
+ uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3630
+ description ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "pire-field-hint", children: description }) : null,
3631
+ isInvalid && errorMessage ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "pire-field-error", children: errorMessage }) : null
3248
3632
  ] });
3249
3633
  }
3250
3634
 
3251
3635
  // src/index.ts
3252
- var import_react_aria_components32 = require("react-aria-components");
3636
+ var import_react_aria_components34 = require("react-aria-components");
3253
3637
  // Annotate the CommonJS export names for ESM import in node:
3254
3638
  0 && (module.exports = {
3255
3639
  Avatar,
@@ -3260,6 +3644,7 @@ var import_react_aria_components32 = require("react-aria-components");
3260
3644
  Card,
3261
3645
  Checkbox,
3262
3646
  ComboBox,
3647
+ CommandPalette,
3263
3648
  ConfirmDialog,
3264
3649
  DataTable,
3265
3650
  DatePicker,
@@ -3276,10 +3661,12 @@ var import_react_aria_components32 = require("react-aria-components");
3276
3661
  FormField,
3277
3662
  Heading,
3278
3663
  I18nProvider,
3664
+ ICON_NAMES,
3279
3665
  Icon,
3280
3666
  IconButton,
3281
3667
  InlineMessage,
3282
3668
  Input,
3669
+ Kbd,
3283
3670
  KpiTile,
3284
3671
  LineChart,
3285
3672
  Link,
@@ -3330,6 +3717,7 @@ var import_react_aria_components32 = require("react-aria-components");
3330
3717
  esMessages,
3331
3718
  formatFileSize,
3332
3719
  rangeLengthInDays,
3720
+ useCommandPaletteShortcut,
3333
3721
  usePireMessages,
3334
3722
  useToast
3335
3723
  });