@orianatech/pire 0.13.0 → 0.16.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 (38) hide show
  1. package/dist/components/core/Icon.d.ts.map +1 -1
  2. package/dist/components/core/Kbd.d.cts +17 -0
  3. package/dist/components/core/Kbd.d.ts +18 -0
  4. package/dist/components/core/Kbd.d.ts.map +1 -0
  5. package/dist/components/core/icon-data.generated.d.ts.map +1 -1
  6. package/dist/components/core/icon-map.d.cts +9 -0
  7. package/dist/components/core/icon-map.d.ts +9 -0
  8. package/dist/components/core/icon-map.d.ts.map +1 -1
  9. package/dist/components/forms/Input.d.cts +20 -2
  10. package/dist/components/forms/Input.d.ts +20 -2
  11. package/dist/components/forms/Input.d.ts.map +1 -1
  12. package/dist/components/forms/ValueHelpField.d.cts +12 -1
  13. package/dist/components/forms/ValueHelpField.d.ts +12 -1
  14. package/dist/components/forms/ValueHelpField.d.ts.map +1 -1
  15. package/dist/components/navigation/Menu.d.cts +7 -2
  16. package/dist/components/navigation/Menu.d.ts +7 -2
  17. package/dist/components/navigation/Menu.d.ts.map +1 -1
  18. package/dist/components/navigation/ShellBar.d.cts +13 -1
  19. package/dist/components/navigation/ShellBar.d.ts +13 -1
  20. package/dist/components/navigation/ShellBar.d.ts.map +1 -1
  21. package/dist/components/patterns/CommandPalette.d.cts +97 -0
  22. package/dist/components/patterns/CommandPalette.d.ts +98 -0
  23. package/dist/components/patterns/CommandPalette.d.ts.map +1 -0
  24. package/dist/components/patterns/ValueHelpDialog.d.cts +22 -1
  25. package/dist/components/patterns/ValueHelpDialog.d.ts +22 -1
  26. package/dist/components/patterns/ValueHelpDialog.d.ts.map +1 -1
  27. package/dist/components.css +94 -2
  28. package/dist/i18n/messages.d.cts +28 -0
  29. package/dist/i18n/messages.d.ts +28 -0
  30. package/dist/i18n/messages.d.ts.map +1 -1
  31. package/dist/index.cjs +1071 -664
  32. package/dist/index.cjs.map +1 -1
  33. package/dist/index.d.cts +3 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.js +985 -563
  37. package/dist/index.js.map +1 -1
  38. 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,175 @@ 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
