@orianatech/pire 0.12.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 (46) 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/data/LinkList.d.cts +10 -1
  10. package/dist/components/data/LinkList.d.ts +10 -1
  11. package/dist/components/data/LinkList.d.ts.map +1 -1
  12. package/dist/components/feedback/Dialog.d.ts.map +1 -1
  13. package/dist/components/forms/ComboBox.d.cts +10 -1
  14. package/dist/components/forms/ComboBox.d.ts +10 -1
  15. package/dist/components/forms/ComboBox.d.ts.map +1 -1
  16. package/dist/components/forms/Select.d.cts +7 -1
  17. package/dist/components/forms/Select.d.ts +7 -1
  18. package/dist/components/forms/Select.d.ts.map +1 -1
  19. package/dist/components/forms/ValueHelpField.d.cts +12 -1
  20. package/dist/components/forms/ValueHelpField.d.ts +12 -1
  21. package/dist/components/forms/ValueHelpField.d.ts.map +1 -1
  22. package/dist/components/navigation/Menu.d.cts +7 -2
  23. package/dist/components/navigation/Menu.d.ts +7 -2
  24. package/dist/components/navigation/Menu.d.ts.map +1 -1
  25. package/dist/components/navigation/ShellBar.d.cts +13 -1
  26. package/dist/components/navigation/ShellBar.d.ts +13 -1
  27. package/dist/components/navigation/ShellBar.d.ts.map +1 -1
  28. package/dist/components/patterns/CommandPalette.d.cts +97 -0
  29. package/dist/components/patterns/CommandPalette.d.ts +98 -0
  30. package/dist/components/patterns/CommandPalette.d.ts.map +1 -0
  31. package/dist/components/patterns/ValueHelpDialog.d.cts +22 -1
  32. package/dist/components/patterns/ValueHelpDialog.d.ts +22 -1
  33. package/dist/components/patterns/ValueHelpDialog.d.ts.map +1 -1
  34. package/dist/components.css +96 -2
  35. package/dist/i18n/messages.d.cts +29 -0
  36. package/dist/i18n/messages.d.ts +29 -0
  37. package/dist/i18n/messages.d.ts.map +1 -1
  38. package/dist/index.cjs +1001 -593
  39. package/dist/index.cjs.map +1 -1
  40. package/dist/index.d.cts +3 -0
  41. package/dist/index.d.ts +3 -0
  42. package/dist/index.d.ts.map +1 -1
  43. package/dist/index.js +920 -505
  44. package/dist/index.js.map +1 -1
  45. package/dist/tokens/base.css +10 -8
  46. 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
  );
@@ -782,107 +962,6 @@ function TextArea({
782
962
 
783
963
  // src/components/forms/Select.tsx
784
964
  var import_react_aria_components11 = require("react-aria-components");
785
- var import_jsx_runtime17 = require("react/jsx-runtime");
786
- var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
787
- function Select({
788
- label,
789
- value,
790
- defaultValue,
791
- onChange,
792
- options = [],
793
- placeholder = "Select\u2026",
794
- description,
795
- errorMessage,
796
- size = "md",
797
- fullWidth = true,
798
- className,
799
- style,
800
- ...rest
801
- }) {
802
- const items = options.map(norm);
803
- return /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
804
- import_react_aria_components11.Select,
805
- {
806
- className: cx("pire-field", className),
807
- style,
808
- selectedKey: value,
809
- defaultSelectedKey: defaultValue,
810
- onSelectionChange: (k) => onChange?.(String(k)),
811
- placeholder,
812
- validationBehavior: "aria",
813
- ...rest,
814
- children: [
815
- label ? /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(import_react_aria_components11.Label, { className: "pire-field-label", children: [
816
- label,
817
- rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
818
- ] }) : null,
819
- /* @__PURE__ */ (0, import_jsx_runtime17.jsxs)(
820
- import_react_aria_components11.Button,
821
- {
822
- className: "pire-control",
823
- "data-size": size,
824
- "data-full-width": String(fullWidth),
825
- "data-invalid": rest.isInvalid ? "true" : void 0,
826
- children: [
827
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.SelectValue, { className: "pire-select-value" }),
828
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
829
- ]
830
- }
831
- ),
832
- description ? /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
833
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.FieldError, { className: "pire-field-error", children: errorMessage }),
834
- /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.Popover, { className: "pire-popover", children: /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.ListBox, { className: "pire-listbox", items, children: (item) => /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(import_react_aria_components11.ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label }) }) })
835
- ]
836
- }
837
- );
838
- }
839
-
840
- // src/components/forms/Checkbox.tsx
841
- var import_react_aria_components12 = require("react-aria-components");
842
- var import_jsx_runtime18 = require("react/jsx-runtime");
843
- function Checkbox({ label, hint, children, className, ...rest }) {
844
- return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(import_react_aria_components12.Checkbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)(import_jsx_runtime18.Fragment, { children: [
845
- /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(Icon, { name: "check", size: 12 }) : null }),
846
- /* @__PURE__ */ (0, import_jsx_runtime18.jsxs)("span", { children: [
847
- label ?? children,
848
- hint ? /* @__PURE__ */ (0, import_jsx_runtime18.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
849
- ] })
850
- ] }) });
851
- }
852
-
853
- // src/components/forms/Radio.tsx
854
- var import_react_aria_components13 = require("react-aria-components");
855
- var import_jsx_runtime19 = require("react/jsx-runtime");
856
- function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
857
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components13.RadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
858
- label ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components13.Label, { className: "pire-field-label", children: label }) : null,
859
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("div", { className: "pire-radiogroup", children }),
860
- description ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components13.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
861
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(import_react_aria_components13.FieldError, { className: "pire-field-error", children: errorMessage })
862
- ] });
863
- }
864
- function Radio({ label, hint, children, className, ...rest }) {
865
- return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components13.Radio, { className: cx("pire-choice", className), ...rest, children: [
866
- /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
867
- /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)("span", { children: [
868
- label ?? children,
869
- hint ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
870
- ] })
871
- ] });
872
- }
873
-
874
- // src/components/forms/Switch.tsx
875
- var import_react_aria_components14 = require("react-aria-components");
876
- var import_jsx_runtime20 = require("react/jsx-runtime");
877
- function Switch({ label, children, className, ...rest }) {
878
- return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(import_react_aria_components14.Switch, { className: cx("pire-choice", className), ...rest, children: [
879
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-switch-thumb" }) }),
880
- /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { children: label ?? children })
881
- ] });
882
- }
883
-
884
- // src/components/forms/ComboBox.tsx
885
- var import_react_aria_components15 = require("react-aria-components");
886
965
 
887
966
  // src/i18n/PireIntlProvider.tsx
888
967
  var React6 = __toESM(require("react"), 1);
