@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.js CHANGED
@@ -2,16 +2,30 @@
2
2
  var ICON_MARKUP = {
3
3
  "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"/>',
4
4
  "apps": '<path d="M8,4V8H4V4Zm2-2H2v8h8Zm8,2V8H14V4Zm2-2H12v8h8Zm8,2V8H24V4Zm2-2H22v8h8ZM8,14v4H4V14Zm2-2H2v8h8Zm8,2v4H14V14Zm2-2H12v8h8Zm8,2v4H24V14Zm2-2H22v8h8ZM8,24v4H4V24Zm2-2H2v8h8Zm8,2v4H14V24Zm2-2H12v8h8Zm8,2v4H24V24Zm2-2H22v8h8Z"/>',
5
+ "archive": '<path d="M14 19H18V21H14z"/><path d="M6,2V28a2,2,0,0,0,2,2H24a2,2,0,0,0,2-2V2ZM24,28H8V16H24Zm0-14H8V10H24ZM8,8V4H24V8Z"/>',
5
6
  "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"/>',
7
+ "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"/>',
6
8
  "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"/>',
7
9
  "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"/>',
8
10
  "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"/>',
11
+ "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"/>',
9
12
  "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"/>',
13
+ "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"/>',
14
+ "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"/>',
15
+ "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"/>',
16
+ "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"/>',
10
17
  "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"/>',
11
18
  "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"/>',
12
19
  "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"/>',
13
20
  "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"/>',
14
21
  "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"/>',
22
+ "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>',
23
+ "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"/>',
24
+ "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"/>',
25
+ "chart--bar": '<path d="M4,2H2V28a2,2,0,0,0,2,2H30V28H4V25H26V17H4V13H18V5H4ZM24,19v4H4V19ZM16,7v4H4V7Z"/>',
26
+ "chart--column": '<path d="M27,28V6H19V28H15V14H7V28H4V2H2V28a2,2,0,0,0,2,2H30V28ZM13,28H9V16h4Zm12,0H21V8h4Z"/>',
27
+ "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"/>',
28
+ "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"/>',
15
29
  "checkmark": '<path d="M13 24 4 15 5.414 13.586 13 21.171 26.586 7.586 28 9 13 24z"/>',
16
30
  "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"/>',
17
31
  "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"/>',
@@ -19,48 +33,109 @@ var ICON_MARKUP = {
19
33
  "chevron--left": '<path d="M10 16 20 6 21.4 7.4 12.8 16 21.4 24.6 20 26z"/>',
20
34
  "chevron--right": '<path d="M22 16 12 26 10.6 24.6 19.2 16 10.6 7.4 12 6z"/>',
21
35
  "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"/>',
36
+ "chevron--up": '<path d="M16 10 26 20 24.6 21.4 16 12.8 7.4 21.4 6 20z"/>',
22
37
  "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"/>',
23
38
  "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"/>',
39
+ "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"/>',
40
+ "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"/>',
24
41
  "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"/>',
25
42
  "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"/>',
43
+ "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"/>',
44
+ "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"/>',
45
+ "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"/>',
46
+ "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"/>',
47
+ "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"/>',
48
+ "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)"/>',
26
49
  "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"/>',
27
50
  "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"/>',
51
+ "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"/>',
28
52
  "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"/>',
29
53
  "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"/>',
54
+ "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"/>',
30
55
  "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"/>',
56
+ "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"/>',
31
57
  "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"/>',
58
+ "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"/>',
32
59
  "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"/>',
60
+ "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"/>',
61
+ "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"/>',
62
+ "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"/>',
63
+ "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"/>',
33
64
  "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"/>',
34
65
  "hashtag": '<path d="M28,12V10H22V4H20v6H12V4H10v6H4v2h6v8H4v2h6v6h2V22h8v6h2V22h6V20H22V12Zm-8,8H12V12h8Z"/>',
35
66
  "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"/>',
36
67
  "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"/>',
68
+ "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"/>',
69
+ "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"/>',
37
70
  "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"/>',
71
+ "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"/>',
72
+ "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"/>',
38
73
  "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"/>',
39
74
  "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"/>',
75
+ "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"/>',
40
76
  "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"/>',
41
77
  "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"/>',
42
78
  "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"/>',
43
79
  "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"/>',
80
+ "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"/>',
44
81
  "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"/>',
82
+ "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"/>',
83
+ "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"/>',
84
+ "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"/>',
45
85
  "menu": '<path d="M4 6H28V8H4z"/><path d="M4 24H28V26H4z"/><path d="M4 12H28V14H4z"/><path d="M4 18H28V20H4z"/>',
46
86
  "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"/>',
47
87
  "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"/>',
88
+ "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"/>',
89
+ "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"/>',
48
90
  "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"/>',
91
+ "overflow-menu--horizontal": '<circle cx="8" cy="16" r="2"/><circle cx="16" cy="16" r="2"/><circle cx="24" cy="16" r="2"/>',
49
92
  "overflow-menu--vertical": '<circle cx="16" cy="8" r="2"/><circle cx="16" cy="16" r="2"/><circle cx="16" cy="24" r="2"/>',
93
+ "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"/>',
94
+ "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"/>',
95
+ "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"/>',
96
+ "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"/>',
97
+ "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"/>',
98
+ "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"/>',
50
99
  "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"/>',
100
+ "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"/>',
51
101
  "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"/>',
102
+ "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"/>',
52
103
  "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"/>',
104
+ "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"/>',
53
105
  "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"/>',
106
+ "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"/>',
107
+ "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"/>',
108
+ "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"/>',
109
+ "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"/>',
110
+ "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"/>',
111
+ "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"/>',
112
+ "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"/>',
54
113
  "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"/>',
114
+ "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"/>',
55
115
  "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"/>',
56
116
  "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"/>',
117
+ "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"/>',
57
118
  "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"/>',
119
+ "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"/>',
120
+ "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"/>',
121
+ "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"/>',
122
+ "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"/>',
58
123
  "subtract": '<path d="M8 15H24V17H8z"/>',
124
+ "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"/>',
125
+ "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"/>',
126
+ "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"/>',
127
+ "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"/>',
59
128
  "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"/>',
60
129
  "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"/>',
61
130
  "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"/>',
131
+ "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"/>',
62
132
  "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"/>',
133
+ "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"/>',
134
+ "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"/>',
135
+ "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"/>',
136
+ "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"/>',
63
137
  "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"/>',
138
+ "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"/>',
64
139
  "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"/>',
65
140
  "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"/>'
66
141
  };
@@ -133,8 +208,96 @@ var CARBON_MAP = {
133
208
  "pencil": "edit",
134
209
  "lock": "locked",
135
210
  "eye": "view",
136
- "minimize-2": "minimize"
211
+ "minimize-2": "minimize",
212
+ /* --- Direction and chrome, completing the sets above --------------------
213
+ `chevron-up` and `arrow-left` were missing while their three siblings shipped, so a collapsible
214
+ that pointed down had nothing to point back up with. */
215
+ "chevron-up": "chevron--up",
216
+ "arrow-left": "arrow--left",
217
+ "more-horizontal": "overflow-menu--horizontal",
218
+ "maximize-2": "maximize",
219
+ "log-out": "logout",
220
+ "log-in": "login",
221
+ "archive": "archive",
222
+ "folder": "folder",
223
+ "book": "book",
224
+ "notebook": "notebook",
225
+ "asterisk": "asterisk",
226
+ "bookmark": "bookmark",
227
+ "star": "star",
228
+ "star-filled": "star--filled",
229
+ "tag": "tag",
230
+ "repeat": "repeat",
231
+ "undo-2": "undo",
232
+ "redo-2": "redo",
233
+ "rotate-ccw": "reset",
234
+ "table": "table--split",
235
+ "database": "data--base",
236
+ "function-square": "function",
237
+ /* --- Money -------------------------------------------------------------
238
+ `credit-card` is here because its absence shipped: it resolved to nothing, rendered an empty
239
+ box, and reached production on the payment notifications. Carbon spells it `payment--methods`,
240
+ which is exactly the kind of mismatch this map exists to absorb. */
241
+ "credit-card": "payment--methods",
242
+ "wallet": "wallet",
243
+ "banknote": "money",
244
+ "coins": "currency",
245
+ "dollar-sign": "currency--dollar",
246
+ "euro": "currency--euro",
247
+ "receipt": "receipt",
248
+ "percent": "percentage",
249
+ "piggy-bank": "piggy-bank",
250
+ "landmark": "bank--vault",
251
+ "scale": "scales",
252
+ "purchase": "purchase",
253
+ /* --- Documents and ERP objects ----------------------------------------- */
254
+ "file-signature": "request-quote",
255
+ "scroll-text": "license",
256
+ "file-plus": "document--add",
257
+ "save": "save",
258
+ "file-bar-chart": "report",
259
+ "list-todo": "task",
260
+ "check-square": "task--complete",
261
+ "gavel": "rule",
262
+ "id-card": "identification",
263
+ "briefcase": "portfolio",
264
+ "handshake": "partnership",
265
+ "lightbulb": "idea",
266
+ "inventory": "inventory-management",
267
+ "package-2": "delivery--parcel",
268
+ "shopping-bag": "shopping--bag",
269
+ "barcode": "barcode",
270
+ "qr-code": "qr-code",
271
+ "git-branch": "flow",
272
+ "bug": "debug",
273
+ /* --- People and contact ------------------------------------------------- */
274
+ "users": "user--multiple",
275
+ "user-plus": "user--follow",
276
+ "user-cog": "user--admin",
277
+ "user-circle": "user--profile",
278
+ "mail": "email",
279
+ "phone": "phone",
280
+ "send": "send",
281
+ "globe": "globe",
282
+ "building": "location--company",
283
+ /* --- Charts and time ---------------------------------------------------- */
284
+ "bar-chart-3": "chart--column",
285
+ "bar-chart-horizontal": "chart--bar",
286
+ "line-chart": "chart--line",
287
+ "pie-chart": "chart--pie",
288
+ "area-chart": "chart--area",
289
+ "calendar-days": "events",
290
+ "calendar-plus": "calendar--add",
291
+ "calendar-heatmap": "calendar--heat-map",
292
+ /* --- Transfer ----------------------------------------------------------- */
293
+ "cloud-upload": "cloud--upload",
294
+ "cloud-download": "cloud--download",
295
+ "filter-x": "filter--edit",
296
+ "arrow-up-narrow-wide": "sort--ascending",
297
+ "arrow-down-wide-narrow": "sort--descending",
298
+ "badge-info": "information--square"
137
299
  };
300
+ var ICON_NAMES = Object.freeze(Object.keys(CARBON_MAP).sort());
138
301
 
139
302
  // src/components/core/Icon.tsx
140
303
  import { jsx } from "react/jsx-runtime";
@@ -187,7 +350,14 @@ function Icon({ name, size = 16, label, pack, style, ...rest }) {
187
350
  "data-icon": name,
188
351
  ...rest,
189
352
  style: { display: "inline-block", flex: "0 0 auto", width: size, height: size, ...style },
190
- children: markup === void 0 ? null : /* @__PURE__ */ jsx(
353
+ children: markup === void 0 ? (
354
+ // A broken icon has to look broken. In development the box gets a dashed outline so the
355
+ // gap is visible on screen instead of only in a console warning that is easy to lose in a
356
+ // busy log — which is how a missing `credit-card` reached production as a blank square.
357
+ // Production still renders nothing at all: a dev diagnostic must never become a user's
358
+ // first sight of a defect. Deliberately not an <svg>, so nothing reads it as a real glyph.
359
+ IS_DEV ? /* @__PURE__ */ jsx("span", { className: "pire-icon-missing", title: `Unknown icon: ${name}` }) : null
360
+ ) : /* @__PURE__ */ jsx(
191
361
  "svg",
192
362
  {
193
363
  viewBox: "0 0 32 32",
@@ -511,25 +681,31 @@ function Separator({
511
681
  );
512
682
  }
513
683
 
684
+ // src/components/core/Kbd.tsx
685
+ import { jsx as jsx14 } from "react/jsx-runtime";
686
+ function Kbd({ children, size = "md", className, ...rest }) {
687
+ return /* @__PURE__ */ jsx14("kbd", { className: cx("pire-kbd", className), "data-size": size, ...rest, children });
688
+ }
689
+
514
690
  // src/components/forms/FormField.tsx
515
- import { jsx as jsx14, jsxs as jsxs9 } from "react/jsx-runtime";
691
+ import { jsx as jsx15, jsxs as jsxs9 } from "react/jsx-runtime";
516
692
  function FormField({ label, htmlFor, isRequired, hint, error, layout = "stacked", children, className, ...rest }) {
517
693
  return /* @__PURE__ */ jsxs9("div", { className: cx("pire-field", className), "data-layout": layout, ...rest, children: [
518
694
  /* @__PURE__ */ jsxs9("label", { className: "pire-field-label", htmlFor, children: [
519
695
  label,
520
- isRequired ? /* @__PURE__ */ jsx14("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
696
+ isRequired ? /* @__PURE__ */ jsx15("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
521
697
  ] }),
522
698
  children,
523
699
  error ? /* @__PURE__ */ jsxs9("span", { className: "pire-field-error", role: "alert", children: [
524
- /* @__PURE__ */ jsx14(Icon, { name: "alert-circle", size: 12 }),
700
+ /* @__PURE__ */ jsx15(Icon, { name: "alert-circle", size: 12 }),
525
701
  error
526
- ] }) : hint ? /* @__PURE__ */ jsx14("span", { className: "pire-field-hint", children: hint }) : null
702
+ ] }) : hint ? /* @__PURE__ */ jsx15("span", { className: "pire-field-hint", children: hint }) : null
527
703
  ] });
528
704
  }
529
705
 
530
706
  // src/components/forms/Input.tsx
531
707
  import { TextField, Label, Input as AriaInput, Group, Text as Text2, FieldError } from "react-aria-components";
532
- import { jsx as jsx15, jsxs as jsxs10 } from "react/jsx-runtime";
708
+ import { jsx as jsx16, jsxs as jsxs10 } from "react/jsx-runtime";
533
709
  function Input({
534
710
  label,
535
711
  icon,
@@ -556,7 +732,7 @@ function Input({
556
732
  children: [
557
733
  label ? /* @__PURE__ */ jsxs10(Label, { className: "pire-field-label", children: [
558
734
  label,
559
- rest.isRequired ? /* @__PURE__ */ jsx15("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
735
+ rest.isRequired ? /* @__PURE__ */ jsx16("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
560
736
  ] }) : null,
561
737
  /* @__PURE__ */ jsxs10(
562
738
  Group,
@@ -567,14 +743,14 @@ function Input({
567
743
  "data-invalid": rest.isInvalid ? "true" : void 0,
568
744
  "data-readonly": rest.isReadOnly ? "true" : void 0,
569
745
  children: [
570
- icon ? /* @__PURE__ */ jsx15(Icon, { name: icon, size: 16, className: "pire-leading-icon" }) : null,
571
- /* @__PURE__ */ jsx15(AriaInput, { ref: inputRef, className: "pire-input", "data-numeric": numeric ? "true" : void 0 }),
572
- suffix ? /* @__PURE__ */ jsx15("span", { className: "pire-affix", children: suffix }) : null
746
+ icon ? /* @__PURE__ */ jsx16(Icon, { name: icon, size: 16, className: "pire-leading-icon" }) : null,
747
+ /* @__PURE__ */ jsx16(AriaInput, { ref: inputRef, className: "pire-input", "data-numeric": numeric ? "true" : void 0 }),
748
+ suffix ? /* @__PURE__ */ jsx16("span", { className: "pire-affix", children: suffix }) : null
573
749
  ]
574
750
  }
575
751
  ),
576
- description ? /* @__PURE__ */ jsx15(Text2, { slot: "description", className: "pire-field-hint", children: description }) : null,
577
- /* @__PURE__ */ jsx15(FieldError, { className: "pire-field-error", children: errorMessage })
752
+ description ? /* @__PURE__ */ jsx16(Text2, { slot: "description", className: "pire-field-hint", children: description }) : null,
753
+ /* @__PURE__ */ jsx16(FieldError, { className: "pire-field-error", children: errorMessage })
578
754
  ]
579
755
  }
580
756
  );
@@ -583,7 +759,7 @@ function Input({
583
759
  // src/components/forms/TextArea.tsx
584
760
  import * as React5 from "react";
585
761
  import { TextField as TextField2, Label as Label2, TextArea as AriaTextArea, Group as Group2, Text as Text3, FieldError as FieldError2 } from "react-aria-components";
586
- import { jsx as jsx16, jsxs as jsxs11 } from "react/jsx-runtime";
762
+ import { jsx as jsx17, jsxs as jsxs11 } from "react/jsx-runtime";
587
763
  var useIsomorphicLayoutEffect = typeof document === "undefined" ? React5.useEffect : React5.useLayoutEffect;
588
764
  function TextArea({
589
765
  label,
@@ -635,9 +811,9 @@ function TextArea({
635
811
  children: [
636
812
  label ? /* @__PURE__ */ jsxs11(Label2, { className: "pire-field-label", children: [
637
813
  label,
638
- rest.isRequired ? /* @__PURE__ */ jsx16("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
814
+ rest.isRequired ? /* @__PURE__ */ jsx17("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
639
815
  ] }) : null,
640
- /* @__PURE__ */ jsx16(
816
+ /* @__PURE__ */ jsx17(
641
817
  Group2,
642
818
  {
643
819
  className: "pire-control",
@@ -646,7 +822,7 @@ function TextArea({
646
822
  "data-multiline": "true",
647
823
  "data-invalid": rest.isInvalid ? "true" : void 0,
648
824
  "data-readonly": rest.isReadOnly ? "true" : void 0,
649
- children: /* @__PURE__ */ jsx16(
825
+ children: /* @__PURE__ */ jsx17(
650
826
  AriaTextArea,
651
827
  {
652
828
  ref,
@@ -658,8 +834,8 @@ function TextArea({
658
834
  )
659
835
  }
660
836
  ),
661
- description ? /* @__PURE__ */ jsx16(Text3, { slot: "description", className: "pire-field-hint", children: description }) : null,
662
- /* @__PURE__ */ jsx16(FieldError2, { className: "pire-field-error", children: errorMessage })
837
+ description ? /* @__PURE__ */ jsx17(Text3, { slot: "description", className: "pire-field-hint", children: description }) : null,
838
+ /* @__PURE__ */ jsx17(FieldError2, { className: "pire-field-error", children: errorMessage })
663
839
  ]
664
840
  }
665
841
  );
@@ -677,124 +853,6 @@ import {
677
853
  Text as Text4,
678
854
  FieldError as FieldError3
679
855
  } from "react-aria-components";
680
- import { jsx as jsx17, jsxs as jsxs12 } from "react/jsx-runtime";
681
- var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
682
- function Select({
683
- label,
684
- value,
685
- defaultValue,
686
- onChange,
687
- options = [],
688
- placeholder = "Select\u2026",
689
- description,
690
- errorMessage,
691
- size = "md",
692
- fullWidth = true,
693
- className,
694
- style,
695
- ...rest
696
- }) {
697
- const items = options.map(norm);
698
- return /* @__PURE__ */ jsxs12(
699
- AriaSelect,
700
- {
701
- className: cx("pire-field", className),
702
- style,
703
- selectedKey: value,
704
- defaultSelectedKey: defaultValue,
705
- onSelectionChange: (k) => onChange?.(String(k)),
706
- placeholder,
707
- validationBehavior: "aria",
708
- ...rest,
709
- children: [
710
- label ? /* @__PURE__ */ jsxs12(Label3, { className: "pire-field-label", children: [
711
- label,
712
- rest.isRequired ? /* @__PURE__ */ jsx17("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
713
- ] }) : null,
714
- /* @__PURE__ */ jsxs12(
715
- AriaButton4,
716
- {
717
- className: "pire-control",
718
- "data-size": size,
719
- "data-full-width": String(fullWidth),
720
- "data-invalid": rest.isInvalid ? "true" : void 0,
721
- children: [
722
- /* @__PURE__ */ jsx17(SelectValue, { className: "pire-select-value" }),
723
- /* @__PURE__ */ jsx17(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
724
- ]
725
- }
726
- ),
727
- description ? /* @__PURE__ */ jsx17(Text4, { slot: "description", className: "pire-field-hint", children: description }) : null,
728
- /* @__PURE__ */ jsx17(FieldError3, { className: "pire-field-error", children: errorMessage }),
729
- /* @__PURE__ */ jsx17(Popover, { className: "pire-popover", children: /* @__PURE__ */ jsx17(ListBox, { className: "pire-listbox", items, children: (item) => /* @__PURE__ */ jsx17(ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label }) }) })
730
- ]
731
- }
732
- );
733
- }
734
-
735
- // src/components/forms/Checkbox.tsx
736
- import { Checkbox as AriaCheckbox } from "react-aria-components";
737
- import { Fragment, jsx as jsx18, jsxs as jsxs13 } from "react/jsx-runtime";
738
- function Checkbox({ label, hint, children, className, ...rest }) {
739
- return /* @__PURE__ */ jsx18(AriaCheckbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment, { children: [
740
- /* @__PURE__ */ jsx18("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ jsx18(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ jsx18(Icon, { name: "check", size: 12 }) : null }),
741
- /* @__PURE__ */ jsxs13("span", { children: [
742
- label ?? children,
743
- hint ? /* @__PURE__ */ jsx18("span", { className: "pire-choice-hint", children: hint }) : null
744
- ] })
745
- ] }) });
746
- }
747
-
748
- // src/components/forms/Radio.tsx
749
- import {
750
- RadioGroup as AriaRadioGroup,
751
- Radio as AriaRadio,
752
- Label as Label4,
753
- Text as Text5,
754
- FieldError as FieldError4
755
- } from "react-aria-components";
756
- import { jsx as jsx19, jsxs as jsxs14 } from "react/jsx-runtime";
757
- function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
758
- return /* @__PURE__ */ jsxs14(AriaRadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
759
- label ? /* @__PURE__ */ jsx19(Label4, { className: "pire-field-label", children: label }) : null,
760
- /* @__PURE__ */ jsx19("div", { className: "pire-radiogroup", children }),
761
- description ? /* @__PURE__ */ jsx19(Text5, { slot: "description", className: "pire-field-hint", children: description }) : null,
762
- /* @__PURE__ */ jsx19(FieldError4, { className: "pire-field-error", children: errorMessage })
763
- ] });
764
- }
765
- function Radio({ label, hint, children, className, ...rest }) {
766
- return /* @__PURE__ */ jsxs14(AriaRadio, { className: cx("pire-choice", className), ...rest, children: [
767
- /* @__PURE__ */ jsx19("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
768
- /* @__PURE__ */ jsxs14("span", { children: [
769
- label ?? children,
770
- hint ? /* @__PURE__ */ jsx19("span", { className: "pire-choice-hint", children: hint }) : null
771
- ] })
772
- ] });
773
- }
774
-
775
- // src/components/forms/Switch.tsx
776
- import { Switch as AriaSwitch } from "react-aria-components";
777
- import { jsx as jsx20, jsxs as jsxs15 } from "react/jsx-runtime";
778
- function Switch({ label, children, className, ...rest }) {
779
- return /* @__PURE__ */ jsxs15(AriaSwitch, { className: cx("pire-choice", className), ...rest, children: [
780
- /* @__PURE__ */ jsx20("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ jsx20("span", { className: "pire-switch-thumb" }) }),
781
- /* @__PURE__ */ jsx20("span", { children: label ?? children })
782
- ] });
783
- }
784
-
785
- // src/components/forms/ComboBox.tsx
786
- import {
787
- ComboBox as AriaComboBox,
788
- Label as Label5,
789
- Input as AriaInput2,
790
- Button as AriaButton5,
791
- Group as Group3,
792
- Popover as Popover2,
793
- ListBox as ListBox2,
794
- ListBoxItem as ListBoxItem2,
795
- Text as Text6,
796
- FieldError as FieldError5
797
- } from "react-aria-components";
798
856
 
799
857
  // src/i18n/PireIntlProvider.tsx
800
858
  import * as React6 from "react";
@@ -812,6 +870,7 @@ var enMessages = {
812
870
  inlineMessageDismiss: "Dismiss message",
813
871
  toastDismiss: "Dismiss",
814
872
  toastRegionLabel: "Notifications",
873
+ selectEmpty: "No options available",
815
874
  comboBoxShowSuggestions: "Show suggestions",
816
875
  comboBoxLoading: "Searching\u2026",
817
876
  datePickerOpenCalendar: "Open calendar",
@@ -820,10 +879,14 @@ var enMessages = {
820
879
  dateRangePresetsLabel: "Date range shortcuts",
821
880
  numberFieldIncrease: "Increase",
822
881
  numberFieldDecrease: "Decrease",
882
+ valueHelpFieldPlaceholder: "Not selected",
823
883
  valueHelpFieldClear: "Clear selection",
824
884
  valueHelpFieldOpenNamed: "Select {label}",
825
885
  valueHelpFieldOpen: "Open value help",
826
886
  valueHelpDialogSearch: "Search records",
887
+ valueHelpDialogTitle: "Select a record",
888
+ valueHelpDialogSearchPlaceholder: "Search by ID or name",
889
+ valueHelpDialogEmpty: "No records found",
827
890
  valueHelpDialogCancel: "Cancel",
828
891
  paginationLabel: "Pagination",
829
892
  paginationRange: "{from}\u2013{to} of {total}",
@@ -836,6 +899,15 @@ var enMessages = {
836
899
  fileUploadRemoveNamed: "Remove {name}",
837
900
  fileUploadUploading: "Uploading",
838
901
  fileDropZonePrompt: "Drag files here, or choose them",
902
+ shellBarUserMenu: "Account menu for {user}",
903
+ commandPaletteLabel: "Command palette",
904
+ commandPaletteSearchLabel: "Search commands and records",
905
+ commandPalettePlaceholder: "Search for a screen, an action or a record\u2026",
906
+ commandPaletteEmpty: "Nothing matches that",
907
+ commandPaletteLoading: "Searching\u2026",
908
+ commandPaletteHintNavigate: "navigate",
909
+ commandPaletteHintSelect: "open",
910
+ commandPaletteHintClose: "close",
839
911
  chartCategoryHeader: "Category",
840
912
  chartNoValue: "No data",
841
913
  chartEmpty: "No data for this period"
@@ -852,6 +924,7 @@ var esMessages = {
852
924
  inlineMessageDismiss: "Descartar mensaje",
853
925
  toastDismiss: "Descartar",
854
926
  toastRegionLabel: "Notificaciones",
927
+ selectEmpty: "Sin opciones disponibles",
855
928
  comboBoxShowSuggestions: "Mostrar sugerencias",
856
929
  comboBoxLoading: "Buscando\u2026",
857
930
  datePickerOpenCalendar: "Abrir calendario",
@@ -860,10 +933,14 @@ var esMessages = {
860
933
  dateRangePresetsLabel: "Atajos de rango de fechas",
861
934
  numberFieldIncrease: "Aumentar",
862
935
  numberFieldDecrease: "Disminuir",
936
+ valueHelpFieldPlaceholder: "Sin seleccionar",
863
937
  valueHelpFieldClear: "Limpiar selecci\xF3n",
864
938
  valueHelpFieldOpenNamed: "Seleccionar {label}",
865
939
  valueHelpFieldOpen: "Abrir ayuda de valores",
866
940
  valueHelpDialogSearch: "Buscar registros",
941
+ valueHelpDialogTitle: "Seleccionar un registro",
942
+ valueHelpDialogSearchPlaceholder: "Buscar por c\xF3digo o nombre",
943
+ valueHelpDialogEmpty: "No se encontraron registros",
867
944
  valueHelpDialogCancel: "Cancelar",
868
945
  paginationLabel: "Paginaci\xF3n",
869
946
  paginationRange: "{from}\u2013{to} de {total}",
@@ -876,20 +953,29 @@ var esMessages = {
876
953
  fileUploadRemoveNamed: "Quitar {name}",
877
954
  fileUploadUploading: "Subiendo",
878
955
  fileDropZonePrompt: "Arrastr\xE1 archivos ac\xE1, o elegilos",
956
+ shellBarUserMenu: "Men\xFA de cuenta de {user}",
957
+ commandPaletteLabel: "Paleta de comandos",
958
+ commandPaletteSearchLabel: "Buscar comandos y registros",
959
+ commandPalettePlaceholder: "Busc\xE1 una pantalla, una acci\xF3n o un registro\u2026",
960
+ commandPaletteEmpty: "No hay coincidencias",
961
+ commandPaletteLoading: "Buscando\u2026",
962
+ commandPaletteHintNavigate: "navegar",
963
+ commandPaletteHintSelect: "abrir",
964
+ commandPaletteHintClose: "cerrar",
879
965
  chartCategoryHeader: "Categor\xEDa",
880
966
  chartNoValue: "Sin datos",
881
967
  chartEmpty: "Sin datos para este per\xEDodo"
882
968
  };
883
969
 
884
970
  // src/i18n/PireIntlProvider.tsx
885
- import { jsx as jsx21 } from "react/jsx-runtime";
971
+ import { jsx as jsx18 } from "react/jsx-runtime";
886
972
  var MessagesContext = React6.createContext(enMessages);
887
973
  function PireIntlProvider({ messages, children }) {
888
974
  const value = React6.useMemo(
889
975
  () => messages ? { ...enMessages, ...messages } : enMessages,
890
976
  [messages]
891
977
  );
892
- return /* @__PURE__ */ jsx21(MessagesContext.Provider, { value, children });
978
+ return /* @__PURE__ */ jsx18(MessagesContext.Provider, { value, children });
893
979
  }
894
980
  function usePireMessages() {
895
981
  return React6.useContext(MessagesContext);
@@ -899,8 +985,137 @@ function useMessage(key, override) {
899
985
  return override ?? messages[key];
900
986
  }
901
987
 
988
+ // src/components/forms/Select.tsx
989
+ import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
990
+ var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
991
+ function Select({
992
+ label,
993
+ value,
994
+ defaultValue,
995
+ onChange,
996
+ options = [],
997
+ placeholder = "Select\u2026",
998
+ description,
999
+ errorMessage,
1000
+ emptyLabel,
1001
+ size = "md",
1002
+ fullWidth = true,
1003
+ className,
1004
+ style,
1005
+ ...rest
1006
+ }) {
1007
+ const msg = usePireMessages();
1008
+ const items = options.map(norm);
1009
+ return /* @__PURE__ */ jsxs12(
1010
+ AriaSelect,
1011
+ {
1012
+ className: cx("pire-field", className),
1013
+ style,
1014
+ selectedKey: value,
1015
+ defaultSelectedKey: defaultValue,
1016
+ onSelectionChange: (k) => onChange?.(String(k)),
1017
+ allowsEmptyCollection: true,
1018
+ placeholder,
1019
+ validationBehavior: "aria",
1020
+ ...rest,
1021
+ children: [
1022
+ label ? /* @__PURE__ */ jsxs12(Label3, { className: "pire-field-label", children: [
1023
+ label,
1024
+ rest.isRequired ? /* @__PURE__ */ jsx19("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1025
+ ] }) : null,
1026
+ /* @__PURE__ */ jsxs12(
1027
+ AriaButton4,
1028
+ {
1029
+ className: "pire-control",
1030
+ "data-size": size,
1031
+ "data-full-width": String(fullWidth),
1032
+ "data-invalid": rest.isInvalid ? "true" : void 0,
1033
+ children: [
1034
+ /* @__PURE__ */ jsx19(SelectValue, { className: "pire-select-value" }),
1035
+ /* @__PURE__ */ jsx19(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
1036
+ ]
1037
+ }
1038
+ ),
1039
+ description ? /* @__PURE__ */ jsx19(Text4, { slot: "description", className: "pire-field-hint", children: description }) : null,
1040
+ /* @__PURE__ */ jsx19(FieldError3, { className: "pire-field-error", children: errorMessage }),
1041
+ /* @__PURE__ */ jsx19(Popover, { className: "pire-popover", children: /* @__PURE__ */ jsx19(
1042
+ ListBox,
1043
+ {
1044
+ className: "pire-listbox",
1045
+ items,
1046
+ renderEmptyState: () => /* @__PURE__ */ jsx19("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: emptyLabel ?? msg.selectEmpty }),
1047
+ children: (item) => /* @__PURE__ */ jsx19(ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label })
1048
+ }
1049
+ ) })
1050
+ ]
1051
+ }
1052
+ );
1053
+ }
1054
+
1055
+ // src/components/forms/Checkbox.tsx
1056
+ import { Checkbox as AriaCheckbox } from "react-aria-components";
1057
+ import { Fragment, jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
1058
+ function Checkbox({ label, hint, children, className, ...rest }) {
1059
+ return /* @__PURE__ */ jsx20(AriaCheckbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment, { children: [
1060
+ /* @__PURE__ */ jsx20("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ jsx20(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ jsx20(Icon, { name: "check", size: 12 }) : null }),
1061
+ /* @__PURE__ */ jsxs13("span", { children: [
1062
+ label ?? children,
1063
+ hint ? /* @__PURE__ */ jsx20("span", { className: "pire-choice-hint", children: hint }) : null
1064
+ ] })
1065
+ ] }) });
1066
+ }
1067
+
1068
+ // src/components/forms/Radio.tsx
1069
+ import {
1070
+ RadioGroup as AriaRadioGroup,
1071
+ Radio as AriaRadio,
1072
+ Label as Label4,
1073
+ Text as Text5,
1074
+ FieldError as FieldError4
1075
+ } from "react-aria-components";
1076
+ import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
1077
+ function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
1078
+ return /* @__PURE__ */ jsxs14(AriaRadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
1079
+ label ? /* @__PURE__ */ jsx21(Label4, { className: "pire-field-label", children: label }) : null,
1080
+ /* @__PURE__ */ jsx21("div", { className: "pire-radiogroup", children }),
1081
+ description ? /* @__PURE__ */ jsx21(Text5, { slot: "description", className: "pire-field-hint", children: description }) : null,
1082
+ /* @__PURE__ */ jsx21(FieldError4, { className: "pire-field-error", children: errorMessage })
1083
+ ] });
1084
+ }
1085
+ function Radio({ label, hint, children, className, ...rest }) {
1086
+ return /* @__PURE__ */ jsxs14(AriaRadio, { className: cx("pire-choice", className), ...rest, children: [
1087
+ /* @__PURE__ */ jsx21("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
1088
+ /* @__PURE__ */ jsxs14("span", { children: [
1089
+ label ?? children,
1090
+ hint ? /* @__PURE__ */ jsx21("span", { className: "pire-choice-hint", children: hint }) : null
1091
+ ] })
1092
+ ] });
1093
+ }
1094
+
1095
+ // src/components/forms/Switch.tsx
1096
+ import { Switch as AriaSwitch } from "react-aria-components";
1097
+ import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
1098
+ function Switch({ label, children, className, ...rest }) {
1099
+ return /* @__PURE__ */ jsxs15(AriaSwitch, { className: cx("pire-choice", className), ...rest, children: [
1100
+ /* @__PURE__ */ jsx22("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ jsx22("span", { className: "pire-switch-thumb" }) }),
1101
+ /* @__PURE__ */ jsx22("span", { children: label ?? children })
1102
+ ] });
1103
+ }
1104
+
902
1105
  // src/components/forms/ComboBox.tsx
903
- import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
1106
+ import {
1107
+ ComboBox as AriaComboBox,
1108
+ Label as Label5,
1109
+ Input as AriaInput2,
1110
+ Button as AriaButton5,
1111
+ Group as Group3,
1112
+ Popover as Popover2,
1113
+ ListBox as ListBox2,
1114
+ ListBoxItem as ListBoxItem2,
1115
+ Text as Text6,
1116
+ FieldError as FieldError5
1117
+ } from "react-aria-components";
1118
+ import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
904
1119
  var norm2 = (o) => typeof o === "string" ? { value: o, label: o } : o;
905
1120
  function ComboBox({
906
1121
  label,
@@ -908,6 +1123,7 @@ function ComboBox({
908
1123
  defaultValue,
909
1124
  onChange,
910
1125
  onInputChange,
1126
+ inputValue,
911
1127
  options = [],
912
1128
  description,
913
1129
  errorMessage,
@@ -937,6 +1153,7 @@ function ComboBox({
937
1153
  if (isLoading) return;
938
1154
  onChange?.(k == null ? null : String(k));
939
1155
  },
1156
+ inputValue,
940
1157
  onInputChange,
941
1158
  ...collection,
942
1159
  allowsEmptyCollection: isFilteredExternally || isLoading,
@@ -946,7 +1163,7 @@ function ComboBox({
946
1163
  children: [
947
1164
  label ? /* @__PURE__ */ jsxs16(Label5, { className: "pire-field-label", children: [
948
1165
  label,
949
- rest.isRequired ? /* @__PURE__ */ jsx22("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1166
+ rest.isRequired ? /* @__PURE__ */ jsx23("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
950
1167
  ] }) : null,
951
1168
  /* @__PURE__ */ jsxs16(
952
1169
  Group3,
@@ -956,15 +1173,15 @@ function ComboBox({
956
1173
  "data-full-width": String(fullWidth),
957
1174
  "data-invalid": rest.isInvalid ? "true" : void 0,
958
1175
  children: [
959
- /* @__PURE__ */ jsx22(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
960
- /* @__PURE__ */ jsx22(AriaInput2, { className: "pire-input", placeholder: rest.placeholder }),
961
- /* @__PURE__ */ jsx22(AriaButton5, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ jsx22(Icon, { name: "chevron-down", size: 16 }) })
1176
+ /* @__PURE__ */ jsx23(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1177
+ /* @__PURE__ */ jsx23(AriaInput2, { className: "pire-input", placeholder: rest.placeholder }),
1178
+ /* @__PURE__ */ jsx23(AriaButton5, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ jsx23(Icon, { name: "chevron-down", size: 16 }) })
962
1179
  ]
963
1180
  }
964
1181
  ),
965
- description ? /* @__PURE__ */ jsx22(Text6, { slot: "description", className: "pire-field-hint", children: description }) : null,
966
- /* @__PURE__ */ jsx22(FieldError5, { className: "pire-field-error", children: errorMessage }),
967
- /* @__PURE__ */ jsx22(Popover2, { className: "pire-popover", children: /* @__PURE__ */ jsx22(
1182
+ description ? /* @__PURE__ */ jsx23(Text6, { slot: "description", className: "pire-field-hint", children: description }) : null,
1183
+ /* @__PURE__ */ jsx23(FieldError5, { className: "pire-field-error", children: errorMessage }),
1184
+ /* @__PURE__ */ jsx23(Popover2, { className: "pire-popover", children: /* @__PURE__ */ jsx23(
968
1185
  ListBox2,
969
1186
  {
970
1187
  className: "pire-listbox",
@@ -972,10 +1189,10 @@ function ComboBox({
972
1189
  const el = e.currentTarget;
973
1190
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
974
1191
  } : void 0,
975
- renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx22("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1192
+ renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx23("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
976
1193
  children: (item) => /* @__PURE__ */ jsxs16(ListBoxItem2, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
977
- /* @__PURE__ */ jsx22("span", { className: "pire-option-label", children: item.label }),
978
- item.secondary ? /* @__PURE__ */ jsx22("span", { className: "pire-option-secondary", children: item.secondary }) : null
1194
+ /* @__PURE__ */ jsx23("span", { className: "pire-option-label", children: item.label }),
1195
+ item.secondary ? /* @__PURE__ */ jsx23("span", { className: "pire-option-secondary", children: item.secondary }) : null
979
1196
  ] })
980
1197
  }
981
1198
  ) })
@@ -1000,7 +1217,7 @@ import {
1000
1217
  FieldError as FieldError6,
1001
1218
  VisuallyHidden
1002
1219
  } from "react-aria-components";
1003
- import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
1220
+ import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1004
1221
  var norm3 = (o) => typeof o === "string" ? { value: o, label: o } : o;
1005
1222
  function MultiComboBox({
1006
1223
  label,
@@ -1084,7 +1301,7 @@ function MultiComboBox({
1084
1301
  children: [
1085
1302
  label ? /* @__PURE__ */ jsxs17(Label6, { className: "pire-field-label", children: [
1086
1303
  label,
1087
- rest.isRequired ? /* @__PURE__ */ jsx23("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1304
+ rest.isRequired ? /* @__PURE__ */ jsx24("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1088
1305
  ] }) : null,
1089
1306
  /* @__PURE__ */ jsxs17(
1090
1307
  Group4,
@@ -1096,14 +1313,14 @@ function MultiComboBox({
1096
1313
  "data-invalid": rest.isInvalid ? "true" : void 0,
1097
1314
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1098
1315
  children: [
1099
- /* @__PURE__ */ jsx23(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1316
+ /* @__PURE__ */ jsx24(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1100
1317
  /* @__PURE__ */ jsxs17("div", { className: "pire-chipfield", children: [
1101
- /* @__PURE__ */ jsx23(ButtonContext.Provider, { value: null, children: values.map((v) => (
1318
+ /* @__PURE__ */ jsx24(ButtonContext.Provider, { value: null, children: values.map((v) => (
1102
1319
  /* Disabled follows the field, not `isEditable`: a read-only field's chips are
1103
1320
  real, current values and should read as such — they simply lose the × . */
1104
- /* @__PURE__ */ jsx23(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
1321
+ /* @__PURE__ */ jsx24(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
1105
1322
  )) }),
1106
- /* @__PURE__ */ jsx23(
1323
+ /* @__PURE__ */ jsx24(
1107
1324
  AriaInput3,
1108
1325
  {
1109
1326
  ref: inputRef,
@@ -1113,14 +1330,14 @@ function MultiComboBox({
1113
1330
  }
1114
1331
  )
1115
1332
  ] }),
1116
- /* @__PURE__ */ jsx23(AriaButton6, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ jsx23(Icon, { name: "chevron-down", size: 16 }) })
1333
+ /* @__PURE__ */ jsx24(AriaButton6, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ jsx24(Icon, { name: "chevron-down", size: 16 }) })
1117
1334
  ]
1118
1335
  }
1119
1336
  ),
1120
- /* @__PURE__ */ jsx23(VisuallyHidden, { children: /* @__PURE__ */ jsx23("span", { "aria-live": "polite", children: announcement }) }),
1121
- description ? /* @__PURE__ */ jsx23(Text7, { slot: "description", className: "pire-field-hint", children: description }) : null,
1122
- /* @__PURE__ */ jsx23(FieldError6, { className: "pire-field-error", children: errorMessage }),
1123
- /* @__PURE__ */ jsx23(Popover3, { className: "pire-popover", children: /* @__PURE__ */ jsx23(
1337
+ /* @__PURE__ */ jsx24(VisuallyHidden, { children: /* @__PURE__ */ jsx24("span", { "aria-live": "polite", children: announcement }) }),
1338
+ description ? /* @__PURE__ */ jsx24(Text7, { slot: "description", className: "pire-field-hint", children: description }) : null,
1339
+ /* @__PURE__ */ jsx24(FieldError6, { className: "pire-field-error", children: errorMessage }),
1340
+ /* @__PURE__ */ jsx24(Popover3, { className: "pire-popover", children: /* @__PURE__ */ jsx24(
1124
1341
  ListBox3,
1125
1342
  {
1126
1343
  className: "pire-listbox",
@@ -1128,10 +1345,10 @@ function MultiComboBox({
1128
1345
  const el = e.currentTarget;
1129
1346
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
1130
1347
  } : void 0,
1131
- renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx23("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1348
+ renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx24("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1132
1349
  children: (item) => /* @__PURE__ */ jsxs17(ListBoxItem3, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
1133
- /* @__PURE__ */ jsx23("span", { className: "pire-option-label", children: item.label }),
1134
- item.secondary ? /* @__PURE__ */ jsx23("span", { className: "pire-option-secondary", children: item.secondary }) : null
1350
+ /* @__PURE__ */ jsx24("span", { className: "pire-option-label", children: item.label }),
1351
+ item.secondary ? /* @__PURE__ */ jsx24("span", { className: "pire-option-secondary", children: item.secondary }) : null
1135
1352
  ] })
1136
1353
  }
1137
1354
  ) })
@@ -1150,7 +1367,7 @@ import {
1150
1367
  Text as Text8,
1151
1368
  FieldError as FieldError7
1152
1369
  } from "react-aria-components";
1153
- import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
1370
+ import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1154
1371
  function NumberField({
1155
1372
  label,
1156
1373
  suffix,
@@ -1167,7 +1384,7 @@ function NumberField({
1167
1384
  return /* @__PURE__ */ jsxs18(AriaNumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1168
1385
  label ? /* @__PURE__ */ jsxs18(Label7, { className: "pire-field-label", children: [
1169
1386
  label,
1170
- rest.isRequired ? /* @__PURE__ */ jsx24("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1387
+ rest.isRequired ? /* @__PURE__ */ jsx25("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1171
1388
  ] }) : null,
1172
1389
  /* @__PURE__ */ jsxs18(
1173
1390
  Group5,
@@ -1178,17 +1395,17 @@ function NumberField({
1178
1395
  "data-invalid": rest.isInvalid ? "true" : void 0,
1179
1396
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1180
1397
  children: [
1181
- /* @__PURE__ */ jsx24(AriaInput4, { className: "pire-input", "data-numeric": "true" }),
1182
- suffix ? /* @__PURE__ */ jsx24("span", { className: "pire-affix", children: suffix }) : null,
1398
+ /* @__PURE__ */ jsx25(AriaInput4, { className: "pire-input", "data-numeric": "true" }),
1399
+ suffix ? /* @__PURE__ */ jsx25("span", { className: "pire-affix", children: suffix }) : null,
1183
1400
  hideStepper ? null : /* @__PURE__ */ jsxs18("span", { className: "pire-stepper", children: [
1184
- /* @__PURE__ */ jsx24(AriaButton7, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ jsx24(Icon, { name: "plus", size: 10 }) }),
1185
- /* @__PURE__ */ jsx24(AriaButton7, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ jsx24(Icon, { name: "minus", size: 10 }) })
1401
+ /* @__PURE__ */ jsx25(AriaButton7, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ jsx25(Icon, { name: "plus", size: 10 }) }),
1402
+ /* @__PURE__ */ jsx25(AriaButton7, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ jsx25(Icon, { name: "minus", size: 10 }) })
1186
1403
  ] })
1187
1404
  ]
1188
1405
  }
1189
1406
  ),
1190
- description ? /* @__PURE__ */ jsx24(Text8, { slot: "description", className: "pire-field-hint", children: description }) : null,
1191
- /* @__PURE__ */ jsx24(FieldError7, { className: "pire-field-error", children: errorMessage })
1407
+ description ? /* @__PURE__ */ jsx25(Text8, { slot: "description", className: "pire-field-hint", children: description }) : null,
1408
+ /* @__PURE__ */ jsx25(FieldError7, { className: "pire-field-error", children: errorMessage })
1192
1409
  ] });
1193
1410
  }
1194
1411
 
@@ -1212,7 +1429,7 @@ import {
1212
1429
  Text as Text9,
1213
1430
  FieldError as FieldError8
1214
1431
  } from "react-aria-components";
1215
- import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
1432
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1216
1433
  function DatePicker({
1217
1434
  label,
1218
1435
  description,
@@ -1227,7 +1444,7 @@ function DatePicker({
1227
1444
  return /* @__PURE__ */ jsxs19(AriaDatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1228
1445
  label ? /* @__PURE__ */ jsxs19(Label8, { className: "pire-field-label", children: [
1229
1446
  label,
1230
- rest.isRequired ? /* @__PURE__ */ jsx25("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1447
+ rest.isRequired ? /* @__PURE__ */ jsx26("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1231
1448
  ] }) : null,
1232
1449
  /* @__PURE__ */ jsxs19(
1233
1450
  Group6,
@@ -1238,22 +1455,22 @@ function DatePicker({
1238
1455
  "data-invalid": rest.isInvalid ? "true" : void 0,
1239
1456
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1240
1457
  children: [
1241
- /* @__PURE__ */ jsx25(DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx25(DateSegment, { segment, className: "pire-datesegment" }) }),
1242
- /* @__PURE__ */ jsx25(AriaButton8, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerOpenCalendar, style: { width: 24, height: 24 }, children: /* @__PURE__ */ jsx25(Icon, { name: "calendar", size: 16 }) })
1458
+ /* @__PURE__ */ jsx26(DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment, { segment, className: "pire-datesegment" }) }),
1459
+ /* @__PURE__ */ jsx26(AriaButton8, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerOpenCalendar, style: { width: 24, height: 24 }, children: /* @__PURE__ */ jsx26(Icon, { name: "calendar", size: 16 }) })
1243
1460
  ]
1244
1461
  }
1245
1462
  ),
1246
- description ? /* @__PURE__ */ jsx25(Text9, { slot: "description", className: "pire-field-hint", children: description }) : null,
1247
- /* @__PURE__ */ jsx25(FieldError8, { className: "pire-field-error", children: errorMessage }),
1248
- /* @__PURE__ */ jsx25(Popover4, { className: "pire-popover", children: /* @__PURE__ */ jsx25(AriaDialog, { children: /* @__PURE__ */ jsxs19(Calendar, { className: "pire-calendar", children: [
1463
+ description ? /* @__PURE__ */ jsx26(Text9, { slot: "description", className: "pire-field-hint", children: description }) : null,
1464
+ /* @__PURE__ */ jsx26(FieldError8, { className: "pire-field-error", children: errorMessage }),
1465
+ /* @__PURE__ */ jsx26(Popover4, { className: "pire-popover", children: /* @__PURE__ */ jsx26(AriaDialog, { children: /* @__PURE__ */ jsxs19(Calendar, { className: "pire-calendar", children: [
1249
1466
  /* @__PURE__ */ jsxs19("header", { className: "pire-calendar-head", children: [
1250
- /* @__PURE__ */ jsx25(AriaButton8, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ jsx25(Icon, { name: "chevron-left", size: 16 }) }),
1251
- /* @__PURE__ */ jsx25(Heading2, { className: "pire-calendar-title" }),
1252
- /* @__PURE__ */ jsx25(AriaButton8, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ jsx25(Icon, { name: "chevron-right", size: 16 }) })
1467
+ /* @__PURE__ */ jsx26(AriaButton8, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-left", size: 16 }) }),
1468
+ /* @__PURE__ */ jsx26(Heading2, { className: "pire-calendar-title" }),
1469
+ /* @__PURE__ */ jsx26(AriaButton8, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-right", size: 16 }) })
1253
1470
  ] }),
1254
1471
  /* @__PURE__ */ jsxs19(CalendarGrid, { className: "pire-calendar-grid", children: [
1255
- /* @__PURE__ */ jsx25(CalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx25(CalendarHeaderCell, { children: day }) }),
1256
- /* @__PURE__ */ jsx25(CalendarGridBody, { children: (date) => /* @__PURE__ */ jsx25(CalendarCell, { date, className: "pire-calendar-cell" }) })
1472
+ /* @__PURE__ */ jsx26(CalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx26(CalendarHeaderCell, { children: day }) }),
1473
+ /* @__PURE__ */ jsx26(CalendarGridBody, { children: (date) => /* @__PURE__ */ jsx26(CalendarCell, { date, className: "pire-calendar-cell" }) })
1257
1474
  ] })
1258
1475
  ] }) }) })
1259
1476
  ] });
@@ -1279,7 +1496,7 @@ import {
1279
1496
  Text as Text10,
1280
1497
  FieldError as FieldError9
1281
1498
  } from "react-aria-components";
1282
- import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1499
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1283
1500
  function rangeLengthInDays(range) {
1284
1501
  return range.end.toDate("UTC").getTime() / 864e5 - range.start.toDate("UTC").getTime() / 864e5 + 1;
1285
1502
  }
@@ -1313,7 +1530,7 @@ function DateRangePicker({
1313
1530
  children: [
1314
1531
  label ? /* @__PURE__ */ jsxs20(Label9, { className: "pire-field-label", children: [
1315
1532
  label,
1316
- rest.isRequired ? /* @__PURE__ */ jsx26("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1533
+ rest.isRequired ? /* @__PURE__ */ jsx27("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1317
1534
  ] }) : null,
1318
1535
  /* @__PURE__ */ jsxs20(
1319
1536
  Group7,
@@ -1324,29 +1541,29 @@ function DateRangePicker({
1324
1541
  "data-invalid": rest.isInvalid || tooLong ? "true" : void 0,
1325
1542
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1326
1543
  children: [
1327
- /* @__PURE__ */ jsx26(DateInput2, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment2, { segment, className: "pire-datesegment" }) }),
1328
- /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1329
- /* @__PURE__ */ jsx26(DateInput2, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment2, { segment, className: "pire-datesegment" }) }),
1330
- /* @__PURE__ */ jsx26(
1544
+ /* @__PURE__ */ jsx27(DateInput2, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx27(DateSegment2, { segment, className: "pire-datesegment" }) }),
1545
+ /* @__PURE__ */ jsx27("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1546
+ /* @__PURE__ */ jsx27(DateInput2, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx27(DateSegment2, { segment, className: "pire-datesegment" }) }),
1547
+ /* @__PURE__ */ jsx27(
1331
1548
  AriaButton9,
1332
1549
  {
1333
1550
  className: "pire-iconbtn",
1334
1551
  "data-size": "sm",
1335
1552
  "aria-label": msg.datePickerOpenCalendar,
1336
1553
  style: { width: 24, height: 24 },
1337
- children: /* @__PURE__ */ jsx26(Icon, { name: "calendar", size: 16 })
1554
+ children: /* @__PURE__ */ jsx27(Icon, { name: "calendar", size: 16 })
1338
1555
  }
1339
1556
  )
1340
1557
  ]
1341
1558
  }
1342
1559
  ),
1343
- description ? /* @__PURE__ */ jsx26(Text10, { slot: "description", className: "pire-field-hint", children: description }) : null,
1344
- /* @__PURE__ */ jsx26(FieldError9, { className: "pire-field-error", children: errorMessage }),
1345
- /* @__PURE__ */ jsx26(Popover5, { className: "pire-popover", children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-daterange-dialog", children: [
1560
+ description ? /* @__PURE__ */ jsx27(Text10, { slot: "description", className: "pire-field-hint", children: description }) : null,
1561
+ /* @__PURE__ */ jsx27(FieldError9, { className: "pire-field-error", children: errorMessage }),
1562
+ /* @__PURE__ */ jsx27(Popover5, { className: "pire-popover", children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-daterange-dialog", children: [
1346
1563
  presets?.length ? (
1347
1564
  // Before the calendar in the DOM, so keyboard users reach the shortcut without
1348
1565
  // arrowing through a month first.
1349
- /* @__PURE__ */ jsx26("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ jsx26(
1566
+ /* @__PURE__ */ jsx27("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ jsx27(
1350
1567
  AriaButton9,
1351
1568
  {
1352
1569
  className: "pire-daterange-preset",
@@ -1358,31 +1575,31 @@ function DateRangePicker({
1358
1575
  ) : null,
1359
1576
  /* @__PURE__ */ jsxs20(RangeCalendar, { className: "pire-calendar", children: [
1360
1577
  /* @__PURE__ */ jsxs20("header", { className: "pire-calendar-head", children: [
1361
- /* @__PURE__ */ jsx26(
1578
+ /* @__PURE__ */ jsx27(
1362
1579
  AriaButton9,
1363
1580
  {
1364
1581
  slot: "previous",
1365
1582
  className: "pire-iconbtn",
1366
1583
  "data-size": "sm",
1367
1584
  "aria-label": msg.datePickerPreviousMonth,
1368
- children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-left", size: 16 })
1585
+ children: /* @__PURE__ */ jsx27(Icon, { name: "chevron-left", size: 16 })
1369
1586
  }
1370
1587
  ),
1371
- /* @__PURE__ */ jsx26(Heading3, { className: "pire-calendar-title" }),
1372
- /* @__PURE__ */ jsx26(
1588
+ /* @__PURE__ */ jsx27(Heading3, { className: "pire-calendar-title" }),
1589
+ /* @__PURE__ */ jsx27(
1373
1590
  AriaButton9,
1374
1591
  {
1375
1592
  slot: "next",
1376
1593
  className: "pire-iconbtn",
1377
1594
  "data-size": "sm",
1378
1595
  "aria-label": msg.datePickerNextMonth,
1379
- children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-right", size: 16 })
1596
+ children: /* @__PURE__ */ jsx27(Icon, { name: "chevron-right", size: 16 })
1380
1597
  }
1381
1598
  )
1382
1599
  ] }),
1383
1600
  /* @__PURE__ */ jsxs20(CalendarGrid2, { className: "pire-calendar-grid", children: [
1384
- /* @__PURE__ */ jsx26(CalendarGridHeader2, { children: (day) => /* @__PURE__ */ jsx26(CalendarHeaderCell2, { children: day }) }),
1385
- /* @__PURE__ */ jsx26(CalendarGridBody2, { children: (date) => /* @__PURE__ */ jsx26(CalendarCell2, { date, className: "pire-calendar-cell" }) })
1601
+ /* @__PURE__ */ jsx27(CalendarGridHeader2, { children: (day) => /* @__PURE__ */ jsx27(CalendarHeaderCell2, { children: day }) }),
1602
+ /* @__PURE__ */ jsx27(CalendarGridBody2, { children: (date) => /* @__PURE__ */ jsx27(CalendarCell2, { date, className: "pire-calendar-cell" }) })
1386
1603
  ] })
1387
1604
  ] })
1388
1605
  ] }) })
@@ -1399,7 +1616,7 @@ import * as React8 from "react";
1399
1616
 
1400
1617
  // src/components/feedback/Dialog.tsx
1401
1618
  import { ModalOverlay, Modal, Dialog as AriaDialog3, Heading as Heading4 } from "react-aria-components";
1402
- import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
1619
+ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1403
1620
  function Dialog({
1404
1621
  isOpen,
1405
1622
  onOpenChange,
@@ -1419,7 +1636,7 @@ function Dialog({
1419
1636
  onClose?.();
1420
1637
  onOpenChange?.(false);
1421
1638
  };
1422
- return /* @__PURE__ */ jsx27(
1639
+ return /* @__PURE__ */ jsx28(
1423
1640
  ModalOverlay,
1424
1641
  {
1425
1642
  className: "pire-modal-overlay",
@@ -1428,16 +1645,16 @@ function Dialog({
1428
1645
  onOpenChange: (o) => {
1429
1646
  if (!o) close();
1430
1647
  },
1431
- children: /* @__PURE__ */ jsx27(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs21(AriaDialog3, { className: "pire-dialog", children: [
1648
+ children: /* @__PURE__ */ jsx28(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs21(AriaDialog3, { className: "pire-dialog", children: [
1432
1649
  title ? /* @__PURE__ */ jsxs21("header", { className: "pire-dialog-head", children: [
1433
1650
  /* @__PURE__ */ jsxs21("div", { style: { flex: 1, minWidth: 0 }, children: [
1434
- /* @__PURE__ */ jsx27(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
1435
- subtitle ? /* @__PURE__ */ jsx27("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1651
+ /* @__PURE__ */ jsx28(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
1652
+ subtitle ? /* @__PURE__ */ jsx28("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1436
1653
  ] }),
1437
- showClose ? /* @__PURE__ */ jsx27(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1654
+ showClose ? /* @__PURE__ */ jsx28(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1438
1655
  ] }) : null,
1439
- /* @__PURE__ */ jsx27("div", { className: "pire-dialog-body", children }),
1440
- footer ? /* @__PURE__ */ jsx27("footer", { className: "pire-dialog-foot", children: footer }) : null
1656
+ children ? /* @__PURE__ */ jsx28("div", { className: "pire-dialog-body", children }) : null,
1657
+ footer ? /* @__PURE__ */ jsx28("footer", { className: "pire-dialog-foot", children: footer }) : null
1441
1658
  ] }) })
1442
1659
  }
1443
1660
  );
@@ -1454,9 +1671,9 @@ import {
1454
1671
  } from "react-aria-components";
1455
1672
 
1456
1673
  // src/components/feedback/Skeleton.tsx
1457
- import { jsx as jsx28 } from "react/jsx-runtime";
1674
+ import { jsx as jsx29 } from "react/jsx-runtime";
1458
1675
  function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
1459
- return /* @__PURE__ */ jsx28(
1676
+ return /* @__PURE__ */ jsx29(
1460
1677
  "div",
1461
1678
  {
1462
1679
  className: cx("pire-skeleton", className),
@@ -1470,7 +1687,7 @@ function Skeleton({ shape = "text", width, height, className, style, ...rest })
1470
1687
  var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
1471
1688
  function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
1472
1689
  const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
1473
- return /* @__PURE__ */ jsx28(
1690
+ return /* @__PURE__ */ jsx29(
1474
1691
  "div",
1475
1692
  {
1476
1693
  className: cx("pire-skeleton-row", className),
@@ -1482,13 +1699,13 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1482
1699
  const align = c.numeric ? "right" : c.align ?? "left";
1483
1700
  return (
1484
1701
  // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
1485
- /* @__PURE__ */ jsx28(
1702
+ /* @__PURE__ */ jsx29(
1486
1703
  "div",
1487
1704
  {
1488
1705
  className: "pire-skeleton-cell",
1489
1706
  "data-align": align,
1490
1707
  style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
1491
- children: /* @__PURE__ */ jsx28(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1708
+ children: /* @__PURE__ */ jsx29(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1492
1709
  },
1493
1710
  i
1494
1711
  )
@@ -1499,7 +1716,7 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1499
1716
  }
1500
1717
 
1501
1718
  // src/components/data/DataTable.tsx
1502
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1719
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
1503
1720
  function DataTable({
1504
1721
  columns,
1505
1722
  rows,
@@ -1531,7 +1748,7 @@ function DataTable({
1531
1748
  ...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
1532
1749
  ];
1533
1750
  const body = isLoading ? [] : rows;
1534
- return /* @__PURE__ */ jsx29(
1751
+ return /* @__PURE__ */ jsx30(
1535
1752
  "div",
1536
1753
  {
1537
1754
  className: cx("pire-table-wrap", className),
@@ -1556,8 +1773,8 @@ function DataTable({
1556
1773
  } : void 0,
1557
1774
  children: [
1558
1775
  /* @__PURE__ */ jsxs22(TableHeader, { className: "pire-thead-row", children: [
1559
- selectable ? /* @__PURE__ */ jsx29(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx29(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1560
- columns.map((c, i) => /* @__PURE__ */ jsx29(
1776
+ selectable ? /* @__PURE__ */ jsx30(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx30(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1777
+ columns.map((c, i) => /* @__PURE__ */ jsx30(
1561
1778
  Column,
1562
1779
  {
1563
1780
  id: c.key,
@@ -1569,7 +1786,7 @@ function DataTable({
1569
1786
  "data-allows-sorting": c.sortable ? "true" : void 0,
1570
1787
  children: /* @__PURE__ */ jsxs22("span", { className: "pire-th-inner", children: [
1571
1788
  c.label,
1572
- c.sortable ? /* @__PURE__ */ jsx29(
1789
+ c.sortable ? /* @__PURE__ */ jsx30(
1573
1790
  Icon,
1574
1791
  {
1575
1792
  size: 12,
@@ -1582,15 +1799,15 @@ function DataTable({
1582
1799
  c.key
1583
1800
  ))
1584
1801
  ] }),
1585
- /* @__PURE__ */ jsx29(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs22("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1586
- /* @__PURE__ */ jsx29("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1802
+ /* @__PURE__ */ jsx30(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs22("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1803
+ /* @__PURE__ */ jsx30("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1587
1804
  Array.from({ length: skeletonRows }, (_, i) => (
1588
1805
  // biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
1589
- /* @__PURE__ */ jsx29(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1806
+ /* @__PURE__ */ jsx30(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1590
1807
  ))
1591
- ] }) : /* @__PURE__ */ jsx29("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ jsxs22(Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
1592
- selectable ? /* @__PURE__ */ jsx29(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx29(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1593
- columns.map((c) => /* @__PURE__ */ jsx29(
1808
+ ] }) : /* @__PURE__ */ jsx30("div", { className: "pire-table-empty", children: emptyLabel }), children: body.map((row) => /* @__PURE__ */ jsxs22(Row, { id: row.id, className: "pire-tr", "data-pressable": onRowAction ? "true" : void 0, children: [
1809
+ selectable ? /* @__PURE__ */ jsx30(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx30(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1810
+ columns.map((c) => /* @__PURE__ */ jsx30(
1594
1811
  Cell,
1595
1812
  {
1596
1813
  className: "pire-td",
@@ -1609,14 +1826,18 @@ function DataTable({
1609
1826
  }
1610
1827
 
1611
1828
  // src/components/patterns/ValueHelpDialog.tsx
1612
- import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1829
+ import { jsx as jsx31, jsxs as jsxs23 } from "react/jsx-runtime";
1613
1830
  function ValueHelpDialog({
1614
1831
  isOpen,
1615
- title = "Select a record",
1832
+ title,
1616
1833
  columns = [],
1617
1834
  rows = [],
1618
- searchPlaceholder = "Search by ID or name",
1835
+ searchPlaceholder,
1619
1836
  emptyLabel,
1837
+ onSearch,
1838
+ isFilteredExternally,
1839
+ isLoading,
1840
+ onLoadMore,
1620
1841
  onSelect,
1621
1842
  onClose
1622
1843
  }) {
@@ -1626,52 +1847,61 @@ function ValueHelpDialog({
1626
1847
  if (isOpen) setQuery("");
1627
1848
  }, [isOpen]);
1628
1849
  const filtered = React8.useMemo(() => {
1850
+ if (isFilteredExternally) return rows;
1629
1851
  const q = query.trim().toLowerCase();
1630
1852
  if (!q) return rows;
1631
1853
  return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
1632
- }, [rows, query]);
1633
- return /* @__PURE__ */ jsx30(
1854
+ }, [rows, query, isFilteredExternally]);
1855
+ const handleSearch = (value) => {
1856
+ setQuery(value);
1857
+ onSearch?.(value);
1858
+ };
1859
+ return /* @__PURE__ */ jsx31(
1634
1860
  Dialog,
1635
1861
  {
1636
1862
  isOpen,
1637
1863
  size: "lg",
1638
- title,
1864
+ title: title ?? msg.valueHelpDialogTitle,
1639
1865
  onClose,
1640
- footer: /* @__PURE__ */ jsx30(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1866
+ footer: /* @__PURE__ */ jsx31(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1641
1867
  children: /* @__PURE__ */ jsxs23("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1642
- /* @__PURE__ */ jsx30(
1868
+ /* @__PURE__ */ jsx31(
1643
1869
  Input,
1644
1870
  {
1645
1871
  "aria-label": msg.valueHelpDialogSearch,
1646
1872
  icon: "search",
1647
1873
  type: "search",
1648
1874
  value: query,
1649
- onChange: setQuery,
1650
- placeholder: searchPlaceholder,
1875
+ onChange: handleSearch,
1876
+ placeholder: searchPlaceholder ?? msg.valueHelpDialogSearchPlaceholder,
1651
1877
  autoFocus: true
1652
1878
  }
1653
1879
  ),
1654
- /* @__PURE__ */ jsx30(
1880
+ /* @__PURE__ */ jsx31("div", { onScroll: onLoadMore ? (event) => {
1881
+ const el = event.currentTarget;
1882
+ if (el.scrollHeight - el.scrollTop - el.clientHeight < 64) onLoadMore();
1883
+ } : void 0, style: { overflow: "auto", maxHeight: "48vh" }, children: /* @__PURE__ */ jsx31(
1655
1884
  DataTable,
1656
1885
  {
1657
- "aria-label": typeof title === "string" ? title : "Records",
1886
+ "aria-label": typeof title === "string" ? title : msg.valueHelpDialogTitle,
1658
1887
  density: "condensed",
1659
1888
  columns,
1660
1889
  rows: filtered,
1661
- emptyLabel: emptyLabel ?? `No records match \u201C${query}\u201D.`,
1890
+ isLoading,
1891
+ emptyLabel: emptyLabel ?? msg.valueHelpDialogEmpty,
1662
1892
  onRowAction: (row) => {
1663
1893
  onSelect?.(row);
1664
1894
  onClose?.();
1665
1895
  }
1666
1896
  }
1667
- )
1897
+ ) })
1668
1898
  ] })
1669
1899
  }
1670
1900
  );
1671
1901
  }
1672
1902
 
1673
1903
  // src/components/forms/ValueHelpField.tsx
1674
- import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1904
+ import { jsx as jsx32, jsxs as jsxs24 } from "react/jsx-runtime";
1675
1905
  var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
1676
1906
  function ValueHelpField({
1677
1907
  label,
@@ -1681,7 +1911,12 @@ function ValueHelpField({
1681
1911
  rows = [],
1682
1912
  columns = [],
1683
1913
  dialogTitle,
1684
- placeholder = "Not selected",
1914
+ onSearch,
1915
+ isFilteredExternally,
1916
+ isLoading,
1917
+ onLoadMore,
1918
+ emptyLabel,
1919
+ placeholder,
1685
1920
  description,
1686
1921
  errorMessage,
1687
1922
  isInvalid,
@@ -1694,50 +1929,53 @@ function ValueHelpField({
1694
1929
  const msg = usePireMessages();
1695
1930
  const [open, setOpen] = React9.useState(false);
1696
1931
  return /* @__PURE__ */ jsxs24("div", { className: cx(className), style, children: [
1697
- /* @__PURE__ */ jsxs24("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
1698
- /* @__PURE__ */ jsx31(
1699
- Input,
1700
- {
1701
- label,
1702
- isReadOnly: true,
1703
- isInvalid,
1704
- isDisabled,
1705
- isRequired,
1706
- value: value ? format(value) : "",
1707
- placeholder,
1708
- description,
1709
- errorMessage
1710
- }
1711
- ),
1712
- allowsClear && value ? /* @__PURE__ */ jsx31(
1713
- IconButton,
1714
- {
1715
- icon: "x",
1716
- label: msg.valueHelpFieldClear,
1717
- variant: "outlined",
1718
- isDisabled,
1719
- onPress: () => onChange?.(null)
1720
- }
1721
- ) : null,
1722
- /* @__PURE__ */ jsx31(
1723
- IconButton,
1724
- {
1725
- icon: "search",
1726
- label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1727
- variant: "outlined",
1728
- isDisabled,
1729
- onPress: () => setOpen(true)
1730
- }
1731
- )
1732
- ] }),
1733
- /* @__PURE__ */ jsx31(
1932
+ /* @__PURE__ */ jsx32(
1933
+ Input,
1934
+ {
1935
+ label,
1936
+ isReadOnly: true,
1937
+ isInvalid,
1938
+ isDisabled,
1939
+ isRequired,
1940
+ value: value ? format(value) : "",
1941
+ placeholder: placeholder ?? msg.valueHelpFieldPlaceholder,
1942
+ description,
1943
+ errorMessage,
1944
+ suffix: /* @__PURE__ */ jsxs24("span", { className: "pire-valuehelp-actions", children: [
1945
+ allowsClear && value ? /* @__PURE__ */ jsx32(
1946
+ IconButton,
1947
+ {
1948
+ icon: "x",
1949
+ label: msg.valueHelpFieldClear,
1950
+ isDisabled,
1951
+ onPress: () => onChange?.(null)
1952
+ }
1953
+ ) : null,
1954
+ /* @__PURE__ */ jsx32(
1955
+ IconButton,
1956
+ {
1957
+ icon: "search",
1958
+ label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1959
+ isDisabled,
1960
+ onPress: () => setOpen(true)
1961
+ }
1962
+ )
1963
+ ] })
1964
+ }
1965
+ ),
1966
+ /* @__PURE__ */ jsx32(
1734
1967
  ValueHelpDialog,
1735
1968
  {
1736
1969
  isOpen: open,
1737
1970
  onClose: () => setOpen(false),
1738
- title: dialogTitle ?? label ?? "Select a record",
1971
+ title: dialogTitle ?? label,
1739
1972
  columns,
1740
1973
  rows,
1974
+ onSearch,
1975
+ isFilteredExternally,
1976
+ isLoading,
1977
+ onLoadMore,
1978
+ emptyLabel,
1741
1979
  onSelect: (row) => onChange?.(row)
1742
1980
  }
1743
1981
  )
@@ -1750,7 +1988,7 @@ import { FileTrigger, Text as Text11 } from "react-aria-components";
1750
1988
 
1751
1989
  // src/components/feedback/ProgressBar.tsx
1752
1990
  import { ProgressBar as AriaProgressBar, Label as Label10 } from "react-aria-components";
1753
- import { Fragment as Fragment2, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
1991
+ import { Fragment as Fragment2, jsx as jsx33, jsxs as jsxs25 } from "react/jsx-runtime";
1754
1992
  function ProgressBar({
1755
1993
  value = 0,
1756
1994
  minValue = 0,
@@ -1763,7 +2001,7 @@ function ProgressBar({
1763
2001
  className,
1764
2002
  style
1765
2003
  }) {
1766
- return /* @__PURE__ */ jsx32(
2004
+ return /* @__PURE__ */ jsx33(
1767
2005
  AriaProgressBar,
1768
2006
  {
1769
2007
  className: cx("pire-progress", className),
@@ -1776,17 +2014,17 @@ function ProgressBar({
1776
2014
  style,
1777
2015
  children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs25(Fragment2, { children: [
1778
2016
  label || showValue ? /* @__PURE__ */ jsxs25("div", { className: "pire-progress-head", children: [
1779
- label ? /* @__PURE__ */ jsx32(Label10, { children: label }) : /* @__PURE__ */ jsx32("span", {}),
1780
- showValue && !isIndeterminate ? /* @__PURE__ */ jsx32("span", { className: "pire-numeric", children: valueText }) : null
2017
+ label ? /* @__PURE__ */ jsx33(Label10, { children: label }) : /* @__PURE__ */ jsx33("span", {}),
2018
+ showValue && !isIndeterminate ? /* @__PURE__ */ jsx33("span", { className: "pire-numeric", children: valueText }) : null
1781
2019
  ] }) : null,
1782
- /* @__PURE__ */ jsx32("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx32("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
2020
+ /* @__PURE__ */ jsx33("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx33("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
1783
2021
  ] })
1784
2022
  }
1785
2023
  );
1786
2024
  }
1787
2025
 
1788
2026
  // src/components/forms/FileUpload.tsx
1789
- import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
2027
+ import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
1790
2028
  var isImage = (file) => file.type.startsWith("image/");
1791
2029
  function formatFileSize(bytes) {
1792
2030
  if (bytes < 1024) return `${bytes} B`;
@@ -1868,22 +2106,22 @@ function FileUpload({
1868
2106
  children: [
1869
2107
  label ? /* @__PURE__ */ jsxs26("span", { className: "pire-field-label", children: [
1870
2108
  label,
1871
- isRequired ? /* @__PURE__ */ jsx33("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
2109
+ isRequired ? /* @__PURE__ */ jsx34("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1872
2110
  ] }) : null,
1873
- /* @__PURE__ */ jsx33(
2111
+ /* @__PURE__ */ jsx34(
1874
2112
  FileTrigger,
1875
2113
  {
1876
2114
  acceptedFileTypes,
1877
2115
  allowsMultiple,
1878
2116
  onSelect: accept,
1879
- children: /* @__PURE__ */ jsx33(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
2117
+ children: /* @__PURE__ */ jsx34(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
1880
2118
  }
1881
2119
  ),
1882
- files.length ? /* @__PURE__ */ jsx33("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs26("li", { className: "pire-fileupload-item", children: [
1883
- previewUrl ? /* @__PURE__ */ jsx33("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx33(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
1884
- /* @__PURE__ */ jsx33("span", { className: "pire-fileupload-name", children: file.name }),
1885
- /* @__PURE__ */ jsx33("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
1886
- isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx33(
2120
+ files.length ? /* @__PURE__ */ jsx34("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs26("li", { className: "pire-fileupload-item", children: [
2121
+ previewUrl ? /* @__PURE__ */ jsx34("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx34(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
2122
+ /* @__PURE__ */ jsx34("span", { className: "pire-fileupload-name", children: file.name }),
2123
+ /* @__PURE__ */ jsx34("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
2124
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx34(
1887
2125
  IconButton,
1888
2126
  {
1889
2127
  icon: "x",
@@ -1893,16 +2131,17 @@ function FileUpload({
1893
2131
  }
1894
2132
  )
1895
2133
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
1896
- uploadProgress != null ? /* @__PURE__ */ jsx33(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
1897
- description ? /* @__PURE__ */ jsx33(Text11, { slot: "description", className: "pire-field-hint", children: description }) : null,
1898
- isInvalid && errorMessage ? /* @__PURE__ */ jsx33("span", { className: "pire-field-error", children: errorMessage }) : null
2134
+ uploadProgress != null ? /* @__PURE__ */ jsx34(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
2135
+ description ? /* @__PURE__ */ jsx34(Text11, { slot: "description", className: "pire-field-hint", children: description }) : null,
2136
+ isInvalid && errorMessage ? /* @__PURE__ */ jsx34("span", { className: "pire-field-error", children: errorMessage }) : null
1899
2137
  ]
1900
2138
  }
1901
2139
  );
1902
2140
  }
1903
2141
 
1904
2142
  // src/components/navigation/ShellBar.tsx
1905
- import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
2143
+ import { MenuTrigger, Button as AriaButton10, Popover as Popover6 } from "react-aria-components";
2144
+ import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
1906
2145
  var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
1907
2146
  function ShellBar({
1908
2147
  product,
@@ -1914,30 +2153,48 @@ function ShellBar({
1914
2153
  searchLabel = "Search",
1915
2154
  actions,
1916
2155
  user,
2156
+ userMenu,
2157
+ userMenuLabel,
1917
2158
  className,
1918
2159
  ...rest
1919
2160
  }) {
2161
+ const msg = usePireMessages();
1920
2162
  return /* @__PURE__ */ jsxs27("header", { className: cx("pire-shellbar", className), ...rest, children: [
1921
- onMenu ? /* @__PURE__ */ jsx34(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
1922
- monogram ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
1923
- product ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-product", children: product }) : null,
1924
- title ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-title", children: title }) : null,
1925
- /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-spacer" }),
1926
- onSearch ? /* @__PURE__ */ jsx34(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
2163
+ onMenu ? /* @__PURE__ */ jsx35(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
2164
+ monogram ? /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
2165
+ product ? /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-product", children: product }) : null,
2166
+ title ? /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-title", children: title }) : null,
2167
+ /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-spacer" }),
2168
+ onSearch ? /* @__PURE__ */ jsx35(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
1927
2169
  actions,
1928
- user ? /* @__PURE__ */ jsx34("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
2170
+ user && userMenu ? (
2171
+ // A real button, not the img-role span: the avatar is where "my profile", "switch company"
2172
+ // and "sign out" live in any ERP, and a span accepts neither focus nor onPress. Popover is
2173
+ // rendered here rather than expected from the consumer so the panel keeps shell placement.
2174
+ /* @__PURE__ */ jsxs27(MenuTrigger, { children: [
2175
+ /* @__PURE__ */ jsx35(
2176
+ AriaButton10,
2177
+ {
2178
+ className: "pire-avatar pire-avatar-trigger",
2179
+ "aria-label": (userMenuLabel ?? msg.shellBarUserMenu).replace("{user}", user),
2180
+ children: initials2(user)
2181
+ }
2182
+ ),
2183
+ /* @__PURE__ */ jsx35(Popover6, { className: "pire-popover", children: userMenu })
2184
+ ] })
2185
+ ) : user ? /* @__PURE__ */ jsx35("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
1929
2186
  ] });
1930
2187
  }
1931
2188
 
1932
2189
  // src/components/navigation/SideNav.tsx
1933
2190
  import * as React11 from "react";
1934
2191
  import {
1935
- Button as AriaButton10,
2192
+ Button as AriaButton11,
1936
2193
  Disclosure,
1937
2194
  DisclosureGroup,
1938
2195
  DisclosurePanel,
1939
- MenuTrigger,
1940
- Popover as Popover6
2196
+ MenuTrigger as MenuTrigger2,
2197
+ Popover as Popover7
1941
2198
  } from "react-aria-components";
1942
2199
 
1943
2200
  // src/components/navigation/Menu.tsx
@@ -1948,11 +2205,11 @@ import {
1948
2205
  Separator as AriaSeparator2,
1949
2206
  Header
1950
2207
  } from "react-aria-components";
1951
- import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
2208
+ import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
1952
2209
  function Menu({ minWidth, className, style, ...rest }) {
1953
2210
  const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
1954
2211
  const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
1955
- return /* @__PURE__ */ jsx35(
2212
+ return /* @__PURE__ */ jsx36(
1956
2213
  AriaMenu,
1957
2214
  {
1958
2215
  className: cx("pire-menu", className),
@@ -1961,6 +2218,11 @@ function Menu({ minWidth, className, style, ...rest }) {
1961
2218
  }
1962
2219
  );
1963
2220
  }
2221
+ var shortcutKeys = (shortcut) => {
2222
+ if (shortcut == null) return [];
2223
+ const parts = Array.isArray(shortcut) ? shortcut : shortcut.split(/[+\s]+/);
2224
+ return parts.map((part) => part.trim()).filter(Boolean);
2225
+ };
1964
2226
  function MenuItem({
1965
2227
  children,
1966
2228
  icon,
@@ -1970,6 +2232,7 @@ function MenuItem({
1970
2232
  className,
1971
2233
  ...rest
1972
2234
  }) {
2235
+ const keys = shortcutKeys(shortcut);
1973
2236
  return /* @__PURE__ */ jsxs28(
1974
2237
  AriaMenuItem,
1975
2238
  {
@@ -1977,28 +2240,28 @@ function MenuItem({
1977
2240
  "data-tone": tone === "danger" ? "danger" : void 0,
1978
2241
  ...rest,
1979
2242
  children: [
1980
- icon ? /* @__PURE__ */ jsx35(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
2243
+ icon ? /* @__PURE__ */ jsx36(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
1981
2244
  /* @__PURE__ */ jsxs28("span", { className: "pire-menu-item-body", children: [
1982
- /* @__PURE__ */ jsx35("span", { className: "pire-menu-item-label", children }),
1983
- description ? /* @__PURE__ */ jsx35("span", { className: "pire-menu-item-desc", children: description }) : null
2245
+ /* @__PURE__ */ jsx36("span", { className: "pire-menu-item-label", children }),
2246
+ description ? /* @__PURE__ */ jsx36("span", { className: "pire-menu-item-desc", children: description }) : null
1984
2247
  ] }),
1985
- shortcut ? /* @__PURE__ */ jsx35("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
2248
+ keys.length ? /* @__PURE__ */ jsx36("span", { className: "pire-menu-item-shortcut", children: keys.map((cap, index) => /* @__PURE__ */ jsx36(Kbd, { size: "sm", children: cap }, `${cap}-${index}`)) }) : null
1986
2249
  ]
1987
2250
  }
1988
2251
  );
1989
2252
  }
1990
2253
  function MenuSection({ title, children, className, ...rest }) {
1991
2254
  return /* @__PURE__ */ jsxs28(AriaMenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
1992
- title ? /* @__PURE__ */ jsx35(Header, { className: "pire-menu-section-title", children: title }) : null,
2255
+ title ? /* @__PURE__ */ jsx36(Header, { className: "pire-menu-section-title", children: title }) : null,
1993
2256
  children
1994
2257
  ] });
1995
2258
  }
1996
2259
  function MenuSeparator({ className }) {
1997
- return /* @__PURE__ */ jsx35(AriaSeparator2, { className: cx("pire-menu-separator", className) });
2260
+ return /* @__PURE__ */ jsx36(AriaSeparator2, { className: cx("pire-menu-separator", className) });
1998
2261
  }
1999
2262
 
2000
2263
  // src/components/navigation/SideNav.tsx
2001
- import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
2264
+ import { jsx as jsx37, jsxs as jsxs29 } from "react/jsx-runtime";
2002
2265
  function findActiveParent(groups, value) {
2003
2266
  if (value == null) return void 0;
2004
2267
  for (const group of groups) {
@@ -2048,7 +2311,7 @@ function SideNav({
2048
2311
  const renderRow = (item, onPress, isGroup) => {
2049
2312
  const selected = !isGroup && item.id === value;
2050
2313
  const button = /* @__PURE__ */ jsxs29(
2051
- AriaButton10,
2314
+ AriaButton11,
2052
2315
  {
2053
2316
  className: "pire-sidenav-item",
2054
2317
  "data-selected": selected ? "true" : void 0,
@@ -2057,63 +2320,63 @@ function SideNav({
2057
2320
  "aria-label": collapsed ? item.label : void 0,
2058
2321
  onPress,
2059
2322
  children: [
2060
- item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2061
- collapsed ? null : /* @__PURE__ */ jsx36("span", { children: item.label }),
2062
- item.count != null && !collapsed ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: item.count }) : null
2323
+ item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2324
+ collapsed ? null : /* @__PURE__ */ jsx37("span", { children: item.label }),
2325
+ item.count != null && !collapsed ? /* @__PURE__ */ jsx37("span", { className: "pire-sidenav-count", children: item.count }) : null
2063
2326
  ]
2064
2327
  },
2065
2328
  item.id
2066
2329
  );
2067
- return collapsed ? /* @__PURE__ */ jsx36(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2330
+ return collapsed ? /* @__PURE__ */ jsx37(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2068
2331
  };
2069
- const renderRailFlyout = (item) => /* @__PURE__ */ jsxs29(MenuTrigger, { children: [
2070
- /* @__PURE__ */ jsx36(
2071
- AriaButton10,
2332
+ const renderRailFlyout = (item) => /* @__PURE__ */ jsxs29(MenuTrigger2, { children: [
2333
+ /* @__PURE__ */ jsx37(
2334
+ AriaButton11,
2072
2335
  {
2073
2336
  className: "pire-sidenav-item",
2074
2337
  "aria-label": item.label,
2075
2338
  "data-active-child": item.id === activeParent ? "true" : void 0,
2076
- children: item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null
2339
+ children: item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null
2077
2340
  }
2078
2341
  ),
2079
- /* @__PURE__ */ jsx36(Popover6, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ jsx36(
2342
+ /* @__PURE__ */ jsx37(Popover7, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ jsx37(
2080
2343
  Menu,
2081
2344
  {
2082
2345
  "aria-label": item.label,
2083
2346
  className: "pire-sidenav-flyout",
2084
2347
  onAction: (key) => onChange?.(String(key)),
2085
- children: (item.items ?? []).map((child) => /* @__PURE__ */ jsx36(MenuItem, { id: child.id, children: child.label }, child.id))
2348
+ children: (item.items ?? []).map((child) => /* @__PURE__ */ jsx37(MenuItem, { id: child.id, children: child.label }, child.id))
2086
2349
  }
2087
2350
  ) })
2088
2351
  ] }, item.id);
2089
2352
  const renderSection = (item) => /* @__PURE__ */ jsxs29(Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
2090
2353
  /* @__PURE__ */ jsxs29(
2091
- AriaButton10,
2354
+ AriaButton11,
2092
2355
  {
2093
2356
  slot: "trigger",
2094
2357
  className: "pire-sidenav-item",
2095
2358
  "data-kind": "group",
2096
2359
  "data-active-child": item.id === activeParent ? "true" : void 0,
2097
2360
  children: [
2098
- item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2099
- /* @__PURE__ */ jsx36("span", { children: item.label }),
2100
- item.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: item.count }) : null,
2101
- /* @__PURE__ */ jsx36(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2361
+ item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2362
+ /* @__PURE__ */ jsx37("span", { children: item.label }),
2363
+ item.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-sidenav-count", children: item.count }) : null,
2364
+ /* @__PURE__ */ jsx37(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2102
2365
  ]
2103
2366
  }
2104
2367
  ),
2105
- /* @__PURE__ */ jsx36(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2368
+ /* @__PURE__ */ jsx37(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2106
2369
  const selected = child.id === value;
2107
2370
  return /* @__PURE__ */ jsxs29(
2108
- AriaButton10,
2371
+ AriaButton11,
2109
2372
  {
2110
2373
  className: "pire-sidenav-item pire-sidenav-subitem",
2111
2374
  "data-selected": selected ? "true" : void 0,
2112
2375
  "aria-current": selected ? "page" : void 0,
2113
2376
  onPress: () => onChange?.(child.id),
2114
2377
  children: [
2115
- /* @__PURE__ */ jsx36("span", { children: child.label }),
2116
- child.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: child.count }) : null
2378
+ /* @__PURE__ */ jsx37("span", { children: child.label }),
2379
+ child.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-sidenav-count", children: child.count }) : null
2117
2380
  ]
2118
2381
  },
2119
2382
  child.id
@@ -2137,8 +2400,8 @@ function SideNav({
2137
2400
  return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
2138
2401
  });
2139
2402
  return /* @__PURE__ */ jsxs29("div", { className: "pire-sidenav-group", children: [
2140
- group.label && !collapsed ? /* @__PURE__ */ jsx36("div", { className: "pire-sidenav-label", children: group.label }) : null,
2141
- hasSections ? /* @__PURE__ */ jsx36(
2403
+ group.label && !collapsed ? /* @__PURE__ */ jsx37("div", { className: "pire-sidenav-label", children: group.label }) : null,
2404
+ hasSections ? /* @__PURE__ */ jsx37(
2142
2405
  DisclosureGroup,
2143
2406
  {
2144
2407
  className: "pire-sidenav-tree",
@@ -2150,7 +2413,7 @@ function SideNav({
2150
2413
  ) : rows
2151
2414
  ] }, group.label ?? gi);
2152
2415
  }),
2153
- footer ? /* @__PURE__ */ jsx36("div", { className: "pire-sidenav-footer", children: footer }) : null
2416
+ footer ? /* @__PURE__ */ jsx37("div", { className: "pire-sidenav-footer", children: footer }) : null
2154
2417
  ]
2155
2418
  }
2156
2419
  );
@@ -2158,7 +2421,7 @@ function SideNav({
2158
2421
 
2159
2422
  // src/components/navigation/Tabs.tsx
2160
2423
  import { Tabs as AriaTabs, TabList, Tab as AriaTab, TabPanel } from "react-aria-components";
2161
- import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
2424
+ import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
2162
2425
  function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
2163
2426
  return /* @__PURE__ */ jsxs30(
2164
2427
  AriaTabs,
@@ -2169,12 +2432,12 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2169
2432
  defaultSelectedKey: defaultValue,
2170
2433
  onSelectionChange: (k) => onChange?.(String(k)),
2171
2434
  children: [
2172
- /* @__PURE__ */ jsx37(TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ jsxs30(AriaTab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
2173
- item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2435
+ /* @__PURE__ */ jsx38(TabList, { className: "pire-tablist", items, "aria-label": rest["aria-label"] ?? "Views", children: (item) => /* @__PURE__ */ jsxs30(AriaTab, { className: cx("pire-tab"), id: item.id, isDisabled: item.isDisabled, children: [
2436
+ item.icon ? /* @__PURE__ */ jsx38(Icon, { name: item.icon, size: 16 }) : null,
2174
2437
  item.label,
2175
- item.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-tab-count", children: item.count }) : null
2438
+ item.count != null ? /* @__PURE__ */ jsx38("span", { className: "pire-tab-count", children: item.count }) : null
2176
2439
  ] }) }),
2177
- items.map((item) => /* @__PURE__ */ jsx37(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2440
+ items.map((item) => /* @__PURE__ */ jsx38(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2178
2441
  ]
2179
2442
  }
2180
2443
  );
@@ -2182,9 +2445,9 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2182
2445
 
2183
2446
  // src/components/navigation/Breadcrumb.tsx
2184
2447
  import { Breadcrumbs as AriaBreadcrumbs, Breadcrumb as AriaBreadcrumb, Link as Link2 } from "react-aria-components";
2185
- import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
2448
+ import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
2186
2449
  function Breadcrumb({ items, onNavigate, className, style }) {
2187
- return /* @__PURE__ */ jsx38(
2450
+ return /* @__PURE__ */ jsx39(
2188
2451
  AriaBreadcrumbs,
2189
2452
  {
2190
2453
  className: cx("pire-breadcrumbs", className),
@@ -2194,8 +2457,8 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2194
2457
  children: (item) => {
2195
2458
  const last = items[items.length - 1] === item;
2196
2459
  return /* @__PURE__ */ jsxs31(AriaBreadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2197
- last ? item.label : /* @__PURE__ */ jsx38(Link2, { href: item.href, children: item.label }),
2198
- last ? null : /* @__PURE__ */ jsx38(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2460
+ last ? item.label : /* @__PURE__ */ jsx39(Link2, { href: item.href, children: item.label }),
2461
+ last ? null : /* @__PURE__ */ jsx39(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2199
2462
  ] });
2200
2463
  }
2201
2464
  }
@@ -2203,7 +2466,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2203
2466
  }
2204
2467
 
2205
2468
  // src/components/navigation/Pagination.tsx
2206
- import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
2469
+ import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
2207
2470
  function Pagination({
2208
2471
  page = 1,
2209
2472
  pageSize = 25,
@@ -2219,8 +2482,8 @@ function Pagination({
2219
2482
  const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
2220
2483
  const to = Math.min(total, page * pageSize);
2221
2484
  return /* @__PURE__ */ jsxs32("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2222
- /* @__PURE__ */ jsx39("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2223
- /* @__PURE__ */ jsx39(
2485
+ /* @__PURE__ */ jsx40("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2486
+ /* @__PURE__ */ jsx40(
2224
2487
  IconButton,
2225
2488
  {
2226
2489
  icon: "chevron-left",
@@ -2231,8 +2494,8 @@ function Pagination({
2231
2494
  onPress: () => onPageChange?.(page - 1)
2232
2495
  }
2233
2496
  ),
2234
- /* @__PURE__ */ jsx39("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2235
- /* @__PURE__ */ jsx39(
2497
+ /* @__PURE__ */ jsx40("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2498
+ /* @__PURE__ */ jsx40(
2236
2499
  IconButton,
2237
2500
  {
2238
2501
  icon: "chevron-right",
@@ -2243,7 +2506,7 @@ function Pagination({
2243
2506
  onPress: () => onPageChange?.(page + 1)
2244
2507
  }
2245
2508
  ),
2246
- onPageSizeChange ? /* @__PURE__ */ jsx39(
2509
+ onPageSizeChange ? /* @__PURE__ */ jsx40(
2247
2510
  Select,
2248
2511
  {
2249
2512
  "aria-label": msg.paginationRowsPerPage,
@@ -2259,7 +2522,7 @@ function Pagination({
2259
2522
  }
2260
2523
 
2261
2524
  // src/components/feedback/InlineMessage.tsx
2262
- import { jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
2525
+ import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
2263
2526
  var KIND_ICON = {
2264
2527
  info: "info",
2265
2528
  success: "check-circle-2",
@@ -2278,13 +2541,13 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2278
2541
  "aria-live": assertive ? "assertive" : "polite",
2279
2542
  ...rest,
2280
2543
  children: [
2281
- /* @__PURE__ */ jsx40(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2544
+ /* @__PURE__ */ jsx41(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2282
2545
  /* @__PURE__ */ jsxs33("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2283
- title ? /* @__PURE__ */ jsx40("span", { className: "pire-msg-title", children: title }) : null,
2284
- children ? /* @__PURE__ */ jsx40("span", { className: "pire-msg-body", children }) : null,
2546
+ title ? /* @__PURE__ */ jsx41("span", { className: "pire-msg-title", children: title }) : null,
2547
+ children ? /* @__PURE__ */ jsx41("span", { className: "pire-msg-body", children }) : null,
2285
2548
  action
2286
2549
  ] }),
2287
- onClose ? /* @__PURE__ */ jsx40(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2550
+ onClose ? /* @__PURE__ */ jsx41(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2288
2551
  ]
2289
2552
  }
2290
2553
  );
@@ -2292,7 +2555,7 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2292
2555
 
2293
2556
  // src/components/feedback/Toast.tsx
2294
2557
  import * as React12 from "react";
2295
- import { jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
2558
+ import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
2296
2559
  var KIND_ICON2 = {
2297
2560
  info: "info",
2298
2561
  success: "check-circle-2",
@@ -2310,9 +2573,9 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
2310
2573
  "aria-live": kind === "error" ? "assertive" : "polite",
2311
2574
  ...rest,
2312
2575
  children: [
2313
- /* @__PURE__ */ jsx41(Icon, { name: KIND_ICON2[kind], size: 16 }),
2314
- /* @__PURE__ */ jsx41("span", { style: { flex: 1 }, children }),
2315
- onClose ? /* @__PURE__ */ jsx41(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2576
+ /* @__PURE__ */ jsx42(Icon, { name: KIND_ICON2[kind], size: 16 }),
2577
+ /* @__PURE__ */ jsx42("span", { style: { flex: 1 }, children }),
2578
+ onClose ? /* @__PURE__ */ jsx42(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2316
2579
  ]
2317
2580
  }
2318
2581
  );
@@ -2332,7 +2595,7 @@ function ToastProvider({ children, timeout = 6e3 }) {
2332
2595
  const value = React12.useMemo(() => ({ add, close }), [add, close]);
2333
2596
  return /* @__PURE__ */ jsxs34(ToastContext.Provider, { value, children: [
2334
2597
  children,
2335
- /* @__PURE__ */ jsx41("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ jsx41(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
2598
+ /* @__PURE__ */ jsx42("div", { className: "pire-toast-region", role: "region", "aria-label": msg.toastRegionLabel, children: toasts.map((t) => /* @__PURE__ */ jsx42(Toast, { kind: t.kind, onClose: () => close(t.id), style: { position: "static", transform: "none" }, children: t.message }, t.id)) })
2336
2599
  ] });
2337
2600
  }
2338
2601
  function useToast() {
@@ -2342,8 +2605,8 @@ function useToast() {
2342
2605
  }
2343
2606
 
2344
2607
  // src/components/data/KpiTile.tsx
2345
- import { Button as AriaButton11 } from "react-aria-components";
2346
- import { Fragment as Fragment3, jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
2608
+ import { Button as AriaButton12 } from "react-aria-components";
2609
+ import { Fragment as Fragment3, jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
2347
2610
  function KpiTile({
2348
2611
  label,
2349
2612
  value,
@@ -2361,48 +2624,48 @@ function KpiTile({
2361
2624
  const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
2362
2625
  const body = /* @__PURE__ */ jsxs35(Fragment3, { children: [
2363
2626
  /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-label", children: [
2364
- icon ? /* @__PURE__ */ jsx42(Icon, { name: icon, size: 16 }) : null,
2627
+ icon ? /* @__PURE__ */ jsx43(Icon, { name: icon, size: 16 }) : null,
2365
2628
  label
2366
2629
  ] }),
2367
2630
  /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-value", children: [
2368
2631
  value,
2369
- unit ? /* @__PURE__ */ jsx42("span", { className: "pire-kpi-unit", children: unit }) : null
2632
+ unit ? /* @__PURE__ */ jsx43("span", { className: "pire-kpi-unit", children: unit }) : null
2370
2633
  ] }),
2371
2634
  delta ? /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2372
- deltaDirection ? /* @__PURE__ */ jsx42(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2635
+ deltaDirection ? /* @__PURE__ */ jsx43(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2373
2636
  delta
2374
2637
  ] }) : null,
2375
- footnote ? /* @__PURE__ */ jsx42("span", { className: "pire-kpi-foot", children: footnote }) : null
2638
+ footnote ? /* @__PURE__ */ jsx43("span", { className: "pire-kpi-foot", children: footnote }) : null
2376
2639
  ] });
2377
2640
  const props = { className: cx("pire-kpi", className), "data-status": status, style };
2378
- return onPress ? /* @__PURE__ */ jsx42(AriaButton11, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ jsx42("div", { ...props, children: body });
2641
+ return onPress ? /* @__PURE__ */ jsx43(AriaButton12, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ jsx43("div", { ...props, children: body });
2379
2642
  }
2380
2643
 
2381
2644
  // src/components/data/ObjectHeader.tsx
2382
- import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
2645
+ import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
2383
2646
  function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
2384
2647
  return /* @__PURE__ */ jsxs36("header", { className: cx("pire-objheader", className), ...rest, children: [
2385
2648
  breadcrumb,
2386
2649
  /* @__PURE__ */ jsxs36("div", { className: "pire-objheader-row", children: [
2387
2650
  /* @__PURE__ */ jsxs36("div", { style: { minWidth: 0 }, children: [
2388
- /* @__PURE__ */ jsx43("h1", { className: "pire-objheader-title", children: title }),
2651
+ /* @__PURE__ */ jsx44("h1", { className: "pire-objheader-title", children: title }),
2389
2652
  subtitle || id ? /* @__PURE__ */ jsxs36("div", { className: "pire-objheader-sub", children: [
2390
2653
  subtitle,
2391
- id ? /* @__PURE__ */ jsx43("span", { className: "pire-objheader-id", children: id }) : null
2654
+ id ? /* @__PURE__ */ jsx44("span", { className: "pire-objheader-id", children: id }) : null
2392
2655
  ] }) : null
2393
2656
  ] }),
2394
2657
  badge,
2395
- actions ? /* @__PURE__ */ jsx43("div", { className: "pire-objheader-actions", children: actions }) : null
2658
+ actions ? /* @__PURE__ */ jsx44("div", { className: "pire-objheader-actions", children: actions }) : null
2396
2659
  ] }),
2397
- facts?.length ? /* @__PURE__ */ jsx43("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs36("div", { children: [
2398
- /* @__PURE__ */ jsx43("dt", { className: "pire-fact-label", children: fact.label }),
2399
- /* @__PURE__ */ jsx43("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2660
+ facts?.length ? /* @__PURE__ */ jsx44("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs36("div", { children: [
2661
+ /* @__PURE__ */ jsx44("dt", { className: "pire-fact-label", children: fact.label }),
2662
+ /* @__PURE__ */ jsx44("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2400
2663
  ] }, fact.label)) }) : null
2401
2664
  ] });
2402
2665
  }
2403
2666
 
2404
2667
  // src/components/data/FilterBar.tsx
2405
- import { jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
2668
+ import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
2406
2669
  function FilterBar({
2407
2670
  children,
2408
2671
  activeFilters = [],
@@ -2422,21 +2685,21 @@ function FilterBar({
2422
2685
  return /* @__PURE__ */ jsxs37("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2423
2686
  /* @__PURE__ */ jsxs37("div", { className: "pire-filterbar-controls", children: [
2424
2687
  children,
2425
- onGo ? /* @__PURE__ */ jsx44(Button, { variant: "primary", onPress: onGo, children: go }) : null
2688
+ onGo ? /* @__PURE__ */ jsx45(Button, { variant: "primary", onPress: onGo, children: go }) : null
2426
2689
  ] }),
2427
2690
  activeFilters.length || resultLabel || actions ? /* @__PURE__ */ jsxs37("div", { className: "pire-filterbar-foot", children: [
2428
- activeFilters.map((filter) => /* @__PURE__ */ jsx44(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2429
- activeFilters.length && onClear ? /* @__PURE__ */ jsx44(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2430
- resultLabel ? /* @__PURE__ */ jsx44("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2431
- actions ? /* @__PURE__ */ jsx44("div", { className: "pire-filterbar-actions", children: actions }) : null
2691
+ activeFilters.map((filter) => /* @__PURE__ */ jsx45(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2692
+ activeFilters.length && onClear ? /* @__PURE__ */ jsx45(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2693
+ resultLabel ? /* @__PURE__ */ jsx45("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2694
+ actions ? /* @__PURE__ */ jsx45("div", { className: "pire-filterbar-actions", children: actions }) : null
2432
2695
  ] }) : null
2433
2696
  ] });
2434
2697
  }
2435
2698
 
2436
2699
  // src/components/data/DescriptionList.tsx
2437
- import { jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
2700
+ import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
2438
2701
  function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
2439
- return /* @__PURE__ */ jsx45(
2702
+ return /* @__PURE__ */ jsx46(
2440
2703
  "dl",
2441
2704
  {
2442
2705
  className: cx("pire-dl", className),
@@ -2448,20 +2711,20 @@ function DescriptionList({ items, layout = "rows", columns = 3, className, style
2448
2711
  item.label,
2449
2712
  item.hint
2450
2713
  ] }),
2451
- /* @__PURE__ */ jsx45("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2714
+ /* @__PURE__ */ jsx46("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2452
2715
  ] }, i))
2453
2716
  }
2454
2717
  );
2455
2718
  }
2456
2719
 
2457
2720
  // src/components/data/Timeline.tsx
2458
- import { jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
2721
+ import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
2459
2722
  function Timeline({ entries, reverse = false, className, ...rest }) {
2460
2723
  const list = reverse ? [...entries].reverse() : entries;
2461
- return /* @__PURE__ */ jsx46("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs39("li", { className: "pire-timeline-item", children: [
2462
- /* @__PURE__ */ jsx46("span", { className: "pire-timeline-time", children: entry.time }),
2463
- /* @__PURE__ */ jsx46("span", { className: "pire-timeline-text", children: entry.event }),
2464
- entry.actor ? /* @__PURE__ */ jsx46("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2724
+ return /* @__PURE__ */ jsx47("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs39("li", { className: "pire-timeline-item", children: [
2725
+ /* @__PURE__ */ jsx47("span", { className: "pire-timeline-time", children: entry.time }),
2726
+ /* @__PURE__ */ jsx47("span", { className: "pire-timeline-text", children: entry.event }),
2727
+ entry.actor ? /* @__PURE__ */ jsx47("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2465
2728
  ] }, entry.id ?? i)) });
2466
2729
  }
2467
2730
 
@@ -2544,7 +2807,7 @@ function alignToCategories(series, categoryCount) {
2544
2807
  }
2545
2808
 
2546
2809
  // src/components/data/ChartFrame.tsx
2547
- import { jsx as jsx47, jsxs as jsxs40 } from "react/jsx-runtime";
2810
+ import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
2548
2811
  function seriesLegend(series) {
2549
2812
  return series.map((one, index) => ({
2550
2813
  key: one.id,
@@ -2569,27 +2832,27 @@ function ChartFrame({
2569
2832
  const msg = usePireMessages();
2570
2833
  return /* @__PURE__ */ jsxs40("figure", { className: cx("pire-chart", className), style, children: [
2571
2834
  title || description ? /* @__PURE__ */ jsxs40("figcaption", { className: "pire-chart-head", children: [
2572
- title ? /* @__PURE__ */ jsx47("span", { className: "pire-chart-title", children: title }) : null,
2573
- description ? /* @__PURE__ */ jsx47("span", { className: "pire-chart-desc", children: description }) : null
2835
+ title ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-title", children: title }) : null,
2836
+ description ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-desc", children: description }) : null
2574
2837
  ] }) : null,
2575
- legend && legend.length > 1 ? /* @__PURE__ */ jsx47("ul", { className: "pire-chart-legend", children: legend.map((item) => /* @__PURE__ */ jsxs40("li", { className: "pire-chart-legend-item", children: [
2576
- /* @__PURE__ */ jsx47("span", { className: "pire-chart-swatch", style: { background: item.color } }),
2838
+ legend && legend.length > 1 ? /* @__PURE__ */ jsx48("ul", { className: "pire-chart-legend", children: legend.map((item) => /* @__PURE__ */ jsxs40("li", { className: "pire-chart-legend-item", children: [
2839
+ /* @__PURE__ */ jsx48("span", { className: "pire-chart-swatch", style: { background: item.color } }),
2577
2840
  item.label
2578
2841
  ] }, item.key)) }) : null,
2579
- /* @__PURE__ */ jsx47("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2580
- /* @__PURE__ */ jsx47("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ jsxs40("table", { children: [
2581
- /* @__PURE__ */ jsx47("caption", { children: label }),
2582
- /* @__PURE__ */ jsx47("thead", { children: /* @__PURE__ */ jsxs40("tr", { children: [
2583
- /* @__PURE__ */ jsx47("th", { scope: "col", children: msg.chartCategoryHeader }),
2584
- series.map((one) => /* @__PURE__ */ jsx47("th", { scope: "col", children: one.label }, one.id))
2842
+ /* @__PURE__ */ jsx48("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2843
+ /* @__PURE__ */ jsx48("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ jsxs40("table", { children: [
2844
+ /* @__PURE__ */ jsx48("caption", { children: label }),
2845
+ /* @__PURE__ */ jsx48("thead", { children: /* @__PURE__ */ jsxs40("tr", { children: [
2846
+ /* @__PURE__ */ jsx48("th", { scope: "col", children: msg.chartCategoryHeader }),
2847
+ series.map((one) => /* @__PURE__ */ jsx48("th", { scope: "col", children: one.label }, one.id))
2585
2848
  ] }) }),
2586
- /* @__PURE__ */ jsx47("tbody", { children: categories.map((category, categoryIndex) => (
2849
+ /* @__PURE__ */ jsx48("tbody", { children: categories.map((category, categoryIndex) => (
2587
2850
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2588
2851
  /* @__PURE__ */ jsxs40("tr", { children: [
2589
- /* @__PURE__ */ jsx47("th", { scope: "row", children: category }),
2852
+ /* @__PURE__ */ jsx48("th", { scope: "row", children: category }),
2590
2853
  series.map((one) => {
2591
2854
  const value = one.values[categoryIndex];
2592
- return /* @__PURE__ */ jsx47("td", { children: value == null ? msg.chartNoValue : formatValue(value) }, one.id);
2855
+ return /* @__PURE__ */ jsx48("td", { children: value == null ? msg.chartNoValue : formatValue(value) }, one.id);
2593
2856
  })
2594
2857
  ] }, categoryIndex)
2595
2858
  )) })
@@ -2598,7 +2861,7 @@ function ChartFrame({
2598
2861
  }
2599
2862
 
2600
2863
  // src/components/data/BarChart.tsx
2601
- import { jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
2864
+ import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
2602
2865
  function BarChart({
2603
2866
  categories,
2604
2867
  series: rawSeries,
@@ -2630,7 +2893,7 @@ function BarChart({
2630
2893
  const value = series[0].values[categoryIndex];
2631
2894
  return value == null ? msg.chartNoValue : formatValue(value);
2632
2895
  };
2633
- return /* @__PURE__ */ jsx48(
2896
+ return /* @__PURE__ */ jsx49(
2634
2897
  ChartFrame,
2635
2898
  {
2636
2899
  label,
@@ -2643,7 +2906,7 @@ function BarChart({
2643
2906
  showDataTable,
2644
2907
  className,
2645
2908
  style,
2646
- children: !hasData ? /* @__PURE__ */ jsx48("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsx48(
2909
+ children: !hasData ? /* @__PURE__ */ jsx49("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsx49(
2647
2910
  "div",
2648
2911
  {
2649
2912
  className: "pire-chart-bars",
@@ -2653,8 +2916,8 @@ function BarChart({
2653
2916
  children: categories.map((category, categoryIndex) => (
2654
2917
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2655
2918
  /* @__PURE__ */ jsxs41("div", { className: "pire-chart-group", children: [
2656
- /* @__PURE__ */ jsx48("span", { className: "pire-chart-cat", children: category }),
2657
- /* @__PURE__ */ jsx48("div", { className: "pire-chart-track", children: series.map((one, seriesIndex) => {
2919
+ /* @__PURE__ */ jsx49("span", { className: "pire-chart-cat", children: category }),
2920
+ /* @__PURE__ */ jsx49("div", { className: "pire-chart-track", children: series.map((one, seriesIndex) => {
2658
2921
  const value = one.values[categoryIndex];
2659
2922
  if (value == null) return null;
2660
2923
  return /* @__PURE__ */ jsxs41(
@@ -2666,7 +2929,7 @@ function BarChart({
2666
2929
  "--pire-bar-color": seriesColor(one, seriesIndex)
2667
2930
  },
2668
2931
  children: [
2669
- withValues && orientation === "vertical" ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2932
+ withValues && orientation === "vertical" ? /* @__PURE__ */ jsx49("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2670
2933
  /* @__PURE__ */ jsxs41("span", { className: "pire-chart-tip", role: "presentation", children: [
2671
2934
  series.length > 1 ? `${one.label}: ` : "",
2672
2935
  formatValue(value)
@@ -2676,7 +2939,7 @@ function BarChart({
2676
2939
  one.id
2677
2940
  );
2678
2941
  }) }),
2679
- withValues && orientation === "horizontal" ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-val", children: horizontalLabelFor(categoryIndex) }) : null
2942
+ withValues && orientation === "horizontal" ? /* @__PURE__ */ jsx49("span", { className: "pire-chart-val", children: horizontalLabelFor(categoryIndex) }) : null
2680
2943
  ] }, categoryIndex)
2681
2944
  ))
2682
2945
  }
@@ -2687,7 +2950,7 @@ function BarChart({
2687
2950
 
2688
2951
  // src/components/data/LineChart.tsx
2689
2952
  import * as React13 from "react";
2690
- import { jsx as jsx49, jsxs as jsxs42 } from "react/jsx-runtime";
2953
+ import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
2691
2954
  var PLOT_INSET = { top: 10, right: 14, bottom: 24, left: 58 };
2692
2955
  var MARKER_LIMIT = 20;
2693
2956
  var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? React13.useEffect : React13.useLayoutEffect;
@@ -2754,7 +3017,7 @@ function LineChart({
2754
3017
  return `M${xAt(present[0].index)} ${baseline} L${line} L${xAt(last.index)} ${baseline} Z`;
2755
3018
  };
2756
3019
  const labelEvery = Math.max(1, Math.ceil(categories.length / Math.max(2, Math.floor(innerWidth / 64))));
2757
- return /* @__PURE__ */ jsx49(
3020
+ return /* @__PURE__ */ jsx50(
2758
3021
  ChartFrame,
2759
3022
  {
2760
3023
  label,
@@ -2767,7 +3030,7 @@ function LineChart({
2767
3030
  showDataTable,
2768
3031
  className,
2769
3032
  style,
2770
- children: !hasData ? /* @__PURE__ */ jsx49("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsxs42("div", { className: "pire-chart-lines", ref: plotRef, style: { height }, children: [
3033
+ children: !hasData ? /* @__PURE__ */ jsx50("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsxs42("div", { className: "pire-chart-lines", ref: plotRef, style: { height }, children: [
2771
3034
  width > 0 ? /* @__PURE__ */ jsxs42(
2772
3035
  "svg",
2773
3036
  {
@@ -2777,7 +3040,7 @@ function LineChart({
2777
3040
  "aria-hidden": "true",
2778
3041
  focusable: "false",
2779
3042
  children: [
2780
- /* @__PURE__ */ jsx49("g", { className: "pire-chart-grid", children: scale.ticks.map((tick) => /* @__PURE__ */ jsx49(
3043
+ /* @__PURE__ */ jsx50("g", { className: "pire-chart-grid", children: scale.ticks.map((tick) => /* @__PURE__ */ jsx50(
2781
3044
  "line",
2782
3045
  {
2783
3046
  x1: PLOT_INSET.left,
@@ -2788,7 +3051,7 @@ function LineChart({
2788
3051
  tick
2789
3052
  )) }),
2790
3053
  /* @__PURE__ */ jsxs42("g", { className: "pire-chart-tick", children: [
2791
- scale.ticks.map((tick) => /* @__PURE__ */ jsx49(
3054
+ scale.ticks.map((tick) => /* @__PURE__ */ jsx50(
2792
3055
  "text",
2793
3056
  {
2794
3057
  x: PLOT_INSET.left - 8,
@@ -2801,10 +3064,10 @@ function LineChart({
2801
3064
  )),
2802
3065
  categories.map((category, index) => index % labelEvery === 0 ? (
2803
3066
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2804
- /* @__PURE__ */ jsx49("text", { x: xAt(index), y: height - 6, textAnchor: "middle", children: category }, index)
3067
+ /* @__PURE__ */ jsx50("text", { x: xAt(index), y: height - 6, textAnchor: "middle", children: category }, index)
2805
3068
  ) : null)
2806
3069
  ] }),
2807
- showArea && series[0] ? /* @__PURE__ */ jsx49(
3070
+ showArea && series[0] ? /* @__PURE__ */ jsx50(
2808
3071
  "path",
2809
3072
  {
2810
3073
  d: areaFor(series[0].values),
@@ -2812,10 +3075,10 @@ function LineChart({
2812
3075
  style: { fill: seriesColor(series[0], 0) }
2813
3076
  }
2814
3077
  ) : null,
2815
- /* @__PURE__ */ jsx49("g", { className: "pire-chart-line", fill: "none", children: series.map((one, index) => /* @__PURE__ */ jsx49("path", { d: pathFor(one.values), stroke: seriesColor(one, index) }, one.id)) }),
2816
- withMarkers ? /* @__PURE__ */ jsx49("g", { className: "pire-chart-marker", children: series.map((one, seriesIndex) => one.values.map((value, index) => value == null ? null : (
3078
+ /* @__PURE__ */ jsx50("g", { className: "pire-chart-line", fill: "none", children: series.map((one, index) => /* @__PURE__ */ jsx50("path", { d: pathFor(one.values), stroke: seriesColor(one, index) }, one.id)) }),
3079
+ withMarkers ? /* @__PURE__ */ jsx50("g", { className: "pire-chart-marker", children: series.map((one, seriesIndex) => one.values.map((value, index) => value == null ? null : (
2817
3080
  // biome-ignore lint/suspicious/noArrayIndexKey: a series is positional — the index is the point's identity, and category labels repeat.
2818
- /* @__PURE__ */ jsx49(
3081
+ /* @__PURE__ */ jsx50(
2819
3082
  "circle",
2820
3083
  {
2821
3084
  cx: xAt(index),
@@ -2829,15 +3092,15 @@ function LineChart({
2829
3092
  ]
2830
3093
  }
2831
3094
  ) : null,
2832
- /* @__PURE__ */ jsx49(
3095
+ /* @__PURE__ */ jsx50(
2833
3096
  "div",
2834
3097
  {
2835
3098
  className: "pire-chart-hover",
2836
3099
  style: { inset: `${PLOT_INSET.top}px ${PLOT_INSET.right}px ${PLOT_INSET.bottom}px ${PLOT_INSET.left}px` },
2837
3100
  children: categories.map((category, categoryIndex) => (
2838
3101
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2839
- /* @__PURE__ */ jsx49("div", { className: "pire-chart-band", children: /* @__PURE__ */ jsxs42("span", { className: "pire-chart-tip", role: "presentation", children: [
2840
- /* @__PURE__ */ jsx49("strong", { children: category }),
3102
+ /* @__PURE__ */ jsx50("div", { className: "pire-chart-band", children: /* @__PURE__ */ jsxs42("span", { className: "pire-chart-tip", role: "presentation", children: [
3103
+ /* @__PURE__ */ jsx50("strong", { children: category }),
2841
3104
  series.map((one) => {
2842
3105
  const value = one.values[categoryIndex];
2843
3106
  return /* @__PURE__ */ jsxs42("span", { className: "pire-chart-tip-row", children: [
@@ -2857,7 +3120,7 @@ function LineChart({
2857
3120
 
2858
3121
  // src/components/data/DonutChart.tsx
2859
3122
  import * as React14 from "react";
2860
- import { jsx as jsx50, jsxs as jsxs43 } from "react/jsx-runtime";
3123
+ import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
2861
3124
  var SEGMENT_GAP_DEGREES = 1.5;
2862
3125
  function DonutChart({
2863
3126
  categories,
@@ -2894,7 +3157,7 @@ function DonutChart({
2894
3157
  }));
2895
3158
  const hovered = hoveredIndex == null ? null : segments.find((segment) => segment.index === hoveredIndex) ?? null;
2896
3159
  let arcStart = 0;
2897
- return /* @__PURE__ */ jsx50(
3160
+ return /* @__PURE__ */ jsx51(
2898
3161
  ChartFrame,
2899
3162
  {
2900
3163
  label,
@@ -2907,8 +3170,8 @@ function DonutChart({
2907
3170
  showDataTable,
2908
3171
  className,
2909
3172
  style,
2910
- children: !hasData ? /* @__PURE__ */ jsx50("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsxs43("div", { className: "pire-chart-donut", style: { height: size }, children: [
2911
- /* @__PURE__ */ jsx50(
3173
+ children: !hasData ? /* @__PURE__ */ jsx51("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsxs43("div", { className: "pire-chart-donut", style: { height: size }, children: [
3174
+ /* @__PURE__ */ jsx51(
2912
3175
  "svg",
2913
3176
  {
2914
3177
  width: size,
@@ -2916,13 +3179,13 @@ function DonutChart({
2916
3179
  "aria-hidden": "true",
2917
3180
  focusable: "false",
2918
3181
  onMouseLeave: () => setHoveredIndex(null),
2919
- children: /* @__PURE__ */ jsx50("g", { transform: `rotate(-90 ${size / 2} ${size / 2})`, children: segments.map((segment) => {
3182
+ children: /* @__PURE__ */ jsx51("g", { transform: `rotate(-90 ${size / 2} ${size / 2})`, children: segments.map((segment) => {
2920
3183
  const arcLength = segment.value / total * circumference;
2921
3184
  const offset = arcStart;
2922
3185
  arcStart += arcLength;
2923
3186
  return (
2924
3187
  // 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.
2925
- /* @__PURE__ */ jsx50(
3188
+ /* @__PURE__ */ jsx51(
2926
3189
  "circle",
2927
3190
  {
2928
3191
  className: "pire-chart-arc",
@@ -2943,8 +3206,8 @@ function DonutChart({
2943
3206
  }
2944
3207
  ),
2945
3208
  /* @__PURE__ */ jsxs43("div", { className: "pire-chart-donut-center", style: { width: size - thickness * 2 - 8 }, children: [
2946
- /* @__PURE__ */ jsx50("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
2947
- /* @__PURE__ */ jsx50("span", { className: "pire-chart-donut-caption", children: hovered ? hovered.category : centerCaption })
3209
+ /* @__PURE__ */ jsx51("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
3210
+ /* @__PURE__ */ jsx51("span", { className: "pire-chart-donut-caption", children: hovered ? hovered.category : centerCaption })
2948
3211
  ] })
2949
3212
  ] })
2950
3213
  }
@@ -2955,19 +3218,24 @@ function colorForSegment(index) {
2955
3218
  }
2956
3219
 
2957
3220
  // src/components/data/LinkList.tsx
2958
- import { Button as AriaButton12 } from "react-aria-components";
2959
- import { jsx as jsx51, jsxs as jsxs44 } from "react/jsx-runtime";
2960
- function LinkList({ items, onSelect, className, ...rest }) {
2961
- return /* @__PURE__ */ jsx51("div", { className: cx("pire-linklist", className), role: "list", ...rest, children: items.map((item) => /* @__PURE__ */ jsx51("div", { role: "listitem", className: "pire-linklist-row", children: /* @__PURE__ */ jsxs44(AriaButton12, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
2962
- item.icon ? /* @__PURE__ */ jsx51(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
2963
- item.key ? /* @__PURE__ */ jsx51("span", { className: "pire-linklist-key", children: item.key }) : null,
2964
- item.text ? /* @__PURE__ */ jsx51("span", { className: "pire-linklist-text", children: item.text }) : null,
2965
- item.trailing
2966
- ] }) }, item.id)) });
3221
+ import { Button as AriaButton13 } from "react-aria-components";
3222
+ import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
3223
+ function LinkList({ items, onSelect, emphasis = "key", className, ...rest }) {
3224
+ return /* @__PURE__ */ jsx52("div", { className: cx("pire-linklist", className), role: "list", "data-emphasis": emphasis, ...rest, children: items.map((item) => {
3225
+ const keySlot = item.key ? /* @__PURE__ */ jsx52("span", { className: "pire-linklist-key", children: item.key }) : null;
3226
+ const textSlot = item.text ? /* @__PURE__ */ jsx52("span", { className: "pire-linklist-text", children: item.text }) : null;
3227
+ const [first, second] = emphasis === "text" ? [textSlot, keySlot] : [keySlot, textSlot];
3228
+ return /* @__PURE__ */ jsx52("div", { role: "listitem", className: "pire-linklist-row", children: /* @__PURE__ */ jsxs44(AriaButton13, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
3229
+ item.icon ? /* @__PURE__ */ jsx52(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
3230
+ first,
3231
+ second,
3232
+ item.trailing
3233
+ ] }) }, item.id);
3234
+ }) });
2967
3235
  }
2968
3236
 
2969
3237
  // src/components/layout/PageBand.tsx
2970
- import { jsx as jsx52 } from "react/jsx-runtime";
3238
+ import { jsx as jsx53 } from "react/jsx-runtime";
2971
3239
  function PageBand({
2972
3240
  surface = "card",
2973
3241
  hasBorder = true,
@@ -2975,7 +3243,7 @@ function PageBand({
2975
3243
  className,
2976
3244
  ...rest
2977
3245
  }) {
2978
- return /* @__PURE__ */ jsx52(
3246
+ return /* @__PURE__ */ jsx53(
2979
3247
  "div",
2980
3248
  {
2981
3249
  className: cx("pire-pageband", className),
@@ -2988,29 +3256,29 @@ function PageBand({
2988
3256
  }
2989
3257
 
2990
3258
  // src/components/layout/PageHeader.tsx
2991
- import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
3259
+ import { jsx as jsx54, jsxs as jsxs45 } from "react/jsx-runtime";
2992
3260
  function PageHeader({ title, subtitle, actions, className, ...rest }) {
2993
3261
  return /* @__PURE__ */ jsxs45("header", { className: cx("pire-pageheader", className), ...rest, children: [
2994
3262
  /* @__PURE__ */ jsxs45("div", { style: { minWidth: 0 }, children: [
2995
- /* @__PURE__ */ jsx53("h1", { className: "pire-pageheader-title", children: title }),
2996
- subtitle ? /* @__PURE__ */ jsx53("p", { className: "pire-pageheader-sub", children: subtitle }) : null
3263
+ /* @__PURE__ */ jsx54("h1", { className: "pire-pageheader-title", children: title }),
3264
+ subtitle ? /* @__PURE__ */ jsx54("p", { className: "pire-pageheader-sub", children: subtitle }) : null
2997
3265
  ] }),
2998
- actions ? /* @__PURE__ */ jsx53("div", { className: "pire-pageheader-actions", children: actions }) : null
3266
+ actions ? /* @__PURE__ */ jsx54("div", { className: "pire-pageheader-actions", children: actions }) : null
2999
3267
  ] });
3000
3268
  }
3001
3269
 
3002
3270
  // src/components/layout/SectionHeader.tsx
3003
- import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
3271
+ import { jsx as jsx55, jsxs as jsxs46 } from "react/jsx-runtime";
3004
3272
  function SectionHeader({ title, meta, actions, className, ...rest }) {
3005
3273
  return /* @__PURE__ */ jsxs46("div", { className: cx("pire-sectionhead", className), ...rest, children: [
3006
- /* @__PURE__ */ jsx54("span", { className: "pire-eyebrow", children: title }),
3007
- meta ? /* @__PURE__ */ jsx54("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3008
- actions ? /* @__PURE__ */ jsx54("div", { className: "pire-sectionhead-actions", children: actions }) : null
3274
+ /* @__PURE__ */ jsx55("span", { className: "pire-eyebrow", children: title }),
3275
+ meta ? /* @__PURE__ */ jsx55("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3276
+ actions ? /* @__PURE__ */ jsx55("div", { className: "pire-sectionhead-actions", children: actions }) : null
3009
3277
  ] });
3010
3278
  }
3011
3279
 
3012
3280
  // src/components/layout/SelectionBar.tsx
3013
- import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
3281
+ import { jsx as jsx56, jsxs as jsxs47 } from "react/jsx-runtime";
3014
3282
  function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
3015
3283
  if (!count) return null;
3016
3284
  return /* @__PURE__ */ jsxs47("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
@@ -3021,23 +3289,23 @@ function SelectionBar({ count, noun = "record", children, actions, className, ..
3021
3289
  count === 1 ? "" : "s",
3022
3290
  " selected"
3023
3291
  ] }),
3024
- children ? /* @__PURE__ */ jsx55("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3025
- actions ? /* @__PURE__ */ jsx55("div", { className: "pire-selectionbar-actions", children: actions }) : null
3292
+ children ? /* @__PURE__ */ jsx56("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3293
+ actions ? /* @__PURE__ */ jsx56("div", { className: "pire-selectionbar-actions", children: actions }) : null
3026
3294
  ] });
3027
3295
  }
3028
3296
 
3029
3297
  // src/components/layout/FooterBar.tsx
3030
- import { jsx as jsx56, jsxs as jsxs48 } from "react/jsx-runtime";
3298
+ import { jsx as jsx57, jsxs as jsxs48 } from "react/jsx-runtime";
3031
3299
  function FooterBar({ note, actions, children, className, ...rest }) {
3032
3300
  return /* @__PURE__ */ jsxs48("footer", { className: cx("pire-footerbar", className), ...rest, children: [
3033
- note ? /* @__PURE__ */ jsx56("span", { className: "pire-footerbar-note", children: note }) : null,
3301
+ note ? /* @__PURE__ */ jsx57("span", { className: "pire-footerbar-note", children: note }) : null,
3034
3302
  children,
3035
- actions ? /* @__PURE__ */ jsx56("div", { className: "pire-footerbar-actions", children: actions }) : null
3303
+ actions ? /* @__PURE__ */ jsx57("div", { className: "pire-footerbar-actions", children: actions }) : null
3036
3304
  ] });
3037
3305
  }
3038
3306
 
3039
3307
  // src/components/patterns/ConfirmDialog.tsx
3040
- import { Fragment as Fragment4, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
3308
+ import { Fragment as Fragment4, jsx as jsx58, jsxs as jsxs49 } from "react/jsx-runtime";
3041
3309
  function ConfirmDialog({
3042
3310
  isOpen,
3043
3311
  title,
@@ -3062,24 +3330,167 @@ function ConfirmDialog({
3062
3330
  isDismissable: !isBusy,
3063
3331
  showClose: false,
3064
3332
  footer: /* @__PURE__ */ jsxs49(Fragment4, { children: [
3065
- /* @__PURE__ */ jsx57(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3066
- /* @__PURE__ */ jsx57(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
3333
+ /* @__PURE__ */ jsx58(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3334
+ /* @__PURE__ */ jsx58(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
3067
3335
  ] }),
3068
3336
  children: [
3069
- consequence ? /* @__PURE__ */ jsx57(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
3337
+ consequence ? /* @__PURE__ */ jsx58(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
3070
3338
  children
3071
3339
  ]
3072
3340
  }
3073
3341
  );
3074
3342
  }
3075
3343
 
3344
+ // src/components/patterns/CommandPalette.tsx
3345
+ import * as React15 from "react";
3346
+ import {
3347
+ Autocomplete,
3348
+ ModalOverlay as ModalOverlay2,
3349
+ Modal as Modal2,
3350
+ Dialog as AriaDialog4,
3351
+ SearchField,
3352
+ Input as AriaInput5,
3353
+ Menu as AriaMenu2,
3354
+ MenuSection as AriaMenuSection2,
3355
+ Header as Header2,
3356
+ useFilter
3357
+ } from "react-aria-components";
3358
+ import { Fragment as Fragment5, jsx as jsx59, jsxs as jsxs50 } from "react/jsx-runtime";
3359
+ var RESULTS_SECTION_KEY = "__pire_results__";
3360
+ var searchableText = (item) => [item.label, item.description, item.keywords].filter(Boolean).join(" ");
3361
+ function CommandPalette({
3362
+ isOpen,
3363
+ onOpenChange,
3364
+ groups = [],
3365
+ resultsGroup,
3366
+ onAction,
3367
+ onSearch,
3368
+ isLoading,
3369
+ emptyLabel,
3370
+ loadingLabel,
3371
+ placeholder,
3372
+ footer,
3373
+ showFooter = true,
3374
+ "aria-label": ariaLabel,
3375
+ className,
3376
+ style
3377
+ }) {
3378
+ const msg = usePireMessages();
3379
+ const [query, setQuery] = React15.useState("");
3380
+ const { contains } = useFilter({ sensitivity: "base" });
3381
+ React15.useEffect(() => {
3382
+ if (isOpen) setQuery("");
3383
+ }, [isOpen]);
3384
+ const searchableById = React15.useMemo(() => {
3385
+ const byId = /* @__PURE__ */ new Map();
3386
+ for (const group of groups) for (const item of group.items) byId.set(item.id, searchableText(item));
3387
+ return byId;
3388
+ }, [groups]);
3389
+ const filter = React15.useCallback((textValue, inputValue, node) => {
3390
+ if (node.parentKey === RESULTS_SECTION_KEY) return true;
3391
+ return contains(searchableById.get(String(node.key)) ?? textValue, inputValue);
3392
+ }, [contains, searchableById]);
3393
+ const handleInputChange = (value) => {
3394
+ setQuery(value);
3395
+ onSearch?.(value);
3396
+ };
3397
+ const sections = [...groups, ...resultsGroup ? [{ ...resultsGroup, id: RESULTS_SECTION_KEY }] : []];
3398
+ const status = isLoading ? loadingLabel ?? msg.commandPaletteLoading : emptyLabel ?? msg.commandPaletteEmpty;
3399
+ return /* @__PURE__ */ jsx59(
3400
+ ModalOverlay2,
3401
+ {
3402
+ className: "pire-cp-overlay",
3403
+ isOpen,
3404
+ isDismissable: true,
3405
+ onOpenChange: (open) => {
3406
+ if (!open) onOpenChange?.(false);
3407
+ },
3408
+ children: /* @__PURE__ */ jsx59(Modal2, { className: cx("pire-cp-modal", className), style, children: /* @__PURE__ */ jsxs50(AriaDialog4, { className: "pire-cp-dialog", "aria-label": ariaLabel ?? msg.commandPaletteLabel, children: [
3409
+ /* @__PURE__ */ jsxs50(Autocomplete, { filter, inputValue: query, onInputChange: handleInputChange, children: [
3410
+ /* @__PURE__ */ jsxs50(SearchField, { className: "pire-cp-search", "aria-label": msg.commandPaletteSearchLabel, children: [
3411
+ /* @__PURE__ */ jsx59(Icon, { name: "search", size: 18, className: "pire-cp-search-icon" }),
3412
+ /* @__PURE__ */ jsx59(
3413
+ AriaInput5,
3414
+ {
3415
+ className: "pire-cp-input",
3416
+ autoFocus: true,
3417
+ placeholder: placeholder ?? msg.commandPalettePlaceholder
3418
+ }
3419
+ )
3420
+ ] }),
3421
+ isLoading ? /* @__PURE__ */ jsx59("div", { className: "pire-cp-loading", role: "status", "aria-live": "polite", children: loadingLabel ?? msg.commandPaletteLoading }) : null,
3422
+ /* @__PURE__ */ jsx59(
3423
+ AriaMenu2,
3424
+ {
3425
+ className: "pire-cp-list",
3426
+ onAction: (key) => onAction?.(String(key)),
3427
+ renderEmptyState: () => /* @__PURE__ */ jsx59("div", { className: "pire-cp-status", children: status }),
3428
+ children: sections.map((section) => /* @__PURE__ */ jsxs50(AriaMenuSection2, { id: section.id, className: "pire-cp-section", children: [
3429
+ section.label ? /* @__PURE__ */ jsx59(Header2, { className: "pire-cp-section-title", children: section.label }) : null,
3430
+ section.items.map((item) => /* @__PURE__ */ jsx59(
3431
+ MenuItem,
3432
+ {
3433
+ id: item.id,
3434
+ textValue: item.label,
3435
+ icon: item.icon,
3436
+ description: item.description,
3437
+ shortcut: item.shortcut,
3438
+ isDisabled: item.isDisabled,
3439
+ children: item.label
3440
+ },
3441
+ item.id
3442
+ ))
3443
+ ] }, section.id))
3444
+ }
3445
+ )
3446
+ ] }),
3447
+ showFooter ? (
3448
+ // aria-hidden: the glyphs are a sighted affordance for discovering the keys. A screen
3449
+ // reader already announces the listbox semantics that make those keys work, so reading
3450
+ // "up arrow down arrow navigate" out loud is noise on every open.
3451
+ /* @__PURE__ */ jsx59("div", { className: "pire-cp-foot", "aria-hidden": "true", children: footer ?? /* @__PURE__ */ jsxs50(Fragment5, { children: [
3452
+ /* @__PURE__ */ jsxs50("span", { className: "pire-cp-hint", children: [
3453
+ /* @__PURE__ */ jsx59(Kbd, { children: "\u2191" }),
3454
+ /* @__PURE__ */ jsx59(Kbd, { children: "\u2193" }),
3455
+ msg.commandPaletteHintNavigate
3456
+ ] }),
3457
+ /* @__PURE__ */ jsxs50("span", { className: "pire-cp-hint", children: [
3458
+ /* @__PURE__ */ jsx59(Kbd, { children: "\u21B5" }),
3459
+ msg.commandPaletteHintSelect
3460
+ ] }),
3461
+ /* @__PURE__ */ jsxs50("span", { className: "pire-cp-hint", children: [
3462
+ /* @__PURE__ */ jsx59(Kbd, { children: "esc" }),
3463
+ msg.commandPaletteHintClose
3464
+ ] })
3465
+ ] }) })
3466
+ ) : null
3467
+ ] }) })
3468
+ }
3469
+ );
3470
+ }
3471
+ function useCommandPaletteShortcut(onTrigger, { key = "k", isDisabled } = {}) {
3472
+ const handler = React15.useRef(onTrigger);
3473
+ handler.current = onTrigger;
3474
+ React15.useEffect(() => {
3475
+ if (isDisabled) return;
3476
+ const onKeyDown = (event) => {
3477
+ if (!(event.metaKey || event.ctrlKey) || event.altKey) return;
3478
+ if (event.key.toLowerCase() !== key.toLowerCase()) return;
3479
+ event.preventDefault();
3480
+ handler.current();
3481
+ };
3482
+ document.addEventListener("keydown", onKeyDown);
3483
+ return () => document.removeEventListener("keydown", onKeyDown);
3484
+ }, [key, isDisabled]);
3485
+ }
3486
+
3076
3487
  // src/components/patterns/SidePanel.tsx
3077
- import { ModalOverlay as ModalOverlay2, Modal as Modal2, Dialog as AriaDialog4, Heading as Heading5 } from "react-aria-components";
3078
- import { jsx as jsx58, jsxs as jsxs50 } from "react/jsx-runtime";
3488
+ import { ModalOverlay as ModalOverlay3, Modal as Modal3, Dialog as AriaDialog5, Heading as Heading5 } from "react-aria-components";
3489
+ import { jsx as jsx60, jsxs as jsxs51 } from "react/jsx-runtime";
3079
3490
  function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
3080
3491
  const msg = usePireMessages();
3081
- return /* @__PURE__ */ jsx58(
3082
- ModalOverlay2,
3492
+ return /* @__PURE__ */ jsx60(
3493
+ ModalOverlay3,
3083
3494
  {
3084
3495
  className: "pire-sidepanel-overlay",
3085
3496
  isOpen,
@@ -3087,36 +3498,36 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
3087
3498
  onOpenChange: (o) => {
3088
3499
  if (!o) onClose?.();
3089
3500
  },
3090
- children: /* @__PURE__ */ jsx58(Modal2, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs50(AriaDialog4, { className: "pire-dialog", style: { height: "100%" }, children: [
3091
- /* @__PURE__ */ jsxs50("header", { className: "pire-dialog-head", children: [
3092
- /* @__PURE__ */ jsxs50("div", { style: { flex: 1, minWidth: 0 }, children: [
3093
- /* @__PURE__ */ jsx58(Heading5, { slot: "title", className: "pire-dialog-title", children: title }),
3094
- subtitle ? /* @__PURE__ */ jsx58("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
3501
+ children: /* @__PURE__ */ jsx60(Modal3, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs51(AriaDialog5, { className: "pire-dialog", style: { height: "100%" }, children: [
3502
+ /* @__PURE__ */ jsxs51("header", { className: "pire-dialog-head", children: [
3503
+ /* @__PURE__ */ jsxs51("div", { style: { flex: 1, minWidth: 0 }, children: [
3504
+ /* @__PURE__ */ jsx60(Heading5, { slot: "title", className: "pire-dialog-title", children: title }),
3505
+ subtitle ? /* @__PURE__ */ jsx60("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
3095
3506
  ] }),
3096
- /* @__PURE__ */ jsx58(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
3507
+ /* @__PURE__ */ jsx60(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
3097
3508
  ] }),
3098
- /* @__PURE__ */ jsx58("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3099
- footer ? /* @__PURE__ */ jsx58("footer", { className: "pire-dialog-foot", children: footer }) : null
3509
+ /* @__PURE__ */ jsx60("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3510
+ footer ? /* @__PURE__ */ jsx60("footer", { className: "pire-dialog-foot", children: footer }) : null
3100
3511
  ] }) })
3101
3512
  }
3102
3513
  );
3103
3514
  }
3104
3515
 
3105
3516
  // src/components/patterns/EmptyState.tsx
3106
- import { jsx as jsx59, jsxs as jsxs51 } from "react/jsx-runtime";
3517
+ import { jsx as jsx61, jsxs as jsxs52 } from "react/jsx-runtime";
3107
3518
  function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
3108
- return /* @__PURE__ */ jsxs51("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3109
- /* @__PURE__ */ jsx59(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3110
- title ? /* @__PURE__ */ jsx59("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3111
- children ? /* @__PURE__ */ jsx59("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
3519
+ return /* @__PURE__ */ jsxs52("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3520
+ /* @__PURE__ */ jsx61(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3521
+ title ? /* @__PURE__ */ jsx61("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3522
+ children ? /* @__PURE__ */ jsx61("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
3112
3523
  action
3113
3524
  ] });
3114
3525
  }
3115
3526
 
3116
3527
  // src/components/patterns/FileDropZone.tsx
3117
- import * as React15 from "react";
3528
+ import * as React16 from "react";
3118
3529
  import { DropZone, FileTrigger as FileTrigger2, isFileDropItem } from "react-aria-components";
3119
- import { jsx as jsx60, jsxs as jsxs52 } from "react/jsx-runtime";
3530
+ import { jsx as jsx62, jsxs as jsxs53 } from "react/jsx-runtime";
3120
3531
  var isImage2 = (file) => file.type.startsWith("image/");
3121
3532
  function FileDropZone({
3122
3533
  label,
@@ -3142,10 +3553,10 @@ function FileDropZone({
3142
3553
  style
3143
3554
  }) {
3144
3555
  const msg = usePireMessages();
3145
- const [uncontrolled, setUncontrolled] = React15.useState(defaultValue ?? []);
3556
+ const [uncontrolled, setUncontrolled] = React16.useState(defaultValue ?? []);
3146
3557
  const files = value ?? uncontrolled;
3147
- const created = React15.useRef([]);
3148
- React15.useEffect(() => () => {
3558
+ const created = React16.useRef([]);
3559
+ React16.useEffect(() => () => {
3149
3560
  for (const url of created.current) URL.revokeObjectURL(url);
3150
3561
  }, []);
3151
3562
  const commit = (next) => {
@@ -3165,12 +3576,12 @@ function FileDropZone({
3165
3576
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
3166
3577
  };
3167
3578
  const remove = (target) => commit(files.filter((f) => f.file !== target));
3168
- return /* @__PURE__ */ jsxs52("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3169
- label ? /* @__PURE__ */ jsxs52("span", { className: "pire-field-label", children: [
3579
+ return /* @__PURE__ */ jsxs53("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3580
+ label ? /* @__PURE__ */ jsxs53("span", { className: "pire-field-label", children: [
3170
3581
  label,
3171
- isRequired ? /* @__PURE__ */ jsx60("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
3582
+ isRequired ? /* @__PURE__ */ jsx62("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
3172
3583
  ] }) : null,
3173
- /* @__PURE__ */ jsxs52(
3584
+ /* @__PURE__ */ jsxs53(
3174
3585
  DropZone,
3175
3586
  {
3176
3587
  className: "pire-dropzone",
@@ -3183,25 +3594,25 @@ function FileDropZone({
3183
3594
  accept(dropped);
3184
3595
  },
3185
3596
  children: [
3186
- /* @__PURE__ */ jsx60(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3187
- /* @__PURE__ */ jsx60("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3188
- /* @__PURE__ */ jsx60(
3597
+ /* @__PURE__ */ jsx62(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3598
+ /* @__PURE__ */ jsx62("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3599
+ /* @__PURE__ */ jsx62(
3189
3600
  FileTrigger2,
3190
3601
  {
3191
3602
  acceptedFileTypes,
3192
3603
  allowsMultiple,
3193
3604
  onSelect: (list) => accept(list ? [...list] : []),
3194
- children: /* @__PURE__ */ jsx60(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
3605
+ children: /* @__PURE__ */ jsx62(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
3195
3606
  }
3196
3607
  )
3197
3608
  ]
3198
3609
  }
3199
3610
  ),
3200
- files.length ? /* @__PURE__ */ jsx60("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs52("li", { className: "pire-fileupload-item", children: [
3201
- previewUrl ? /* @__PURE__ */ jsx60("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx60(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
3202
- /* @__PURE__ */ jsx60("span", { className: "pire-fileupload-name", children: file.name }),
3203
- /* @__PURE__ */ jsx60("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3204
- isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx60(
3611
+ files.length ? /* @__PURE__ */ jsx62("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs53("li", { className: "pire-fileupload-item", children: [
3612
+ previewUrl ? /* @__PURE__ */ jsx62("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx62(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
3613
+ /* @__PURE__ */ jsx62("span", { className: "pire-fileupload-name", children: file.name }),
3614
+ /* @__PURE__ */ jsx62("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3615
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx62(
3205
3616
  IconButton,
3206
3617
  {
3207
3618
  icon: "x",
@@ -3211,14 +3622,14 @@ function FileDropZone({
3211
3622
  }
3212
3623
  )
3213
3624
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
3214
- uploadProgress != null ? /* @__PURE__ */ jsx60(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3215
- description ? /* @__PURE__ */ jsx60("span", { className: "pire-field-hint", children: description }) : null,
3216
- isInvalid && errorMessage ? /* @__PURE__ */ jsx60("span", { className: "pire-field-error", children: errorMessage }) : null
3625
+ uploadProgress != null ? /* @__PURE__ */ jsx62(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3626
+ description ? /* @__PURE__ */ jsx62("span", { className: "pire-field-hint", children: description }) : null,
3627
+ isInvalid && errorMessage ? /* @__PURE__ */ jsx62("span", { className: "pire-field-error", children: errorMessage }) : null
3217
3628
  ] });
3218
3629
  }
3219
3630
 
3220
3631
  // src/index.ts
3221
- import { DialogTrigger, MenuTrigger as MenuTrigger2, SubmenuTrigger, Popover as Popover7, RouterProvider, I18nProvider } from "react-aria-components";
3632
+ import { DialogTrigger, MenuTrigger as MenuTrigger3, SubmenuTrigger, Popover as Popover8, RouterProvider, I18nProvider } from "react-aria-components";
3222
3633
  export {
3223
3634
  Avatar,
3224
3635
  Badge,
@@ -3228,6 +3639,7 @@ export {
3228
3639
  Card,
3229
3640
  Checkbox,
3230
3641
  ComboBox,
3642
+ CommandPalette,
3231
3643
  ConfirmDialog,
3232
3644
  DataTable,
3233
3645
  DatePicker,
@@ -3244,10 +3656,12 @@ export {
3244
3656
  FormField,
3245
3657
  Heading,
3246
3658
  I18nProvider,
3659
+ ICON_NAMES,
3247
3660
  Icon,
3248
3661
  IconButton,
3249
3662
  InlineMessage,
3250
3663
  Input,
3664
+ Kbd,
3251
3665
  KpiTile,
3252
3666
  LineChart,
3253
3667
  Link,
@@ -3256,7 +3670,7 @@ export {
3256
3670
  MenuItem,
3257
3671
  MenuSection,
3258
3672
  MenuSeparator,
3259
- MenuTrigger2 as MenuTrigger,
3673
+ MenuTrigger3 as MenuTrigger,
3260
3674
  MultiComboBox,
3261
3675
  NumberField,
3262
3676
  ObjectHeader,
@@ -3264,7 +3678,7 @@ export {
3264
3678
  PageHeader,
3265
3679
  Pagination,
3266
3680
  PireIntlProvider,
3267
- Popover7 as Popover,
3681
+ Popover8 as Popover,
3268
3682
  ProgressBar,
3269
3683
  Radio,
3270
3684
  RadioGroup,
@@ -3298,6 +3712,7 @@ export {
3298
3712
  esMessages,
3299
3713
  formatFileSize,
3300
3714
  rangeLengthInDays,
3715
+ useCommandPaletteShortcut,
3301
3716
  usePireMessages,
3302
3717
  useToast
3303
3718
  };