- 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";
707
+ import * as React6 from "react";
708
+ import {
709
+ TextField,
710
+ Label,
711
+ Input as AriaInput,
712
+ Group,
713
+ Text as Text2,
714
+ FieldError,
715
+ Button as AriaButton4
716
+ } from "react-aria-components";
717
+
718
+ // src/i18n/PireIntlProvider.tsx
719
+ import * as React5 from "react";
720
+
721
+ // src/i18n/messages.ts
722
+ var enMessages = {
723
+ filterBarLabel: "Filters",
724
+ filterBarGo: "Go",
725
+ filterBarClearAll: "Clear all",
726
+ dataTableSelectAll: "Select all rows",
727
+ dataTableSelectRow: "Select row",
728
+ dataTableLoading: "Loading records",
729
+ dialogClose: "Close",
730
+ sidePanelClose: "Close panel",
731
+ inlineMessageDismiss: "Dismiss message",
732
+ toastDismiss: "Dismiss",
733
+ toastRegionLabel: "Notifications",
734
+ selectEmpty: "No options available",
735
+ comboBoxShowSuggestions: "Show suggestions",
736
+ comboBoxLoading: "Searching\u2026",
737
+ datePickerOpenCalendar: "Open calendar",
738
+ datePickerPreviousMonth: "Previous month",
739
+ datePickerNextMonth: "Next month",
740
+ dateRangePresetsLabel: "Date range shortcuts",
741
+ numberFieldIncrease: "Increase",
742
+ numberFieldDecrease: "Decrease",
743
+ inputClear: "Clear",
744
+ valueHelpFieldPlaceholder: "Not selected",
745
+ valueHelpFieldClear: "Clear selection",
746
+ valueHelpFieldOpenNamed: "Select {label}",
747
+ valueHelpFieldOpen: "Open value help",
748
+ valueHelpDialogSearch: "Search records",
749
+ valueHelpDialogTitle: "Select a record",
750
+ valueHelpDialogSearchPlaceholder: "Search by ID or name",
751
+ valueHelpDialogEmpty: "No records found",
752
+ valueHelpDialogCancel: "Cancel",
753
+ paginationLabel: "Pagination",
754
+ paginationRange: "{from}\u2013{to} of {total}",
755
+ paginationPageOf: "Page {page} of {pages}",
756
+ paginationPrevious: "Previous page",
757
+ paginationNext: "Next page",
758
+ paginationRowsPerPage: "Rows per page",
759
+ sideNavLabel: "Main navigation",
760
+ fileUploadChoose: "Choose files",
761
+ fileUploadRemoveNamed: "Remove {name}",
762
+ fileUploadUploading: "Uploading",
763
+ fileDropZonePrompt: "Drag files here, or choose them",
764
+ shellBarUserMenu: "Account menu for {user}",
765
+ commandPaletteLabel: "Command palette",
766
+ commandPaletteSearchLabel: "Search commands and records",
767
+ commandPalettePlaceholder: "Search for a screen, an action or a record\u2026",
768
+ commandPaletteEmpty: "Nothing matches that",
769
+ commandPaletteLoading: "Searching\u2026",
770
+ commandPaletteHintNavigate: "navigate",
771
+ commandPaletteHintSelect: "open",
772
+ commandPaletteHintClose: "close",
773
+ chartCategoryHeader: "Category",
774
+ chartNoValue: "No data",
775
+ chartEmpty: "No data for this period"
776
+ };
777
+ var esMessages = {
778
+ filterBarLabel: "Filtros",
779
+ filterBarGo: "Buscar",
780
+ filterBarClearAll: "Limpiar todo",
781
+ dataTableSelectAll: "Seleccionar todas las filas",
782
+ dataTableSelectRow: "Seleccionar fila",
783
+ dataTableLoading: "Cargando registros",
784
+ dialogClose: "Cerrar",
785
+ sidePanelClose: "Cerrar panel",
786
+ inlineMessageDismiss: "Descartar mensaje",
787
+ toastDismiss: "Descartar",
788
+ toastRegionLabel: "Notificaciones",
789
+ selectEmpty: "Sin opciones disponibles",
790
+ comboBoxShowSuggestions: "Mostrar sugerencias",
791
+ comboBoxLoading: "Buscando\u2026",
792
+ datePickerOpenCalendar: "Abrir calendario",
793
+ datePickerPreviousMonth: "Mes anterior",
794
+ datePickerNextMonth: "Mes siguiente",
795
+ dateRangePresetsLabel: "Atajos de rango de fechas",
796
+ numberFieldIncrease: "Aumentar",
797
+ numberFieldDecrease: "Disminuir",
798
+ inputClear: "Limpiar",
799
+ valueHelpFieldPlaceholder: "Sin seleccionar",
800
+ valueHelpFieldClear: "Limpiar selecci\xF3n",
801
+ valueHelpFieldOpenNamed: "Seleccionar {label}",
802
+ valueHelpFieldOpen: "Abrir ayuda de valores",
803
+ valueHelpDialogSearch: "Buscar registros",
804
+ valueHelpDialogTitle: "Seleccionar un registro",
805
+ valueHelpDialogSearchPlaceholder: "Buscar por c\xF3digo o nombre",
806
+ valueHelpDialogEmpty: "No se encontraron registros",
807
+ valueHelpDialogCancel: "Cancelar",
808
+ paginationLabel: "Paginaci\xF3n",
809
+ paginationRange: "{from}\u2013{to} de {total}",
810
+ paginationPageOf: "P\xE1gina {page} de {pages}",
811
+ paginationPrevious: "P\xE1gina anterior",
812
+ paginationNext: "P\xE1gina siguiente",
813
+ paginationRowsPerPage: "Filas por p\xE1gina",
814
+ sideNavLabel: "Navegaci\xF3n principal",
815
+ fileUploadChoose: "Elegir archivos",
816
+ fileUploadRemoveNamed: "Quitar {name}",
817
+ fileUploadUploading: "Subiendo",
818
+ fileDropZonePrompt: "Arrastr\xE1 archivos ac\xE1, o elegilos",
819
+ shellBarUserMenu: "Men\xFA de cuenta de {user}",
820
+ commandPaletteLabel: "Paleta de comandos",
821
+ commandPaletteSearchLabel: "Buscar comandos y registros",
822
+ commandPalettePlaceholder: "Busc\xE1 una pantalla, una acci\xF3n o un registro\u2026",
823
+ commandPaletteEmpty: "No hay coincidencias",
824
+ commandPaletteLoading: "Buscando\u2026",
825
+ commandPaletteHintNavigate: "navegar",
826
+ commandPaletteHintSelect: "abrir",
827
+ commandPaletteHintClose: "cerrar",
828
+ chartCategoryHeader: "Categor\xEDa",
829
+ chartNoValue: "Sin datos",
830
+ chartEmpty: "Sin datos para este per\xEDodo"
831
+ };
832
+
833
+ // src/i18n/PireIntlProvider.tsx
834
+ import { jsx as jsx16 } from "react/jsx-runtime";
835
+ var MessagesContext = React5.createContext(enMessages);
836
+ function PireIntlProvider({ messages, children }) {
837
+ const value = React5.useMemo(
838
+ () => messages ? { ...enMessages, ...messages } : enMessages,
839
+ [messages]
840
+ );
841
+ return /* @__PURE__ */ jsx16(MessagesContext.Provider, { value, children });
842
+ }
843
+ function usePireMessages() {
844
+ return React5.useContext(MessagesContext);
845
+ }
846
+ function useMessage(key, override) {
847
+ const messages = React5.useContext(MessagesContext);
848
+ return override ?? messages[key];
849
+ }
850
+
851
+ // src/components/forms/Input.tsx
852
+ import { jsx as jsx17, jsxs as jsxs10 } from "react/jsx-runtime";
533
853
  function Input({
534
854
  label,
535
855
  icon,
@@ -538,6 +858,8 @@ function Input({
538
858
  errorMessage,
539
859
  size = "md",
540
860
  numeric,
861
+ isClearable,
862
+ clearLabel,
541
863
  fullWidth = true,
542
864
  className,
543
865
  style,
@@ -545,18 +867,30 @@ function Input({
545
867
  onChange,
546
868
  ...rest
547
869
  }) {
870
+ const msg = usePireMessages();
871
+ const isControlled = rest.value !== void 0;
872
+ const [ownValue, setOwnValue] = React6.useState(rest.defaultValue ?? "");
873
+ const currentValue = isControlled ? rest.value : ownValue;
874
+ const handleChange = (next) => {
875
+ setOwnValue(next);
876
+ onChange?.(next);
877
+ };
878
+ const takesOverValue = isClearable && !isControlled;
879
+ const valueProps = takesOverValue ? { value: ownValue, defaultValue: void 0 } : {};
880
+ const showsClear = isClearable && currentValue !== "" && !rest.isDisabled && !rest.isReadOnly;
548
881
  return /* @__PURE__ */ jsxs10(
549
882
  TextField,
550
883
  {
551
884
  className: cx("pire-field", className),
552
885
  style,
553
- onChange,
886
+ onChange: handleChange,
554
887
  validationBehavior: "aria",
555
888
  ...rest,
889
+ ...valueProps,
556
890
  children: [
557
891
  label ? /* @__PURE__ */ jsxs10(Label, { className: "pire-field-label", children: [
558
892
  label,
559
- rest.isRequired ? /* @__PURE__ */ jsx15("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
893
+ rest.isRequired ? /* @__PURE__ */ jsx17("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
560
894
  ] }) : null,
561
895
  /* @__PURE__ */ jsxs10(
562
896
  Group,
@@ -567,24 +901,25 @@ function Input({
567
901
  "data-invalid": rest.isInvalid ? "true" : void 0,
568
902
  "data-readonly": rest.isReadOnly ? "true" : void 0,
569
903
  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
904
+ icon ? /* @__PURE__ */ jsx17(Icon, { name: icon, size: 16, className: "pire-leading-icon" }) : null,
905
+ /* @__PURE__ */ jsx17(AriaInput, { ref: inputRef, className: "pire-input", "data-numeric": numeric ? "true" : void 0 }),
906
+ showsClear ? /* @__PURE__ */ jsx17(AriaButton4, { className: "pire-input-clear", onPress: () => handleChange(""), children: clearLabel ?? msg.inputClear }) : null,
907
+ suffix ? /* @__PURE__ */ jsx17("span", { className: "pire-affix", children: suffix }) : null
573
908
  ]
574
909
  }
575
910
  ),
576
- description ? /* @__PURE__ */ jsx15(Text2, { slot: "description", className: "pire-field-hint", children: description }) : null,
577
- /* @__PURE__ */ jsx15(FieldError, { className: "pire-field-error", children: errorMessage })
911
+ description ? /* @__PURE__ */ jsx17(Text2, { slot: "description", className: "pire-field-hint", children: description }) : null,
912
+ /* @__PURE__ */ jsx17(FieldError, { className: "pire-field-error", children: errorMessage })
578
913
  ]
579
914
  }
580
915
  );
581
916
  }
582
917
 
583
918
  // src/components/forms/TextArea.tsx
584
- import * as React5 from "react";
919
+ import * as React7 from "react";
585
920
  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";
587
- var useIsomorphicLayoutEffect = typeof document === "undefined" ? React5.useEffect : React5.useLayoutEffect;
921
+ import { jsx as jsx18, jsxs as jsxs11 } from "react/jsx-runtime";
922
+ var useIsomorphicLayoutEffect = typeof document === "undefined" ? React7.useEffect : React7.useLayoutEffect;
588
923
  function TextArea({
589
924
  label,
590
925
  description,
@@ -600,13 +935,13 @@ function TextArea({
600
935
  onChange,
601
936
  ...rest
602
937
  }) {
603
- const innerRef = React5.useRef(null);
604
- const ref = React5.useCallback((node) => {
938
+ const innerRef = React7.useRef(null);
939
+ const ref = React7.useCallback((node) => {
605
940
  innerRef.current = node;
606
941
  if (typeof textAreaRef === "function") textAreaRef(node);
607
942
  else if (textAreaRef) textAreaRef.current = node;
608
943
  }, [textAreaRef]);
609
- const grow = React5.useCallback(() => {
944
+ const grow = React7.useCallback(() => {
610
945
  const el = innerRef.current;
611
946
  if (!el || !autoGrow) return;
612
947
  const styles = getComputedStyle(el);
@@ -635,9 +970,9 @@ function TextArea({
635
970
  children: [
636
971
  label ? /* @__PURE__ */ jsxs11(Label2, { className: "pire-field-label", children: [
637
972
  label,
638
- rest.isRequired ? /* @__PURE__ */ jsx16("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
973
+ rest.isRequired ? /* @__PURE__ */ jsx18("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
639
974
  ] }) : null,
640
- /* @__PURE__ */ jsx16(
975
+ /* @__PURE__ */ jsx18(
641
976
  Group2,
642
977
  {
643
978
  className: "pire-control",
@@ -646,7 +981,7 @@ function TextArea({
646
981
  "data-multiline": "true",
647
982
  "data-invalid": rest.isInvalid ? "true" : void 0,
648
983
  "data-readonly": rest.isReadOnly ? "true" : void 0,
649
- children: /* @__PURE__ */ jsx16(
984
+ children: /* @__PURE__ */ jsx18(
650
985
  AriaTextArea,
651
986
  {
652
987
  ref,
@@ -658,8 +993,8 @@ function TextArea({
658
993
  )
659
994
  }
660
995
  ),
661
- description ? /* @__PURE__ */ jsx16(Text3, { slot: "description", className: "pire-field-hint", children: description }) : null,
662
- /* @__PURE__ */ jsx16(FieldError2, { className: "pire-field-error", children: errorMessage })
996
+ description ? /* @__PURE__ */ jsx18(Text3, { slot: "description", className: "pire-field-hint", children: description }) : null,
997
+ /* @__PURE__ */ jsx18(FieldError2, { className: "pire-field-error", children: errorMessage })
663
998
  ]
664
999
  }
665
1000
  );
@@ -669,7 +1004,7 @@ function TextArea({
669
1004
  import {
670
1005
  Select as AriaSelect,
671
1006
  Label as Label3,
672
- Button as AriaButton4,
1007
+ Button as AriaButton5,
673
1008
  SelectValue,
674
1009
  Popover,
675
1010
  ListBox,
@@ -677,114 +1012,7 @@ import {
677
1012
  Text as Text4,
678
1013
  FieldError as FieldError3
679
1014
  } from "react-aria-components";
680
-
681
- // src/i18n/PireIntlProvider.tsx
682
- import * as React6 from "react";
683
-
684
- // src/i18n/messages.ts
685
- var enMessages = {
686
- filterBarLabel: "Filters",
687
- filterBarGo: "Go",
688
- filterBarClearAll: "Clear all",
689
- dataTableSelectAll: "Select all rows",
690
- dataTableSelectRow: "Select row",
691
- dataTableLoading: "Loading records",
692
- dialogClose: "Close",
693
- sidePanelClose: "Close panel",
694
- inlineMessageDismiss: "Dismiss message",
695
- toastDismiss: "Dismiss",
696
- toastRegionLabel: "Notifications",
697
- selectEmpty: "No options available",
698
- comboBoxShowSuggestions: "Show suggestions",
699
- comboBoxLoading: "Searching\u2026",
700
- datePickerOpenCalendar: "Open calendar",
701
- datePickerPreviousMonth: "Previous month",
702
- datePickerNextMonth: "Next month",
703
- dateRangePresetsLabel: "Date range shortcuts",
704
- numberFieldIncrease: "Increase",
705
- numberFieldDecrease: "Decrease",
706
- valueHelpFieldClear: "Clear selection",
707
- valueHelpFieldOpenNamed: "Select {label}",
708
- valueHelpFieldOpen: "Open value help",
709
- valueHelpDialogSearch: "Search records",
710
- valueHelpDialogCancel: "Cancel",
711
- paginationLabel: "Pagination",
712
- paginationRange: "{from}\u2013{to} of {total}",
713
- paginationPageOf: "Page {page} of {pages}",
714
- paginationPrevious: "Previous page",
715
- paginationNext: "Next page",
716
- paginationRowsPerPage: "Rows per page",
717
- sideNavLabel: "Main navigation",
718
- fileUploadChoose: "Choose files",
719
- fileUploadRemoveNamed: "Remove {name}",
720
- fileUploadUploading: "Uploading",
721
- fileDropZonePrompt: "Drag files here, or choose them",
722
- chartCategoryHeader: "Category",
723
- chartNoValue: "No data",
724
- chartEmpty: "No data for this period"
725
- };
726
- var esMessages = {
727
- filterBarLabel: "Filtros",
728
- filterBarGo: "Buscar",
729
- filterBarClearAll: "Limpiar todo",
730
- dataTableSelectAll: "Seleccionar todas las filas",
731
- dataTableSelectRow: "Seleccionar fila",
732
- dataTableLoading: "Cargando registros",
733
- dialogClose: "Cerrar",
734
- sidePanelClose: "Cerrar panel",
735
- inlineMessageDismiss: "Descartar mensaje",
736
- toastDismiss: "Descartar",
737
- toastRegionLabel: "Notificaciones",
738
- selectEmpty: "Sin opciones disponibles",
739
- comboBoxShowSuggestions: "Mostrar sugerencias",
740
- comboBoxLoading: "Buscando\u2026",
741
- datePickerOpenCalendar: "Abrir calendario",
742
- datePickerPreviousMonth: "Mes anterior",
743
- datePickerNextMonth: "Mes siguiente",
744
- dateRangePresetsLabel: "Atajos de rango de fechas",
745
- numberFieldIncrease: "Aumentar",
746
- numberFieldDecrease: "Disminuir",
747
- valueHelpFieldClear: "Limpiar selecci\xF3n",
748
- valueHelpFieldOpenNamed: "Seleccionar {label}",
749
- valueHelpFieldOpen: "Abrir ayuda de valores",
750
- valueHelpDialogSearch: "Buscar registros",
751
- valueHelpDialogCancel: "Cancelar",
752
- paginationLabel: "Paginaci\xF3n",
753
- paginationRange: "{from}\u2013{to} de {total}",
754
- paginationPageOf: "P\xE1gina {page} de {pages}",
755
- paginationPrevious: "P\xE1gina anterior",
756
- paginationNext: "P\xE1gina siguiente",
757
- paginationRowsPerPage: "Filas por p\xE1gina",
758
- sideNavLabel: "Navegaci\xF3n principal",
759
- fileUploadChoose: "Elegir archivos",
760
- fileUploadRemoveNamed: "Quitar {name}",
761
- fileUploadUploading: "Subiendo",
762
- fileDropZonePrompt: "Arrastr\xE1 archivos ac\xE1, o elegilos",
763
- chartCategoryHeader: "Categor\xEDa",
764
- chartNoValue: "Sin datos",
765
- chartEmpty: "Sin datos para este per\xEDodo"
766
- };
767
-
768
- // src/i18n/PireIntlProvider.tsx
769
- import { jsx as jsx17 } from "react/jsx-runtime";
770
- var MessagesContext = React6.createContext(enMessages);
771
- function PireIntlProvider({ messages, children }) {
772
- const value = React6.useMemo(
773
- () => messages ? { ...enMessages, ...messages } : enMessages,
774
- [messages]
775
- );
776
- return /* @__PURE__ */ jsx17(MessagesContext.Provider, { value, children });
777
- }
778
- function usePireMessages() {
779
- return React6.useContext(MessagesContext);
780
- }
781
- function useMessage(key, override) {
782
- const messages = React6.useContext(MessagesContext);
783
- return override ?? messages[key];
784
- }
785
-
786
- // src/components/forms/Select.tsx
787
- import { jsx as jsx18, jsxs as jsxs12 } from "react/jsx-runtime";
1015
+ import { jsx as jsx19, jsxs as jsxs12 } from "react/jsx-runtime";
788
1016
  var norm = (o) => typeof o === "string" ? { value: o, label: o, isDisabled: false } : o;
789
1017
  function Select({
790
1018
  label,
@@ -819,30 +1047,30 @@ function Select({
819
1047
  children: [
820
1048
  label ? /* @__PURE__ */ jsxs12(Label3, { className: "pire-field-label", children: [
821
1049
  label,
822
- rest.isRequired ? /* @__PURE__ */ jsx18("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1050
+ rest.isRequired ? /* @__PURE__ */ jsx19("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
823
1051
  ] }) : null,
824
1052
  /* @__PURE__ */ jsxs12(
825
- AriaButton4,
1053
+ AriaButton5,
826
1054
  {
827
1055
  className: "pire-control",
828
1056
  "data-size": size,
829
1057
  "data-full-width": String(fullWidth),
830
1058
  "data-invalid": rest.isInvalid ? "true" : void 0,
831
1059
  children: [
832
- /* @__PURE__ */ jsx18(SelectValue, { className: "pire-select-value" }),
833
- /* @__PURE__ */ jsx18(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
1060
+ /* @__PURE__ */ jsx19(SelectValue, { className: "pire-select-value" }),
1061
+ /* @__PURE__ */ jsx19(Icon, { name: "chevron-down", size: 16, className: "pire-leading-icon" })
834
1062
  ]
835
1063
  }
836
1064
  ),
837
- description ? /* @__PURE__ */ jsx18(Text4, { slot: "description", className: "pire-field-hint", children: description }) : null,
838
- /* @__PURE__ */ jsx18(FieldError3, { className: "pire-field-error", children: errorMessage }),
839
- /* @__PURE__ */ jsx18(Popover, { className: "pire-popover", children: /* @__PURE__ */ jsx18(
1065
+ description ? /* @__PURE__ */ jsx19(Text4, { slot: "description", className: "pire-field-hint", children: description }) : null,
1066
+ /* @__PURE__ */ jsx19(FieldError3, { className: "pire-field-error", children: errorMessage }),
1067
+ /* @__PURE__ */ jsx19(Popover, { className: "pire-popover", children: /* @__PURE__ */ jsx19(
840
1068
  ListBox,
841
1069
  {
842
1070
  className: "pire-listbox",
843
1071
  items,
844
- renderEmptyState: () => /* @__PURE__ */ jsx18("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: emptyLabel ?? msg.selectEmpty }),
845
- children: (item) => /* @__PURE__ */ jsx18(ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label })
1072
+ renderEmptyState: () => /* @__PURE__ */ jsx19("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: emptyLabel ?? msg.selectEmpty }),
1073
+ children: (item) => /* @__PURE__ */ jsx19(ListBoxItem, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: item.label })
846
1074
  }
847
1075
  ) })
848
1076
  ]
@@ -852,13 +1080,13 @@ function Select({
852
1080
 
853
1081
  // src/components/forms/Checkbox.tsx
854
1082
  import { Checkbox as AriaCheckbox } from "react-aria-components";
855
- import { Fragment, jsx as jsx19, jsxs as jsxs13 } from "react/jsx-runtime";
1083
+ import { Fragment, jsx as jsx20, jsxs as jsxs13 } from "react/jsx-runtime";
856
1084
  function Checkbox({ label, hint, children, className, ...rest }) {
857
- return /* @__PURE__ */ jsx19(AriaCheckbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment, { children: [
858
- /* @__PURE__ */ jsx19("span", { className: "pire-choice-box", "aria-hidden": "true", children: isIndeterminate ? /* @__PURE__ */ jsx19(Icon, { name: "minus", size: 12 }) : isSelected ? /* @__PURE__ */ jsx19(Icon, { name: "check", size: 12 }) : null }),
1085
+ return /* @__PURE__ */ jsx20(AriaCheckbox, { className: cx("pire-choice", className), ...rest, children: ({ isSelected, isIndeterminate }) => /* @__PURE__ */ jsxs13(Fragment, { children: [
1086
+ /* @__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 }),
859
1087
  /* @__PURE__ */ jsxs13("span", { children: [
860
1088
  label ?? children,
861
- hint ? /* @__PURE__ */ jsx19("span", { className: "pire-choice-hint", children: hint }) : null
1089
+ hint ? /* @__PURE__ */ jsx20("span", { className: "pire-choice-hint", children: hint }) : null
862
1090
  ] })
863
1091
  ] }) });
864
1092
  }
@@ -871,32 +1099,32 @@ import {
871
1099
  Text as Text5,
872
1100
  FieldError as FieldError4
873
1101
  } from "react-aria-components";
874
- import { jsx as jsx20, jsxs as jsxs14 } from "react/jsx-runtime";
1102
+ import { jsx as jsx21, jsxs as jsxs14 } from "react/jsx-runtime";
875
1103
  function RadioGroup({ label, description, errorMessage, children, className, ...rest }) {
876
1104
  return /* @__PURE__ */ jsxs14(AriaRadioGroup, { className: cx("pire-field", className), validationBehavior: "aria", ...rest, children: [
877
- label ? /* @__PURE__ */ jsx20(Label4, { className: "pire-field-label", children: label }) : null,
878
- /* @__PURE__ */ jsx20("div", { className: "pire-radiogroup", children }),
879
- description ? /* @__PURE__ */ jsx20(Text5, { slot: "description", className: "pire-field-hint", children: description }) : null,
880
- /* @__PURE__ */ jsx20(FieldError4, { className: "pire-field-error", children: errorMessage })
1105
+ label ? /* @__PURE__ */ jsx21(Label4, { className: "pire-field-label", children: label }) : null,
1106
+ /* @__PURE__ */ jsx21("div", { className: "pire-radiogroup", children }),
1107
+ description ? /* @__PURE__ */ jsx21(Text5, { slot: "description", className: "pire-field-hint", children: description }) : null,
1108
+ /* @__PURE__ */ jsx21(FieldError4, { className: "pire-field-error", children: errorMessage })
881
1109
  ] });
882
1110
  }
883
1111
  function Radio({ label, hint, children, className, ...rest }) {
884
1112
  return /* @__PURE__ */ jsxs14(AriaRadio, { className: cx("pire-choice", className), ...rest, children: [
885
- /* @__PURE__ */ jsx20("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
1113
+ /* @__PURE__ */ jsx21("span", { className: "pire-choice-box", "data-radio": "true", "aria-hidden": "true" }),
886
1114
  /* @__PURE__ */ jsxs14("span", { children: [
887
1115
  label ?? children,
888
- hint ? /* @__PURE__ */ jsx20("span", { className: "pire-choice-hint", children: hint }) : null
1116
+ hint ? /* @__PURE__ */ jsx21("span", { className: "pire-choice-hint", children: hint }) : null
889
1117
  ] })
890
1118
  ] });
891
1119
  }
892
1120
 
893
1121
  // src/components/forms/Switch.tsx
894
1122
  import { Switch as AriaSwitch } from "react-aria-components";
895
- import { jsx as jsx21, jsxs as jsxs15 } from "react/jsx-runtime";
1123
+ import { jsx as jsx22, jsxs as jsxs15 } from "react/jsx-runtime";
896
1124
  function Switch({ label, children, className, ...rest }) {
897
1125
  return /* @__PURE__ */ jsxs15(AriaSwitch, { className: cx("pire-choice", className), ...rest, children: [
898
- /* @__PURE__ */ jsx21("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ jsx21("span", { className: "pire-switch-thumb" }) }),
899
- /* @__PURE__ */ jsx21("span", { children: label ?? children })
1126
+ /* @__PURE__ */ jsx22("span", { className: "pire-switch-track", "aria-hidden": "true", children: /* @__PURE__ */ jsx22("span", { className: "pire-switch-thumb" }) }),
1127
+ /* @__PURE__ */ jsx22("span", { children: label ?? children })
900
1128
  ] });
901
1129
  }
902
1130
 
@@ -905,7 +1133,7 @@ import {
905
1133
  ComboBox as AriaComboBox,
906
1134
  Label as Label5,
907
1135
  Input as AriaInput2,
908
- Button as AriaButton5,
1136
+ Button as AriaButton6,
909
1137
  Group as Group3,
910
1138
  Popover as Popover2,
911
1139
  ListBox as ListBox2,
@@ -913,7 +1141,7 @@ import {
913
1141
  Text as Text6,
914
1142
  FieldError as FieldError5
915
1143
  } from "react-aria-components";
916
- import { jsx as jsx22, jsxs as jsxs16 } from "react/jsx-runtime";
1144
+ import { jsx as jsx23, jsxs as jsxs16 } from "react/jsx-runtime";
917
1145
  var norm2 = (o) => typeof o === "string" ? { value: o, label: o } : o;
918
1146
  function ComboBox({
919
1147
  label,
@@ -961,7 +1189,7 @@ function ComboBox({
961
1189
  children: [
962
1190
  label ? /* @__PURE__ */ jsxs16(Label5, { className: "pire-field-label", children: [
963
1191
  label,
964
- rest.isRequired ? /* @__PURE__ */ jsx22("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1192
+ rest.isRequired ? /* @__PURE__ */ jsx23("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
965
1193
  ] }) : null,
966
1194
  /* @__PURE__ */ jsxs16(
967
1195
  Group3,
@@ -971,15 +1199,15 @@ function ComboBox({
971
1199
  "data-full-width": String(fullWidth),
972
1200
  "data-invalid": rest.isInvalid ? "true" : void 0,
973
1201
  children: [
974
- /* @__PURE__ */ jsx22(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
975
- /* @__PURE__ */ jsx22(AriaInput2, { className: "pire-input", placeholder: rest.placeholder }),
976
- /* @__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 }) })
1202
+ /* @__PURE__ */ jsx23(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1203
+ /* @__PURE__ */ jsx23(AriaInput2, { className: "pire-input", placeholder: rest.placeholder }),
1204
+ /* @__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 }) })
977
1205
  ]
978
1206
  }
979
1207
  ),
980
- description ? /* @__PURE__ */ jsx22(Text6, { slot: "description", className: "pire-field-hint", children: description }) : null,
981
- /* @__PURE__ */ jsx22(FieldError5, { className: "pire-field-error", children: errorMessage }),
982
- /* @__PURE__ */ jsx22(Popover2, { className: "pire-popover", children: /* @__PURE__ */ jsx22(
1208
+ description ? /* @__PURE__ */ jsx23(Text6, { slot: "description", className: "pire-field-hint", children: description }) : null,
1209
+ /* @__PURE__ */ jsx23(FieldError5, { className: "pire-field-error", children: errorMessage }),
1210
+ /* @__PURE__ */ jsx23(Popover2, { className: "pire-popover", children: /* @__PURE__ */ jsx23(
983
1211
  ListBox2,
984
1212
  {
985
1213
  className: "pire-listbox",
@@ -987,10 +1215,10 @@ function ComboBox({
987
1215
  const el = e.currentTarget;
988
1216
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
989
1217
  } : void 0,
990
- renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx22("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1218
+ renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx23("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
991
1219
  children: (item) => /* @__PURE__ */ jsxs16(ListBoxItem2, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
992
- /* @__PURE__ */ jsx22("span", { className: "pire-option-label", children: item.label }),
993
- item.secondary ? /* @__PURE__ */ jsx22("span", { className: "pire-option-secondary", children: item.secondary }) : null
1220
+ /* @__PURE__ */ jsx23("span", { className: "pire-option-label", children: item.label }),
1221
+ item.secondary ? /* @__PURE__ */ jsx23("span", { className: "pire-option-secondary", children: item.secondary }) : null
994
1222
  ] })
995
1223
  }
996
1224
  ) })
@@ -1000,12 +1228,12 @@ function ComboBox({
1000
1228
  }
1001
1229
 
1002
1230
  // src/components/forms/MultiComboBox.tsx
1003
- import * as React7 from "react";
1231
+ import * as React8 from "react";
1004
1232
  import {
1005
1233
  ComboBox as AriaComboBox2,
1006
1234
  Label as Label6,
1007
1235
  Input as AriaInput3,
1008
- Button as AriaButton6,
1236
+ Button as AriaButton7,
1009
1237
  ButtonContext,
1010
1238
  Group as Group4,
1011
1239
  Popover as Popover3,
@@ -1015,7 +1243,7 @@ import {
1015
1243
  FieldError as FieldError6,
1016
1244
  VisuallyHidden
1017
1245
  } from "react-aria-components";
1018
- import { jsx as jsx23, jsxs as jsxs17 } from "react/jsx-runtime";
1246
+ import { jsx as jsx24, jsxs as jsxs17 } from "react/jsx-runtime";
1019
1247
  var norm3 = (o) => typeof o === "string" ? { value: o, label: o } : o;
1020
1248
  function MultiComboBox({
1021
1249
  label,
@@ -1039,15 +1267,15 @@ function MultiComboBox({
1039
1267
  ...rest
1040
1268
  }) {
1041
1269
  const msg = usePireMessages();
1042
- const items = React7.useMemo(() => options.map(norm3), [options]);
1270
+ const items = React8.useMemo(() => options.map(norm3), [options]);
1043
1271
  const collection = isFilteredExternally ? { items } : { defaultItems: items };
1044
1272
  const showsStatus = isLoading || isFilteredExternally && items.length === 0 && emptyLabel != null;
1045
- const [uncontrolled, setUncontrolled] = React7.useState(defaultValue ?? []);
1046
- const [announcement, setAnnouncement] = React7.useState("");
1047
- const inputRef = React7.useRef(null);
1273
+ const [uncontrolled, setUncontrolled] = React8.useState(defaultValue ?? []);
1274
+ const [announcement, setAnnouncement] = React8.useState("");
1275
+ const inputRef = React8.useRef(null);
1048
1276
  const raw = value ?? uncontrolled;
1049
1277
  const contentKey = raw.join("\0");
1050
- const values = React7.useMemo(() => raw, [contentKey]);
1278
+ const values = React8.useMemo(() => raw, [contentKey]);
1051
1279
  const labelOf = (v) => items.find((o) => o.value === v)?.label ?? v;
1052
1280
  const isEditable = !rest.isDisabled && !rest.isReadOnly;
1053
1281
  const commit = (next) => {
@@ -1099,7 +1327,7 @@ function MultiComboBox({
1099
1327
  children: [
1100
1328
  label ? /* @__PURE__ */ jsxs17(Label6, { className: "pire-field-label", children: [
1101
1329
  label,
1102
- rest.isRequired ? /* @__PURE__ */ jsx23("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1330
+ rest.isRequired ? /* @__PURE__ */ jsx24("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1103
1331
  ] }) : null,
1104
1332
  /* @__PURE__ */ jsxs17(
1105
1333
  Group4,
@@ -1111,14 +1339,14 @@ function MultiComboBox({
1111
1339
  "data-invalid": rest.isInvalid ? "true" : void 0,
1112
1340
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1113
1341
  children: [
1114
- /* @__PURE__ */ jsx23(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1342
+ /* @__PURE__ */ jsx24(Icon, { name: "search", size: 16, className: "pire-leading-icon" }),
1115
1343
  /* @__PURE__ */ jsxs17("div", { className: "pire-chipfield", children: [
1116
- /* @__PURE__ */ jsx23(ButtonContext.Provider, { value: null, children: values.map((v) => (
1344
+ /* @__PURE__ */ jsx24(ButtonContext.Provider, { value: null, children: values.map((v) => (
1117
1345
  /* Disabled follows the field, not `isEditable`: a read-only field's chips are
1118
1346
  real, current values and should read as such — they simply lose the × . */
1119
- /* @__PURE__ */ jsx23(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
1347
+ /* @__PURE__ */ jsx24(Tag, { isDisabled: rest.isDisabled, onRemove: isEditable ? () => remove(v) : void 0, children: labelOf(v) }, v)
1120
1348
  )) }),
1121
- /* @__PURE__ */ jsx23(
1349
+ /* @__PURE__ */ jsx24(
1122
1350
  AriaInput3,
1123
1351
  {
1124
1352
  ref: inputRef,
@@ -1128,14 +1356,14 @@ function MultiComboBox({
1128
1356
  }
1129
1357
  )
1130
1358
  ] }),
1131
- /* @__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 }) })
1359
+ /* @__PURE__ */ jsx24(AriaButton7, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.comboBoxShowSuggestions, style: { width: 20, height: 20 }, children: /* @__PURE__ */ jsx24(Icon, { name: "chevron-down", size: 16 }) })
1132
1360
  ]
1133
1361
  }
1134
1362
  ),
1135
- /* @__PURE__ */ jsx23(VisuallyHidden, { children: /* @__PURE__ */ jsx23("span", { "aria-live": "polite", children: announcement }) }),
1136
- description ? /* @__PURE__ */ jsx23(Text7, { slot: "description", className: "pire-field-hint", children: description }) : null,
1137
- /* @__PURE__ */ jsx23(FieldError6, { className: "pire-field-error", children: errorMessage }),
1138
- /* @__PURE__ */ jsx23(Popover3, { className: "pire-popover", children: /* @__PURE__ */ jsx23(
1363
+ /* @__PURE__ */ jsx24(VisuallyHidden, { children: /* @__PURE__ */ jsx24("span", { "aria-live": "polite", children: announcement }) }),
1364
+ description ? /* @__PURE__ */ jsx24(Text7, { slot: "description", className: "pire-field-hint", children: description }) : null,
1365
+ /* @__PURE__ */ jsx24(FieldError6, { className: "pire-field-error", children: errorMessage }),
1366
+ /* @__PURE__ */ jsx24(Popover3, { className: "pire-popover", children: /* @__PURE__ */ jsx24(
1139
1367
  ListBox3,
1140
1368
  {
1141
1369
  className: "pire-listbox",
@@ -1143,10 +1371,10 @@ function MultiComboBox({
1143
1371
  const el = e.currentTarget;
1144
1372
  if (el.scrollHeight - el.scrollTop - el.clientHeight < 48) onLoadMore();
1145
1373
  } : void 0,
1146
- renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx23("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1374
+ renderEmptyState: showsStatus ? () => /* @__PURE__ */ jsx24("div", { className: "pire-listbox-status", role: "status", "aria-live": "polite", children: isLoading ? loadingLabel ?? msg.comboBoxLoading : emptyLabel }) : void 0,
1147
1375
  children: (item) => /* @__PURE__ */ jsxs17(ListBoxItem3, { className: "pire-option", id: item.value, textValue: item.label, isDisabled: item.isDisabled, children: [
1148
- /* @__PURE__ */ jsx23("span", { className: "pire-option-label", children: item.label }),
1149
- item.secondary ? /* @__PURE__ */ jsx23("span", { className: "pire-option-secondary", children: item.secondary }) : null
1376
+ /* @__PURE__ */ jsx24("span", { className: "pire-option-label", children: item.label }),
1377
+ item.secondary ? /* @__PURE__ */ jsx24("span", { className: "pire-option-secondary", children: item.secondary }) : null
1150
1378
  ] })
1151
1379
  }
1152
1380
  ) })
@@ -1161,11 +1389,11 @@ import {
1161
1389
  Label as Label7,
1162
1390
  Input as AriaInput4,
1163
1391
  Group as Group5,
1164
- Button as AriaButton7,
1392
+ Button as AriaButton8,
1165
1393
  Text as Text8,
1166
1394
  FieldError as FieldError7
1167
1395
  } from "react-aria-components";
1168
- import { jsx as jsx24, jsxs as jsxs18 } from "react/jsx-runtime";
1396
+ import { jsx as jsx25, jsxs as jsxs18 } from "react/jsx-runtime";
1169
1397
  function NumberField({
1170
1398
  label,
1171
1399
  suffix,
@@ -1182,7 +1410,7 @@ function NumberField({
1182
1410
  return /* @__PURE__ */ jsxs18(AriaNumberField, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1183
1411
  label ? /* @__PURE__ */ jsxs18(Label7, { className: "pire-field-label", children: [
1184
1412
  label,
1185
- rest.isRequired ? /* @__PURE__ */ jsx24("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1413
+ rest.isRequired ? /* @__PURE__ */ jsx25("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1186
1414
  ] }) : null,
1187
1415
  /* @__PURE__ */ jsxs18(
1188
1416
  Group5,
@@ -1193,17 +1421,17 @@ function NumberField({
1193
1421
  "data-invalid": rest.isInvalid ? "true" : void 0,
1194
1422
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1195
1423
  children: [
1196
- /* @__PURE__ */ jsx24(AriaInput4, { className: "pire-input", "data-numeric": "true" }),
1197
- suffix ? /* @__PURE__ */ jsx24("span", { className: "pire-affix", children: suffix }) : null,
1424
+ /* @__PURE__ */ jsx25(AriaInput4, { className: "pire-input", "data-numeric": "true" }),
1425
+ suffix ? /* @__PURE__ */ jsx25("span", { className: "pire-affix", children: suffix }) : null,
1198
1426
  hideStepper ? null : /* @__PURE__ */ jsxs18("span", { className: "pire-stepper", children: [
1199
- /* @__PURE__ */ jsx24(AriaButton7, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ jsx24(Icon, { name: "plus", size: 10 }) }),
1200
- /* @__PURE__ */ jsx24(AriaButton7, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ jsx24(Icon, { name: "minus", size: 10 }) })
1427
+ /* @__PURE__ */ jsx25(AriaButton8, { slot: "increment", className: "pire-stepper-btn", "aria-label": msg.numberFieldIncrease, children: /* @__PURE__ */ jsx25(Icon, { name: "plus", size: 10 }) }),
1428
+ /* @__PURE__ */ jsx25(AriaButton8, { slot: "decrement", className: "pire-stepper-btn", "aria-label": msg.numberFieldDecrease, children: /* @__PURE__ */ jsx25(Icon, { name: "minus", size: 10 }) })
1201
1429
  ] })
1202
1430
  ]
1203
1431
  }
1204
1432
  ),
1205
- description ? /* @__PURE__ */ jsx24(Text8, { slot: "description", className: "pire-field-hint", children: description }) : null,
1206
- /* @__PURE__ */ jsx24(FieldError7, { className: "pire-field-error", children: errorMessage })
1433
+ description ? /* @__PURE__ */ jsx25(Text8, { slot: "description", className: "pire-field-hint", children: description }) : null,
1434
+ /* @__PURE__ */ jsx25(FieldError7, { className: "pire-field-error", children: errorMessage })
1207
1435
  ] });
1208
1436
  }
1209
1437
 
@@ -1214,7 +1442,7 @@ import {
1214
1442
  Group as Group6,
1215
1443
  DateInput,
1216
1444
  DateSegment,
1217
- Button as AriaButton8,
1445
+ Button as AriaButton9,
1218
1446
  Popover as Popover4,
1219
1447
  Dialog as AriaDialog,
1220
1448
  Calendar,
@@ -1227,7 +1455,7 @@ import {
1227
1455
  Text as Text9,
1228
1456
  FieldError as FieldError8
1229
1457
  } from "react-aria-components";
1230
- import { jsx as jsx25, jsxs as jsxs19 } from "react/jsx-runtime";
1458
+ import { jsx as jsx26, jsxs as jsxs19 } from "react/jsx-runtime";
1231
1459
  function DatePicker({
1232
1460
  label,
1233
1461
  description,
@@ -1242,7 +1470,7 @@ function DatePicker({
1242
1470
  return /* @__PURE__ */ jsxs19(AriaDatePicker, { className: cx("pire-field", className), style, validationBehavior: "aria", ...rest, children: [
1243
1471
  label ? /* @__PURE__ */ jsxs19(Label8, { className: "pire-field-label", children: [
1244
1472
  label,
1245
- rest.isRequired ? /* @__PURE__ */ jsx25("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1473
+ rest.isRequired ? /* @__PURE__ */ jsx26("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1246
1474
  ] }) : null,
1247
1475
  /* @__PURE__ */ jsxs19(
1248
1476
  Group6,
@@ -1253,22 +1481,22 @@ function DatePicker({
1253
1481
  "data-invalid": rest.isInvalid ? "true" : void 0,
1254
1482
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1255
1483
  children: [
1256
- /* @__PURE__ */ jsx25(DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx25(DateSegment, { segment, className: "pire-datesegment" }) }),
1257
- /* @__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 }) })
1484
+ /* @__PURE__ */ jsx26(DateInput, { className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment, { segment, className: "pire-datesegment" }) }),
1485
+ /* @__PURE__ */ jsx26(AriaButton9, { className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerOpenCalendar, style: { width: 24, height: 24 }, children: /* @__PURE__ */ jsx26(Icon, { name: "calendar", size: 16 }) })
1258
1486
  ]
1259
1487
  }
1260
1488
  ),
1261
- description ? /* @__PURE__ */ jsx25(Text9, { slot: "description", className: "pire-field-hint", children: description }) : null,
1262
- /* @__PURE__ */ jsx25(FieldError8, { className: "pire-field-error", children: errorMessage }),
1263
- /* @__PURE__ */ jsx25(Popover4, { className: "pire-popover", children: /* @__PURE__ */ jsx25(AriaDialog, { children: /* @__PURE__ */ jsxs19(Calendar, { className: "pire-calendar", children: [
1489
+ description ? /* @__PURE__ */ jsx26(Text9, { slot: "description", className: "pire-field-hint", children: description }) : null,
1490
+ /* @__PURE__ */ jsx26(FieldError8, { className: "pire-field-error", children: errorMessage }),
1491
+ /* @__PURE__ */ jsx26(Popover4, { className: "pire-popover", children: /* @__PURE__ */ jsx26(AriaDialog, { children: /* @__PURE__ */ jsxs19(Calendar, { className: "pire-calendar", children: [
1264
1492
  /* @__PURE__ */ jsxs19("header", { className: "pire-calendar-head", children: [
1265
- /* @__PURE__ */ jsx25(AriaButton8, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ jsx25(Icon, { name: "chevron-left", size: 16 }) }),
1266
- /* @__PURE__ */ jsx25(Heading2, { className: "pire-calendar-title" }),
1267
- /* @__PURE__ */ jsx25(AriaButton8, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ jsx25(Icon, { name: "chevron-right", size: 16 }) })
1493
+ /* @__PURE__ */ jsx26(AriaButton9, { slot: "previous", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerPreviousMonth, children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-left", size: 16 }) }),
1494
+ /* @__PURE__ */ jsx26(Heading2, { className: "pire-calendar-title" }),
1495
+ /* @__PURE__ */ jsx26(AriaButton9, { slot: "next", className: "pire-iconbtn", "data-size": "sm", "aria-label": msg.datePickerNextMonth, children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-right", size: 16 }) })
1268
1496
  ] }),
1269
1497
  /* @__PURE__ */ jsxs19(CalendarGrid, { className: "pire-calendar-grid", children: [
1270
- /* @__PURE__ */ jsx25(CalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx25(CalendarHeaderCell, { children: day }) }),
1271
- /* @__PURE__ */ jsx25(CalendarGridBody, { children: (date) => /* @__PURE__ */ jsx25(CalendarCell, { date, className: "pire-calendar-cell" }) })
1498
+ /* @__PURE__ */ jsx26(CalendarGridHeader, { children: (day) => /* @__PURE__ */ jsx26(CalendarHeaderCell, { children: day }) }),
1499
+ /* @__PURE__ */ jsx26(CalendarGridBody, { children: (date) => /* @__PURE__ */ jsx26(CalendarCell, { date, className: "pire-calendar-cell" }) })
1272
1500
  ] })
1273
1501
  ] }) }) })
1274
1502
  ] });
@@ -1281,7 +1509,7 @@ import {
1281
1509
  Group as Group7,
1282
1510
  DateInput as DateInput2,
1283
1511
  DateSegment as DateSegment2,
1284
- Button as AriaButton9,
1512
+ Button as AriaButton10,
1285
1513
  Popover as Popover5,
1286
1514
  Dialog as AriaDialog2,
1287
1515
  RangeCalendar,
@@ -1294,7 +1522,7 @@ import {
1294
1522
  Text as Text10,
1295
1523
  FieldError as FieldError9
1296
1524
  } from "react-aria-components";
1297
- import { jsx as jsx26, jsxs as jsxs20 } from "react/jsx-runtime";
1525
+ import { jsx as jsx27, jsxs as jsxs20 } from "react/jsx-runtime";
1298
1526
  function rangeLengthInDays(range) {
1299
1527
  return range.end.toDate("UTC").getTime() / 864e5 - range.start.toDate("UTC").getTime() / 864e5 + 1;
1300
1528
  }
@@ -1328,7 +1556,7 @@ function DateRangePicker({
1328
1556
  children: [
1329
1557
  label ? /* @__PURE__ */ jsxs20(Label9, { className: "pire-field-label", children: [
1330
1558
  label,
1331
- rest.isRequired ? /* @__PURE__ */ jsx26("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1559
+ rest.isRequired ? /* @__PURE__ */ jsx27("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1332
1560
  ] }) : null,
1333
1561
  /* @__PURE__ */ jsxs20(
1334
1562
  Group7,
@@ -1339,30 +1567,30 @@ function DateRangePicker({
1339
1567
  "data-invalid": rest.isInvalid || tooLong ? "true" : void 0,
1340
1568
  "data-readonly": rest.isReadOnly ? "true" : void 0,
1341
1569
  children: [
1342
- /* @__PURE__ */ jsx26(DateInput2, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment2, { segment, className: "pire-datesegment" }) }),
1343
- /* @__PURE__ */ jsx26("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1344
- /* @__PURE__ */ jsx26(DateInput2, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx26(DateSegment2, { segment, className: "pire-datesegment" }) }),
1345
- /* @__PURE__ */ jsx26(
1346
- AriaButton9,
1570
+ /* @__PURE__ */ jsx27(DateInput2, { slot: "start", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx27(DateSegment2, { segment, className: "pire-datesegment" }) }),
1571
+ /* @__PURE__ */ jsx27("span", { "aria-hidden": "true", className: "pire-daterange-dash", children: "\u2013" }),
1572
+ /* @__PURE__ */ jsx27(DateInput2, { slot: "end", className: "pire-datefield", children: (segment) => /* @__PURE__ */ jsx27(DateSegment2, { segment, className: "pire-datesegment" }) }),
1573
+ /* @__PURE__ */ jsx27(
1574
+ AriaButton10,
1347
1575
  {
1348
1576
  className: "pire-iconbtn",
1349
1577
  "data-size": "sm",
1350
1578
  "aria-label": msg.datePickerOpenCalendar,
1351
1579
  style: { width: 24, height: 24 },
1352
- children: /* @__PURE__ */ jsx26(Icon, { name: "calendar", size: 16 })
1580
+ children: /* @__PURE__ */ jsx27(Icon, { name: "calendar", size: 16 })
1353
1581
  }
1354
1582
  )
1355
1583
  ]
1356
1584
  }
1357
1585
  ),
1358
- description ? /* @__PURE__ */ jsx26(Text10, { slot: "description", className: "pire-field-hint", children: description }) : null,
1359
- /* @__PURE__ */ jsx26(FieldError9, { className: "pire-field-error", children: errorMessage }),
1360
- /* @__PURE__ */ jsx26(Popover5, { className: "pire-popover", children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-daterange-dialog", children: [
1586
+ description ? /* @__PURE__ */ jsx27(Text10, { slot: "description", className: "pire-field-hint", children: description }) : null,
1587
+ /* @__PURE__ */ jsx27(FieldError9, { className: "pire-field-error", children: errorMessage }),
1588
+ /* @__PURE__ */ jsx27(Popover5, { className: "pire-popover", children: /* @__PURE__ */ jsxs20(AriaDialog2, { className: "pire-daterange-dialog", children: [
1361
1589
  presets?.length ? (
1362
1590
  // Before the calendar in the DOM, so keyboard users reach the shortcut without
1363
1591
  // arrowing through a month first.
1364
- /* @__PURE__ */ jsx26("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ jsx26(
1365
- AriaButton9,
1592
+ /* @__PURE__ */ jsx27("div", { className: "pire-daterange-presets", role: "group", "aria-label": msg.dateRangePresetsLabel, children: presets.map((preset) => /* @__PURE__ */ jsx27(
1593
+ AriaButton10,
1366
1594
  {
1367
1595
  className: "pire-daterange-preset",
1368
1596
  onPress: () => rest.onChange?.(preset.range()),
@@ -1373,31 +1601,31 @@ function DateRangePicker({
1373
1601
  ) : null,
1374
1602
  /* @__PURE__ */ jsxs20(RangeCalendar, { className: "pire-calendar", children: [
1375
1603
  /* @__PURE__ */ jsxs20("header", { className: "pire-calendar-head", children: [
1376
- /* @__PURE__ */ jsx26(
1377
- AriaButton9,
1604
+ /* @__PURE__ */ jsx27(
1605
+ AriaButton10,
1378
1606
  {
1379
1607
  slot: "previous",
1380
1608
  className: "pire-iconbtn",
1381
1609
  "data-size": "sm",
1382
1610
  "aria-label": msg.datePickerPreviousMonth,
1383
- children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-left", size: 16 })
1611
+ children: /* @__PURE__ */ jsx27(Icon, { name: "chevron-left", size: 16 })
1384
1612
  }
1385
1613
  ),
1386
- /* @__PURE__ */ jsx26(Heading3, { className: "pire-calendar-title" }),
1387
- /* @__PURE__ */ jsx26(
1388
- AriaButton9,
1614
+ /* @__PURE__ */ jsx27(Heading3, { className: "pire-calendar-title" }),
1615
+ /* @__PURE__ */ jsx27(
1616
+ AriaButton10,
1389
1617
  {
1390
1618
  slot: "next",
1391
1619
  className: "pire-iconbtn",
1392
1620
  "data-size": "sm",
1393
1621
  "aria-label": msg.datePickerNextMonth,
1394
- children: /* @__PURE__ */ jsx26(Icon, { name: "chevron-right", size: 16 })
1622
+ children: /* @__PURE__ */ jsx27(Icon, { name: "chevron-right", size: 16 })
1395
1623
  }
1396
1624
  )
1397
1625
  ] }),
1398
1626
  /* @__PURE__ */ jsxs20(CalendarGrid2, { className: "pire-calendar-grid", children: [
1399
- /* @__PURE__ */ jsx26(CalendarGridHeader2, { children: (day) => /* @__PURE__ */ jsx26(CalendarHeaderCell2, { children: day }) }),
1400
- /* @__PURE__ */ jsx26(CalendarGridBody2, { children: (date) => /* @__PURE__ */ jsx26(CalendarCell2, { date, className: "pire-calendar-cell" }) })
1627
+ /* @__PURE__ */ jsx27(CalendarGridHeader2, { children: (day) => /* @__PURE__ */ jsx27(CalendarHeaderCell2, { children: day }) }),
1628
+ /* @__PURE__ */ jsx27(CalendarGridBody2, { children: (date) => /* @__PURE__ */ jsx27(CalendarCell2, { date, className: "pire-calendar-cell" }) })
1401
1629
  ] })
1402
1630
  ] })
1403
1631
  ] }) })
@@ -1407,14 +1635,14 @@ function DateRangePicker({
1407
1635
  }
1408
1636
 
1409
1637
  // src/components/forms/ValueHelpField.tsx
1410
- import * as React9 from "react";
1638
+ import * as React10 from "react";
1411
1639
 
1412
1640
  // src/components/patterns/ValueHelpDialog.tsx
1413
- import * as React8 from "react";
1641
+ import * as React9 from "react";
1414
1642
 
1415
1643
  // src/components/feedback/Dialog.tsx
1416
1644
  import { ModalOverlay, Modal, Dialog as AriaDialog3, Heading as Heading4 } from "react-aria-components";
1417
- import { jsx as jsx27, jsxs as jsxs21 } from "react/jsx-runtime";
1645
+ import { jsx as jsx28, jsxs as jsxs21 } from "react/jsx-runtime";
1418
1646
  function Dialog({
1419
1647
  isOpen,
1420
1648
  onOpenChange,
@@ -1434,7 +1662,7 @@ function Dialog({
1434
1662
  onClose?.();
1435
1663
  onOpenChange?.(false);
1436
1664
  };
1437
- return /* @__PURE__ */ jsx27(
1665
+ return /* @__PURE__ */ jsx28(
1438
1666
  ModalOverlay,
1439
1667
  {
1440
1668
  className: "pire-modal-overlay",
@@ -1443,16 +1671,16 @@ function Dialog({
1443
1671
  onOpenChange: (o) => {
1444
1672
  if (!o) close();
1445
1673
  },
1446
- children: /* @__PURE__ */ jsx27(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs21(AriaDialog3, { className: "pire-dialog", children: [
1674
+ children: /* @__PURE__ */ jsx28(Modal, { className: cx("pire-modal", className), "data-size": size, style, children: /* @__PURE__ */ jsxs21(AriaDialog3, { className: "pire-dialog", children: [
1447
1675
  title ? /* @__PURE__ */ jsxs21("header", { className: "pire-dialog-head", children: [
1448
1676
  /* @__PURE__ */ jsxs21("div", { style: { flex: 1, minWidth: 0 }, children: [
1449
- /* @__PURE__ */ jsx27(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
1450
- subtitle ? /* @__PURE__ */ jsx27("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1677
+ /* @__PURE__ */ jsx28(Heading4, { slot: "title", className: "pire-dialog-title", children: title }),
1678
+ subtitle ? /* @__PURE__ */ jsx28("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
1451
1679
  ] }),
1452
- showClose ? /* @__PURE__ */ jsx27(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1680
+ showClose ? /* @__PURE__ */ jsx28(IconButton, { icon: "x", label: msg.dialogClose, size: "sm", onPress: close }) : null
1453
1681
  ] }) : null,
1454
- children ? /* @__PURE__ */ jsx27("div", { className: "pire-dialog-body", children }) : null,
1455
- footer ? /* @__PURE__ */ jsx27("footer", { className: "pire-dialog-foot", children: footer }) : null
1682
+ children ? /* @__PURE__ */ jsx28("div", { className: "pire-dialog-body", children }) : null,
1683
+ footer ? /* @__PURE__ */ jsx28("footer", { className: "pire-dialog-foot", children: footer }) : null
1456
1684
  ] }) })
1457
1685
  }
1458
1686
  );
@@ -1469,9 +1697,9 @@ import {
1469
1697
  } from "react-aria-components";
1470
1698
 
1471
1699
  // src/components/feedback/Skeleton.tsx
1472
- import { jsx as jsx28 } from "react/jsx-runtime";
1700
+ import { jsx as jsx29 } from "react/jsx-runtime";
1473
1701
  function Skeleton({ shape = "text", width, height, className, style, ...rest }) {
1474
- return /* @__PURE__ */ jsx28(
1702
+ return /* @__PURE__ */ jsx29(
1475
1703
  "div",
1476
1704
  {
1477
1705
  className: cx("pire-skeleton", className),
@@ -1485,7 +1713,7 @@ function Skeleton({ shape = "text", width, height, className, style, ...rest })
1485
1713
  var BAR_WIDTHS = ["72%", "54%", "86%", "63%"];
1486
1714
  function SkeletonTableRow({ columns, density = "regular", className, style, ...rest }) {
1487
1715
  const cells = typeof columns === "number" ? Array.from({ length: columns }, () => ({})) : columns;
1488
- return /* @__PURE__ */ jsx28(
1716
+ return /* @__PURE__ */ jsx29(
1489
1717
  "div",
1490
1718
  {
1491
1719
  className: cx("pire-skeleton-row", className),
@@ -1497,13 +1725,13 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1497
1725
  const align = c.numeric ? "right" : c.align ?? "left";
1498
1726
  return (
1499
1727
  // biome-ignore lint/suspicious/noArrayIndexKey: columns are positional and never reordered.
1500
- /* @__PURE__ */ jsx28(
1728
+ /* @__PURE__ */ jsx29(
1501
1729
  "div",
1502
1730
  {
1503
1731
  className: "pire-skeleton-cell",
1504
1732
  "data-align": align,
1505
1733
  style: { width: c.width, flex: c.width ? "0 0 auto" : void 0 },
1506
- children: /* @__PURE__ */ jsx28(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1734
+ children: /* @__PURE__ */ jsx29(Skeleton, { width: BAR_WIDTHS[i % BAR_WIDTHS.length] })
1507
1735
  },
1508
1736
  i
1509
1737
  )
@@ -1514,7 +1742,7 @@ function SkeletonTableRow({ columns, density = "regular", className, style, ...r
1514
1742
  }
1515
1743
 
1516
1744
  // src/components/data/DataTable.tsx
1517
- import { jsx as jsx29, jsxs as jsxs22 } from "react/jsx-runtime";
1745
+ import { jsx as jsx30, jsxs as jsxs22 } from "react/jsx-runtime";
1518
1746
  function DataTable({
1519
1747
  columns,
1520
1748
  rows,
@@ -1546,7 +1774,7 @@ function DataTable({
1546
1774
  ...columns.map((c) => ({ width: c.width, align: c.align, numeric: c.numeric }))
1547
1775
  ];
1548
1776
  const body = isLoading ? [] : rows;
1549
- return /* @__PURE__ */ jsx29(
1777
+ return /* @__PURE__ */ jsx30(
1550
1778
  "div",
1551
1779
  {
1552
1780
  className: cx("pire-table-wrap", className),
@@ -1571,8 +1799,8 @@ function DataTable({
1571
1799
  } : void 0,
1572
1800
  children: [
1573
1801
  /* @__PURE__ */ jsxs22(TableHeader, { className: "pire-thead-row", children: [
1574
- selectable ? /* @__PURE__ */ jsx29(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx29(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1575
- columns.map((c, i) => /* @__PURE__ */ jsx29(
1802
+ selectable ? /* @__PURE__ */ jsx30(Column, { className: "pire-th", width: 44, children: /* @__PURE__ */ jsx30(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectAll }) }) : null,
1803
+ columns.map((c, i) => /* @__PURE__ */ jsx30(
1576
1804
  Column,
1577
1805
  {
1578
1806
  id: c.key,
@@ -1584,7 +1812,7 @@ function DataTable({
1584
1812
  "data-allows-sorting": c.sortable ? "true" : void 0,
1585
1813
  children: /* @__PURE__ */ jsxs22("span", { className: "pire-th-inner", children: [
1586
1814
  c.label,
1587
- c.sortable ? /* @__PURE__ */ jsx29(
1815
+ c.sortable ? /* @__PURE__ */ jsx30(
1588
1816
  Icon,
1589
1817
  {
1590
1818
  size: 12,
@@ -1597,15 +1825,15 @@ function DataTable({
1597
1825
  c.key
1598
1826
  ))
1599
1827
  ] }),
1600
- /* @__PURE__ */ jsx29(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs22("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1601
- /* @__PURE__ */ jsx29("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1828
+ /* @__PURE__ */ jsx30(TableBody, { renderEmptyState: () => isLoading ? /* @__PURE__ */ jsxs22("div", { className: "pire-table-loading", role: "status", "aria-live": "polite", children: [
1829
+ /* @__PURE__ */ jsx30("span", { className: "pire-sr-only", children: loadingLabel ?? msg.dataTableLoading }),
1602
1830
  Array.from({ length: skeletonRows }, (_, i) => (
1603
1831
  // biome-ignore lint/suspicious/noArrayIndexKey: placeholder rows are positional.
1604
- /* @__PURE__ */ jsx29(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1832
+ /* @__PURE__ */ jsx30(SkeletonTableRow, { columns: skeletonColumns, density }, i)
1605
1833
  ))
1606
- ] }) : /* @__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: [
1607
- selectable ? /* @__PURE__ */ jsx29(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx29(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1608
- columns.map((c) => /* @__PURE__ */ jsx29(
1834
+ ] }) : /* @__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: [
1835
+ selectable ? /* @__PURE__ */ jsx30(Cell, { className: "pire-td", children: /* @__PURE__ */ jsx30(Checkbox, { slot: "selection", "aria-label": msg.dataTableSelectRow }) }) : null,
1836
+ columns.map((c) => /* @__PURE__ */ jsx30(
1609
1837
  Cell,
1610
1838
  {
1611
1839
  className: "pire-td",
@@ -1624,69 +1852,83 @@ function DataTable({
1624
1852
  }
1625
1853
 
1626
1854
  // src/components/patterns/ValueHelpDialog.tsx
1627
- import { jsx as jsx30, jsxs as jsxs23 } from "react/jsx-runtime";
1855
+ import { jsx as jsx31, jsxs as jsxs23 } from "react/jsx-runtime";
1628
1856
  function ValueHelpDialog({
1629
1857
  isOpen,
1630
- title = "Select a record",
1858
+ title,
1631
1859
  columns = [],
1632
1860
  rows = [],
1633
- searchPlaceholder = "Search by ID or name",
1861
+ searchPlaceholder,
1634
1862
  emptyLabel,
1863
+ onSearch,
1864
+ isFilteredExternally,
1865
+ isLoading,
1866
+ onLoadMore,
1635
1867
  onSelect,
1636
1868
  onClose
1637
1869
  }) {
1638
1870
  const msg = usePireMessages();
1639
- const [query, setQuery] = React8.useState("");
1640
- React8.useEffect(() => {
1871
+ const [query, setQuery] = React9.useState("");
1872
+ React9.useEffect(() => {
1641
1873
  if (isOpen) setQuery("");
1642
1874
  }, [isOpen]);
1643
- const filtered = React8.useMemo(() => {
1875
+ const filtered = React9.useMemo(() => {
1876
+ if (isFilteredExternally) return rows;
1644
1877
  const q = query.trim().toLowerCase();
1645
1878
  if (!q) return rows;
1646
1879
  return rows.filter((row) => Object.values(row).some((v) => String(v).toLowerCase().includes(q)));
1647
- }, [rows, query]);
1648
- return /* @__PURE__ */ jsx30(
1880
+ }, [rows, query, isFilteredExternally]);
1881
+ const handleSearch = (value) => {
1882
+ setQuery(value);
1883
+ onSearch?.(value);
1884
+ };
1885
+ return /* @__PURE__ */ jsx31(
1649
1886
  Dialog,
1650
1887
  {
1651
1888
  isOpen,
1652
1889
  size: "lg",
1653
- title,
1890
+ title: title ?? msg.valueHelpDialogTitle,
1654
1891
  onClose,
1655
- footer: /* @__PURE__ */ jsx30(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1892
+ footer: /* @__PURE__ */ jsx31(Button, { variant: "tertiary", onPress: onClose, children: msg.valueHelpDialogCancel }),
1656
1893
  children: /* @__PURE__ */ jsxs23("div", { style: { display: "flex", flexDirection: "column", gap: "var(--sp-3)" }, children: [
1657
- /* @__PURE__ */ jsx30(
1894
+ /* @__PURE__ */ jsx31(
1658
1895
  Input,
1659
1896
  {
1660
1897
  "aria-label": msg.valueHelpDialogSearch,
1661
1898
  icon: "search",
1662
1899
  type: "search",
1663
1900
  value: query,
1664
- onChange: setQuery,
1665
- placeholder: searchPlaceholder,
1901
+ onChange: handleSearch,
1902
+ isClearable: true,
1903
+ placeholder: searchPlaceholder ?? msg.valueHelpDialogSearchPlaceholder,
1666
1904
  autoFocus: true
1667
1905
  }
1668
1906
  ),
1669
- /* @__PURE__ */ jsx30(
1907
+ /* @__PURE__ */ jsx31("div", { onScroll: onLoadMore ? (event) => {
1908
+ const el = event.currentTarget;
1909
+ if (el.scrollHeight - el.scrollTop - el.clientHeight < 64) onLoadMore();
1910
+ } : void 0, style: { overflow: "auto", maxHeight: "48vh" }, children: /* @__PURE__ */ jsx31(
1670
1911
  DataTable,
1671
1912
  {
1672
- "aria-label": typeof title === "string" ? title : "Records",
1913
+ "aria-label": typeof title === "string" ? title : msg.valueHelpDialogTitle,
1673
1914
  density: "condensed",
1674
1915
  columns,
1675
1916
  rows: filtered,
1676
- emptyLabel: emptyLabel ?? `No records match \u201C${query}\u201D.`,
1917
+ isLoading,
1918
+ emptyLabel: emptyLabel ?? msg.valueHelpDialogEmpty,
1677
1919
  onRowAction: (row) => {
1678
1920
  onSelect?.(row);
1679
1921
  onClose?.();
1680
1922
  }
1681
1923
  }
1682
- )
1924
+ ) })
1683
1925
  ] })
1684
1926
  }
1685
1927
  );
1686
1928
  }
1687
1929
 
1688
1930
  // src/components/forms/ValueHelpField.tsx
1689
- import { jsx as jsx31, jsxs as jsxs24 } from "react/jsx-runtime";
1931
+ import { jsx as jsx32, jsxs as jsxs24 } from "react/jsx-runtime";
1690
1932
  var defaultFormat = (row) => [row.id, row.name ?? row.label ?? row.text].filter(Boolean).join(" \u2014 ");
1691
1933
  function ValueHelpField({
1692
1934
  label,
@@ -1696,7 +1938,12 @@ function ValueHelpField({
1696
1938
  rows = [],
1697
1939
  columns = [],
1698
1940
  dialogTitle,
1699
- placeholder = "Not selected",
1941
+ onSearch,
1942
+ isFilteredExternally,
1943
+ isLoading,
1944
+ onLoadMore,
1945
+ emptyLabel,
1946
+ placeholder,
1700
1947
  description,
1701
1948
  errorMessage,
1702
1949
  isInvalid,
@@ -1707,52 +1954,55 @@ function ValueHelpField({
1707
1954
  style
1708
1955
  }) {
1709
1956
  const msg = usePireMessages();
1710
- const [open, setOpen] = React9.useState(false);
1957
+ const [open, setOpen] = React10.useState(false);
1711
1958
  return /* @__PURE__ */ jsxs24("div", { className: cx(className), style, children: [
1712
- /* @__PURE__ */ jsxs24("div", { style: { display: "flex", gap: "var(--sp-2)", alignItems: "flex-end" }, children: [
1713
- /* @__PURE__ */ jsx31(
1714
- Input,
1715
- {
1716
- label,
1717
- isReadOnly: true,
1718
- isInvalid,
1719
- isDisabled,
1720
- isRequired,
1721
- value: value ? format(value) : "",
1722
- placeholder,
1723
- description,
1724
- errorMessage
1725
- }
1726
- ),
1727
- allowsClear && value ? /* @__PURE__ */ jsx31(
1728
- IconButton,
1729
- {
1730
- icon: "x",
1731
- label: msg.valueHelpFieldClear,
1732
- variant: "outlined",
1733
- isDisabled,
1734
- onPress: () => onChange?.(null)
1735
- }
1736
- ) : null,
1737
- /* @__PURE__ */ jsx31(
1738
- IconButton,
1739
- {
1740
- icon: "search",
1741
- label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1742
- variant: "outlined",
1743
- isDisabled,
1744
- onPress: () => setOpen(true)
1745
- }
1746
- )
1747
- ] }),
1748
- /* @__PURE__ */ jsx31(
1959
+ /* @__PURE__ */ jsx32(
1960
+ Input,
1961
+ {
1962
+ label,
1963
+ isReadOnly: true,
1964
+ isInvalid,
1965
+ isDisabled,
1966
+ isRequired,
1967
+ value: value ? format(value) : "",
1968
+ placeholder: placeholder ?? msg.valueHelpFieldPlaceholder,
1969
+ description,
1970
+ errorMessage,
1971
+ suffix: /* @__PURE__ */ jsxs24("span", { className: "pire-valuehelp-actions", children: [
1972
+ allowsClear && value ? /* @__PURE__ */ jsx32(
1973
+ IconButton,
1974
+ {
1975
+ icon: "x",
1976
+ label: msg.valueHelpFieldClear,
1977
+ isDisabled,
1978
+ onPress: () => onChange?.(null)
1979
+ }
1980
+ ) : null,
1981
+ /* @__PURE__ */ jsx32(
1982
+ IconButton,
1983
+ {
1984
+ icon: "search",
1985
+ label: typeof label === "string" ? msg.valueHelpFieldOpenNamed.replace("{label}", label.toLowerCase()) : msg.valueHelpFieldOpen,
1986
+ isDisabled,
1987
+ onPress: () => setOpen(true)
1988
+ }
1989
+ )
1990
+ ] })
1991
+ }
1992
+ ),
1993
+ /* @__PURE__ */ jsx32(
1749
1994
  ValueHelpDialog,
1750
1995
  {
1751
1996
  isOpen: open,
1752
1997
  onClose: () => setOpen(false),
1753
- title: dialogTitle ?? label ?? "Select a record",
1998
+ title: dialogTitle ?? label,
1754
1999
  columns,
1755
2000
  rows,
2001
+ onSearch,
2002
+ isFilteredExternally,
2003
+ isLoading,
2004
+ onLoadMore,
2005
+ emptyLabel,
1756
2006
  onSelect: (row) => onChange?.(row)
1757
2007
  }
1758
2008
  )
@@ -1760,12 +2010,12 @@ function ValueHelpField({
1760
2010
  }
1761
2011
 
1762
2012
  // src/components/forms/FileUpload.tsx
1763
- import * as React10 from "react";
2013
+ import * as React11 from "react";
1764
2014
  import { FileTrigger, Text as Text11 } from "react-aria-components";
1765
2015
 
1766
2016
  // src/components/feedback/ProgressBar.tsx
1767
2017
  import { ProgressBar as AriaProgressBar, Label as Label10 } from "react-aria-components";
1768
- import { Fragment as Fragment2, jsx as jsx32, jsxs as jsxs25 } from "react/jsx-runtime";
2018
+ import { Fragment as Fragment2, jsx as jsx33, jsxs as jsxs25 } from "react/jsx-runtime";
1769
2019
  function ProgressBar({
1770
2020
  value = 0,
1771
2021
  minValue = 0,
@@ -1778,7 +2028,7 @@ function ProgressBar({
1778
2028
  className,
1779
2029
  style
1780
2030
  }) {
1781
- return /* @__PURE__ */ jsx32(
2031
+ return /* @__PURE__ */ jsx33(
1782
2032
  AriaProgressBar,
1783
2033
  {
1784
2034
  className: cx("pire-progress", className),
@@ -1791,17 +2041,17 @@ function ProgressBar({
1791
2041
  style,
1792
2042
  children: ({ percentage, valueText }) => /* @__PURE__ */ jsxs25(Fragment2, { children: [
1793
2043
  label || showValue ? /* @__PURE__ */ jsxs25("div", { className: "pire-progress-head", children: [
1794
- label ? /* @__PURE__ */ jsx32(Label10, { children: label }) : /* @__PURE__ */ jsx32("span", {}),
1795
- showValue && !isIndeterminate ? /* @__PURE__ */ jsx32("span", { className: "pire-numeric", children: valueText }) : null
2044
+ label ? /* @__PURE__ */ jsx33(Label10, { children: label }) : /* @__PURE__ */ jsx33("span", {}),
2045
+ showValue && !isIndeterminate ? /* @__PURE__ */ jsx33("span", { className: "pire-numeric", children: valueText }) : null
1796
2046
  ] }) : null,
1797
- /* @__PURE__ */ jsx32("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx32("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
2047
+ /* @__PURE__ */ jsx33("div", { className: "pire-progress-track", children: /* @__PURE__ */ jsx33("div", { className: "pire-progress-fill", style: { width: `${isIndeterminate ? 40 : percentage}%` } }) })
1798
2048
  ] })
1799
2049
  }
1800
2050
  );
1801
2051
  }
1802
2052
 
1803
2053
  // src/components/forms/FileUpload.tsx
1804
- import { jsx as jsx33, jsxs as jsxs26 } from "react/jsx-runtime";
2054
+ import { jsx as jsx34, jsxs as jsxs26 } from "react/jsx-runtime";
1805
2055
  var isImage = (file) => file.type.startsWith("image/");
1806
2056
  function formatFileSize(bytes) {
1807
2057
  if (bytes < 1024) return `${bytes} B`;
@@ -1850,10 +2100,10 @@ function FileUpload({
1850
2100
  style
1851
2101
  }) {
1852
2102
  const msg = usePireMessages();
1853
- const [uncontrolled, setUncontrolled] = React10.useState(defaultValue ?? []);
2103
+ const [uncontrolled, setUncontrolled] = React11.useState(defaultValue ?? []);
1854
2104
  const files = value ?? uncontrolled;
1855
- const created = React10.useRef([]);
1856
- React10.useEffect(() => () => {
2105
+ const created = React11.useRef([]);
2106
+ React11.useEffect(() => () => {
1857
2107
  for (const url of created.current) URL.revokeObjectURL(url);
1858
2108
  }, []);
1859
2109
  const commit = (next) => {
@@ -1883,22 +2133,22 @@ function FileUpload({
1883
2133
  children: [
1884
2134
  label ? /* @__PURE__ */ jsxs26("span", { className: "pire-field-label", children: [
1885
2135
  label,
1886
- isRequired ? /* @__PURE__ */ jsx33("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
2136
+ isRequired ? /* @__PURE__ */ jsx34("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
1887
2137
  ] }) : null,
1888
- /* @__PURE__ */ jsx33(
2138
+ /* @__PURE__ */ jsx34(
1889
2139
  FileTrigger,
1890
2140
  {
1891
2141
  acceptedFileTypes,
1892
2142
  allowsMultiple,
1893
2143
  onSelect: accept,
1894
- children: /* @__PURE__ */ jsx33(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
2144
+ children: /* @__PURE__ */ jsx34(Button, { icon: "paperclip", isDisabled: isDisabled || isReadOnly, children: chooseLabel ?? msg.fileUploadChoose })
1895
2145
  }
1896
2146
  ),
1897
- files.length ? /* @__PURE__ */ jsx33("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs26("li", { className: "pire-fileupload-item", children: [
1898
- previewUrl ? /* @__PURE__ */ jsx33("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx33(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
1899
- /* @__PURE__ */ jsx33("span", { className: "pire-fileupload-name", children: file.name }),
1900
- /* @__PURE__ */ jsx33("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
1901
- isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx33(
2147
+ files.length ? /* @__PURE__ */ jsx34("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs26("li", { className: "pire-fileupload-item", children: [
2148
+ previewUrl ? /* @__PURE__ */ jsx34("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx34(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
2149
+ /* @__PURE__ */ jsx34("span", { className: "pire-fileupload-name", children: file.name }),
2150
+ /* @__PURE__ */ jsx34("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
2151
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx34(
1902
2152
  IconButton,
1903
2153
  {
1904
2154
  icon: "x",
@@ -1908,16 +2158,17 @@ function FileUpload({
1908
2158
  }
1909
2159
  )
1910
2160
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
1911
- uploadProgress != null ? /* @__PURE__ */ jsx33(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
1912
- description ? /* @__PURE__ */ jsx33(Text11, { slot: "description", className: "pire-field-hint", children: description }) : null,
1913
- isInvalid && errorMessage ? /* @__PURE__ */ jsx33("span", { className: "pire-field-error", children: errorMessage }) : null
2161
+ uploadProgress != null ? /* @__PURE__ */ jsx34(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
2162
+ description ? /* @__PURE__ */ jsx34(Text11, { slot: "description", className: "pire-field-hint", children: description }) : null,
2163
+ isInvalid && errorMessage ? /* @__PURE__ */ jsx34("span", { className: "pire-field-error", children: errorMessage }) : null
1914
2164
  ]
1915
2165
  }
1916
2166
  );
1917
2167
  }
1918
2168
 
1919
2169
  // src/components/navigation/ShellBar.tsx
1920
- import { jsx as jsx34, jsxs as jsxs27 } from "react/jsx-runtime";
2170
+ import { MenuTrigger, Button as AriaButton11, Popover as Popover6 } from "react-aria-components";
2171
+ import { jsx as jsx35, jsxs as jsxs27 } from "react/jsx-runtime";
1921
2172
  var initials2 = (name) => name.trim().split(/\s+/).slice(0, 2).map((p) => p[0]).join("").toUpperCase();
1922
2173
  function ShellBar({
1923
2174
  product,
@@ -1929,30 +2180,48 @@ function ShellBar({
1929
2180
  searchLabel = "Search",
1930
2181
  actions,
1931
2182
  user,
2183
+ userMenu,
2184
+ userMenuLabel,
1932
2185
  className,
1933
2186
  ...rest
1934
2187
  }) {
2188
+ const msg = usePireMessages();
1935
2189
  return /* @__PURE__ */ jsxs27("header", { className: cx("pire-shellbar", className), ...rest, children: [
1936
- onMenu ? /* @__PURE__ */ jsx34(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
1937
- monogram ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
1938
- product ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-product", children: product }) : null,
1939
- title ? /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-title", children: title }) : null,
1940
- /* @__PURE__ */ jsx34("span", { className: "pire-shellbar-spacer" }),
1941
- onSearch ? /* @__PURE__ */ jsx34(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
2190
+ onMenu ? /* @__PURE__ */ jsx35(IconButton, { icon: "menu", label: menuLabel, variant: "inverse", size: "sm", onPress: onMenu }) : null,
2191
+ monogram ? /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-mono", "aria-hidden": "true", children: monogram }) : null,
2192
+ product ? /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-product", children: product }) : null,
2193
+ title ? /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-title", children: title }) : null,
2194
+ /* @__PURE__ */ jsx35("span", { className: "pire-shellbar-spacer" }),
2195
+ onSearch ? /* @__PURE__ */ jsx35(IconButton, { icon: "search", label: searchLabel, variant: "inverse", size: "sm", onPress: onSearch }) : null,
1942
2196
  actions,
1943
- user ? /* @__PURE__ */ jsx34("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
2197
+ user && userMenu ? (
2198
+ // A real button, not the img-role span: the avatar is where "my profile", "switch company"
2199
+ // and "sign out" live in any ERP, and a span accepts neither focus nor onPress. Popover is
2200
+ // rendered here rather than expected from the consumer so the panel keeps shell placement.
2201
+ /* @__PURE__ */ jsxs27(MenuTrigger, { children: [
2202
+ /* @__PURE__ */ jsx35(
2203
+ AriaButton11,
2204
+ {
2205
+ className: "pire-avatar pire-avatar-trigger",
2206
+ "aria-label": (userMenuLabel ?? msg.shellBarUserMenu).replace("{user}", user),
2207
+ children: initials2(user)
2208
+ }
2209
+ ),
2210
+ /* @__PURE__ */ jsx35(Popover6, { className: "pire-popover", children: userMenu })
2211
+ ] })
2212
+ ) : user ? /* @__PURE__ */ jsx35("span", { className: "pire-avatar", title: user, "aria-label": user, role: "img", children: initials2(user) }) : null
1944
2213
  ] });
1945
2214
  }
1946
2215
 
1947
2216
  // src/components/navigation/SideNav.tsx
1948
- import * as React11 from "react";
2217
+ import * as React12 from "react";
1949
2218
  import {
1950
- Button as AriaButton10,
2219
+ Button as AriaButton12,
1951
2220
  Disclosure,
1952
2221
  DisclosureGroup,
1953
2222
  DisclosurePanel,
1954
- MenuTrigger,
1955
- Popover as Popover6
2223
+ MenuTrigger as MenuTrigger2,
2224
+ Popover as Popover7
1956
2225
  } from "react-aria-components";
1957
2226
 
1958
2227
  // src/components/navigation/Menu.tsx
@@ -1963,11 +2232,11 @@ import {
1963
2232
  Separator as AriaSeparator2,
1964
2233
  Header
1965
2234
  } from "react-aria-components";
1966
- import { jsx as jsx35, jsxs as jsxs28 } from "react/jsx-runtime";
2235
+ import { jsx as jsx36, jsxs as jsxs28 } from "react/jsx-runtime";
1967
2236
  function Menu({ minWidth, className, style, ...rest }) {
1968
2237
  const width = typeof minWidth === "number" ? `${minWidth}px` : minWidth;
1969
2238
  const menuStyle = width == null ? style : { ["--pire-menu-min-w"]: width, ...style };
1970
- return /* @__PURE__ */ jsx35(
2239
+ return /* @__PURE__ */ jsx36(
1971
2240
  AriaMenu,
1972
2241
  {
1973
2242
  className: cx("pire-menu", className),
@@ -1976,6 +2245,11 @@ function Menu({ minWidth, className, style, ...rest }) {
1976
2245
  }
1977
2246
  );
1978
2247
  }
2248
+ var shortcutKeys = (shortcut) => {
2249
+ if (shortcut == null) return [];
2250
+ const parts = Array.isArray(shortcut) ? shortcut : shortcut.split(/[+\s]+/);
2251
+ return parts.map((part) => part.trim()).filter(Boolean);
2252
+ };
1979
2253
  function MenuItem({
1980
2254
  children,
1981
2255
  icon,
@@ -1985,6 +2259,7 @@ function MenuItem({
1985
2259
  className,
1986
2260
  ...rest
1987
2261
  }) {
2262
+ const keys = shortcutKeys(shortcut);
1988
2263
  return /* @__PURE__ */ jsxs28(
1989
2264
  AriaMenuItem,
1990
2265
  {
@@ -1992,28 +2267,28 @@ function MenuItem({
1992
2267
  "data-tone": tone === "danger" ? "danger" : void 0,
1993
2268
  ...rest,
1994
2269
  children: [
1995
- icon ? /* @__PURE__ */ jsx35(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
2270
+ icon ? /* @__PURE__ */ jsx36(Icon, { name: icon, size: 16, className: "pire-menu-item-icon" }) : null,
1996
2271
  /* @__PURE__ */ jsxs28("span", { className: "pire-menu-item-body", children: [
1997
- /* @__PURE__ */ jsx35("span", { className: "pire-menu-item-label", children }),
1998
- description ? /* @__PURE__ */ jsx35("span", { className: "pire-menu-item-desc", children: description }) : null
2272
+ /* @__PURE__ */ jsx36("span", { className: "pire-menu-item-label", children }),
2273
+ description ? /* @__PURE__ */ jsx36("span", { className: "pire-menu-item-desc", children: description }) : null
1999
2274
  ] }),
2000
- shortcut ? /* @__PURE__ */ jsx35("kbd", { className: "pire-menu-item-shortcut", children: shortcut }) : null
2275
+ 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
2001
2276
  ]
2002
2277
  }
2003
2278
  );
2004
2279
  }
2005
2280
  function MenuSection({ title, children, className, ...rest }) {
2006
2281
  return /* @__PURE__ */ jsxs28(AriaMenuSection, { className: cx("pire-menu-section", className), ...rest, children: [
2007
- title ? /* @__PURE__ */ jsx35(Header, { className: "pire-menu-section-title", children: title }) : null,
2282
+ title ? /* @__PURE__ */ jsx36(Header, { className: "pire-menu-section-title", children: title }) : null,
2008
2283
  children
2009
2284
  ] });
2010
2285
  }
2011
2286
  function MenuSeparator({ className }) {
2012
- return /* @__PURE__ */ jsx35(AriaSeparator2, { className: cx("pire-menu-separator", className) });
2287
+ return /* @__PURE__ */ jsx36(AriaSeparator2, { className: cx("pire-menu-separator", className) });
2013
2288
  }
2014
2289
 
2015
2290
  // src/components/navigation/SideNav.tsx
2016
- import { jsx as jsx36, jsxs as jsxs29 } from "react/jsx-runtime";
2291
+ import { jsx as jsx37, jsxs as jsxs29 } from "react/jsx-runtime";
2017
2292
  function findActiveParent(groups, value) {
2018
2293
  if (value == null) return void 0;
2019
2294
  for (const group of groups) {
@@ -2039,10 +2314,10 @@ function SideNav({
2039
2314
  const msg = usePireMessages();
2040
2315
  const activeParent = findActiveParent(groups, value);
2041
2316
  const isControlled = expandedIds != null;
2042
- const [ownExpanded, setOwnExpanded] = React11.useState(
2317
+ const [ownExpanded, setOwnExpanded] = React12.useState(
2043
2318
  () => new Set(defaultExpandedIds ?? (activeParent ? [activeParent] : []))
2044
2319
  );
2045
- const [lastValue, setLastValue] = React11.useState(value);
2320
+ const [lastValue, setLastValue] = React12.useState(value);
2046
2321
  if (value !== lastValue) {
2047
2322
  setLastValue(value);
2048
2323
  if (!isControlled && activeParent && !ownExpanded.has(activeParent)) {
@@ -2063,7 +2338,7 @@ function SideNav({
2063
2338
  const renderRow = (item, onPress, isGroup) => {
2064
2339
  const selected = !isGroup && item.id === value;
2065
2340
  const button = /* @__PURE__ */ jsxs29(
2066
- AriaButton10,
2341
+ AriaButton12,
2067
2342
  {
2068
2343
  className: "pire-sidenav-item",
2069
2344
  "data-selected": selected ? "true" : void 0,
@@ -2072,63 +2347,63 @@ function SideNav({
2072
2347
  "aria-label": collapsed ? item.label : void 0,
2073
2348
  onPress,
2074
2349
  children: [
2075
- item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2076
- collapsed ? null : /* @__PURE__ */ jsx36("span", { children: item.label }),
2077
- item.count != null && !collapsed ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: item.count }) : null
2350
+ item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2351
+ collapsed ? null : /* @__PURE__ */ jsx37("span", { children: item.label }),
2352
+ item.count != null && !collapsed ? /* @__PURE__ */ jsx37("span", { className: "pire-sidenav-count", children: item.count }) : null
2078
2353
  ]
2079
2354
  },
2080
2355
  item.id
2081
2356
  );
2082
- return collapsed ? /* @__PURE__ */ jsx36(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2357
+ return collapsed ? /* @__PURE__ */ jsx37(Tooltip, { label: item.label, placement: "right", children: button }, item.id) : button;
2083
2358
  };
2084
- const renderRailFlyout = (item) => /* @__PURE__ */ jsxs29(MenuTrigger, { children: [
2085
- /* @__PURE__ */ jsx36(
2086
- AriaButton10,
2359
+ const renderRailFlyout = (item) => /* @__PURE__ */ jsxs29(MenuTrigger2, { children: [
2360
+ /* @__PURE__ */ jsx37(
2361
+ AriaButton12,
2087
2362
  {
2088
2363
  className: "pire-sidenav-item",
2089
2364
  "aria-label": item.label,
2090
2365
  "data-active-child": item.id === activeParent ? "true" : void 0,
2091
- children: item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null
2366
+ children: item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null
2092
2367
  }
2093
2368
  ),
2094
- /* @__PURE__ */ jsx36(Popover6, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ jsx36(
2369
+ /* @__PURE__ */ jsx37(Popover7, { className: "pire-popover", placement: "right top", offset: 4, children: /* @__PURE__ */ jsx37(
2095
2370
  Menu,
2096
2371
  {
2097
2372
  "aria-label": item.label,
2098
2373
  className: "pire-sidenav-flyout",
2099
2374
  onAction: (key) => onChange?.(String(key)),
2100
- children: (item.items ?? []).map((child) => /* @__PURE__ */ jsx36(MenuItem, { id: child.id, children: child.label }, child.id))
2375
+ children: (item.items ?? []).map((child) => /* @__PURE__ */ jsx37(MenuItem, { id: child.id, children: child.label }, child.id))
2101
2376
  }
2102
2377
  ) })
2103
2378
  ] }, item.id);
2104
2379
  const renderSection = (item) => /* @__PURE__ */ jsxs29(Disclosure, { id: item.id, className: "pire-sidenav-section", children: [
2105
2380
  /* @__PURE__ */ jsxs29(
2106
- AriaButton10,
2381
+ AriaButton12,
2107
2382
  {
2108
2383
  slot: "trigger",
2109
2384
  className: "pire-sidenav-item",
2110
2385
  "data-kind": "group",
2111
2386
  "data-active-child": item.id === activeParent ? "true" : void 0,
2112
2387
  children: [
2113
- item.icon ? /* @__PURE__ */ jsx36(Icon, { name: item.icon, size: 16 }) : null,
2114
- /* @__PURE__ */ jsx36("span", { children: item.label }),
2115
- item.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: item.count }) : null,
2116
- /* @__PURE__ */ jsx36(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2388
+ item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2389
+ /* @__PURE__ */ jsx37("span", { children: item.label }),
2390
+ item.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-sidenav-count", children: item.count }) : null,
2391
+ /* @__PURE__ */ jsx37(Icon, { name: "chevron-down", size: 16, className: "pire-sidenav-chevron" })
2117
2392
  ]
2118
2393
  }
2119
2394
  ),
2120
- /* @__PURE__ */ jsx36(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2395
+ /* @__PURE__ */ jsx37(DisclosurePanel, { className: "pire-sidenav-subnav", children: item.items?.map((child) => {
2121
2396
  const selected = child.id === value;
2122
2397
  return /* @__PURE__ */ jsxs29(
2123
- AriaButton10,
2398
+ AriaButton12,
2124
2399
  {
2125
2400
  className: "pire-sidenav-item pire-sidenav-subitem",
2126
2401
  "data-selected": selected ? "true" : void 0,
2127
2402
  "aria-current": selected ? "page" : void 0,
2128
2403
  onPress: () => onChange?.(child.id),
2129
2404
  children: [
2130
- /* @__PURE__ */ jsx36("span", { children: child.label }),
2131
- child.count != null ? /* @__PURE__ */ jsx36("span", { className: "pire-sidenav-count", children: child.count }) : null
2405
+ /* @__PURE__ */ jsx37("span", { children: child.label }),
2406
+ child.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-sidenav-count", children: child.count }) : null
2132
2407
  ]
2133
2408
  },
2134
2409
  child.id
@@ -2152,8 +2427,8 @@ function SideNav({
2152
2427
  return renderRow(item, () => isGroup ? toggleExpanded(item.id) : onChange?.(item.id), isGroup);
2153
2428
  });
2154
2429
  return /* @__PURE__ */ jsxs29("div", { className: "pire-sidenav-group", children: [
2155
- group.label && !collapsed ? /* @__PURE__ */ jsx36("div", { className: "pire-sidenav-label", children: group.label }) : null,
2156
- hasSections ? /* @__PURE__ */ jsx36(
2430
+ group.label && !collapsed ? /* @__PURE__ */ jsx37("div", { className: "pire-sidenav-label", children: group.label }) : null,
2431
+ hasSections ? /* @__PURE__ */ jsx37(
2157
2432
  DisclosureGroup,
2158
2433
  {
2159
2434
  className: "pire-sidenav-tree",
@@ -2165,7 +2440,7 @@ function SideNav({
2165
2440
  ) : rows
2166
2441
  ] }, group.label ?? gi);
2167
2442
  }),
2168
- footer ? /* @__PURE__ */ jsx36("div", { className: "pire-sidenav-footer", children: footer }) : null
2443
+ footer ? /* @__PURE__ */ jsx37("div", { className: "pire-sidenav-footer", children: footer }) : null
2169
2444
  ]
2170
2445
  }
2171
2446
  );
@@ -2173,7 +2448,7 @@ function SideNav({
2173
2448
 
2174
2449
  // src/components/navigation/Tabs.tsx
2175
2450
  import { Tabs as AriaTabs, TabList, Tab as AriaTab, TabPanel } from "react-aria-components";
2176
- import { jsx as jsx37, jsxs as jsxs30 } from "react/jsx-runtime";
2451
+ import { jsx as jsx38, jsxs as jsxs30 } from "react/jsx-runtime";
2177
2452
  function Tabs({ items, value, defaultValue, onChange, panels, className, style, ...rest }) {
2178
2453
  return /* @__PURE__ */ jsxs30(
2179
2454
  AriaTabs,
@@ -2184,12 +2459,12 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2184
2459
  defaultSelectedKey: defaultValue,
2185
2460
  onSelectionChange: (k) => onChange?.(String(k)),
2186
2461
  children: [
2187
- /* @__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: [
2188
- item.icon ? /* @__PURE__ */ jsx37(Icon, { name: item.icon, size: 16 }) : null,
2462
+ /* @__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: [
2463
+ item.icon ? /* @__PURE__ */ jsx38(Icon, { name: item.icon, size: 16 }) : null,
2189
2464
  item.label,
2190
- item.count != null ? /* @__PURE__ */ jsx37("span", { className: "pire-tab-count", children: item.count }) : null
2465
+ item.count != null ? /* @__PURE__ */ jsx38("span", { className: "pire-tab-count", children: item.count }) : null
2191
2466
  ] }) }),
2192
- items.map((item) => /* @__PURE__ */ jsx37(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2467
+ items.map((item) => /* @__PURE__ */ jsx38(TabPanel, { id: item.id, className: panels ? "pire-tabpanel" : void 0, children: panels?.[item.id] }, item.id))
2193
2468
  ]
2194
2469
  }
2195
2470
  );
@@ -2197,9 +2472,9 @@ function Tabs({ items, value, defaultValue, onChange, panels, className, style,
2197
2472
 
2198
2473
  // src/components/navigation/Breadcrumb.tsx
2199
2474
  import { Breadcrumbs as AriaBreadcrumbs, Breadcrumb as AriaBreadcrumb, Link as Link2 } from "react-aria-components";
2200
- import { jsx as jsx38, jsxs as jsxs31 } from "react/jsx-runtime";
2475
+ import { jsx as jsx39, jsxs as jsxs31 } from "react/jsx-runtime";
2201
2476
  function Breadcrumb({ items, onNavigate, className, style }) {
2202
- return /* @__PURE__ */ jsx38(
2477
+ return /* @__PURE__ */ jsx39(
2203
2478
  AriaBreadcrumbs,
2204
2479
  {
2205
2480
  className: cx("pire-breadcrumbs", className),
@@ -2209,8 +2484,8 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2209
2484
  children: (item) => {
2210
2485
  const last = items[items.length - 1] === item;
2211
2486
  return /* @__PURE__ */ jsxs31(AriaBreadcrumb, { className: "pire-breadcrumb", id: item.id ?? item.label, children: [
2212
- last ? item.label : /* @__PURE__ */ jsx38(Link2, { href: item.href, children: item.label }),
2213
- last ? null : /* @__PURE__ */ jsx38(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2487
+ last ? item.label : /* @__PURE__ */ jsx39(Link2, { href: item.href, children: item.label }),
2488
+ last ? null : /* @__PURE__ */ jsx39(Icon, { name: "chevron-right", size: 12, style: { color: "var(--text-tertiary)" } })
2214
2489
  ] });
2215
2490
  }
2216
2491
  }
@@ -2218,7 +2493,7 @@ function Breadcrumb({ items, onNavigate, className, style }) {
2218
2493
  }
2219
2494
 
2220
2495
  // src/components/navigation/Pagination.tsx
2221
- import { jsx as jsx39, jsxs as jsxs32 } from "react/jsx-runtime";
2496
+ import { jsx as jsx40, jsxs as jsxs32 } from "react/jsx-runtime";
2222
2497
  function Pagination({
2223
2498
  page = 1,
2224
2499
  pageSize = 25,
@@ -2234,8 +2509,8 @@ function Pagination({
2234
2509
  const from = total === 0 ? 0 : (page - 1) * pageSize + 1;
2235
2510
  const to = Math.min(total, page * pageSize);
2236
2511
  return /* @__PURE__ */ jsxs32("nav", { className: cx("pire-pagination", className), style, "aria-label": msg.paginationLabel, children: [
2237
- /* @__PURE__ */ jsx39("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2238
- /* @__PURE__ */ jsx39(
2512
+ /* @__PURE__ */ jsx40("span", { className: "pire-pagination-count", children: msg.paginationRange.replace("{from}", from.toLocaleString()).replace("{to}", to.toLocaleString()).replace("{total}", total.toLocaleString()) }),
2513
+ /* @__PURE__ */ jsx40(
2239
2514
  IconButton,
2240
2515
  {
2241
2516
  icon: "chevron-left",
@@ -2246,8 +2521,8 @@ function Pagination({
2246
2521
  onPress: () => onPageChange?.(page - 1)
2247
2522
  }
2248
2523
  ),
2249
- /* @__PURE__ */ jsx39("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2250
- /* @__PURE__ */ jsx39(
2524
+ /* @__PURE__ */ jsx40("span", { className: "pire-pagination-count", "aria-live": "polite", children: msg.paginationPageOf.replace("{page}", String(page)).replace("{pages}", String(pages)) }),
2525
+ /* @__PURE__ */ jsx40(
2251
2526
  IconButton,
2252
2527
  {
2253
2528
  icon: "chevron-right",
@@ -2258,7 +2533,7 @@ function Pagination({
2258
2533
  onPress: () => onPageChange?.(page + 1)
2259
2534
  }
2260
2535
  ),
2261
- onPageSizeChange ? /* @__PURE__ */ jsx39(
2536
+ onPageSizeChange ? /* @__PURE__ */ jsx40(
2262
2537
  Select,
2263
2538
  {
2264
2539
  "aria-label": msg.paginationRowsPerPage,
@@ -2274,7 +2549,7 @@ function Pagination({
2274
2549
  }
2275
2550
 
2276
2551
  // src/components/feedback/InlineMessage.tsx
2277
- import { jsx as jsx40, jsxs as jsxs33 } from "react/jsx-runtime";
2552
+ import { jsx as jsx41, jsxs as jsxs33 } from "react/jsx-runtime";
2278
2553
  var KIND_ICON = {
2279
2554
  info: "info",
2280
2555
  success: "check-circle-2",
@@ -2293,21 +2568,21 @@ function InlineMessage({ kind = "info", title, action, onClose, children, classN
2293
2568
  "aria-live": assertive ? "assertive" : "polite",
2294
2569
  ...rest,
2295
2570
  children: [
2296
- /* @__PURE__ */ jsx40(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2571
+ /* @__PURE__ */ jsx41(Icon, { name: KIND_ICON[kind], size: 16, style: { marginTop: 2 } }),
2297
2572
  /* @__PURE__ */ jsxs33("div", { style: { flex: 1, display: "flex", flexDirection: "column", gap: "var(--sp-1)" }, children: [
2298
- title ? /* @__PURE__ */ jsx40("span", { className: "pire-msg-title", children: title }) : null,
2299
- children ? /* @__PURE__ */ jsx40("span", { className: "pire-msg-body", children }) : null,
2573
+ title ? /* @__PURE__ */ jsx41("span", { className: "pire-msg-title", children: title }) : null,
2574
+ children ? /* @__PURE__ */ jsx41("span", { className: "pire-msg-body", children }) : null,
2300
2575
  action
2301
2576
  ] }),
2302
- onClose ? /* @__PURE__ */ jsx40(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2577
+ onClose ? /* @__PURE__ */ jsx41(IconButton, { icon: "x", label: msg.inlineMessageDismiss, size: "sm", onPress: onClose }) : null
2303
2578
  ]
2304
2579
  }
2305
2580
  );
2306
2581
  }
2307
2582
 
2308
2583
  // src/components/feedback/Toast.tsx
2309
- import * as React12 from "react";
2310
- import { jsx as jsx41, jsxs as jsxs34 } from "react/jsx-runtime";
2584
+ import * as React13 from "react";
2585
+ import { jsx as jsx42, jsxs as jsxs34 } from "react/jsx-runtime";
2311
2586
  var KIND_ICON2 = {
2312
2587
  info: "info",
2313
2588
  success: "check-circle-2",
@@ -2325,40 +2600,40 @@ function Toast({ kind = "success", onClose, position = "bottom-center", children
2325
2600
  "aria-live": kind === "error" ? "assertive" : "polite",
2326
2601
  ...rest,
2327
2602
  children: [
2328
- /* @__PURE__ */ jsx41(Icon, { name: KIND_ICON2[kind], size: 16 }),
2329
- /* @__PURE__ */ jsx41("span", { style: { flex: 1 }, children }),
2330
- onClose ? /* @__PURE__ */ jsx41(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2603
+ /* @__PURE__ */ jsx42(Icon, { name: KIND_ICON2[kind], size: 16 }),
2604
+ /* @__PURE__ */ jsx42("span", { style: { flex: 1 }, children }),
2605
+ onClose ? /* @__PURE__ */ jsx42(IconButton, { icon: "x", label: msg.toastDismiss, size: "sm", variant: "inverse", onPress: onClose }) : null
2331
2606
  ]
2332
2607
  }
2333
2608
  );
2334
2609
  }
2335
- var ToastContext = React12.createContext(null);
2610
+ var ToastContext = React13.createContext(null);
2336
2611
  function ToastProvider({ children, timeout = 6e3 }) {
2337
2612
  const msg = usePireMessages();
2338
- const [toasts, setToasts] = React12.useState([]);
2339
- const close = React12.useCallback((id) => setToasts((t) => t.filter((x) => x.id !== id)), []);
2340
- const add = React12.useCallback((toast) => {
2613
+ const [toasts, setToasts] = React13.useState([]);
2614
+ const close = React13.useCallback((id) => setToasts((t) => t.filter((x) => x.id !== id)), []);
2615
+ const add = React13.useCallback((toast) => {
2341
2616
  const id = Math.random().toString(36).slice(2);
2342
2617
  setToasts((t) => [...t, { ...toast, id }]);
2343
2618
  const ms = toast.timeout ?? timeout;
2344
2619
  if (ms > 0) setTimeout(() => close(id), ms);
2345
2620
  return id;
2346
2621
  }, [close, timeout]);
2347
- const value = React12.useMemo(() => ({ add, close }), [add, close]);
2622
+ const value = React13.useMemo(() => ({ add, close }), [add, close]);
2348
2623
  return /* @__PURE__ */ jsxs34(ToastContext.Provider, { value, children: [
2349
2624
  children,
2350
- /* @__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)) })
2625
+ /* @__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)) })
2351
2626
  ] });
2352
2627
  }
2353
2628
  function useToast() {
2354
- const ctx = React12.useContext(ToastContext);
2629
+ const ctx = React13.useContext(ToastContext);
2355
2630
  if (!ctx) throw new Error("useToast must be used inside <ToastProvider>");
2356
2631
  return ctx;
2357
2632
  }
2358
2633
 
2359
2634
  // src/components/data/KpiTile.tsx
2360
- import { Button as AriaButton11 } from "react-aria-components";
2361
- import { Fragment as Fragment3, jsx as jsx42, jsxs as jsxs35 } from "react/jsx-runtime";
2635
+ import { Button as AriaButton13 } from "react-aria-components";
2636
+ import { Fragment as Fragment3, jsx as jsx43, jsxs as jsxs35 } from "react/jsx-runtime";
2362
2637
  function KpiTile({
2363
2638
  label,
2364
2639
  value,
@@ -2376,48 +2651,48 @@ function KpiTile({
2376
2651
  const tone = deltaTone ?? (deltaDirection === "down" ? "negative" : "positive");
2377
2652
  const body = /* @__PURE__ */ jsxs35(Fragment3, { children: [
2378
2653
  /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-label", children: [
2379
- icon ? /* @__PURE__ */ jsx42(Icon, { name: icon, size: 16 }) : null,
2654
+ icon ? /* @__PURE__ */ jsx43(Icon, { name: icon, size: 16 }) : null,
2380
2655
  label
2381
2656
  ] }),
2382
2657
  /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-value", children: [
2383
2658
  value,
2384
- unit ? /* @__PURE__ */ jsx42("span", { className: "pire-kpi-unit", children: unit }) : null
2659
+ unit ? /* @__PURE__ */ jsx43("span", { className: "pire-kpi-unit", children: unit }) : null
2385
2660
  ] }),
2386
2661
  delta ? /* @__PURE__ */ jsxs35("span", { className: "pire-kpi-delta", "data-tone": tone, children: [
2387
- deltaDirection ? /* @__PURE__ */ jsx42(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2662
+ deltaDirection ? /* @__PURE__ */ jsx43(Icon, { name: deltaDirection === "up" ? "trending-up" : "trending-down", size: 12 }) : null,
2388
2663
  delta
2389
2664
  ] }) : null,
2390
- footnote ? /* @__PURE__ */ jsx42("span", { className: "pire-kpi-foot", children: footnote }) : null
2665
+ footnote ? /* @__PURE__ */ jsx43("span", { className: "pire-kpi-foot", children: footnote }) : null
2391
2666
  ] });
2392
2667
  const props = { className: cx("pire-kpi", className), "data-status": status, style };
2393
- return onPress ? /* @__PURE__ */ jsx42(AriaButton11, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ jsx42("div", { ...props, children: body });
2668
+ return onPress ? /* @__PURE__ */ jsx43(AriaButton13, { ...props, "data-pressable": "true", onPress, children: body }) : /* @__PURE__ */ jsx43("div", { ...props, children: body });
2394
2669
  }
2395
2670
 
2396
2671
  // src/components/data/ObjectHeader.tsx
2397
- import { jsx as jsx43, jsxs as jsxs36 } from "react/jsx-runtime";
2672
+ import { jsx as jsx44, jsxs as jsxs36 } from "react/jsx-runtime";
2398
2673
  function ObjectHeader({ title, subtitle, id, breadcrumb, badge, facts, actions, className, ...rest }) {
2399
2674
  return /* @__PURE__ */ jsxs36("header", { className: cx("pire-objheader", className), ...rest, children: [
2400
2675
  breadcrumb,
2401
2676
  /* @__PURE__ */ jsxs36("div", { className: "pire-objheader-row", children: [
2402
2677
  /* @__PURE__ */ jsxs36("div", { style: { minWidth: 0 }, children: [
2403
- /* @__PURE__ */ jsx43("h1", { className: "pire-objheader-title", children: title }),
2678
+ /* @__PURE__ */ jsx44("h1", { className: "pire-objheader-title", children: title }),
2404
2679
  subtitle || id ? /* @__PURE__ */ jsxs36("div", { className: "pire-objheader-sub", children: [
2405
2680
  subtitle,
2406
- id ? /* @__PURE__ */ jsx43("span", { className: "pire-objheader-id", children: id }) : null
2681
+ id ? /* @__PURE__ */ jsx44("span", { className: "pire-objheader-id", children: id }) : null
2407
2682
  ] }) : null
2408
2683
  ] }),
2409
2684
  badge,
2410
- actions ? /* @__PURE__ */ jsx43("div", { className: "pire-objheader-actions", children: actions }) : null
2685
+ actions ? /* @__PURE__ */ jsx44("div", { className: "pire-objheader-actions", children: actions }) : null
2411
2686
  ] }),
2412
- facts?.length ? /* @__PURE__ */ jsx43("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs36("div", { children: [
2413
- /* @__PURE__ */ jsx43("dt", { className: "pire-fact-label", children: fact.label }),
2414
- /* @__PURE__ */ jsx43("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2687
+ facts?.length ? /* @__PURE__ */ jsx44("dl", { className: "pire-facts", style: { margin: 0 }, children: facts.map((fact) => /* @__PURE__ */ jsxs36("div", { children: [
2688
+ /* @__PURE__ */ jsx44("dt", { className: "pire-fact-label", children: fact.label }),
2689
+ /* @__PURE__ */ jsx44("dd", { className: "pire-fact-value", "data-numeric": fact.numeric ? "true" : void 0, style: { margin: 0 }, children: fact.value })
2415
2690
  ] }, fact.label)) }) : null
2416
2691
  ] });
2417
2692
  }
2418
2693
 
2419
2694
  // src/components/data/FilterBar.tsx
2420
- import { jsx as jsx44, jsxs as jsxs37 } from "react/jsx-runtime";
2695
+ import { jsx as jsx45, jsxs as jsxs37 } from "react/jsx-runtime";
2421
2696
  function FilterBar({
2422
2697
  children,
2423
2698
  activeFilters = [],
@@ -2437,21 +2712,21 @@ function FilterBar({
2437
2712
  return /* @__PURE__ */ jsxs37("section", { className: cx("pire-filterbar", className), ...rest, "aria-label": label, children: [
2438
2713
  /* @__PURE__ */ jsxs37("div", { className: "pire-filterbar-controls", children: [
2439
2714
  children,
2440
- onGo ? /* @__PURE__ */ jsx44(Button, { variant: "primary", onPress: onGo, children: go }) : null
2715
+ onGo ? /* @__PURE__ */ jsx45(Button, { variant: "primary", onPress: onGo, children: go }) : null
2441
2716
  ] }),
2442
2717
  activeFilters.length || resultLabel || actions ? /* @__PURE__ */ jsxs37("div", { className: "pire-filterbar-foot", children: [
2443
- activeFilters.map((filter) => /* @__PURE__ */ jsx44(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2444
- activeFilters.length && onClear ? /* @__PURE__ */ jsx44(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2445
- resultLabel ? /* @__PURE__ */ jsx44("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2446
- actions ? /* @__PURE__ */ jsx44("div", { className: "pire-filterbar-actions", children: actions }) : null
2718
+ activeFilters.map((filter) => /* @__PURE__ */ jsx45(Tag, { onRemove: onRemoveFilter ? () => onRemoveFilter(filter.id) : void 0, children: filter.label }, filter.id)),
2719
+ activeFilters.length && onClear ? /* @__PURE__ */ jsx45(Button, { variant: "tertiary", size: "sm", onPress: onClear, children: clearAll }) : null,
2720
+ resultLabel ? /* @__PURE__ */ jsx45("span", { className: "pire-filterbar-result", "aria-live": "polite", children: resultLabel }) : null,
2721
+ actions ? /* @__PURE__ */ jsx45("div", { className: "pire-filterbar-actions", children: actions }) : null
2447
2722
  ] }) : null
2448
2723
  ] });
2449
2724
  }
2450
2725
 
2451
2726
  // src/components/data/DescriptionList.tsx
2452
- import { jsx as jsx45, jsxs as jsxs38 } from "react/jsx-runtime";
2727
+ import { jsx as jsx46, jsxs as jsxs38 } from "react/jsx-runtime";
2453
2728
  function DescriptionList({ items, layout = "rows", columns = 3, className, style, ...rest }) {
2454
- return /* @__PURE__ */ jsx45(
2729
+ return /* @__PURE__ */ jsx46(
2455
2730
  "dl",
2456
2731
  {
2457
2732
  className: cx("pire-dl", className),
@@ -2463,20 +2738,20 @@ function DescriptionList({ items, layout = "rows", columns = 3, className, style
2463
2738
  item.label,
2464
2739
  item.hint
2465
2740
  ] }),
2466
- /* @__PURE__ */ jsx45("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2741
+ /* @__PURE__ */ jsx46("dd", { className: "pire-dl-value", "data-numeric": item.numeric ? "true" : void 0, children: item.value })
2467
2742
  ] }, i))
2468
2743
  }
2469
2744
  );
2470
2745
  }
2471
2746
 
2472
2747
  // src/components/data/Timeline.tsx
2473
- import { jsx as jsx46, jsxs as jsxs39 } from "react/jsx-runtime";
2748
+ import { jsx as jsx47, jsxs as jsxs39 } from "react/jsx-runtime";
2474
2749
  function Timeline({ entries, reverse = false, className, ...rest }) {
2475
2750
  const list = reverse ? [...entries].reverse() : entries;
2476
- return /* @__PURE__ */ jsx46("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs39("li", { className: "pire-timeline-item", children: [
2477
- /* @__PURE__ */ jsx46("span", { className: "pire-timeline-time", children: entry.time }),
2478
- /* @__PURE__ */ jsx46("span", { className: "pire-timeline-text", children: entry.event }),
2479
- entry.actor ? /* @__PURE__ */ jsx46("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2751
+ return /* @__PURE__ */ jsx47("ol", { className: cx("pire-timeline", className), ...rest, children: list.map((entry, i) => /* @__PURE__ */ jsxs39("li", { className: "pire-timeline-item", children: [
2752
+ /* @__PURE__ */ jsx47("span", { className: "pire-timeline-time", children: entry.time }),
2753
+ /* @__PURE__ */ jsx47("span", { className: "pire-timeline-text", children: entry.event }),
2754
+ entry.actor ? /* @__PURE__ */ jsx47("span", { className: "pire-timeline-actor", children: entry.actor }) : null
2480
2755
  ] }, entry.id ?? i)) });
2481
2756
  }
2482
2757
 
@@ -2559,7 +2834,7 @@ function alignToCategories(series, categoryCount) {
2559
2834
  }
2560
2835
 
2561
2836
  // src/components/data/ChartFrame.tsx
2562
- import { jsx as jsx47, jsxs as jsxs40 } from "react/jsx-runtime";
2837
+ import { jsx as jsx48, jsxs as jsxs40 } from "react/jsx-runtime";
2563
2838
  function seriesLegend(series) {
2564
2839
  return series.map((one, index) => ({
2565
2840
  key: one.id,
@@ -2584,27 +2859,27 @@ function ChartFrame({
2584
2859
  const msg = usePireMessages();
2585
2860
  return /* @__PURE__ */ jsxs40("figure", { className: cx("pire-chart", className), style, children: [
2586
2861
  title || description ? /* @__PURE__ */ jsxs40("figcaption", { className: "pire-chart-head", children: [
2587
- title ? /* @__PURE__ */ jsx47("span", { className: "pire-chart-title", children: title }) : null,
2588
- description ? /* @__PURE__ */ jsx47("span", { className: "pire-chart-desc", children: description }) : null
2862
+ title ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-title", children: title }) : null,
2863
+ description ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-desc", children: description }) : null
2589
2864
  ] }) : null,
2590
- legend && legend.length > 1 ? /* @__PURE__ */ jsx47("ul", { className: "pire-chart-legend", children: legend.map((item) => /* @__PURE__ */ jsxs40("li", { className: "pire-chart-legend-item", children: [
2591
- /* @__PURE__ */ jsx47("span", { className: "pire-chart-swatch", style: { background: item.color } }),
2865
+ legend && legend.length > 1 ? /* @__PURE__ */ jsx48("ul", { className: "pire-chart-legend", children: legend.map((item) => /* @__PURE__ */ jsxs40("li", { className: "pire-chart-legend-item", children: [
2866
+ /* @__PURE__ */ jsx48("span", { className: "pire-chart-swatch", style: { background: item.color } }),
2592
2867
  item.label
2593
2868
  ] }, item.key)) }) : null,
2594
- /* @__PURE__ */ jsx47("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2595
- /* @__PURE__ */ jsx47("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ jsxs40("table", { children: [
2596
- /* @__PURE__ */ jsx47("caption", { children: label }),
2597
- /* @__PURE__ */ jsx47("thead", { children: /* @__PURE__ */ jsxs40("tr", { children: [
2598
- /* @__PURE__ */ jsx47("th", { scope: "col", children: msg.chartCategoryHeader }),
2599
- series.map((one) => /* @__PURE__ */ jsx47("th", { scope: "col", children: one.label }, one.id))
2869
+ /* @__PURE__ */ jsx48("div", { className: "pire-chart-plot", "aria-hidden": "true", children }),
2870
+ /* @__PURE__ */ jsx48("div", { className: showDataTable ? "pire-chart-table" : "pire-sr-only", children: /* @__PURE__ */ jsxs40("table", { children: [
2871
+ /* @__PURE__ */ jsx48("caption", { children: label }),
2872
+ /* @__PURE__ */ jsx48("thead", { children: /* @__PURE__ */ jsxs40("tr", { children: [
2873
+ /* @__PURE__ */ jsx48("th", { scope: "col", children: msg.chartCategoryHeader }),
2874
+ series.map((one) => /* @__PURE__ */ jsx48("th", { scope: "col", children: one.label }, one.id))
2600
2875
  ] }) }),
2601
- /* @__PURE__ */ jsx47("tbody", { children: categories.map((category, categoryIndex) => (
2876
+ /* @__PURE__ */ jsx48("tbody", { children: categories.map((category, categoryIndex) => (
2602
2877
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2603
2878
  /* @__PURE__ */ jsxs40("tr", { children: [
2604
- /* @__PURE__ */ jsx47("th", { scope: "row", children: category }),
2879
+ /* @__PURE__ */ jsx48("th", { scope: "row", children: category }),
2605
2880
  series.map((one) => {
2606
2881
  const value = one.values[categoryIndex];
2607
- return /* @__PURE__ */ jsx47("td", { children: value == null ? msg.chartNoValue : formatValue(value) }, one.id);
2882
+ return /* @__PURE__ */ jsx48("td", { children: value == null ? msg.chartNoValue : formatValue(value) }, one.id);
2608
2883
  })
2609
2884
  ] }, categoryIndex)
2610
2885
  )) })
@@ -2613,7 +2888,7 @@ function ChartFrame({
2613
2888
  }
2614
2889
 
2615
2890
  // src/components/data/BarChart.tsx
2616
- import { jsx as jsx48, jsxs as jsxs41 } from "react/jsx-runtime";
2891
+ import { jsx as jsx49, jsxs as jsxs41 } from "react/jsx-runtime";
2617
2892
  function BarChart({
2618
2893
  categories,
2619
2894
  series: rawSeries,
@@ -2645,7 +2920,7 @@ function BarChart({
2645
2920
  const value = series[0].values[categoryIndex];
2646
2921
  return value == null ? msg.chartNoValue : formatValue(value);
2647
2922
  };
2648
- return /* @__PURE__ */ jsx48(
2923
+ return /* @__PURE__ */ jsx49(
2649
2924
  ChartFrame,
2650
2925
  {
2651
2926
  label,
@@ -2658,7 +2933,7 @@ function BarChart({
2658
2933
  showDataTable,
2659
2934
  className,
2660
2935
  style,
2661
- children: !hasData ? /* @__PURE__ */ jsx48("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsx48(
2936
+ children: !hasData ? /* @__PURE__ */ jsx49("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsx49(
2662
2937
  "div",
2663
2938
  {
2664
2939
  className: "pire-chart-bars",
@@ -2668,8 +2943,8 @@ function BarChart({
2668
2943
  children: categories.map((category, categoryIndex) => (
2669
2944
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2670
2945
  /* @__PURE__ */ jsxs41("div", { className: "pire-chart-group", children: [
2671
- /* @__PURE__ */ jsx48("span", { className: "pire-chart-cat", children: category }),
2672
- /* @__PURE__ */ jsx48("div", { className: "pire-chart-track", children: series.map((one, seriesIndex) => {
2946
+ /* @__PURE__ */ jsx49("span", { className: "pire-chart-cat", children: category }),
2947
+ /* @__PURE__ */ jsx49("div", { className: "pire-chart-track", children: series.map((one, seriesIndex) => {
2673
2948
  const value = one.values[categoryIndex];
2674
2949
  if (value == null) return null;
2675
2950
  return /* @__PURE__ */ jsxs41(
@@ -2681,7 +2956,7 @@ function BarChart({
2681
2956
  "--pire-bar-color": seriesColor(one, seriesIndex)
2682
2957
  },
2683
2958
  children: [
2684
- withValues && orientation === "vertical" ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2959
+ withValues && orientation === "vertical" ? /* @__PURE__ */ jsx49("span", { className: "pire-chart-barval", children: formatValue(value) }) : null,
2685
2960
  /* @__PURE__ */ jsxs41("span", { className: "pire-chart-tip", role: "presentation", children: [
2686
2961
  series.length > 1 ? `${one.label}: ` : "",
2687
2962
  formatValue(value)
@@ -2691,7 +2966,7 @@ function BarChart({
2691
2966
  one.id
2692
2967
  );
2693
2968
  }) }),
2694
- withValues && orientation === "horizontal" ? /* @__PURE__ */ jsx48("span", { className: "pire-chart-val", children: horizontalLabelFor(categoryIndex) }) : null
2969
+ withValues && orientation === "horizontal" ? /* @__PURE__ */ jsx49("span", { className: "pire-chart-val", children: horizontalLabelFor(categoryIndex) }) : null
2695
2970
  ] }, categoryIndex)
2696
2971
  ))
2697
2972
  }
@@ -2701,14 +2976,14 @@ function BarChart({
2701
2976
  }
2702
2977
 
2703
2978
  // src/components/data/LineChart.tsx
2704
- import * as React13 from "react";
2705
- import { jsx as jsx49, jsxs as jsxs42 } from "react/jsx-runtime";
2979
+ import * as React14 from "react";
2980
+ import { jsx as jsx50, jsxs as jsxs42 } from "react/jsx-runtime";
2706
2981
  var PLOT_INSET = { top: 10, right: 14, bottom: 24, left: 58 };
2707
2982
  var MARKER_LIMIT = 20;
2708
- var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? React13.useEffect : React13.useLayoutEffect;
2983
+ var useIsomorphicLayoutEffect2 = typeof window === "undefined" ? React14.useEffect : React14.useLayoutEffect;
2709
2984
  function useMeasuredWidth() {
2710
- const ref = React13.useRef(null);
2711
- const [width, setWidth] = React13.useState(0);
2985
+ const ref = React14.useRef(null);
2986
+ const [width, setWidth] = React14.useState(0);
2712
2987
  useIsomorphicLayoutEffect2(() => {
2713
2988
  const element = ref.current;
2714
2989
  if (!element) return;
@@ -2769,7 +3044,7 @@ function LineChart({
2769
3044
  return `M${xAt(present[0].index)} ${baseline} L${line} L${xAt(last.index)} ${baseline} Z`;
2770
3045
  };
2771
3046
  const labelEvery = Math.max(1, Math.ceil(categories.length / Math.max(2, Math.floor(innerWidth / 64))));
2772
- return /* @__PURE__ */ jsx49(
3047
+ return /* @__PURE__ */ jsx50(
2773
3048
  ChartFrame,
2774
3049
  {
2775
3050
  label,
@@ -2782,7 +3057,7 @@ function LineChart({
2782
3057
  showDataTable,
2783
3058
  className,
2784
3059
  style,
2785
- 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: [
3060
+ 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: [
2786
3061
  width > 0 ? /* @__PURE__ */ jsxs42(
2787
3062
  "svg",
2788
3063
  {
@@ -2792,7 +3067,7 @@ function LineChart({
2792
3067
  "aria-hidden": "true",
2793
3068
  focusable: "false",
2794
3069
  children: [
2795
- /* @__PURE__ */ jsx49("g", { className: "pire-chart-grid", children: scale.ticks.map((tick) => /* @__PURE__ */ jsx49(
3070
+ /* @__PURE__ */ jsx50("g", { className: "pire-chart-grid", children: scale.ticks.map((tick) => /* @__PURE__ */ jsx50(
2796
3071
  "line",
2797
3072
  {
2798
3073
  x1: PLOT_INSET.left,
@@ -2803,7 +3078,7 @@ function LineChart({
2803
3078
  tick
2804
3079
  )) }),
2805
3080
  /* @__PURE__ */ jsxs42("g", { className: "pire-chart-tick", children: [
2806
- scale.ticks.map((tick) => /* @__PURE__ */ jsx49(
3081
+ scale.ticks.map((tick) => /* @__PURE__ */ jsx50(
2807
3082
  "text",
2808
3083
  {
2809
3084
  x: PLOT_INSET.left - 8,
@@ -2816,10 +3091,10 @@ function LineChart({
2816
3091
  )),
2817
3092
  categories.map((category, index) => index % labelEvery === 0 ? (
2818
3093
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2819
- /* @__PURE__ */ jsx49("text", { x: xAt(index), y: height - 6, textAnchor: "middle", children: category }, index)
3094
+ /* @__PURE__ */ jsx50("text", { x: xAt(index), y: height - 6, textAnchor: "middle", children: category }, index)
2820
3095
  ) : null)
2821
3096
  ] }),
2822
- showArea && series[0] ? /* @__PURE__ */ jsx49(
3097
+ showArea && series[0] ? /* @__PURE__ */ jsx50(
2823
3098
  "path",
2824
3099
  {
2825
3100
  d: areaFor(series[0].values),
@@ -2827,10 +3102,10 @@ function LineChart({
2827
3102
  style: { fill: seriesColor(series[0], 0) }
2828
3103
  }
2829
3104
  ) : null,
2830
- /* @__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)) }),
2831
- withMarkers ? /* @__PURE__ */ jsx49("g", { className: "pire-chart-marker", children: series.map((one, seriesIndex) => one.values.map((value, index) => value == null ? null : (
3105
+ /* @__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)) }),
3106
+ withMarkers ? /* @__PURE__ */ jsx50("g", { className: "pire-chart-marker", children: series.map((one, seriesIndex) => one.values.map((value, index) => value == null ? null : (
2832
3107
  // biome-ignore lint/suspicious/noArrayIndexKey: a series is positional — the index is the point's identity, and category labels repeat.
2833
- /* @__PURE__ */ jsx49(
3108
+ /* @__PURE__ */ jsx50(
2834
3109
  "circle",
2835
3110
  {
2836
3111
  cx: xAt(index),
@@ -2844,15 +3119,15 @@ function LineChart({
2844
3119
  ]
2845
3120
  }
2846
3121
  ) : null,
2847
- /* @__PURE__ */ jsx49(
3122
+ /* @__PURE__ */ jsx50(
2848
3123
  "div",
2849
3124
  {
2850
3125
  className: "pire-chart-hover",
2851
3126
  style: { inset: `${PLOT_INSET.top}px ${PLOT_INSET.right}px ${PLOT_INSET.bottom}px ${PLOT_INSET.left}px` },
2852
3127
  children: categories.map((category, categoryIndex) => (
2853
3128
  // biome-ignore lint/suspicious/noArrayIndexKey: categories are positional and repeat legitimately (two quarters both labelled "Q1").
2854
- /* @__PURE__ */ jsx49("div", { className: "pire-chart-band", children: /* @__PURE__ */ jsxs42("span", { className: "pire-chart-tip", role: "presentation", children: [
2855
- /* @__PURE__ */ jsx49("strong", { children: category }),
3129
+ /* @__PURE__ */ jsx50("div", { className: "pire-chart-band", children: /* @__PURE__ */ jsxs42("span", { className: "pire-chart-tip", role: "presentation", children: [
3130
+ /* @__PURE__ */ jsx50("strong", { children: category }),
2856
3131
  series.map((one) => {
2857
3132
  const value = one.values[categoryIndex];
2858
3133
  return /* @__PURE__ */ jsxs42("span", { className: "pire-chart-tip-row", children: [
@@ -2871,8 +3146,8 @@ function LineChart({
2871
3146
  }
2872
3147
 
2873
3148
  // src/components/data/DonutChart.tsx
2874
- import * as React14 from "react";
2875
- import { jsx as jsx50, jsxs as jsxs43 } from "react/jsx-runtime";
3149
+ import * as React15 from "react";
3150
+ import { jsx as jsx51, jsxs as jsxs43 } from "react/jsx-runtime";
2876
3151
  var SEGMENT_GAP_DEGREES = 1.5;
2877
3152
  function DonutChart({
2878
3153
  categories,
@@ -2892,7 +3167,7 @@ function DonutChart({
2892
3167
  }) {
2893
3168
  const label = rest["aria-label"];
2894
3169
  const msg = usePireMessages();
2895
- const [hoveredIndex, setHoveredIndex] = React14.useState(null);
3170
+ const [hoveredIndex, setHoveredIndex] = React15.useState(null);
2896
3171
  warnOnDonutShape(series, categories.length, label);
2897
3172
  const values = (series[0]?.values ?? []).slice(0, categories.length);
2898
3173
  const segments = categories.map((category, index) => ({ category, index, value: values[index] ?? 0 })).filter((segment) => segment.value > 0);
@@ -2909,7 +3184,7 @@ function DonutChart({
2909
3184
  }));
2910
3185
  const hovered = hoveredIndex == null ? null : segments.find((segment) => segment.index === hoveredIndex) ?? null;
2911
3186
  let arcStart = 0;
2912
- return /* @__PURE__ */ jsx50(
3187
+ return /* @__PURE__ */ jsx51(
2913
3188
  ChartFrame,
2914
3189
  {
2915
3190
  label,
@@ -2922,8 +3197,8 @@ function DonutChart({
2922
3197
  showDataTable,
2923
3198
  className,
2924
3199
  style,
2925
- children: !hasData ? /* @__PURE__ */ jsx50("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsxs43("div", { className: "pire-chart-donut", style: { height: size }, children: [
2926
- /* @__PURE__ */ jsx50(
3200
+ children: !hasData ? /* @__PURE__ */ jsx51("div", { className: "pire-chart-empty", children: emptyState ?? msg.chartEmpty }) : /* @__PURE__ */ jsxs43("div", { className: "pire-chart-donut", style: { height: size }, children: [
3201
+ /* @__PURE__ */ jsx51(
2927
3202
  "svg",
2928
3203
  {
2929
3204
  width: size,
@@ -2931,13 +3206,13 @@ function DonutChart({
2931
3206
  "aria-hidden": "true",
2932
3207
  focusable: "false",
2933
3208
  onMouseLeave: () => setHoveredIndex(null),
2934
- children: /* @__PURE__ */ jsx50("g", { transform: `rotate(-90 ${size / 2} ${size / 2})`, children: segments.map((segment) => {
3209
+ children: /* @__PURE__ */ jsx51("g", { transform: `rotate(-90 ${size / 2} ${size / 2})`, children: segments.map((segment) => {
2935
3210
  const arcLength = segment.value / total * circumference;
2936
3211
  const offset = arcStart;
2937
3212
  arcStart += arcLength;
2938
3213
  return (
2939
3214
  // 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.
2940
- /* @__PURE__ */ jsx50(
3215
+ /* @__PURE__ */ jsx51(
2941
3216
  "circle",
2942
3217
  {
2943
3218
  className: "pire-chart-arc",
@@ -2958,8 +3233,8 @@ function DonutChart({
2958
3233
  }
2959
3234
  ),
2960
3235
  /* @__PURE__ */ jsxs43("div", { className: "pire-chart-donut-center", style: { width: size - thickness * 2 - 8 }, children: [
2961
- /* @__PURE__ */ jsx50("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
2962
- /* @__PURE__ */ jsx50("span", { className: "pire-chart-donut-caption", children: hovered ? hovered.category : centerCaption })
3236
+ /* @__PURE__ */ jsx51("span", { className: "pire-chart-donut-value", children: hovered ? formatValue(hovered.value) : centerLabel ?? formatValue(total) }),
3237
+ /* @__PURE__ */ jsx51("span", { className: "pire-chart-donut-caption", children: hovered ? hovered.category : centerCaption })
2963
3238
  ] })
2964
3239
  ] })
2965
3240
  }
@@ -2970,15 +3245,15 @@ function colorForSegment(index) {
2970
3245
  }
2971
3246
 
2972
3247
  // src/components/data/LinkList.tsx
2973
- import { Button as AriaButton12 } from "react-aria-components";
2974
- import { jsx as jsx51, jsxs as jsxs44 } from "react/jsx-runtime";
3248
+ import { Button as AriaButton14 } from "react-aria-components";
3249
+ import { jsx as jsx52, jsxs as jsxs44 } from "react/jsx-runtime";
2975
3250
  function LinkList({ items, onSelect, emphasis = "key", className, ...rest }) {
2976
- return /* @__PURE__ */ jsx51("div", { className: cx("pire-linklist", className), role: "list", "data-emphasis": emphasis, ...rest, children: items.map((item) => {
2977
- const keySlot = item.key ? /* @__PURE__ */ jsx51("span", { className: "pire-linklist-key", children: item.key }) : null;
2978
- const textSlot = item.text ? /* @__PURE__ */ jsx51("span", { className: "pire-linklist-text", children: item.text }) : null;
3251
+ return /* @__PURE__ */ jsx52("div", { className: cx("pire-linklist", className), role: "list", "data-emphasis": emphasis, ...rest, children: items.map((item) => {
3252
+ const keySlot = item.key ? /* @__PURE__ */ jsx52("span", { className: "pire-linklist-key", children: item.key }) : null;
3253
+ const textSlot = item.text ? /* @__PURE__ */ jsx52("span", { className: "pire-linklist-text", children: item.text }) : null;
2979
3254
  const [first, second] = emphasis === "text" ? [textSlot, keySlot] : [keySlot, textSlot];
2980
- return /* @__PURE__ */ jsx51("div", { role: "listitem", className: "pire-linklist-row", children: /* @__PURE__ */ jsxs44(AriaButton12, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
2981
- item.icon ? /* @__PURE__ */ jsx51(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
3255
+ return /* @__PURE__ */ jsx52("div", { role: "listitem", className: "pire-linklist-row", children: /* @__PURE__ */ jsxs44(AriaButton14, { className: "pire-linklist-item", onPress: () => onSelect?.(item.id), children: [
3256
+ item.icon ? /* @__PURE__ */ jsx52(Icon, { name: item.icon, size: 16, style: { color: "var(--text-secondary)" } }) : null,
2982
3257
  first,
2983
3258
  second,
2984
3259
  item.trailing
@@ -2987,7 +3262,7 @@ function LinkList({ items, onSelect, emphasis = "key", className, ...rest }) {
2987
3262
  }
2988
3263
 
2989
3264
  // src/components/layout/PageBand.tsx
2990
- import { jsx as jsx52 } from "react/jsx-runtime";
3265
+ import { jsx as jsx53 } from "react/jsx-runtime";
2991
3266
  function PageBand({
2992
3267
  surface = "card",
2993
3268
  hasBorder = true,
@@ -2995,7 +3270,7 @@ function PageBand({
2995
3270
  className,
2996
3271
  ...rest
2997
3272
  }) {
2998
- return /* @__PURE__ */ jsx52(
3273
+ return /* @__PURE__ */ jsx53(
2999
3274
  "div",
3000
3275
  {
3001
3276
  className: cx("pire-pageband", className),
@@ -3008,29 +3283,29 @@ function PageBand({
3008
3283
  }
3009
3284
 
3010
3285
  // src/components/layout/PageHeader.tsx
3011
- import { jsx as jsx53, jsxs as jsxs45 } from "react/jsx-runtime";
3286
+ import { jsx as jsx54, jsxs as jsxs45 } from "react/jsx-runtime";
3012
3287
  function PageHeader({ title, subtitle, actions, className, ...rest }) {
3013
3288
  return /* @__PURE__ */ jsxs45("header", { className: cx("pire-pageheader", className), ...rest, children: [
3014
3289
  /* @__PURE__ */ jsxs45("div", { style: { minWidth: 0 }, children: [
3015
- /* @__PURE__ */ jsx53("h1", { className: "pire-pageheader-title", children: title }),
3016
- subtitle ? /* @__PURE__ */ jsx53("p", { className: "pire-pageheader-sub", children: subtitle }) : null
3290
+ /* @__PURE__ */ jsx54("h1", { className: "pire-pageheader-title", children: title }),
3291
+ subtitle ? /* @__PURE__ */ jsx54("p", { className: "pire-pageheader-sub", children: subtitle }) : null
3017
3292
  ] }),
3018
- actions ? /* @__PURE__ */ jsx53("div", { className: "pire-pageheader-actions", children: actions }) : null
3293
+ actions ? /* @__PURE__ */ jsx54("div", { className: "pire-pageheader-actions", children: actions }) : null
3019
3294
  ] });
3020
3295
  }
3021
3296
 
3022
3297
  // src/components/layout/SectionHeader.tsx
3023
- import { jsx as jsx54, jsxs as jsxs46 } from "react/jsx-runtime";
3298
+ import { jsx as jsx55, jsxs as jsxs46 } from "react/jsx-runtime";
3024
3299
  function SectionHeader({ title, meta, actions, className, ...rest }) {
3025
3300
  return /* @__PURE__ */ jsxs46("div", { className: cx("pire-sectionhead", className), ...rest, children: [
3026
- /* @__PURE__ */ jsx54("span", { className: "pire-eyebrow", children: title }),
3027
- meta ? /* @__PURE__ */ jsx54("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3028
- actions ? /* @__PURE__ */ jsx54("div", { className: "pire-sectionhead-actions", children: actions }) : null
3301
+ /* @__PURE__ */ jsx55("span", { className: "pire-eyebrow", children: title }),
3302
+ meta ? /* @__PURE__ */ jsx55("span", { style: { font: "var(--type-caption)", color: "var(--text-tertiary)" }, children: meta }) : null,
3303
+ actions ? /* @__PURE__ */ jsx55("div", { className: "pire-sectionhead-actions", children: actions }) : null
3029
3304
  ] });
3030
3305
  }
3031
3306
 
3032
3307
  // src/components/layout/SelectionBar.tsx
3033
- import { jsx as jsx55, jsxs as jsxs47 } from "react/jsx-runtime";
3308
+ import { jsx as jsx56, jsxs as jsxs47 } from "react/jsx-runtime";
3034
3309
  function SelectionBar({ count, noun = "record", children, actions, className, ...rest }) {
3035
3310
  if (!count) return null;
3036
3311
  return /* @__PURE__ */ jsxs47("div", { className: cx("pire-selectionbar", className), role: "status", "aria-live": "polite", ...rest, children: [
@@ -3041,23 +3316,23 @@ function SelectionBar({ count, noun = "record", children, actions, className, ..
3041
3316
  count === 1 ? "" : "s",
3042
3317
  " selected"
3043
3318
  ] }),
3044
- children ? /* @__PURE__ */ jsx55("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3045
- actions ? /* @__PURE__ */ jsx55("div", { className: "pire-selectionbar-actions", children: actions }) : null
3319
+ children ? /* @__PURE__ */ jsx56("span", { style: { color: "var(--text-secondary)", font: "var(--type-caption)" }, children }) : null,
3320
+ actions ? /* @__PURE__ */ jsx56("div", { className: "pire-selectionbar-actions", children: actions }) : null
3046
3321
  ] });
3047
3322
  }
3048
3323
 
3049
3324
  // src/components/layout/FooterBar.tsx
3050
- import { jsx as jsx56, jsxs as jsxs48 } from "react/jsx-runtime";
3325
+ import { jsx as jsx57, jsxs as jsxs48 } from "react/jsx-runtime";
3051
3326
  function FooterBar({ note, actions, children, className, ...rest }) {
3052
3327
  return /* @__PURE__ */ jsxs48("footer", { className: cx("pire-footerbar", className), ...rest, children: [
3053
- note ? /* @__PURE__ */ jsx56("span", { className: "pire-footerbar-note", children: note }) : null,
3328
+ note ? /* @__PURE__ */ jsx57("span", { className: "pire-footerbar-note", children: note }) : null,
3054
3329
  children,
3055
- actions ? /* @__PURE__ */ jsx56("div", { className: "pire-footerbar-actions", children: actions }) : null
3330
+ actions ? /* @__PURE__ */ jsx57("div", { className: "pire-footerbar-actions", children: actions }) : null
3056
3331
  ] });
3057
3332
  }
3058
3333
 
3059
3334
  // src/components/patterns/ConfirmDialog.tsx
3060
- import { Fragment as Fragment4, jsx as jsx57, jsxs as jsxs49 } from "react/jsx-runtime";
3335
+ import { Fragment as Fragment4, jsx as jsx58, jsxs as jsxs49 } from "react/jsx-runtime";
3061
3336
  function ConfirmDialog({
3062
3337
  isOpen,
3063
3338
  title,
@@ -3082,24 +3357,167 @@ function ConfirmDialog({
3082
3357
  isDismissable: !isBusy,
3083
3358
  showClose: false,
3084
3359
  footer: /* @__PURE__ */ jsxs49(Fragment4, { children: [
3085
- /* @__PURE__ */ jsx57(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3086
- /* @__PURE__ */ jsx57(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
3360
+ /* @__PURE__ */ jsx58(Button, { variant: "tertiary", isDisabled: isBusy, onPress: onCancel, children: cancelLabel }),
3361
+ /* @__PURE__ */ jsx58(Button, { variant: tone === "danger" ? "danger" : "primary", isDisabled: isBusy, onPress: onConfirm, children: isBusy ? "Working\u2026" : confirmLabel })
3087
3362
  ] }),
3088
3363
  children: [
3089
- consequence ? /* @__PURE__ */ jsx57(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
3364
+ consequence ? /* @__PURE__ */ jsx58(InlineMessage, { kind: tone === "danger" ? "error" : "warning", style: { marginBottom: children ? "var(--sp-3)" : 0 }, children: consequence }) : null,
3090
3365
  children
3091
3366
  ]
3092
3367
  }
3093
3368
  );
3094
3369
  }
3095
3370
 
3371
+ // src/components/patterns/CommandPalette.tsx
3372
+ import * as React16 from "react";
3373
+ import {
3374
+ Autocomplete,
3375
+ ModalOverlay as ModalOverlay2,
3376
+ Modal as Modal2,
3377
+ Dialog as AriaDialog4,
3378
+ SearchField,
3379
+ Input as AriaInput5,
3380
+ Menu as AriaMenu2,
3381
+ MenuSection as AriaMenuSection2,
3382
+ Header as Header2,
3383
+ useFilter
3384
+ } from "react-aria-components";
3385
+ import { Fragment as Fragment5, jsx as jsx59, jsxs as jsxs50 } from "react/jsx-runtime";
3386
+ var RESULTS_SECTION_KEY = "__pire_results__";
3387
+ var searchableText = (item) => [item.label, item.description, item.keywords].filter(Boolean).join(" ");
3388
+ function CommandPalette({
3389
+ isOpen,
3390
+ onOpenChange,
3391
+ groups = [],
3392
+ resultsGroup,
3393
+ onAction,
3394
+ onSearch,
3395
+ isLoading,
3396
+ emptyLabel,
3397
+ loadingLabel,
3398
+ placeholder,
3399
+ footer,
3400
+ showFooter = true,
3401
+ "aria-label": ariaLabel,
3402
+ className,
3403
+ style
3404
+ }) {
3405
+ const msg = usePireMessages();
3406
+ const [query, setQuery] = React16.useState("");
3407
+ const { contains } = useFilter({ sensitivity: "base" });
3408
+ React16.useEffect(() => {
3409
+ if (isOpen) setQuery("");
3410
+ }, [isOpen]);
3411
+ const searchableById = React16.useMemo(() => {
3412
+ const byId = /* @__PURE__ */ new Map();
3413
+ for (const group of groups) for (const item of group.items) byId.set(item.id, searchableText(item));
3414
+ return byId;
3415
+ }, [groups]);
3416
+ const filter = React16.useCallback((textValue, inputValue, node) => {
3417
+ if (node.parentKey === RESULTS_SECTION_KEY) return true;
3418
+ return contains(searchableById.get(String(node.key)) ?? textValue, inputValue);
3419
+ }, [contains, searchableById]);
3420
+ const handleInputChange = (value) => {
3421
+ setQuery(value);
3422
+ onSearch?.(value);
3423
+ };
3424
+ const sections = [...groups, ...resultsGroup ? [{ ...resultsGroup, id: RESULTS_SECTION_KEY }] : []];
3425
+ const status = isLoading ? loadingLabel ?? msg.commandPaletteLoading : emptyLabel ?? msg.commandPaletteEmpty;
3426
+ return /* @__PURE__ */ jsx59(
3427
+ ModalOverlay2,
3428
+ {
3429
+ className: "pire-cp-overlay",
3430
+ isOpen,
3431
+ isDismissable: true,
3432
+ onOpenChange: (open) => {
3433
+ if (!open) onOpenChange?.(false);
3434
+ },
3435
+ 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: [
3436
+ /* @__PURE__ */ jsxs50(Autocomplete, { filter, inputValue: query, onInputChange: handleInputChange, children: [
3437
+ /* @__PURE__ */ jsxs50(SearchField, { className: "pire-cp-search", "aria-label": msg.commandPaletteSearchLabel, children: [
3438
+ /* @__PURE__ */ jsx59(Icon, { name: "search", size: 18, className: "pire-cp-search-icon" }),
3439
+ /* @__PURE__ */ jsx59(
3440
+ AriaInput5,
3441
+ {
3442
+ className: "pire-cp-input",
3443
+ autoFocus: true,
3444
+ placeholder: placeholder ?? msg.commandPalettePlaceholder
3445
+ }
3446
+ )
3447
+ ] }),
3448
+ isLoading ? /* @__PURE__ */ jsx59("div", { className: "pire-cp-loading", role: "status", "aria-live": "polite", children: loadingLabel ?? msg.commandPaletteLoading }) : null,
3449
+ /* @__PURE__ */ jsx59(
3450
+ AriaMenu2,
3451
+ {
3452
+ className: "pire-cp-list",
3453
+ onAction: (key) => onAction?.(String(key)),
3454
+ renderEmptyState: () => /* @__PURE__ */ jsx59("div", { className: "pire-cp-status", children: status }),
3455
+ children: sections.map((section) => /* @__PURE__ */ jsxs50(AriaMenuSection2, { id: section.id, className: "pire-cp-section", children: [
3456
+ section.label ? /* @__PURE__ */ jsx59(Header2, { className: "pire-cp-section-title", children: section.label }) : null,
3457
+ section.items.map((item) => /* @__PURE__ */ jsx59(
3458
+ MenuItem,
3459
+ {
3460
+ id: item.id,
3461
+ textValue: item.label,
3462
+ icon: item.icon,
3463
+ description: item.description,
3464
+ shortcut: item.shortcut,
3465
+ isDisabled: item.isDisabled,
3466
+ children: item.label
3467
+ },
3468
+ item.id
3469
+ ))
3470
+ ] }, section.id))
3471
+ }
3472
+ )
3473
+ ] }),
3474
+ showFooter ? (
3475
+ // aria-hidden: the glyphs are a sighted affordance for discovering the keys. A screen
3476
+ // reader already announces the listbox semantics that make those keys work, so reading
3477
+ // "up arrow down arrow navigate" out loud is noise on every open.
3478
+ /* @__PURE__ */ jsx59("div", { className: "pire-cp-foot", "aria-hidden": "true", children: footer ?? /* @__PURE__ */ jsxs50(Fragment5, { children: [
3479
+ /* @__PURE__ */ jsxs50("span", { className: "pire-cp-hint", children: [
3480
+ /* @__PURE__ */ jsx59(Kbd, { children: "\u2191" }),
3481
+ /* @__PURE__ */ jsx59(Kbd, { children: "\u2193" }),
3482
+ msg.commandPaletteHintNavigate
3483
+ ] }),
3484
+ /* @__PURE__ */ jsxs50("span", { className: "pire-cp-hint", children: [
3485
+ /* @__PURE__ */ jsx59(Kbd, { children: "\u21B5" }),
3486
+ msg.commandPaletteHintSelect
3487
+ ] }),
3488
+ /* @__PURE__ */ jsxs50("span", { className: "pire-cp-hint", children: [
3489
+ /* @__PURE__ */ jsx59(Kbd, { children: "esc" }),
3490
+ msg.commandPaletteHintClose
3491
+ ] })
3492
+ ] }) })
3493
+ ) : null
3494
+ ] }) })
3495
+ }
3496
+ );
3497
+ }
3498
+ function useCommandPaletteShortcut(onTrigger, { key = "k", isDisabled } = {}) {
3499
+ const handler = React16.useRef(onTrigger);
3500
+ handler.current = onTrigger;
3501
+ React16.useEffect(() => {
3502
+ if (isDisabled) return;
3503
+ const onKeyDown = (event) => {
3504
+ if (!(event.metaKey || event.ctrlKey) || event.altKey) return;
3505
+ if (event.key.toLowerCase() !== key.toLowerCase()) return;
3506
+ event.preventDefault();
3507
+ handler.current();
3508
+ };
3509
+ document.addEventListener("keydown", onKeyDown);
3510
+ return () => document.removeEventListener("keydown", onKeyDown);
3511
+ }, [key, isDisabled]);
3512
+ }
3513
+
3096
3514
  // src/components/patterns/SidePanel.tsx
3097
- import { ModalOverlay as ModalOverlay2, Modal as Modal2, Dialog as AriaDialog4, Heading as Heading5 } from "react-aria-components";
3098
- import { jsx as jsx58, jsxs as jsxs50 } from "react/jsx-runtime";
3515
+ import { ModalOverlay as ModalOverlay3, Modal as Modal3, Dialog as AriaDialog5, Heading as Heading5 } from "react-aria-components";
3516
+ import { jsx as jsx60, jsxs as jsxs51 } from "react/jsx-runtime";
3099
3517
  function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onClose, className }) {
3100
3518
  const msg = usePireMessages();
3101
- return /* @__PURE__ */ jsx58(
3102
- ModalOverlay2,
3519
+ return /* @__PURE__ */ jsx60(
3520
+ ModalOverlay3,
3103
3521
  {
3104
3522
  className: "pire-sidepanel-overlay",
3105
3523
  isOpen,
@@ -3107,36 +3525,36 @@ function SidePanel({ isOpen, title, subtitle, width = 400, children, footer, onC
3107
3525
  onOpenChange: (o) => {
3108
3526
  if (!o) onClose?.();
3109
3527
  },
3110
- children: /* @__PURE__ */ jsx58(Modal2, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs50(AriaDialog4, { className: "pire-dialog", style: { height: "100%" }, children: [
3111
- /* @__PURE__ */ jsxs50("header", { className: "pire-dialog-head", children: [
3112
- /* @__PURE__ */ jsxs50("div", { style: { flex: 1, minWidth: 0 }, children: [
3113
- /* @__PURE__ */ jsx58(Heading5, { slot: "title", className: "pire-dialog-title", children: title }),
3114
- subtitle ? /* @__PURE__ */ jsx58("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
3528
+ children: /* @__PURE__ */ jsx60(Modal3, { className: cx("pire-sidepanel", className), style: { width }, children: /* @__PURE__ */ jsxs51(AriaDialog5, { className: "pire-dialog", style: { height: "100%" }, children: [
3529
+ /* @__PURE__ */ jsxs51("header", { className: "pire-dialog-head", children: [
3530
+ /* @__PURE__ */ jsxs51("div", { style: { flex: 1, minWidth: 0 }, children: [
3531
+ /* @__PURE__ */ jsx60(Heading5, { slot: "title", className: "pire-dialog-title", children: title }),
3532
+ subtitle ? /* @__PURE__ */ jsx60("p", { className: "pire-dialog-sub", style: { margin: 0 }, children: subtitle }) : null
3115
3533
  ] }),
3116
- /* @__PURE__ */ jsx58(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
3534
+ /* @__PURE__ */ jsx60(IconButton, { icon: "x", label: msg.sidePanelClose, size: "sm", onPress: onClose })
3117
3535
  ] }),
3118
- /* @__PURE__ */ jsx58("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3119
- footer ? /* @__PURE__ */ jsx58("footer", { className: "pire-dialog-foot", children: footer }) : null
3536
+ /* @__PURE__ */ jsx60("div", { className: "pire-dialog-body", style: { flex: 1 }, children }),
3537
+ footer ? /* @__PURE__ */ jsx60("footer", { className: "pire-dialog-foot", children: footer }) : null
3120
3538
  ] }) })
3121
3539
  }
3122
3540
  );
3123
3541
  }
3124
3542
 
3125
3543
  // src/components/patterns/EmptyState.tsx
3126
- import { jsx as jsx59, jsxs as jsxs51 } from "react/jsx-runtime";
3544
+ import { jsx as jsx61, jsxs as jsxs52 } from "react/jsx-runtime";
3127
3545
  function EmptyState({ icon = "file-text", title, action, compact, children, className, ...rest }) {
3128
- return /* @__PURE__ */ jsxs51("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3129
- /* @__PURE__ */ jsx59(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3130
- title ? /* @__PURE__ */ jsx59("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3131
- children ? /* @__PURE__ */ jsx59("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
3546
+ return /* @__PURE__ */ jsxs52("div", { className: cx("pire-empty", className), "data-compact": compact ? "true" : void 0, ...rest, children: [
3547
+ /* @__PURE__ */ jsx61(Icon, { name: icon, size: 24, className: "pire-empty-icon" }),
3548
+ title ? /* @__PURE__ */ jsx61("p", { className: "pire-empty-title", style: { margin: 0 }, children: title }) : null,
3549
+ children ? /* @__PURE__ */ jsx61("p", { className: "pire-empty-body", style: { margin: 0 }, children }) : null,
3132
3550
  action
3133
3551
  ] });
3134
3552
  }
3135
3553
 
3136
3554
  // src/components/patterns/FileDropZone.tsx
3137
- import * as React15 from "react";
3555
+ import * as React17 from "react";
3138
3556
  import { DropZone, FileTrigger as FileTrigger2, isFileDropItem } from "react-aria-components";
3139
- import { jsx as jsx60, jsxs as jsxs52 } from "react/jsx-runtime";
3557
+ import { jsx as jsx62, jsxs as jsxs53 } from "react/jsx-runtime";
3140
3558
  var isImage2 = (file) => file.type.startsWith("image/");
3141
3559
  function FileDropZone({
3142
3560
  label,
@@ -3162,10 +3580,10 @@ function FileDropZone({
3162
3580
  style
3163
3581
  }) {
3164
3582
  const msg = usePireMessages();
3165
- const [uncontrolled, setUncontrolled] = React15.useState(defaultValue ?? []);
3583
+ const [uncontrolled, setUncontrolled] = React17.useState(defaultValue ?? []);
3166
3584
  const files = value ?? uncontrolled;
3167
- const created = React15.useRef([]);
3168
- React15.useEffect(() => () => {
3585
+ const created = React17.useRef([]);
3586
+ React17.useEffect(() => () => {
3169
3587
  for (const url of created.current) URL.revokeObjectURL(url);
3170
3588
  }, []);
3171
3589
  const commit = (next) => {
@@ -3185,12 +3603,12 @@ function FileDropZone({
3185
3603
  commit(allowsMultiple ? [...files, ...wrapped] : wrapped.slice(0, 1));
3186
3604
  };
3187
3605
  const remove = (target) => commit(files.filter((f) => f.file !== target));
3188
- return /* @__PURE__ */ jsxs52("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3189
- label ? /* @__PURE__ */ jsxs52("span", { className: "pire-field-label", children: [
3606
+ return /* @__PURE__ */ jsxs53("div", { className: cx("pire-field", className), style, "data-full-width": String(fullWidth), children: [
3607
+ label ? /* @__PURE__ */ jsxs53("span", { className: "pire-field-label", children: [
3190
3608
  label,
3191
- isRequired ? /* @__PURE__ */ jsx60("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
3609
+ isRequired ? /* @__PURE__ */ jsx62("span", { className: "pire-field-req", "aria-hidden": "true", children: "*" }) : null
3192
3610
  ] }) : null,
3193
- /* @__PURE__ */ jsxs52(
3611
+ /* @__PURE__ */ jsxs53(
3194
3612
  DropZone,
3195
3613
  {
3196
3614
  className: "pire-dropzone",
@@ -3203,25 +3621,25 @@ function FileDropZone({
3203
3621
  accept(dropped);
3204
3622
  },
3205
3623
  children: [
3206
- /* @__PURE__ */ jsx60(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3207
- /* @__PURE__ */ jsx60("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3208
- /* @__PURE__ */ jsx60(
3624
+ /* @__PURE__ */ jsx62(Icon, { name: "download", size: 24, className: "pire-dropzone-icon" }),
3625
+ /* @__PURE__ */ jsx62("span", { className: "pire-dropzone-prompt", children: promptLabel ?? msg.fileDropZonePrompt }),
3626
+ /* @__PURE__ */ jsx62(
3209
3627
  FileTrigger2,
3210
3628
  {
3211
3629
  acceptedFileTypes,
3212
3630
  allowsMultiple,
3213
3631
  onSelect: (list) => accept(list ? [...list] : []),
3214
- children: /* @__PURE__ */ jsx60(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
3632
+ children: /* @__PURE__ */ jsx62(Button, { variant: "secondary", isDisabled: isDisabled || isReadOnly, children: msg.fileUploadChoose })
3215
3633
  }
3216
3634
  )
3217
3635
  ]
3218
3636
  }
3219
3637
  ),
3220
- files.length ? /* @__PURE__ */ jsx60("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs52("li", { className: "pire-fileupload-item", children: [
3221
- previewUrl ? /* @__PURE__ */ jsx60("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx60(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
3222
- /* @__PURE__ */ jsx60("span", { className: "pire-fileupload-name", children: file.name }),
3223
- /* @__PURE__ */ jsx60("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3224
- isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx60(
3638
+ files.length ? /* @__PURE__ */ jsx62("ul", { className: "pire-fileupload-list", children: files.map(({ file, previewUrl }) => /* @__PURE__ */ jsxs53("li", { className: "pire-fileupload-item", children: [
3639
+ previewUrl ? /* @__PURE__ */ jsx62("img", { className: "pire-fileupload-thumb", src: previewUrl, alt: "" }) : /* @__PURE__ */ jsx62(Icon, { name: "file-text", size: 16, className: "pire-fileupload-icon" }),
3640
+ /* @__PURE__ */ jsx62("span", { className: "pire-fileupload-name", children: file.name }),
3641
+ /* @__PURE__ */ jsx62("span", { className: "pire-fileupload-size", children: formatFileSize(file.size) }),
3642
+ isDisabled || isReadOnly ? null : /* @__PURE__ */ jsx62(
3225
3643
  IconButton,
3226
3644
  {
3227
3645
  icon: "x",
@@ -3231,14 +3649,14 @@ function FileDropZone({
3231
3649
  }
3232
3650
  )
3233
3651
  ] }, `${file.name}-${file.size}-${file.lastModified}`)) }) : null,
3234
- uploadProgress != null ? /* @__PURE__ */ jsx60(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3235
- description ? /* @__PURE__ */ jsx60("span", { className: "pire-field-hint", children: description }) : null,
3236
- isInvalid && errorMessage ? /* @__PURE__ */ jsx60("span", { className: "pire-field-error", children: errorMessage }) : null
3652
+ uploadProgress != null ? /* @__PURE__ */ jsx62(ProgressBar, { value: uploadProgress, label: msg.fileUploadUploading }) : null,
3653
+ description ? /* @__PURE__ */ jsx62("span", { className: "pire-field-hint", children: description }) : null,
3654
+ isInvalid && errorMessage ? /* @__PURE__ */ jsx62("span", { className: "pire-field-error", children: errorMessage }) : null
3237
3655
  ] });
3238
3656
  }
3239
3657
 
3240
3658
  // src/index.ts
3241
- import { DialogTrigger, MenuTrigger as MenuTrigger2, SubmenuTrigger, Popover as Popover7, RouterProvider, I18nProvider } from "react-aria-components";
3659
+ import { DialogTrigger, MenuTrigger as MenuTrigger3, SubmenuTrigger, Popover as Popover8, RouterProvider, I18nProvider } from "react-aria-components";
3242
3660
  export {
3243
3661
  Avatar,
3244
3662
  Badge,
@@ -3248,6 +3666,7 @@ export {
3248
3666
  Card,
3249
3667
  Checkbox,
3250
3668
  ComboBox,
3669
+ CommandPalette,
3251
3670
  ConfirmDialog,
3252
3671
  DataTable,
3253
3672
  DatePicker,
@@ -3264,10 +3683,12 @@ export {
3264
3683
  FormField,
3265
3684
  Heading,
3266
3685
  I18nProvider,
3686
+ ICON_NAMES,
3267
3687
  Icon,
3268
3688
  IconButton,
3269
3689
  InlineMessage,
3270
3690
  Input,
3691
+ Kbd,
3271
3692
  KpiTile,
3272
3693
  LineChart,
3273
3694
  Link,
@@ -3276,7 +3697,7 @@ export {
3276
3697
  MenuItem,
3277
3698
  MenuSection,
3278
3699
  MenuSeparator,
3279
- MenuTrigger2 as MenuTrigger,
3700
+ MenuTrigger3 as MenuTrigger,
3280
3701
  MultiComboBox,
3281
3702
  NumberField,
3282
3703
  ObjectHeader,
@@ -3284,7 +3705,7 @@ export {
3284
3705
  PageHeader,
3285
3706
  Pagination,
3286
3707
  PireIntlProvider,
3287
- Popover7 as Popover,
3708
+ Popover8 as Popover,
3288
3709
  ProgressBar,
3289
3710
  Radio,
3290
3711
  RadioGroup,
@@ -3318,6 +3739,7 @@ export {
3318
3739
  esMessages,
3319
3740
  formatFileSize,
3320
3741
  rangeLengthInDays,
3742
+ useCommandPaletteShortcut,
3321
3743
  usePireMessages,
3322
3744
  useToast
3323
3745
  };