@@ -900,6 +979,7 @@ var enMessages = {
900
979
  inlineMessageDismiss: "Dismiss message",
901
980
  toastDismiss: "Dismiss",
902
981
  toastRegionLabel: "Notifications",
982
+ selectEmpty: "No options available",
903
983
  comboBoxShowSuggestions: "Show suggestions",
904
984
  comboBoxLoading: "Searching\u2026",
905
985
  datePickerOpenCalendar: "Open calendar",
@@ -908,10 +988,14 @@ var enMessages = {
908
988
  dateRangePresetsLabel: "Date range shortcuts",
909
989
  numberFieldIncrease: "Increase",
910
990
  numberFieldDecrease: "Decrease",
991
+ valueHelpFieldPlaceholder: "Not selected",
911
992
  valueHelpFieldClear: "Clear selection",
912
993
  valueHelpFieldOpenNamed: "Select {label}",
913
994
  valueHelpFieldOpen: "Open value help",
914
995
  valueHelpDialogSearch: "Search records",
996
+ valueHelpDialogTitle: "Select a record",
997
+ valueHelpDialogSearchPlaceholder: "Search by ID or name",
998
+ valueHelpDialogEmpty: "No records found",
915
999
  valueHelpDialogCancel: "Cancel",
916
1000
  paginationLabel: "Pagination",
917
1001
  paginationRange: "{from}\u2013{to} of {total}",
@@ -924,6 +1008,15 @@ var enMessages = {
924
1008
  fileUploadRemoveNamed: "Remove {name}",
925
1009
  fileUploadUploading: "Uploading",
926
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",
927
1020
  chartCategoryHeader: "Category",
928
1021
  chartNoValue: "No data",
929
1022
  chartEmpty: "No data for this period"
@@ -940,6 +1033,7 @@ var esMessages = {
940
1033
  inlineMessageDismiss: "Descartar mensaje",
941
1034
  toastDismiss: "Descartar",
942
1035
  toastRegionLabel: "Notificaciones",
1036
+ selectEmpty: "Sin opciones disponibles",
943
1037
  comboBoxShowSuggestions: "Mostrar sugerencias",
944
1038
  comboBoxLoading: "Buscando\u2026",
945
1039
  datePickerOpenCalendar: "Abrir calendario",
@@ -948,10 +1042,14 @@ var esMessages = {
948
1042
  dateRangePresetsLabel: "Atajos de rango de fechas",
949
1043
  numberFieldIncrease: "Aumentar",
950
1044
  numberFieldDecrease: "Disminuir",
1045
+ valueHelpFieldPlaceholder: "Sin seleccionar",
951
1046
  valueHelpFieldClear: "Limpiar selecci\xF3n",
952
1047
  valueHelpFieldOpenNamed: "Seleccionar {label}",
953
1048
  valueHelpFieldOpen: "Abrir ayuda de valores",
954
1049
  valueHelpDialogSearch: "Buscar registros",
1050
+ valueHelpDialogTitle: "Seleccionar un registro",
1051
+ valueHelpDialogSearchPlaceholder: "Buscar por c\xF3digo o nombre",
1052
+ valueHelpDialogEmpty: "No se encontraron registros",
955
1053
  valueHelpDialogCancel: "Cancelar",
956
1054
  paginationLabel: "Paginaci\xF3n",
957
1055
  paginationRange: "{from}\u2013{to} de {total}",
@@ -964,20 +1062,29 @@ var esMessages = {
964
1062
  fileUploadRemoveNamed: "Quitar {name}",
965
1063
  fileUploadUploading: "Subiendo",
966
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",
967
1074
  chartCategoryHeader: "Categor\xEDa",
968
1075
  chartNoValue: "Sin datos",
969
1076
  chartEmpty: "Sin datos para este per\xEDodo"
970
1077
  };
971
1078
 
972
1079
  // src/i18n/PireIntlProvider.tsx
973
- var import_jsx_runtime21 = require("react/jsx-runtime");
1080
+ var import_jsx_runtime18 = require("react/jsx-runtime");
974
1081
  var MessagesContext = React6.createContext(enMessages);
975
1082
  function PireIntlProvider({ messages, children }) {
976
1083
  const value = React6.useMemo(
977
1084
  () => messages ? { ...enMessages, ...messages } : enMessages,
978
1085
  [messages]
979
1086
  );
980
- return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(MessagesContext.Provider, { value, children });
1087
+ return /* @__PURE__ */ (0, import_jsx_runtime18.jsx)(MessagesContext.Provider, { value, children });
981
1088
  }
982
1089
  function usePireMessages() {
983
1090
  return React6.useContext(MessagesContext);
@@ -987,8 +1094,120 @@ function useMessage(key, override) {
987
1094
  return override ?? messages[key];
988
1095
  }
989
1096
 
990
- // src/components/forms/ComboBox.tsx
1097
+ // src/components/forms/Select.tsx
1098
+ var import_jsx_runtime19 = require("react/jsx-runtime");
1099
+ var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
1100
+ function Select({
1101
+ label,
1102
+ value,
1103
+ defaultValue,
1104
+ onChange,
1105
+ options = [],
1106
+ placeholder = "Select\u2026",
1107
+ description,
1108
+ errorMessage,
1109
+ emptyLabel,
1110
+ size = "md",
1111
+ fullWidth = true,
1112
+ className,
1113
+ style,
1114
+ ...rest
1115
+ }) {
1116
+ const msg = usePireMessages();
1117
+ const items = options.map(norm);
1118
+ return /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1119
+ import_react_aria_components11.Select,
1120
+ {
1121
+ className: cx("pire-field", className),
1122
+ style,
1123
+ selectedKey: value,
1124
+ defaultSelectedKey: defaultValue,
1125
+ onSelectionChange: (k) => onChange?.(String(k)),
1126
+ allowsEmptyCollection: true,
1127
+ placeholder,
1128
+ validationBehavior: "aria",
1129
+ ...rest,
1130
+ children: [
1131
+ label ? /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(import_react_aria_components11.Label, { className: "pire-field-label", children: [
1132
+ label,
1133
+ rest.isRequired ? /* @__PURE__ */ (0, import_jsx_runtime19.jsx)("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1134
+ ] }) : null,
1135
+ /* @__PURE__ */ (0, import_jsx_runtime19.jsxs)(
1136
+ import_react_aria_components11.Button,
1137
+ {
1138
+ className: "pire-control",
1139
+ "data-size": size,
1140
+ "data-full-width": String(fullWidth),
1141
+ "data-invalid": rest.isInvalid ? "true" : void 0,
1142
+ children: [
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" })
1145
+ ]
1146
+ }
1147
+ ),
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)(
1151
+ import_react_aria_components11.ListBox,
1152
+ {
1153
+ className: "pire-listbox",
1154
+ items,
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 })
1157
+ }
1158
+ ) })
1159
+ ]
1160
+ }
1161
+ );
1162
+ }
1163
+
1164
+ // src/components/forms/Checkbox.tsx
1165
+ var import_react_aria_components12 = require("react-aria-components");
1166
+ var import_jsx_runtime20 = require("react/jsx-runtime");
1167
+ function Checkbox({ label, hint, children, className, ...rest }) {
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: [
1171
+ label ?? children,
1172
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
1173
+ ] })
1174
+ ] }) });
1175
+ }
1176
+
1177
+ // src/components/forms/Radio.tsx
1178
+ var import_react_aria_components13 = require("react-aria-components");
1179
+ var import_jsx_runtime21 = require("react/jsx-runtime");
1180
+ function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
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 })
1186
+ ] });
1187
+ }
1188
+ function Radio({ label, hint, children, className, ...rest }) {
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: [
1192
+ label ?? children,
1193
+ hint ? /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("span", { className: "pire-choice-hint", children: hint }) : null
1194
+ ] })
1195
+ ] });
1196
+ }
1197
+
1198
+ // src/components/forms/Switch.tsx
1199
+ var import_react_aria_components14 = require("react-aria-components");
991
1200
  var import_jsx_runtime22 = require("react/jsx-runtime");
1201
+ function Switch({ label, children, className, ...rest }) {
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 })
1205
+ ] });
1206
+ }
1207
+
1208
+ // src/components/forms/ComboBox.tsx
1209
+ var import_react_aria_components15 = require("react-aria-components");
1210
+ var import_jsx_runtime23 = require("react/jsx-runtime");
992
1211
  var norm2 = (o) => typeof o === "string" ? { value: o, label: o } : o;
993
1212
  function ComboBox({
994
1213
  label,
@@ -996,6 +1215,7 @@ function ComboBox({
996
1215
  defaultValue,
997
1216
  onChange,
998
1217
  onInputChange,
1218
+ inputValue,
999
1219
  options = [],
1000
1220
  description,
1001
1221
  errorMessage,
@@ -1014,7 +1234,7 @@ function ComboBox({
1014
1234
  const items = options.map(norm2);
1015
1235
  const collection = isFilteredExternally ? { items } : { defaultItems: items };
1016
1236
  const showsStatus = isLoading || isFilteredExternally && items.length === 0 && emptyLabel != null;
1017
- return /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1237
+ return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1018
1238
  import_react_aria_components15.ComboBox,
1019
1239
  {
1020
1240
  className: cx("pire-field", className),
@@ -1025,6 +1245,7 @@ function ComboBox({
1025
1245
  if (isLoading) return;
1026
1246
  onChange?.(k == null ? null : String(k));
1027
1247
  },
1248
+ inputValue,
1028
1249
  onInputChange,
1029
1250
  ...collection,
1030
1251
  allowsEmptyCollection: isFilteredExternally || isLoading,
@@ -1032,11 +1253,11 @@ function ComboBox({
1032
1253
  validationBehavior: "aria",
1033
1254
  ...rest,
1034
1255
  children: [
1035
- 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: [
1036
1257
  label,
1037
- 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
1038
1259
  ] }) : null,
1039
- /* @__PURE__ */ (0, import_jsx_runtime22.jsxs)(
1260
+ /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1040
1261
  import_react_aria_components15.Group,
1041
1262
  {
1042
1263
  className: "pire-control",
@@ -1044,15 +1265,15 @@ function ComboBox({
1044
1265
  "data-full-width": String(fullWidth),
1045
1266
  "data-invalid": rest.isInvalid ? "true" : void 0,
1046
1267
  children: [
1047
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1048
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.Input, { className: "pire-input", placeholder: rest.placeholder }),
1049
- /* @__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 }) })
1050
1271
  ]
1051
1272
  }
1052
1273
  ),
1053
- description ? /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1054
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)(import_react_aria_components15.FieldError, { className: "pire-field-error", children: errorMessage }),
1055
- /* @__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)(
1056
1277
  import_react_aria_components15.ListBox,
1057
1278
  {
1058
1279
  className: "pire-listbox",
@@ -1060,10 +1281,10 @@ function ComboBox({
1060
1281
  const el = e.currentTarget;
1061
1282
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
1062
1283
  } : void 0,
1063
- 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,
1064
- 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: [
1065
- /* @__PURE__ */ (0, import_jsx_runtime22.jsx)("span", { className: "pire-option-label", children: item.label }),
1066
- 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
1067
1288
  ] })
1068
1289
  }
1069
1290
  ) })
@@ -1075,7 +1296,7 @@ function ComboBox({
1075
1296
  // src/components/forms/MultiComboBox.tsx
1076
1297
  var React7 = __toESM(require("react"), 1);
1077
1298
  var import_react_aria_components16 = require("react-aria-components");
1078
- var import_jsx_runtime23 = require("react/jsx-runtime");
1299
+ var import_jsx_runtime24 = require("react/jsx-runtime");
1079
1300
  var norm3 = (o) => typeof o === "string" ? { value: o, label: o } : o;
1080
1301
  function MultiComboBox({
1081
1302
  label,
@@ -1140,7 +1361,7 @@ function MultiComboBox({
1140
1361
  e.stopPropagation();
1141
1362
  if (!values.includes(next)) commit([...values, next]);
1142
1363
  };
1143
- return /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1364
+ return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1144
1365
  import_react_aria_components16.ComboBox,
1145
1366
  {
1146
1367
  className: cx("pire-field", className),
@@ -1157,11 +1378,11 @@ function MultiComboBox({
1157
1378
  validationBehavior: "aria",
1158
1379
  ...rest,
1159
1380
  children: [
1160
- 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: [
1161
1382
  label,
1162
- 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
1163
1384
  ] }) : null,
1164
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)(
1385
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1165
1386
  import_react_aria_components16.Group,
1166
1387
  {
1167
1388
  className: "pire-control",
@@ -1171,14 +1392,14 @@ function MultiComboBox({
1171
1392
  "data-invalid": rest.isInvalid ? "true" : void 0,
1172
1393
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1173
1394
  children: [
1174
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1175
- /* @__PURE__ */ (0, import_jsx_runtime23.jsxs)("div", { className: "pire-chipfield", children: [
1176
- /* @__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) => (
1177
1398
  /* Disabled follows the field, not `isEditable`: a read-only field's chips are
1178
1399
  real, current values and should read as such — they simply lose the × . */
1179
- /* @__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)
1180
1401
  )) }),
1181
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(
1402
+ /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(
1182
1403
  import_react_aria_components16.Input,
1183
1404
  {
1184
1405
  ref: inputRef,
@@ -1188,14 +1409,14 @@ function MultiComboBox({
1188
1409
  }
1189
1410
  )
1190
1411
  ] }),
1191
- /* @__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 }) })
1192
1413
  ]
1193
1414
  }
1194
1415
  ),
1195
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.VisuallyHidden, { children: /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { "aria-live": "polite", children: announcement }) }),
1196
- description ? /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1197
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)(import_react_aria_components16.FieldError, { className: "pire-field-error", children: errorMessage }),
1198
- /* @__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)(
1199
1420
  import_react_aria_components16.ListBox,
1200
1421
  {
1201
1422
  className: "pire-listbox",
@@ -1203,10 +1424,10 @@ function MultiComboBox({
1203
1424
  const el = e.currentTarget;
1204
1425
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
1205
1426
  } : void 0,
1206
- 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,
1207
- 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: [
1208
- /* @__PURE__ */ (0, import_jsx_runtime23.jsx)("span", { className: "pire-option-label", children: item.label }),
1209
- 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
1210
1431
  ] })
1211
1432
  }
1212
1433
  ) })
@@ -1217,7 +1438,7 @@ function MultiComboBox({
1217
1438
 
1218
1439
  // src/components/forms/NumberField.tsx
1219
1440
  var import_react_aria_components17 = require("react-aria-components");
1220
- var import_jsx_runtime24 = require("react/jsx-runtime");
1441
+ var import_jsx_runtime25 = require("react/jsx-runtime");
1221
1442
  function NumberField({
1222
1443
  label,
1223
1444
  suffix,
@@ -1231,12 +1452,12 @@ function NumberField({
1231
1452
  ...rest
1232
1453
  }) {
1233
1454
  const msg = usePireMessages();
1234
- return /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(import_react_aria_components17.NumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1235
- 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: [
1236
1457
  label,
1237
- 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
1238
1459
  ] }) : null,
1239
- /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)(
1460
+ /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1240
1461
  import_react_aria_components17.Group,
1241
1462
  {
1242
1463
  className: "pire-control",
@@ -1245,23 +1466,23 @@ function NumberField({
1245
1466
  "data-invalid": rest.isInvalid ? "true" : void 0,
1246
1467
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1247
1468
  children: [
1248
- /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.Input, { className: "pire-input", "data-numeric": "true" }),
1249
- suffix ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)("span", { className: "pire-affix", children: suffix }) : null,
1250
- hideStepper ? null : /* @__PURE__ */ (0, import_jsx_runtime24.jsxs)("span", { className: "pire-stepper", children: [
1251
- /* @__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 }) }),
1252
- /* @__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 }) })
1253
1474
  ] })
1254
1475
  ]
1255
1476
  }
1256
1477
  ),
1257
- description ? /* @__PURE__ */ (0, import_jsx_runtime24.jsx)(import_react_aria_components17.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1258
- /* @__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 })
1259
1480
  ] });
1260
1481
  }
1261
1482
 
1262
1483
  // src/components/forms/DatePicker.tsx
1263
1484
  var import_react_aria_components18 = require("react-aria-components");
1264
- var import_jsx_runtime25 = require("react/jsx-runtime");
1485
+ var import_jsx_runtime26 = require("react/jsx-runtime");
1265
1486
  function DatePicker({
1266
1487
  label,
1267
1488
  description,
@@ -1273,12 +1494,12 @@ function DatePicker({
1273
1494
  ...rest
1274
1495
  }) {
1275
1496
  const msg = usePireMessages();
1276
- return /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components18.DatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1277
- 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: [
1278
1499
  label,
1279
- 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
1280
1501
  ] }) : null,
1281
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(
1502
+ /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1282
1503
  import_react_aria_components18.Group,
1283
1504
  {
1284
1505
  className: "pire-control",
@@ -1287,22 +1508,22 @@ function DatePicker({
1287
1508
  "data-invalid": rest.isInvalid ? "true" : void 0,
1288
1509
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1289
1510
  children: [
1290
- /* @__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" }) }),
1291
- /* @__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 }) })
1292
1513
  ]
1293
1514
  }
1294
1515
  ),
1295
- description ? /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1296
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.FieldError, { className: "pire-field-error", children: errorMessage }),
1297
- /* @__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: [
1298
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)("header", { className: "pire-calendar-head", children: [
1299
- /* @__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 }) }),
1300
- /* @__PURE__ */ (0, import_jsx_runtime25.jsx)(import_react_aria_components18.Heading, { className: "pire-calendar-title" }),
1301
- /* @__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 }) })
1302
1523
  ] }),
1303
- /* @__PURE__ */ (0, import_jsx_runtime25.jsxs)(import_react_aria_components18.CalendarGrid, { className: "pire-calendar-grid", children: [
1304
- /* @__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 }) }),
1305
- /* @__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" }) })
1306
1527
  ] })
1307
1528
  ] }) }) })
1308
1529
  ] });
@@ -1310,7 +1531,7 @@ function DatePicker({
1310
1531
 
1311
1532
  // src/components/forms/DateRangePicker.tsx
1312
1533
  var import_react_aria_components19 = require("react-aria-components");
1313
- var import_jsx_runtime26 = require("react/jsx-runtime");
1534
+ var import_jsx_runtime27 = require("react/jsx-runtime");
1314
1535
  function rangeLengthInDays(range) {
1315
1536
  return range.end.toDate("UTC").getTime() / 864e5 - range.start.toDate("UTC").getTime() / 864e5 + 1;
1316
1537
  }
@@ -1331,7 +1552,7 @@ function DateRangePicker({
1331
1552
  const msg = usePireMessages();
1332
1553
  const current = rest.value ?? rest.defaultValue ?? null;
1333
1554
  const tooLong = maxRangeDays != null && current != null && rangeLengthInDays(current) > maxRangeDays;
1334
- return /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1555
+ return /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1335
1556
  import_react_aria_components19.DateRangePicker,
1336
1557
  {
1337
1558
  className: cx("pire-field", className),
@@ -1342,11 +1563,11 @@ function DateRangePicker({
1342
1563
  ...rest,
1343
1564
  isInvalid: rest.isInvalid || tooLong,
1344
1565
  children: [
1345
- 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: [
1346
1567
  label,
1347
- 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
1348
1569
  ] }) : null,
1349
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(
1570
+ /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)(
1350
1571
  import_react_aria_components19.Group,
1351
1572
  {
1352
1573
  className: "pire-control pire-daterange-control",
@@ -1355,29 +1576,29 @@ function DateRangePicker({
1355
1576
  "data-invalid": rest.isInvalid || tooLong ? "true" : void 0,
1356
1577
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1357
1578
  children: [
1358
- /* @__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" }) }),
1359
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1360
- /* @__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" }) }),
1361
- /* @__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)(
1362
1583
  import_react_aria_components19.Button,
1363
1584
  {
1364
1585
  className: "pire-iconbtn",
1365
1586
  "data-size": "sm",
1366
1587
  "aria-label": msg.datePickerOpenCalendar,
1367
1588
  style: { width: 24, height: 24 },
1368
- 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 })
1369
1590
  }
1370
1591
  )
1371
1592
  ]
1372
1593
  }
1373
1594
  ),
1374
- description ? /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1375
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.FieldError, { className: "pire-field-error", children: errorMessage }),
1376
- /* @__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: [
1377
1598
  presets?.length ? (
1378
1599
  // Before the calendar in the DOM, so keyboard users reach the shortcut without
1379
1600
  // arrowing through a month first.
1380
- /* @__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)(
1381
1602
  import_react_aria_components19.Button,
1382
1603
  {
1383
1604
  className: "pire-daterange-preset",
@@ -1387,33 +1608,33 @@ function DateRangePicker({
1387
1608
  preset.id
1388
1609
  )) })
1389
1610
  ) : null,
1390
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.RangeCalendar, { className: "pire-calendar", children: [
1391
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)("header", { className: "pire-calendar-head", children: [
1392
- /* @__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)(
1393
1614
  import_react_aria_components19.Button,
1394
1615
  {
1395
1616
  slot: "previous",
1396
1617
  className: "pire-iconbtn",
1397
1618
  "data-size": "sm",
1398
1619
  "aria-label": msg.datePickerPreviousMonth,
1399
- 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 })
1400
1621
  }
1401
1622
  ),
1402
- /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_react_aria_components19.Heading, { className: "pire-calendar-title" }),
1403
- /* @__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)(
1404
1625
  import_react_aria_components19.Button,
1405
1626
  {
1406
1627
  slot: "next",
1407
1628
  className: "pire-iconbtn",
1408
1629
  "data-size": "sm",
1409
1630
  "aria-label": msg.datePickerNextMonth,
1410
- 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 })
1411
1632
  }
1412
1633
  )
1413
1634
  ] }),
1414
- /* @__PURE__ */ (0, import_jsx_runtime26.jsxs)(import_react_aria_components19.CalendarGrid, { className: "pire-calendar-grid", children: [
1415
- /* @__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 }) }),
1416
- /* @__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" }) })
1417
1638
  ] })
1418
1639
  ] })
1419
1640
  ] }) })
@@ -1430,7 +1651,7 @@ var React8 = __toESM(require("react"), 1);
1430
1651
 
1431
1652
  // src/components/feedback/Dialog.tsx
1432
1653
  var import_react_aria_components20 = require("react-aria-components");
1433
- var import_jsx_runtime27 = require("react/jsx-runtime");
1654
+ var import_jsx_runtime28 = require("react/jsx-runtime");
1434
1655
  function Dialog({
1435
1656
  isOpen,
1436
1657
  onOpenChange,
@@ -1450,7 +1671,7 @@ function Dialog({
1450
1671
  onClose?.();
1451
1672
  onOpenChange?.(false);
1452
1673
  };
1453
- return /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(
1674
+ return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1454
1675
  import_react_aria_components20.ModalOverlay,
1455
1676
  {
1456
1677
  className: "pire-modal-overlay",
@@ -1459,16 +1680,16 @@ function Dialog({
1459
1680
  onOpenChange: (o) => {
1460
1681
  if (!o) close();
1461
1682
  },
1462
- 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: [
1463
- title ? /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("header", { className: "pire-dialog-head", children: [
1464
- /* @__PURE__ */ (0, import_jsx_runtime27.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
1465
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)(import_react_aria_components20.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
1466
- 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
1467
1688
  ] }),
1468
- 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
1469
1690
  ] }) : null,
1470
- /* @__PURE__ */ (0, import_jsx_runtime27.jsx)("div", { className: "pire-dialog-body", children }),
1471
- 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
1472
1693
  ] }) })
1473
1694
  }
1474
1695
  );
@@ -1478,9 +1699,9 @@ function Dialog({
1478
1699
  var import_react_aria_components21 = require("react-aria-components");
1479
1700
 
1480
1701
  // src/components/feedback/Skeleton.tsx
1481
- var import_jsx_runtime28 = require("react/jsx-runtime");
1702
+ var import_jsx_runtime29 = require("react/jsx-runtime");
1482
1703
  function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
1483
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1704
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1484
1705
  "div",
1485
1706
  {
1486
1707
  className: cx("pire-skeleton", className),
@@ -1494,7 +1715,7 @@ function Skeleton({ shape = "text", width, height, className, style, ...rest })
1494
1715
  var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
1495
1716
  function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
1496
1717
  const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
1497
- return /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1718
+ return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1498
1719
  "div",
1499
1720
  {
1500
1721
  className: cx("pire-skeleton-row", className),
@@ -1506,13 +1727,13 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1506
1727
  const align = c.numeric ? "right" : c.align ?? "left";
1507
1728
  return (
1508
1729
  // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
1509
- /* @__PURE__ */ (0, import_jsx_runtime28.jsx)(
1730
+ /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1510
1731
  "div",
1511
1732
  {
1512
1733
  className: "pire-skeleton-cell",
1513
1734
  "data-align": align,
1514
1735
  style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
1515
- 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] })
1516
1737
  },
1517
1738
  i
1518
1739
  )
@@ -1523,7 +1744,7 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1523
1744
  }
1524
1745
 
1525
1746
  // src/components/data/DataTable.tsx
1526
- var import_jsx_runtime29 = require("react/jsx-runtime");
1747
+ var import_jsx_runtime30 = require("react/jsx-runtime");
1527
1748
  function DataTable({
1528
1749
  columns,
1529
1750
  rows,
@@ -1555,14 +1776,14 @@ function DataTable({
1555
1776
  ...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
1556
1777
  ];
1557
1778
  const body = isLoading ? [] : rows;
1558
- return /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1779
+ return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1559
1780
  "div",
1560
1781
  {
1561
1782
  className: cx("pire-table-wrap", className),
1562
1783
  style,
1563
1784
  "data-loading": isLoading ? "true" : void 0,
1564
1785
  "aria-busy": isLoading ? "true" : void 0,
1565
- children: /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(
1786
+ children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
1566
1787
  import_react_aria_components21.Table,
1567
1788
  {
1568
1789
  className: "pire-table",
@@ -1579,9 +1800,9 @@ function DataTable({
1579
1800
  if (row) onRowAction(row);
1580
1801
  } : void 0,
1581
1802
  children: [
1582
- /* @__PURE__ */ (0, import_jsx_runtime29.jsxs)(import_react_aria_components21.TableHeader, { className: "pire-thead-row", children: [
1583
- 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,
1584
- 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)(
1585
1806
  import_react_aria_components21.Column,
1586
1807
  {
1587
1808
  id: c.key,
@@ -1591,9 +1812,9 @@ function DataTable({
1591
1812
  width: c.width,
1592
1813
  "data-align": c.numeric || c.align === "right" ? "right" : c.align,
1593
1814
  "data-allows-sorting": c.sortable ? "true" : void 0,
1594
- 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: [
1595
1816
  c.label,
1596
- c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(
1817
+ c.sortable ? /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
1597
1818
  Icon,
1598
1819
  {
1599
1820
  size: 12,
@@ -1606,15 +1827,15 @@ function DataTable({
1606
1827
  c.key
1607
1828
  ))
1608
1829
  ] }),
1609
- /* @__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: [
1610
- /* @__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 }),
1611
1832
  Array.from({ length: skeletonRows }, (_, i) => (
1612
1833
  // biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
1613
- /* @__PURE__ */ (0, import_jsx_runtime29.jsx)(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1834
+ /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1614
1835
  ))
1615
- ] }) : /* @__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: [
1616
- 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,
1617
- 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)(
1618
1839
  import_react_aria_components21.Cell,
1619
1840
  {
1620
1841
  className: "pire-td",
@@ -1633,14 +1854,18 @@ function DataTable({
1633
1854
  }
1634
1855
 
1635
1856
  // src/components/patterns/ValueHelpDialog.tsx
1636
- var import_jsx_runtime30 = require("react/jsx-runtime");
1857
+ var import_jsx_runtime31 = require("react/jsx-runtime");
1637
1858
  function ValueHelpDialog({
1638
1859
  isOpen,
1639
- title = "Select a record",
1860
+ title,
1640
1861
  columns = [],
1641
1862
  rows = [],
1642
- searchPlaceholder = "Search by ID or name",
1863
+ searchPlaceholder,
1643
1864
  emptyLabel,
1865
+ onSearch,
1866
+ isFilteredExternally,
1867
+ isLoading,
1868
+ onLoadMore,
1644
1869
  onSelect,
1645
1870
  onClose
1646
1871
  }) {
@@ -1650,52 +1875,61 @@ function ValueHelpDialog({
1650
1875
  if (isOpen) setQuery("");
1651
1876
  }, [isOpen]);
1652
1877
  const filtered = React8.useMemo(() => {
1878
+ if (isFilteredExternally) return rows;
1653
1879
  const q = query.trim().toLowerCase();
1654
1880
  if (!q) return rows;
1655
1881
  return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
1656
- }, [rows, query]);
1657
- 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)(
1658
1888
  Dialog,
1659
1889
  {
1660
1890
  isOpen,
1661
1891
  size: "lg",
1662
- title,
1892
+ title: title ?? msg.valueHelpDialogTitle,
1663
1893
  onClose,
1664
- footer: /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1665
- children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1666
- /* @__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)(
1667
1897
  Input,
1668
1898
  {
1669
1899
  "aria-label": msg.valueHelpDialogSearch,
1670
1900
  icon: "search",
1671
1901
  type: "search",
1672
1902
  value: query,
1673
- onChange: setQuery,
1674
- placeholder: searchPlaceholder,
1903
+ onChange: handleSearch,
1904
+ placeholder: searchPlaceholder ?? msg.valueHelpDialogSearchPlaceholder,
1675
1905
  autoFocus: true
1676
1906
  }
1677
1907
  ),
1678
- /* @__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)(
1679
1912
  DataTable,
1680
1913
  {
1681
- "aria-label": typeof title === "string" ? title : "Records",
1914
+ "aria-label": typeof title === "string" ? title : msg.valueHelpDialogTitle,
1682
1915
  density: "condensed",
1683
1916
  columns,
1684
1917
  rows: filtered,
1685
- emptyLabel: emptyLabel ?? `No records match \u201C${query}\u201D.`,
1918
+ isLoading,
1919
+ emptyLabel: emptyLabel ?? msg.valueHelpDialogEmpty,
1686
1920
  onRowAction: (row) => {
1687
1921
  onSelect?.(row);
1688
1922
  onClose?.();
1689
1923
  }
1690
1924
  }
1691
- )
1925
+ ) })
1692
1926
  ] })
1693
1927
  }
1694
1928
  );
1695
1929
  }
1696
1930
 
1697
1931
  // src/components/forms/ValueHelpField.tsx
1698
- var import_jsx_runtime31 = require("react/jsx-runtime");
1932
+ var import_jsx_runtime32 = require("react/jsx-runtime");
1699
1933
  var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
1700
1934
  function ValueHelpField({
1701
1935
  label,
@@ -1705,7 +1939,12 @@ function ValueHelpField({
1705
1939
  rows = [],
1706
1940
  columns = [],
1707
1941
  dialogTitle,
1708
- placeholder = "Not selected",
1942
+ onSearch,
1943
+ isFilteredExternally,
1944
+ isLoading,
1945
+ onLoadMore,
1946
+ emptyLabel,
1947
+ placeholder,
1709
1948
  description,
1710
1949
  errorMessage,
1711
1950
  isInvalid,
@@ -1717,51 +1956,54 @@ function ValueHelpField({
1717
1956
  }) {
1718
1957
  const msg = usePireMessages();
1719
1958
  const [open, setOpen] = React9.useState(false);
1720
- return /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { className: cx(className), style, children: [
1721
- /* @__PURE__ */ (0, import_jsx_runtime31.jsxs)("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
1722
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1723
- Input,
1724
- {
1725
- label,
1726
- isReadOnly: true,
1727
- isInvalid,
1728
- isDisabled,
1729
- isRequired,
1730
- value: value ? format(value) : "",
1731
- placeholder,
1732
- description,
1733
- errorMessage
1734
- }
1735
- ),
1736
- allowsClear && value ? /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1737
- IconButton,
1738
- {
1739
- icon: "x",
1740
- label: msg.valueHelpFieldClear,
1741
- variant: "outlined",
1742
- isDisabled,
1743
- onPress: () => onChange?.(null)
1744
- }
1745
- ) : null,
1746
- /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
1747
- IconButton,
1748
- {
1749
- icon: "search",
1750
- label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1751
- variant: "outlined",
1752
- isDisabled,
1753
- onPress: () => setOpen(true)
1754
- }
1755
- )
1756
- ] }),
1757
- /* @__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)(
1758
1995
  ValueHelpDialog,
1759
1996
  {
1760
1997
  isOpen: open,
1761
1998
  onClose: () => setOpen(false),
1762
- title: dialogTitle ?? label ?? "Select a record",
1999
+ title: dialogTitle ?? label,
1763
2000
  columns,
1764
2001
  rows,
2002
+ onSearch,
2003
+ isFilteredExternally,
2004
+ isLoading,
2005
+ onLoadMore,
2006
+ emptyLabel,
1765
2007
  onSelect: (row) => onChange?.(row)
1766
2008
  }
1767
2009
  )
@@ -1774,7 +2016,7 @@ var import_react_aria_components23 = require("react-aria-components");
1774
2016
 
1775
2017
  // src/components/feedback/ProgressBar.tsx
1776
2018
  var import_react_aria_components22 = require("react-aria-components");
1777
- var import_jsx_runtime32 = require("react/jsx-runtime");
2019
+ var import_jsx_runtime33 = require("react/jsx-runtime");
1778
2020
  function ProgressBar({
1779
2021
  value = 0,
1780
2022
  minValue = 0,
@@ -1787,7 +2029,7 @@ function ProgressBar({
1787
2029
  className,
1788
2030
  style
1789
2031
  }) {
1790
- return /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
2032
+ return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
1791
2033
  import_react_aria_components22.ProgressBar,
1792
2034
  {
1793
2035
  className: cx("pire-progress", className),
@@ -1798,19 +2040,19 @@ function ProgressBar({
1798
2040
  maxValue,
1799
2041
  isIndeterminate,
1800
2042
  style,
1801
- children: ({ percentage, valueText }) => /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(import_jsx_runtime32.Fragment, { children: [
1802
- label || showValue ? /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)("div", { className: "pire-progress-head", children: [
1803
- label ? /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(import_react_aria_components22.Label, { children: label }) : /* @__PURE__ */ (0, import_jsx_runtime32.jsx)("span", {}),
1804
- 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
1805
2047
  ] }) : null,
1806
- /* @__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}%` } }) })
1807
2049
  ] })
1808
2050
  }
1809
2051
  );
1810
2052
  }
1811
2053
 
1812
2054
  // src/components/forms/FileUpload.tsx
1813
- var import_jsx_runtime33 = require("react/jsx-runtime");
2055
+ var import_jsx_runtime34 = require("react/jsx-runtime");
1814
2056
  var isImage = (file) => file.type.startsWith("image/");
1815
2057
  function formatFileSize(bytes) {
1816
2058
  if (bytes < 1024) return `${bytes} B`;
@@ -1882,7 +2124,7 @@ function FileUpload({
1882
2124
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
1883
2125
  };
1884
2126
  const remove = (target) => commit(files.filter((f) => f.file !== target));
1885
- return /* @__PURE__ */ (0, import_jsx_runtime33.jsxs)(
2127
+ return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)(
1886
2128
  "div",
1887
2129
  {
1888
2130
  className: cx("pire-field", "pire-fileupload", className),
@@ -1890,24 +2132,24 @@ function FileUpload({
1890
2132
  "data-full-width": String(fullWidth),
1891
2133
  "data-invalid": isInvalid ? "true" : void 0,
1892
2134
  children: [
1893
- 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: [
1894
2136
  label,
1895
- 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
1896
2138
  ] }) : null,
1897
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
2139
+ /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
1898
2140
  import_react_aria_components23.FileTrigger,
1899
2141
  {
1900
2142
  acceptedFileTypes,
1901
2143
  allowsMultiple,
1902
2144
  onSelect: accept,
1903
- 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 })
1904
2146
  }
1905
2147
  ),
1906
- 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: [
1907
- 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" }),
1908
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
1909
- /* @__PURE__ */ (0, import_jsx_runtime33.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
1910
- 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)(
1911
2153
  IconButton,
1912
2154
  {
1913
2155
  icon: "x",
@@ -1917,16 +2159,17 @@ function FileUpload({
1917
2159
  }
1918
2160
  )
1919
2161
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
1920
- uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
1921
- description ? /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(import_react_aria_components23.Text, { slot: "description", className: "pire-field-hint", children: description }) : null,
1922
- 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
1923
2165
  ]
1924
2166
  }
1925
2167
  );
1926
2168
  }
1927
2169
 
1928
2170
  // src/components/navigation/ShellBar.tsx
1929
- 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");
1930
2173
  var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
1931
2174
  function ShellBar({
1932
2175
  product,
@@ -1938,33 +2181,51 @@ function ShellBar({
1938
2181
  searchLabel = "Search",
1939
2182
  actions,
1940
2183
  user,
2184
+ userMenu,
2185
+ userMenuLabel,
1941
2186
  className,
1942
2187
  ...rest
1943
2188
  }) {
1944
- return /* @__PURE__ */ (0, import_jsx_runtime34.jsxs)("header", { className: cx("pire-shellbar", className), ...rest, children: [
1945
- onMenu ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
1946
- monogram ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
1947
- product ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-product", children: product }) : null,
1948
- title ? /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-title", children: title }) : null,
1949
- /* @__PURE__ */ (0, import_jsx_runtime34.jsx)("span", { className: "pire-shellbar-spacer" }),
1950
- 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,
1951
2197
  actions,
1952
- 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
1953
2214
  ] });
1954
2215
  }
1955
2216
 
1956
2217
  // src/components/navigation/SideNav.tsx
1957
2218
  var React11 = __toESM(require("react"), 1);
1958
- var import_react_aria_components25 = require("react-aria-components");
2219
+ var import_react_aria_components26 = require("react-aria-components");
1959
2220
 
1960
2221
  // src/components/navigation/Menu.tsx
1961
- var import_react_aria_components24 = require("react-aria-components");
1962
- 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");
1963
2224
  function Menu({ minWidth, className, style, ...rest }) {
1964
2225
  const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
1965
2226
  const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
1966
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
1967
- import_react_aria_components24.Menu,
2227
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2228
+ import_react_aria_components25.Menu,
1968
2229
  {
1969
2230
  className: cx("pire-menu", className),
1970
2231
  style: menuStyle,
@@ -1972,6 +2233,11 @@ function Menu({ minWidth, className, style, ...rest }) {
1972
2233
  }
1973
2234
  );
1974
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
+ };
1975
2241
  function MenuItem({
1976
2242
  children,
1977
2243
  icon,
@@ -1981,35 +2247,36 @@ function MenuItem({
1981
2247
  className,
1982
2248
  ...rest
1983
2249
  }) {
1984
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
1985
- import_react_aria_components24.MenuItem,
2250
+ const keys = shortcutKeys(shortcut);
2251
+ return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2252
+ import_react_aria_components25.MenuItem,
1986
2253
  {
1987
2254
  className: cx("pire-menu-item", className),
1988
2255
  "data-tone": tone === "danger" ? "danger" : void 0,
1989
2256
  ...rest,
1990
2257
  children: [
1991
- icon ? /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
1992
- /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)("span", { className: "pire-menu-item-body", children: [
1993
- /* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "pire-menu-item-label", children }),
1994
- 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
1995
2262
  ] }),
1996
- 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
1997
2264
  ]
1998
2265
  }
1999
2266
  );
2000
2267
  }
2001
2268
  function MenuSection({ title, children, className, ...rest }) {
2002
- return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_react_aria_components24.MenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
2003
- 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,
2004
2271
  children
2005
2272
  ] });
2006
2273
  }
2007
2274
  function MenuSeparator({ className }) {
2008
- 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) });
2009
2276
  }
2010
2277
 
2011
2278
  // src/components/navigation/SideNav.tsx
2012
- var import_jsx_runtime36 = require("react/jsx-runtime");
2279
+ var import_jsx_runtime37 = require("react/jsx-runtime");
2013
2280
  function findActiveParent(groups, value) {
2014
2281
  if (value == null) return void 0;
2015
2282
  for (const group of groups) {
@@ -2058,8 +2325,8 @@ function SideNav({
2058
2325
  };
2059
2326
  const renderRow = (item, onPress, isGroup) => {
2060
2327
  const selected = !isGroup && item.id === value;
2061
- const button = /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2062
- import_react_aria_components25.Button,
2328
+ const button = /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2329
+ import_react_aria_components26.Button,
2063
2330
  {
2064
2331
  className: "pire-sidenav-item",
2065
2332
  "data-selected": selected ? "true" : void 0,
@@ -2068,70 +2335,70 @@ function SideNav({
2068
2335
  "aria-label": collapsed ? item.label : void 0,
2069
2336
  onPress,
2070
2337
  children: [
2071
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2072
- collapsed ? null : /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label }),
2073
- 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
2074
2341
  ]
2075
2342
  },
2076
2343
  item.id
2077
2344
  );
2078
- 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;
2079
2346
  };
2080
- const renderRailFlyout = (item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.MenuTrigger, { children: [
2081
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2082
- 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,
2083
2350
  {
2084
2351
  className: "pire-sidenav-item",
2085
2352
  "aria-label": item.label,
2086
2353
  "data-active-child": item.id === activeParent ? "true" : void 0,
2087
- 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
2088
2355
  }
2089
2356
  ),
2090
- /* @__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)(
2091
2358
  Menu,
2092
2359
  {
2093
2360
  "aria-label": item.label,
2094
2361
  className: "pire-sidenav-flyout",
2095
2362
  onAction: (key) => onChange?.(String(key)),
2096
- 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))
2097
2364
  }
2098
2365
  ) })
2099
2366
  ] }, item.id);
2100
- const renderSection = (item) => /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(import_react_aria_components25.Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
2101
- /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2102
- 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,
2103
2370
  {
2104
2371
  slot: "trigger",
2105
2372
  className: "pire-sidenav-item",
2106
2373
  "data-kind": "group",
2107
2374
  "data-active-child": item.id === activeParent ? "true" : void 0,
2108
2375
  children: [
2109
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Icon, { name: item.icon, size: 16 }) : null,
2110
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: item.label }),
2111
- item.count != null ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { className: "pire-sidenav-count", children: item.count }) : null,
2112
- /* @__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" })
2113
2380
  ]
2114
2381
  }
2115
2382
  ),
2116
- /* @__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) => {
2117
2384
  const selected = child.id === value;
2118
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2119
- import_react_aria_components25.Button,
2385
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2386
+ import_react_aria_components26.Button,
2120
2387
  {
2121
2388
  className: "pire-sidenav-item pire-sidenav-subitem",
2122
2389
  "data-selected": selected ? "true" : void 0,
2123
2390
  "aria-current": selected ? "page" : void 0,
2124
2391
  onPress: () => onChange?.(child.id),
2125
2392
  children: [
2126
- /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("span", { children: child.label }),
2127
- 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
2128
2395
  ]
2129
2396
  },
2130
2397
  child.id
2131
2398
  );
2132
2399
  }) })
2133
2400
  ] }, item.id);
2134
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(
2401
+ return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2135
2402
  "nav",
2136
2403
  {
2137
2404
  className: cx("pire-sidenav", className),
@@ -2147,10 +2414,10 @@ function SideNav({
2147
2414
  if (isGroup && collapsed && railFlyout) return renderRailFlyout(item);
2148
2415
  return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
2149
2416
  });
2150
- return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)("div", { className: "pire-sidenav-group", children: [
2151
- group.label && !collapsed ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)("div", { className: "pire-sidenav-label", children: group.label }) : null,
2152
- hasSections ? /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
2153
- 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,
2154
2421
  {
2155
2422
  className: "pire-sidenav-tree",
2156
2423
  allowsMultipleExpanded: true,
@@ -2161,18 +2428,18 @@ function SideNav({
2161
2428
  ) : rows
2162
2429
  ] }, group.label ?? gi);
2163
2430
  }),
2164
- 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
2165
2432
  ]
2166
2433
  }
2167
2434
  );
2168
2435
  }
2169
2436
 
2170
2437
  // src/components/navigation/Tabs.tsx
2171
- var import_react_aria_components26 = require("react-aria-components");
2172
- 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");
2173
2440
  function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
2174
- return /* @__PURE__ */ (0, import_jsx_runtime37.jsxs)(
2175
- import_react_aria_components26.Tabs,
2441
+ return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
2442
+ import_react_aria_components27.Tabs,
2176
2443
  {
2177
2444
  className,
2178
2445
  style,
@@ -2180,23 +2447,23 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2180
2447
  defaultSelectedKey: defaultValue,
2181
2448
  onSelectionChange: (k) => onChange?.(String(k)),
2182
2449
  children: [
2183
- /* @__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: [
2184
- 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,
2185
2452
  item.label,
2186
- 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
2187
2454
  ] }) }),
2188
- 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))
2189
2456
  ]
2190
2457
  }
2191
2458
  );
2192
2459
  }
2193
2460
 
2194
2461
  // src/components/navigation/Breadcrumb.tsx
2195
- var import_react_aria_components27 = require("react-aria-components");
2196
- 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");
2197
2464
  function Breadcrumb({ items, onNavigate, className, style }) {
2198
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
2199
- import_react_aria_components27.Breadcrumbs,
2465
+ return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2466
+ import_react_aria_components28.Breadcrumbs,
2200
2467
  {
2201
2468
  className: cx("pire-breadcrumbs", className),
2202
2469
  style,
@@ -2204,9 +2471,9 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2204
2471
  onAction: (key) => onNavigate?.(String(key)),
2205
2472
  children: (item) => {
2206
2473
  const last = items[items.length - 1] === item;
2207
- return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(import_react_aria_components27.Breadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2208
- last ? item.label : /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_react_aria_components27.Link, { href: item.href, children: item.label }),
2209
- 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)" } })
2210
2477
  ] });
2211
2478
  }
2212
2479
  }
@@ -2214,7 +2481,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2214
2481
  }
2215
2482
 
2216
2483
  // src/components/navigation/Pagination.tsx
2217
- var import_jsx_runtime39 = require("react/jsx-runtime");
2484
+ var import_jsx_runtime40 = require("react/jsx-runtime");
2218
2485
  function Pagination({
2219
2486
  page = 1,
2220
2487
  pageSize = 25,
@@ -2229,9 +2496,9 @@ function Pagination({
2229
2496
  const pages = Math.max(1, Math.ceil(total / pageSize));
2230
2497
  const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
2231
2498
  const to = Math.min(total, page * pageSize);
2232
- return /* @__PURE__ */ (0, import_jsx_runtime39.jsxs)("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2233
- /* @__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()) }),
2234
- /* @__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)(
2235
2502
  IconButton,
2236
2503
  {
2237
2504
  icon: "chevron-left",
@@ -2242,8 +2509,8 @@ function Pagination({
2242
2509
  onPress: () => onPageChange?.(page - 1)
2243
2510
  }
2244
2511
  ),
2245
- /* @__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)) }),
2246
- /* @__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)(
2247
2514
  IconButton,
2248
2515
  {
2249
2516
  icon: "chevron-right",
@@ -2254,7 +2521,7 @@ function Pagination({
2254
2521
  onPress: () => onPageChange?.(page + 1)
2255
2522
  }
2256
2523
  ),
2257
- onPageSizeChange ? /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
2524
+ onPageSizeChange ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
2258
2525
  Select,
2259
2526
  {
2260
2527
  "aria-label": msg.paginationRowsPerPage,
@@ -2270,7 +2537,7 @@ function Pagination({
2270
2537
  }
2271
2538
 
2272
2539
  // src/components/feedback/InlineMessage.tsx
2273
- var import_jsx_runtime40 = require("react/jsx-runtime");
2540
+ var import_jsx_runtime41 = require("react/jsx-runtime");
2274
2541
  var KIND_ICON = {
2275
2542
  info: "info",
2276
2543
  success: "check-circle-2",
@@ -2280,7 +2547,7 @@ var KIND_ICON = {
2280
2547
  function InlineMessage({ kind = "info", title, action, onClose, children, className, ...rest }) {
2281
2548
  const msg = usePireMessages();
2282
2549
  const assertive = kind === "error" || kind === "warning";
2283
- return /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)(
2550
+ return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2284
2551
  "div",
2285
2552
  {
2286
2553
  className: cx("pire-msg", className),
@@ -2289,13 +2556,13 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2289
2556
  "aria-live": assertive ? "assertive" : "polite",
2290
2557
  ...rest,
2291
2558
  children: [
2292
- /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2293
- /* @__PURE__ */ (0, import_jsx_runtime40.jsxs)("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2294
- title ? /* @__PURE__ */ (0, import_jsx_runtime40.jsx)("span", { className: "pire-msg-title", children: title }) : null,
2295
- 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,
2296
2563
  action
2297
2564
  ] }),
2298
- 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
2299
2566
  ]
2300
2567
  }
2301
2568
  );
@@ -2303,7 +2570,7 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2303
2570
 
2304
2571
  // src/components/feedback/Toast.tsx
2305
2572
  var React12 = __toESM(require("react"), 1);
2306
- var import_jsx_runtime41 = require("react/jsx-runtime");
2573
+ var import_jsx_runtime42 = require("react/jsx-runtime");
2307
2574
  var KIND_ICON2 = {
2308
2575
  info: "info",
2309
2576
  success: "check-circle-2",
@@ -2312,7 +2579,7 @@ var KIND_ICON2 = {
2312
2579
  };
2313
2580
  function Toast({ kind = "success", onClose, position = "bottom-center", children, className, ...rest }) {
2314
2581
  const msg = usePireMessages();
2315
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(
2582
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
2316
2583
  "div",
2317
2584
  {
2318
2585
  className: cx("pire-toast", className),
@@ -2321,9 +2588,9 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
2321
2588
  "aria-live": kind === "error" ? "assertive" : "polite",
2322
2589
  ...rest,
2323
2590
  children: [
2324
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(Icon, { name: KIND_ICON2[kind], size: 16 }),
2325
- /* @__PURE__ */ (0, import_jsx_runtime41.jsx)("span", { style: { flex: 1 }, children }),
2326
- 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
2327
2594
  ]
2328
2595
  }
2329
2596
  );
@@ -2341,9 +2608,9 @@ function ToastProvider({ children, timeout = 6e3 }) {
2341
2608
  return id;
2342
2609
  }, [close, timeout]);
2343
2610
  const value = React12.useMemo(() => ({ add, close }), [add, close]);
2344
- return /* @__PURE__ */ (0, import_jsx_runtime41.jsxs)(ToastContext.Provider, { value, children: [
2611
+ return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(ToastContext.Provider, { value, children: [
2345
2612
  children,
2346
- /* @__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)) })
2347
2614
  ] });
2348
2615
  }
2349
2616
  function useToast() {
@@ -2353,8 +2620,8 @@ function useToast() {
2353
2620
  }
2354
2621
 
2355
2622
  // src/components/data/KpiTile.tsx
2356
- var import_react_aria_components28 = require("react-aria-components");
2357
- 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");
2358
2625
  function KpiTile({
2359
2626
  label,
2360
2627
  value,
@@ -2370,50 +2637,50 @@ function KpiTile({
2370
2637
  style
2371
2638
  }) {
2372
2639
  const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
2373
- const body = /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(import_jsx_runtime42.Fragment, { children: [
2374
- /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-label", children: [
2375
- 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,
2376
2643
  label
2377
2644
  ] }),
2378
- /* @__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: [
2379
2646
  value,
2380
- 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
2381
2648
  ] }),
2382
- delta ? /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2383
- 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,
2384
2651
  delta
2385
2652
  ] }) : null,
2386
- 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
2387
2654
  ] });
2388
2655
  const props = { className: cx("pire-kpi", className), "data-status": status, style };
2389
- 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 });
2390
2657
  }
2391
2658
 
2392
2659
  // src/components/data/ObjectHeader.tsx
2393
- var import_jsx_runtime43 = require("react/jsx-runtime");
2660
+ var import_jsx_runtime44 = require("react/jsx-runtime");
2394
2661
  function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
2395
- 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: [
2396
2663
  breadcrumb,
2397
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { className: "pire-objheader-row", children: [
2398
- /* @__PURE__ */ (0, import_jsx_runtime43.jsxs)("div", { style: { minWidth: 0 }, children: [
2399
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("h1", { className: "pire-objheader-title", children: title }),
2400
- 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: [
2401
2668
  subtitle,
2402
- 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
2403
2670
  ] }) : null
2404
2671
  ] }),
2405
2672
  badge,
2406
- 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
2407
2674
  ] }),
2408
- 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: [
2409
- /* @__PURE__ */ (0, import_jsx_runtime43.jsx)("dt", { className: "pire-fact-label", children: fact.label }),
2410
- /* @__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 })
2411
2678
  ] }, fact.label)) }) : null
2412
2679
  ] });
2413
2680
  }
2414
2681
 
2415
2682
  // src/components/data/FilterBar.tsx
2416
- var import_jsx_runtime44 = require("react/jsx-runtime");
2683
+ var import_jsx_runtime45 = require("react/jsx-runtime");
2417
2684
  function FilterBar({
2418
2685
  children,
2419
2686
  activeFilters = [],
@@ -2430,49 +2697,49 @@ function FilterBar({
2430
2697
  const label = useMessage("filterBarLabel", rest["aria-label"]);
2431
2698
  const go = useMessage("filterBarGo", goLabel);
2432
2699
  const clearAll = useMessage("filterBarClearAll", clearAllLabel);
2433
- return /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2434
- /* @__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: [
2435
2702
  children,
2436
- 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
2437
2704
  ] }),
2438
- activeFilters.length || resultLabel || actions ? /* @__PURE__ */ (0, import_jsx_runtime44.jsxs)("div", { className: "pire-filterbar-foot", children: [
2439
- activeFilters.map((filter) => /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2440
- activeFilters.length && onClear ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2441
- resultLabel ? /* @__PURE__ */ (0, import_jsx_runtime44.jsx)("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2442
- 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
2443
2710
  ] }) : null
2444
2711
  ] });
2445
2712
  }
2446
2713
 
2447
2714
  // src/components/data/DescriptionList.tsx
2448
- var import_jsx_runtime45 = require("react/jsx-runtime");
2715
+ var import_jsx_runtime46 = require("react/jsx-runtime");
2449
2716
  function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
2450
- return /* @__PURE__ */ (0, import_jsx_runtime45.jsx)(
2717
+ return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
2451
2718
  "dl",
2452
2719
  {
2453
2720
  className: cx("pire-dl", className),
2454
2721
  "data-layout": layout,
2455
2722
  style: { ...layout === "grid" ? { "--pire-dl-cols": columns } : null, ...style },
2456
2723
  ...rest,
2457
- children: items.map((item, i) => /* @__PURE__ */ (0, import_jsx_runtime45.jsxs)("div", { className: "pire-dl-row", "data-emphasis": item.emphasis ? "true" : void 0, children: [
2458
- /* @__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: [
2459
2726
  item.label,
2460
2727
  item.hint
2461
2728
  ] }),
2462
- /* @__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 })
2463
2730
  ] }, i))
2464
2731
  }
2465
2732
  );
2466
2733
  }
2467
2734
 
2468
2735
  // src/components/data/Timeline.tsx
2469
- var import_jsx_runtime46 = require("react/jsx-runtime");
2736
+ var import_jsx_runtime47 = require("react/jsx-runtime");
2470
2737
  function Timeline({ entries, reverse = false, className, ...rest }) {
2471
2738
  const list = reverse ? [...entries].reverse() : entries;
2472
- 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: [
2473
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-time", children: entry.time }),
2474
- /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "pire-timeline-text", children: entry.event }),
2475
- 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
2476
2743
  ] }, entry.id ?? i)) });
2477
2744
  }
2478
2745
 
@@ -2555,7 +2822,7 @@ function alignToCategories(series, categoryCount) {
2555
2822
  }
2556
2823
 
2557
2824
  // src/components/data/ChartFrame.tsx
2558
- var import_jsx_runtime47 = require("react/jsx-runtime");
2825
+ var import_jsx_runtime48 = require("react/jsx-runtime");
2559
2826
  function seriesLegend(series) {
2560
2827
  return series.map((one, index) => ({
2561
2828
  key: one.id,
@@ -2578,29 +2845,29 @@ function ChartFrame({
2578
2845
  children
2579
2846
  }) {
2580
2847
  const msg = usePireMessages();
2581
- return /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("figure", { className: cx("pire-chart", className), style, children: [
2582
- title || description ? /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("figcaption", { className: "pire-chart-head", children: [
2583
- title ? /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("span", { className: "pire-chart-title", children: title }) : null,
2584
- 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
2585
2852
  ] }) : null,
2586
- 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: [
2587
- /* @__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 } }),
2588
2855
  item.label
2589
2856
  ] }, item.key)) }) : null,
2590
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2591
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("table", { children: [
2592
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("caption", { children: label }),
2593
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("thead", { children: /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("tr", { children: [
2594
- /* @__PURE__ */ (0, import_jsx_runtime47.jsx)("th", { scope: "col", children: msg.chartCategoryHeader }),
2595
- 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))
2596
2863
  ] }) }),
2597
- /* @__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) => (
2598
2865
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2599
- /* @__PURE__ */ (0, import_jsx_runtime47.jsxs)("tr", { children: [
2600
- /* @__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 }),
2601
2868
  series.map((one) => {
2602
2869
  const value = one.values[categoryIndex];
2603
- 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);
2604
2871
  })
2605
2872
  ] }, categoryIndex)
2606
2873
  )) })
@@ -2609,7 +2876,7 @@ function ChartFrame({
2609
2876
  }
2610
2877
 
2611
2878
  // src/components/data/BarChart.tsx
2612
- var import_jsx_runtime48 = require("react/jsx-runtime");
2879
+ var import_jsx_runtime49 = require("react/jsx-runtime");
2613
2880
  function BarChart({
2614
2881
  categories,
2615
2882
  series: rawSeries,
@@ -2641,7 +2908,7 @@ function BarChart({
2641
2908
  const value = series[0].values[categoryIndex];
2642
2909
  return value == null ? msg.chartNoValue : formatValue(value);
2643
2910
  };
2644
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
2911
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
2645
2912
  ChartFrame,
2646
2913
  {
2647
2914
  label,
@@ -2654,7 +2921,7 @@ function BarChart({
2654
2921
  showDataTable,
2655
2922
  className,
2656
2923
  style,
2657
- 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)(
2658
2925
  "div",
2659
2926
  {
2660
2927
  className: "pire-chart-bars",
@@ -2663,12 +2930,12 @@ function BarChart({
2663
2930
  style: { "--pire-chart-height": `${height}px` },
2664
2931
  children: categories.map((category, categoryIndex) => (
2665
2932
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2666
- /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)("div", { className: "pire-chart-group", children: [
2667
- /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-cat", children: category }),
2668
- /* @__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) => {
2669
2936
  const value = one.values[categoryIndex];
2670
2937
  if (value == null) return null;
2671
- return /* @__PURE__ */ (0, import_jsx_runtime48.jsxs)(
2938
+ return /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)(
2672
2939
  "div",
2673
2940
  {
2674
2941
  className: "pire-chart-bar",
@@ -2677,8 +2944,8 @@ function BarChart({
2677
2944
  "--pire-bar-color": seriesColor(one, seriesIndex)
2678
2945
  },
2679
2946
  children: [
2680
- withValues && orientation === "vertical" ? /* @__PURE__ */ (0, import_jsx_runtime48.jsx)("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2681
- /* @__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: [
2682
2949
  series.length > 1 ? `${one.label}: ` : "",
2683
2950
  formatValue(value)
2684
2951
  ] })
@@ -2687,7 +2954,7 @@ function BarChart({
2687
2954
  one.id
2688
2955
  );
2689
2956
  }) }),
2690
- 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
2691
2958
  ] }, categoryIndex)
2692
2959
  ))
2693
2960
  }
@@ -2698,7 +2965,7 @@ function BarChart({
2698
2965
 
2699
2966
  // src/components/data/LineChart.tsx
2700
2967
  var React13 = __toESM(require("react"), 1);
2701
- var import_jsx_runtime49 = require("react/jsx-runtime");
2968
+ var import_jsx_runtime50 = require("react/jsx-runtime");
2702
2969
  var PLOT_INSET = { top: 10, right: 14, bottom: 24, left: 58 };
2703
2970
  var MARKER_LIMIT = 20;
2704
2971
  var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? React13.useEffect : React13.useLayoutEffect;
@@ -2765,7 +3032,7 @@ function LineChart({
2765
3032
  return `M${xAt(present[0].index)} ${baseline} L${line} L${xAt(last.index)} ${baseline} Z`;
2766
3033
  };
2767
3034
  const labelEvery = Math.max(1, Math.ceil(categories.length / Math.max(2, Math.floor(innerWidth / 64))));
2768
- return /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3035
+ return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2769
3036
  ChartFrame,
2770
3037
  {
2771
3038
  label,
@@ -2778,8 +3045,8 @@ function LineChart({
2778
3045
  showDataTable,
2779
3046
  className,
2780
3047
  style,
2781
- 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: [
2782
- 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)(
2783
3050
  "svg",
2784
3051
  {
2785
3052
  width,
@@ -2788,7 +3055,7 @@ function LineChart({
2788
3055
  "aria-hidden": "true",
2789
3056
  focusable: "false",
2790
3057
  children: [
2791
- /* @__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)(
2792
3059
  "line",
2793
3060
  {
2794
3061
  x1: PLOT_INSET.left,
@@ -2798,8 +3065,8 @@ function LineChart({
2798
3065
  },
2799
3066
  tick
2800
3067
  )) }),
2801
- /* @__PURE__ */ (0, import_jsx_runtime49.jsxs)("g", { className: "pire-chart-tick", children: [
2802
- 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)(
2803
3070
  "text",
2804
3071
  {
2805
3072
  x: PLOT_INSET.left - 8,
@@ -2812,10 +3079,10 @@ function LineChart({
2812
3079
  )),
2813
3080
  categories.map((category, index) => index % labelEvery === 0 ? (
2814
3081
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2815
- /* @__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)
2816
3083
  ) : null)
2817
3084
  ] }),
2818
- showArea && series[0] ? /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3085
+ showArea && series[0] ? /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2819
3086
  "path",
2820
3087
  {
2821
3088
  d: areaFor(series[0].values),
@@ -2823,10 +3090,10 @@ function LineChart({
2823
3090
  style: { fill: seriesColor(series[0], 0) }
2824
3091
  }
2825
3092
  ) : null,
2826
- /* @__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)) }),
2827
- 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 : (
2828
3095
  // biome-ignore lint/suspicious/noArrayIndexKey: a series is positional — the index is the point's identity, and category labels repeat.
2829
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3096
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2830
3097
  "circle",
2831
3098
  {
2832
3099
  cx: xAt(index),
@@ -2840,18 +3107,18 @@ function LineChart({
2840
3107
  ]
2841
3108
  }
2842
3109
  ) : null,
2843
- /* @__PURE__ */ (0, import_jsx_runtime49.jsx)(
3110
+ /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
2844
3111
  "div",
2845
3112
  {
2846
3113
  className: "pire-chart-hover",
2847
3114
  style: { inset: `${PLOT_INSET.top}px ${PLOT_INSET.right}px ${PLOT_INSET.bottom}px ${PLOT_INSET.left}px` },
2848
3115
  children: categories.map((category, categoryIndex) => (
2849
3116
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2850
- /* @__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: [
2851
- /* @__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 }),
2852
3119
  series.map((one) => {
2853
3120
  const value = one.values[categoryIndex];
2854
- 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: [
2855
3122
  one.label,
2856
3123
  ": ",
2857
3124
  value == null ? "No data" : formatValue(value)
@@ -2868,7 +3135,7 @@ function LineChart({
2868
3135
 
2869
3136
  // src/components/data/DonutChart.tsx
2870
3137
  var React14 = __toESM(require("react"), 1);
2871
- var import_jsx_runtime50 = require("react/jsx-runtime");
3138
+ var import_jsx_runtime51 = require("react/jsx-runtime");
2872
3139
  var SEGMENT_GAP_DEGREES = 1.5;
2873
3140
  function DonutChart({
2874
3141
  categories,
@@ -2905,7 +3172,7 @@ function DonutChart({
2905
3172
  }));
2906
3173
  const hovered = hoveredIndex == null ? null : segments.find((segment) => segment.index === hoveredIndex) ?? null;
2907
3174
  let arcStart = 0;
2908
- return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3175
+ return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2909
3176
  ChartFrame,
2910
3177
  {
2911
3178
  label,
@@ -2918,8 +3185,8 @@ function DonutChart({
2918
3185
  showDataTable,
2919
3186
  className,
2920
3187
  style,
2921
- 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: [
2922
- /* @__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)(
2923
3190
  "svg",
2924
3191
  {
2925
3192
  width: size,
@@ -2927,13 +3194,13 @@ function DonutChart({
2927
3194
  "aria-hidden": "true",
2928
3195
  focusable: "false",
2929
3196
  onMouseLeave: () => setHoveredIndex(null),
2930
- 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) => {
2931
3198
  const arcLength = segment.value / total * circumference;
2932
3199
  const offset = arcStart;
2933
3200
  arcStart += arcLength;
2934
3201
  return (
2935
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.
2936
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
3203
+ /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
2937
3204
  "circle",
2938
3205
  {
2939
3206
  className: "pire-chart-arc",
@@ -2953,9 +3220,9 @@ function DonutChart({
2953
3220
  }) })
2954
3221
  }
2955
3222
  ),
2956
- /* @__PURE__ */ (0, import_jsx_runtime50.jsxs)("div", { className: "pire-chart-donut-center", style: { width: size - thickness * 2 - 8 }, children: [
2957
- /* @__PURE__ */ (0, import_jsx_runtime50.jsx)("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
2958
- /* @__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 })
2959
3226
  ] })
2960
3227
  ] })
2961
3228
  }
@@ -2966,19 +3233,24 @@ function colorForSegment(index) {
2966
3233
  }
2967
3234
 
2968
3235
  // src/components/data/LinkList.tsx
2969
- var import_react_aria_components29 = require("react-aria-components");
2970
- var import_jsx_runtime51 = require("react/jsx-runtime");
2971
- function LinkList({ items, onSelect, className, ...rest }) {
2972
- return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__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: [
2973
- item.icon ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
2974
- item.key ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "pire-linklist-key", children: item.key }) : null,
2975
- item.text ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "pire-linklist-text", children: item.text }) : null,
2976
- item.trailing
2977
- ] }) }, item.id)) });
3236
+ var import_react_aria_components30 = require("react-aria-components");
3237
+ var import_jsx_runtime52 = require("react/jsx-runtime");
3238
+ function LinkList({ items, onSelect, emphasis = "key", className, ...rest }) {
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;
3242
+ const [first, second] = emphasis === "text" ? [textSlot, keySlot] : [keySlot, textSlot];
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,
3245
+ first,
3246
+ second,
3247
+ item.trailing
3248
+ ] }) }, item.id);
3249
+ }) });
2978
3250
  }
2979
3251
 
2980
3252
  // src/components/layout/PageBand.tsx
2981
- var import_jsx_runtime52 = require("react/jsx-runtime");
3253
+ var import_jsx_runtime53 = require("react/jsx-runtime");
2982
3254
  function PageBand({
2983
3255
  surface = "card",
2984
3256
  hasBorder = true,
@@ -2986,7 +3258,7 @@ function PageBand({
2986
3258
  className,
2987
3259
  ...rest
2988
3260
  }) {
2989
- return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
3261
+ return /* @__PURE__ */ (0, import_jsx_runtime53.jsx)(
2990
3262
  "div",
2991
3263
  {
2992
3264
  className: cx("pire-pageband", className),
@@ -2999,56 +3271,56 @@ function PageBand({
2999
3271
  }
3000
3272
 
3001
3273
  // src/components/layout/PageHeader.tsx
3002
- var import_jsx_runtime53 = require("react/jsx-runtime");
3274
+ var import_jsx_runtime54 = require("react/jsx-runtime");
3003
3275
  function PageHeader({ title, subtitle, actions, className, ...rest }) {
3004
- return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("header", { className: cx("pire-pageheader", className), ...rest, children: [
3005
- /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)("div", { style: { minWidth: 0 }, children: [
3006
- /* @__PURE__ */ (0, import_jsx_runtime53.jsx)("h1", { className: "pire-pageheader-title", children: title }),
3007
- 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
3008
3280
  ] }),
3009
- 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
3010
3282
  ] });
3011
3283
  }
3012
3284
 
3013
3285
  // src/components/layout/SectionHeader.tsx
3014
- var import_jsx_runtime54 = require("react/jsx-runtime");
3286
+ var import_jsx_runtime55 = require("react/jsx-runtime");
3015
3287
  function SectionHeader({ title, meta, actions, className, ...rest }) {
3016
- return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cx("pire-sectionhead", className), ...rest, children: [
3017
- /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { className: "pire-eyebrow", children: title }),
3018
- meta ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3019
- 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
3020
3292
  ] });
3021
3293
  }
3022
3294
 
3023
3295
  // src/components/layout/SelectionBar.tsx
3024
- var import_jsx_runtime55 = require("react/jsx-runtime");
3296
+ var import_jsx_runtime56 = require("react/jsx-runtime");
3025
3297
  function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
3026
3298
  if (!count) return null;
3027
- return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
3028
- /* @__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: [
3029
3301
  count.toLocaleString(),
3030
3302
  " ",
3031
3303
  noun,
3032
3304
  count === 1 ? "" : "s",
3033
3305
  " selected"
3034
3306
  ] }),
3035
- children ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3036
- 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
3037
3309
  ] });
3038
3310
  }
3039
3311
 
3040
3312
  // src/components/layout/FooterBar.tsx
3041
- var import_jsx_runtime56 = require("react/jsx-runtime");
3313
+ var import_jsx_runtime57 = require("react/jsx-runtime");
3042
3314
  function FooterBar({ note, actions, children, className, ...rest }) {
3043
- return /* @__PURE__ */ (0, import_jsx_runtime56.jsxs)("footer", { className: cx("pire-footerbar", className), ...rest, children: [
3044
- 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,
3045
3317
  children,
3046
- 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
3047
3319
  ] });
3048
3320
  }
3049
3321
 
3050
3322
  // src/components/patterns/ConfirmDialog.tsx
3051
- var import_jsx_runtime57 = require("react/jsx-runtime");
3323
+ var import_jsx_runtime58 = require("react/jsx-runtime");
3052
3324
  function ConfirmDialog({
3053
3325
  isOpen,
3054
3326
  title,
@@ -3062,7 +3334,7 @@ function ConfirmDialog({
3062
3334
  onConfirm,
3063
3335
  onCancel
3064
3336
  }) {
3065
- return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
3337
+ return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
3066
3338
  Dialog,
3067
3339
  {
3068
3340
  isOpen,
@@ -3072,25 +3344,157 @@ function ConfirmDialog({
3072
3344
  onClose: onCancel,
3073
3345
  isDismissable: !isBusy,
3074
3346
  showClose: false,
3075
- footer: /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(import_jsx_runtime57.Fragment, { children: [
3076
- /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3077
- /* @__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 })
3078
3350
  ] }),
3079
3351
  children: [
3080
- 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,
3081
3353
  children
3082
3354
  ]
3083
3355
  }
3084
3356
  );
3085
3357
  }
3086
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
+
3087
3491
  // src/components/patterns/SidePanel.tsx
3088
- var import_react_aria_components30 = require("react-aria-components");
3089
- 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");
3090
3494
  function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
3091
3495
  const msg = usePireMessages();
3092
- return /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
3093
- import_react_aria_components30.ModalOverlay,
3496
+ return /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3497
+ import_react_aria_components32.ModalOverlay,
3094
3498
  {
3095
3499
  className: "pire-sidepanel-overlay",
3096
3500
  isOpen,
@@ -3098,36 +3502,36 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
3098
3502
  onOpenChange: (o) => {
3099
3503
  if (!o) onClose?.();
3100
3504
  },
3101
- 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: [
3102
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("header", { className: "pire-dialog-head", children: [
3103
- /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)("div", { style: { flex: 1, minWidth: 0 }, children: [
3104
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_react_aria_components30.Heading, { slot: "title", className: "pire-dialog-title", children: title }),
3105
- 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
3106
3510
  ] }),
3107
- /* @__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 })
3108
3512
  ] }),
3109
- /* @__PURE__ */ (0, import_jsx_runtime58.jsx)("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3110
- 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
3111
3515
  ] }) })
3112
3516
  }
3113
3517
  );
3114
3518
  }
3115
3519
 
3116
3520
  // src/components/patterns/EmptyState.tsx
3117
- var import_jsx_runtime59 = require("react/jsx-runtime");
3521
+ var import_jsx_runtime61 = require("react/jsx-runtime");
3118
3522
  function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
3119
- return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3120
- /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3121
- title ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3122
- 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,
3123
3527
  action
3124
3528
  ] });
3125
3529
  }
3126
3530
 
3127
3531
  // src/components/patterns/FileDropZone.tsx
3128
- var React15 = __toESM(require("react"), 1);
3129
- var import_react_aria_components31 = require("react-aria-components");
3130
- 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");
3131
3535
  var isImage2 = (file) => file.type.startsWith("image/");
3132
3536
  function FileDropZone({
3133
3537
  label,
@@ -3153,10 +3557,10 @@ function FileDropZone({
3153
3557
  style
3154
3558
  }) {
3155
3559
  const msg = usePireMessages();
3156
- const [uncontrolled, setUncontrolled] = React15.useState(defaultValue ?? []);
3560
+ const [uncontrolled, setUncontrolled] = React16.useState(defaultValue ?? []);
3157
3561
  const files = value ?? uncontrolled;
3158
- const created = React15.useRef([]);
3159
- React15.useEffect(() => () => {
3562
+ const created = React16.useRef([]);
3563
+ React16.useEffect(() => () => {
3160
3564
  for (const url of created.current) URL.revokeObjectURL(url);
3161
3565
  }, []);
3162
3566
  const commit = (next) => {
@@ -3176,43 +3580,43 @@ function FileDropZone({
3176
3580
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
3177
3581
  };
3178
3582
  const remove = (target) => commit(files.filter((f) => f.file !== target));
3179
- return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3180
- 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: [
3181
3585
  label,
3182
- 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
3183
3587
  ] }) : null,
3184
- /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
3185
- import_react_aria_components31.DropZone,
3588
+ /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
3589
+ import_react_aria_components33.DropZone,
3186
3590
  {
3187
3591
  className: "pire-dropzone",
3188
3592
  "data-height": height,
3189
3593
  isDisabled: isDisabled || isReadOnly,
3190
3594
  onDrop: async (e) => {
3191
3595
  const dropped = await Promise.all(
3192
- 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())
3193
3597
  );
3194
3598
  accept(dropped);
3195
3599
  },
3196
3600
  children: [
3197
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3198
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3199
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(
3200
- 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,
3201
3605
  {
3202
3606
  acceptedFileTypes,
3203
3607
  allowsMultiple,
3204
3608
  onSelect: (list) => accept(list ? [...list] : []),
3205
- 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 })
3206
3610
  }
3207
3611
  )
3208
3612
  ]
3209
3613
  }
3210
3614
  ),
3211
- 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: [
3212
- 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" }),
3213
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-fileupload-name", children: file.name }),
3214
- /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3215
- 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)(
3216
3620
  IconButton,
3217
3621
  {
3218
3622
  icon: "x",
@@ -3222,14 +3626,14 @@ function FileDropZone({
3222
3626
  }
3223
3627
  )
3224
3628
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
3225
- uploadProgress != null ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3226
- description ? /* @__PURE__ */ (0, import_jsx_runtime60.jsx)("span", { className: "pire-field-hint", children: description }) : null,
3227
- 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
3228
3632
  ] });
3229
3633
  }
3230
3634
 
3231
3635
  // src/index.ts
3232
- var import_react_aria_components32 = require("react-aria-components");
3636
+ var import_react_aria_components34 = require("react-aria-components");
3233
3637
  // Annotate the CommonJS export names for ESM import in node:
3234
3638
  0 && (module.exports = {
3235
3639
  Avatar,
@@ -3240,6 +3644,7 @@ var import_react_aria_components32 = require("react-aria-components");
3240
3644
  Card,
3241
3645
  Checkbox,
3242
3646
  ComboBox,
3647
+ CommandPalette,
3243
3648
  ConfirmDialog,
3244
3649
  DataTable,
3245
3650
  DatePicker,
@@ -3256,10 +3661,12 @@ var import_react_aria_components32 = require("react-aria-components");
3256
3661
  FormField,
3257
3662
  Heading,
3258
3663
  I18nProvider,
3664
+ ICON_NAMES,
3259
3665
  Icon,
3260
3666
  IconButton,
3261
3667
  InlineMessage,
3262
3668
  Input,
3669
+ Kbd,
3263
3670
  KpiTile,
3264
3671
  LineChart,
3265
3672
  Link,
@@ -3310,6 +3717,7 @@ var import_react_aria_components32 = require("react-aria-components");
3310
3717
  esMessages,
3311
3718
  formatFileSize,
3312
3719
  rangeLengthInDays,
3720
+ useCommandPaletteShortcut,
3313
3721
  usePireMessages,
3314
3722
  useToast
3315
3723
  });