@vertesia/ui 1.5.0-dev.20260910.052912Z → 1.5.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 (120) hide show
  1. package/lib/core/components/Link.js +1 -1
  2. package/lib/core/components/Link.js.map +1 -1
  3. package/lib/core/components/Spinner.js +1 -1
  4. package/lib/core/components/Spinner.js.map +1 -1
  5. package/lib/core/components/TagsInput.js +7 -7
  6. package/lib/core/components/TagsInput.js.map +1 -1
  7. package/lib/core/components/shadcn/badge.js +1 -1
  8. package/lib/core/components/shadcn/badge.js.map +1 -1
  9. package/lib/core/components/shadcn/button.d.ts.map +1 -1
  10. package/lib/core/components/shadcn/button.js +2 -2
  11. package/lib/core/components/shadcn/button.js.map +1 -1
  12. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js +2 -2
  13. package/lib/core/components/shadcn/filters/comboBox/DateCombobox.js.map +1 -1
  14. package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.js +1 -1
  15. package/lib/core/components/shadcn/filters/comboBox/SelectCombobox.js.map +1 -1
  16. package/lib/core/components/shadcn/filters/comboBox/StringListCombobox.js +1 -1
  17. package/lib/core/components/shadcn/filters/comboBox/StringListCombobox.js.map +1 -1
  18. package/lib/core/components/shadcn/filters/comboBox/TextCombobox.js +1 -1
  19. package/lib/core/components/shadcn/filters/comboBox/TextCombobox.js.map +1 -1
  20. package/lib/core/components/shadcn/filters/filter/dateFilter.js +1 -1
  21. package/lib/core/components/shadcn/filters/filter/dateFilter.js.map +1 -1
  22. package/lib/core/components/shadcn/filters/filters.js +1 -1
  23. package/lib/core/components/shadcn/filters/filters.js.map +1 -1
  24. package/lib/core/components/shadcn/overflowTabs.js +2 -2
  25. package/lib/core/components/shadcn/overflowTabs.js.map +1 -1
  26. package/lib/core/components/shadcn/tabs.js +1 -1
  27. package/lib/core/components/shadcn/tabs.js.map +1 -1
  28. package/lib/features/activity-doc/ActivityDoc.js +1 -1
  29. package/lib/features/activity-doc/ActivityDoc.js.map +1 -1
  30. package/lib/features/agent/chat/AskUserWidget.d.ts +1 -0
  31. package/lib/features/agent/chat/AskUserWidget.d.ts.map +1 -1
  32. package/lib/features/agent/chat/AskUserWidget.js +15 -4
  33. package/lib/features/agent/chat/AskUserWidget.js.map +1 -1
  34. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.d.ts.map +1 -1
  35. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js +5 -3
  36. package/lib/features/agent/chat/ModernAgentOutput/AllMessagesMixed.js.map +1 -1
  37. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.d.ts.map +1 -1
  38. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js +3 -2
  39. package/lib/features/agent/chat/ModernAgentOutput/MessageItem.js.map +1 -1
  40. package/lib/features/layout/GenericPageNavHeader.js +1 -1
  41. package/lib/features/layout/GenericPageNavHeader.js.map +1 -1
  42. package/lib/features/magic-pdf/AnnotatedImageSlider.js +1 -1
  43. package/lib/features/magic-pdf/AnnotatedImageSlider.js.map +1 -1
  44. package/lib/features/magic-pdf/GroundedExtractionView.js +3 -3
  45. package/lib/features/magic-pdf/GroundedExtractionView.js.map +1 -1
  46. package/lib/features/permissions/UserPermissionsProvider.js +1 -1
  47. package/lib/features/permissions/UserPermissionsProvider.js.map +1 -1
  48. package/lib/features/store/objects/DocumentPreviewPanel.js +5 -5
  49. package/lib/features/store/objects/DocumentPreviewPanel.js.map +1 -1
  50. package/lib/features/store/objects/components/DocumentInput.js +1 -1
  51. package/lib/features/store/objects/components/DocumentInput.js.map +1 -1
  52. package/lib/features/store/objects/upload/DocumentUploadModal.js +1 -1
  53. package/lib/features/store/objects/upload/DocumentUploadModal.js.map +1 -1
  54. package/lib/features/user/UserInfo.d.ts +2 -0
  55. package/lib/features/user/UserInfo.d.ts.map +1 -1
  56. package/lib/features/user/UserInfo.js +1 -1
  57. package/lib/features/user/UserInfo.js.map +1 -1
  58. package/lib/router/RouteComponent.d.ts.map +1 -1
  59. package/lib/router/RouteComponent.js +15 -12
  60. package/lib/router/RouteComponent.js.map +1 -1
  61. package/lib/session/UserSession.d.ts.map +1 -1
  62. package/lib/session/UserSession.js +4 -0
  63. package/lib/session/UserSession.js.map +1 -1
  64. package/lib/shell/SplashScreen.js +1 -1
  65. package/lib/shell/SplashScreen.js.map +1 -1
  66. package/lib/vertesia-ui-core.js +3 -3
  67. package/lib/vertesia-ui-core.js.map +1 -1
  68. package/lib/vertesia-ui-features.js +32 -32
  69. package/lib/vertesia-ui-features.js.map +1 -1
  70. package/lib/vertesia-ui-router.js +1 -1
  71. package/lib/vertesia-ui-router.js.map +1 -1
  72. package/lib/vertesia-ui-session.js +1 -1
  73. package/lib/vertesia-ui-session.js.map +1 -1
  74. package/lib/vertesia-ui-shell.js +1 -1
  75. package/lib/vertesia-ui-shell.js.map +1 -1
  76. package/lib/vertesia-ui-widgets.js +2 -2
  77. package/lib/vertesia-ui-widgets.js.map +1 -1
  78. package/lib/widgets/json-view/JSONCode.js +1 -1
  79. package/lib/widgets/json-view/JSONCode.js.map +1 -1
  80. package/lib/widgets/upload/DropZone.d.ts.map +1 -1
  81. package/lib/widgets/upload/DropZone.js +1 -1
  82. package/lib/widgets/upload/DropZone.js.map +1 -1
  83. package/package.json +7 -7
  84. package/src/core/components/Link.tsx +1 -1
  85. package/src/core/components/Spinner.tsx +1 -1
  86. package/src/core/components/TagsInput.tsx +7 -7
  87. package/src/core/components/shadcn/badge.tsx +1 -1
  88. package/src/core/components/shadcn/button.tsx +2 -3
  89. package/src/core/components/shadcn/filters/comboBox/DateCombobox.tsx +2 -2
  90. package/src/core/components/shadcn/filters/comboBox/SelectCombobox.tsx +1 -1
  91. package/src/core/components/shadcn/filters/comboBox/StringListCombobox.tsx +1 -1
  92. package/src/core/components/shadcn/filters/comboBox/TextCombobox.tsx +1 -1
  93. package/src/core/components/shadcn/filters/filter/dateFilter.tsx +1 -1
  94. package/src/core/components/shadcn/filters/filters.tsx +1 -1
  95. package/src/core/components/shadcn/overflowTabs.tsx +2 -2
  96. package/src/core/components/shadcn/tabs.tsx +1 -1
  97. package/src/css/utilities.css +7 -0
  98. package/src/features/activity-doc/ActivityDoc.tsx +1 -1
  99. package/src/features/agent/chat/AskUserWidget.test.tsx +24 -2
  100. package/src/features/agent/chat/AskUserWidget.tsx +19 -4
  101. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.test.tsx +62 -0
  102. package/src/features/agent/chat/ModernAgentOutput/AllMessagesMixed.tsx +8 -7
  103. package/src/features/agent/chat/ModernAgentOutput/MessageItem.tsx +4 -3
  104. package/src/features/layout/GenericPageNavHeader.test.tsx +36 -0
  105. package/src/features/layout/GenericPageNavHeader.tsx +1 -1
  106. package/src/features/magic-pdf/AnnotatedImageSlider.tsx +1 -1
  107. package/src/features/magic-pdf/GroundedExtractionView.tsx +3 -3
  108. package/src/features/permissions/UserPermissionsProvider.tsx +1 -1
  109. package/src/features/store/objects/DocumentPreviewPanel.tsx +10 -10
  110. package/src/features/store/objects/components/DocumentInput.tsx +1 -1
  111. package/src/features/store/objects/upload/DocumentUploadModal.tsx +1 -1
  112. package/src/features/user/UserInfo.tsx +1 -1
  113. package/src/router/RouteComponent.test.tsx +65 -1
  114. package/src/router/RouteComponent.tsx +18 -15
  115. package/src/session/UserSession.test.ts +65 -0
  116. package/src/session/UserSession.ts +4 -0
  117. package/src/shell/SplashScreen.tsx +1 -1
  118. package/src/widgets/json-view/JSONCode.test.tsx +2 -2
  119. package/src/widgets/json-view/JSONCode.tsx +1 -1
  120. package/src/widgets/upload/DropZone.tsx +2 -4
@@ -37,7 +37,7 @@ export function renderJsonLine(line) {
37
37
  : stringValue
38
38
  ? 'text-success'
39
39
  : literal
40
- ? 'text-primary'
40
+ ? 'text-info'
41
41
  : numberValue
42
42
  ? 'text-attention'
43
43
  : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"JSONCode.js","sourceRoot":"","sources":["../../../src/widgets/json-view/JSONCode.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAkB,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhD,MAAM,UAAU,QAAQ,CAAC,EAAE,IAAI,EAAE,SAAS,EAAyC;IAC/E,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE;QAC5B,IAAI,CAAC;YACD,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;QACzC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,KAAK,CAAC,CAAC;YAClD,OAAO,IAAI,CAAC;QAChB,CAAC;IACL,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IACX,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;IAElE,OAAO,CACH,cACI,SAAS,EAAE,wGAAwG,SAAS,IAAI,EAAE,EAAE,YAEpI,yBACK,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,CACxB,2BACK,cAAc,CAAC,IAAI,CAAC,EACpB,KAAK,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,KAFhC,QAAQ,KAAK,EAAE,CAGnB,CACV,CAAC,GACC,GACL,CACT,CAAC;AACN,CAAC;AAED,kFAAkF;AAClF,6EAA6E;AAC7E,kFAAkF;AAClF,uFAAuF;AACvF,yFAAyF;AACzF,MAAM,kBAAkB,GAAG,gFAAgF,CAAC;AAC5G,MAAM,UAAU,GAAG,OAAO,CAAC;AAE3B,MAAM,UAAU,cAAc,CAAC,IAAY;IACvC,kBAAkB,CAAC,SAAS,GAAG,CAAC,CAAC;IACjC,MAAM,KAAK,GAAgB,EAAE,CAAC;IAC9B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAE1C,OAAO,KAAK,KAAK,IAAI,EAAE,CAAC;QACpB,IAAI,KAAK,CAAC,KAAK,GAAG,MAAM,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,GAAG,KAAK,CAAC;QACzD,0DAA0D;QAC1D,MAAM,KAAK,GAAG,WAAW,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QACnG,MAAM,SAAS,GAAG,KAAK;YACnB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,WAAW;gBACX,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,OAAO;oBACP,CAAC,CAAC,cAAc;oBAChB,CAAC,CAAC,WAAW;wBACX,CAAC,CAAC,gBAAgB;wBAClB,CAAC,CAAC,SAAS,CAAC;QAEtB,KAAK,CAAC,IAAI,CACN,eAAsC,SAAS,EAAE,SAAS,YACrD,KAAK,IADC,GAAG,KAAK,CAAC,KAAK,IAAI,KAAK,EAAE,CAE7B,CACV,CAAC;QACF,MAAM,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC;QACpC,KAAK,GAAG,kBAAkB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,CAAC;IAED,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC"}
1
+ {"version":3,"file":"JSONCode.js","sourceRoot":"","sources":["../../../src/widgets/json-view/JSONCode.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../../../src/widgets/upload/DropZone.tsx"],"names":[],"mappings":"AA+BA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAEpF;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAmB,EAAE,SAAc,EAAE,EAAE,aAAa,+BA4M5G"}
1
+ {"version":3,"file":"DropZone.d.ts","sourceRoot":"","sources":["../../../src/widgets/upload/DropZone.tsx"],"names":[],"mappings":"AA+BA;;GAEG;AACH,MAAM,WAAW,aAAa;IAC1B;;OAEG;IACH,MAAM,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,aAAa,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAEpF;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAEhB;;OAEG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IAEvB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAmB,EAAE,SAAc,EAAE,EAAE,aAAa,+BA0M5G"}
@@ -176,6 +176,6 @@ export function DropZone({ onDrop, message, buttonLabel, allowFolders = true, cl
176
176
  handleInputFiles(folderInput.files);
177
177
  };
178
178
  };
179
- return (_jsxs("div", { className: `flex flex-col items-center justify-center py-12 border-2 rounded-lg transition-colors ${isDragging ? 'border-primary bg-primary/10' : 'border-dashed border-border'} ${className}`, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [_jsx(UploadIcon, { className: `h-12 w-12 mb-3 transition-colors ${isDragging ? 'text-primary' : 'text-muted/50'}` }), _jsx("p", { className: "text-muted", children: message }), _jsxs("div", { className: "flex gap-2 justify-center mt-2", children: [_jsx(Button, { onClick: selectFile, children: resolvedButtonLabel }), allowFolders && _jsx(Button, { onClick: selectFolder, children: t('upload.selectFolder') })] })] }));
179
+ return (_jsxs("div", { className: `flex flex-col items-center justify-center py-12 border-2 rounded-lg transition-colors ${isDragging ? 'border-info bg-info' : 'border-dashed border-border'} ${className}`, onDragOver: handleDragOver, onDragLeave: handleDragLeave, onDrop: handleDrop, children: [_jsx(UploadIcon, { className: `h-12 w-12 mb-3 transition-colors ${isDragging ? 'text-info' : 'text-muted/50'}` }), _jsx("p", { className: "text-muted", children: message }), _jsxs("div", { className: "flex gap-2 justify-center mt-2", children: [_jsx(Button, { onClick: selectFile, children: resolvedButtonLabel }), allowFolders && _jsx(Button, { onClick: selectFolder, children: t('upload.selectFolder') })] })] }));
180
180
  }
181
181
  //# sourceMappingURL=DropZone.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"DropZone.js","sourceRoot":"","sources":["../../../src/widgets/upload/DropZone.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAoBzC,SAAS,WAAW,CAAC,KAAsB;IACvC,OAAO,KAAK,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAsB;IAC5C,OAAO,KAAK,CAAC,WAAW,CAAC;AAC7B,CAAC;AAiCD;;;;;;;;;GASG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,YAAY,GAAG,IAAI,EAAE,SAAS,GAAG,EAAE,EAAiB;IACzG,MAAM,EAAE,CAAC,EAAE,GAAG,gBAAgB,EAAE,CAAC;IACjC,MAAM,mBAAmB,GAAG,WAAW,IAAI,CAAC,CAAC,oBAAoB,CAAC,CAAC;IACnE,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,WAAW,GAAG,MAAM,CAAiB,IAAI,CAAC,CAAC;IAEjD,MAAM,cAAc,GAAG,CAAC,CAAkB,EAAE,EAAE;QAC1C,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACzC,aAAa,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,eAAe,GAAG,CAAC,CAAkB,EAAE,EAAE;QAC3C,CAAC,CAAC,cAAc,EAAE,CAAC;QAEnB,6EAA6E;QAC7E,IAAI,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,aAAqB,CAAC,EAAE,CAAC;YAChF,aAAa,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,KAAK,EAAE,CAAkB,EAAE,EAAE;QAC5C,CAAC,CAAC,cAAc,EAAE,CAAC;QACnB,aAAa,CAAC,KAAK,CAAC,CAAC;QAErB,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1D,qFAAqF;YACrF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YAC/C,MAAM,KAAK,GAAW,EAAE,CAAC;YACzB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;YAElC,MAAM,YAAY,GAAG,KAAK,EAAE,KAAsB,EAAE,EAAE;gBAClD,IAAI,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;oBACrB,WAAW;oBACX,MAAM,IAAI,GAAG,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,EAAE;wBAC7C,KAAK,CAAC,IAAI,CAAC,CAAC,IAAU,EAAE,EAAE;4BACtB,sDAAsD;4BACtD,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,oBAAoB,EAAE;gCAC9C,QAAQ,EAAE,IAAI;gCACd,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,uBAAuB;6BAC9D,CAAC,CAAC;4BACH,OAAO,CAAC,IAAI,CAAC,CAAC;wBAClB,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,oBAAoB;oBACpB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;wBAC9C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;oBACrB,CAAC;oBAED,8BAA8B;oBAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;oBACjF,IAAI,UAAU,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC5B,CAAC;gBACL,CAAC;qBAAM,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;oBACjC,oBAAoB;oBACpB,MAAM,MAAM,GAAG,KAAK,CAAC,YAAY,EAAE,CAAC;oBACpC,MAAM,OAAO,GAAG,MAAM,IAAI,OAAO,CAAoB,CAAC,OAAO,EAAE,EAAE;wBAC7D,MAAM,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,EAAE;4BAC3B,OAAO,CAAC,OAAO,CAAC,CAAC;wBACrB,CAAC,CAAC,CAAC;oBACP,CAAC,CAAC,CAAC;oBAEH,sBAAsB;oBACtB,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC;oBAE7C,8BAA8B;oBAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBAC/C,IAAI,UAAU,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;oBAC5B,CAAC;gBACL,CAAC;YACL,CAAC,CAAC;YAEF,IAAI,CAAC;gBACD,4BAA4B;gBAC5B,MAAM,OAAO,CAAC,GAAG,CACb,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;oBACf,MAAM,KAAK,GAAG,IAAI,CAAC,gBAAgB;wBAC/B,CAAC,CAAE,IAAI,CAAC,gBAAgB,EAA6B;wBACrD,CAAC,CAAE,IAAmC,CAAC;oBAC3C,IAAI,KAAK,EAAE,CAAC;wBACR,OAAO,YAAY,CAAC,KAAK,CAAC,CAAC;oBAC/B,CAAC;oBACD,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;gBAC7B,CAAC,CAAC,CACL,CAAC;gBAEF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACnB,MAAM,eAAe,GAAG,IAAI,GAAG,CAC3B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC;yBACd,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;yBACjC,MAAM,CAAC,OAAO,CAAC,CACvB,CAAC;oBAEF,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,CAAC;oBACzC,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,CAAC;oBAE/B,IAAI,OAAO,GAAG,EAAE,CAAC;oBACjB,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;wBAClB,OAAO,GAAG,CAAC,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC1F,CAAC;yBAAM,CAAC;wBACJ,OAAO,GAAG,CAAC,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;oBAC/D,CAAC;oBAED,MAAM,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,CAAC;YACL,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE,KAAK,CAAC,CAAC;gBACxD,2DAA2D;gBAC3D,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;gBACnD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;oBACvB,MAAM,CAAC,SAAS,CAAC,CAAC;gBACtB,CAAC;YACL,CAAC;QACL,CAAC;aAAM,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,IAAI,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjE,qDAAqD;YACrD,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,SAAS,CAAC,CAAC;QACtB,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,gBAAgB,GAAG,CAAC,QAAyB,EAAE,EAAE;QACnD,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAClC,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YAEvC,2DAA2D;YAC3D,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YAExF,IAAI,cAAc,EAAE,CAAC;gBACjB,yCAAyC;gBACzC,MAAM,YAAY,GAAG,IAAI,GAAG,CACxB,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CACjF,CAAC;gBAEF,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC;gBACtC,MAAM,SAAS,GAAG,SAAS,CAAC,MAAM,CAAC;gBAEnC,yCAAyC;gBACzC,MAAM,gBAAgB,GAAG,CAAC,CAAC,wBAAwB,EAAE,EAAE,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,SAAS,EAAE,CAAC,CAAC;gBAErG,MAAM,aAAa,GAAG;oBAClB,KAAK,EAAE,SAAS,CAAC,MAAM;oBACvB,OAAO,EAAE,gBAAgB;iBAC5B,CAAC;gBAEF,MAAM,CAAC,SAAS,EAAE,aAAa,CAAC,CAAC;YACrC,CAAC;iBAAM,CAAC;gBACJ,sBAAsB;gBACtB,MAAM,QAAQ,GAAG;oBACb,KAAK,EAAE,SAAS,CAAC,MAAM;oBACvB,OAAO,EAAE,CAAC,CAAC,uBAAuB,EAAE,EAAE,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;iBACnE,CAAC;gBACF,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;YAChC,CAAC;QACL,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,UAAU,GAAG,GAAG,EAAE;QACpB,MAAM,SAAS,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QAClD,SAAS,CAAC,IAAI,GAAG,MAAM,CAAC;QACxB,SAAS,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC1B,SAAS,CAAC,MAAM,GAAG,GAAG,CAAC;QACvB,SAAS,EAAE,KAAK,EAAE,CAAC;QACnB,SAAS,CAAC,QAAQ,GAAG,GAAG,EAAE;YACtB,gBAAgB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QACtC,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,MAAM,YAAY,GAAG,GAAG,EAAE;QACtB,MAAM,WAAW,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;QACpD,WAAW,CAAC,IAAI,GAAG,MAAM,CAAC;QAC1B,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC;QAC5B,WAAW,CAAC,MAAM,GAAG,GAAG,CAAC;QACxB,WAA+D,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC,uDAAuD;QAChJ,WAAW,EAAE,KAAK,EAAE,CAAC;QACrB,WAAW,CAAC,QAAQ,GAAG,GAAG,EAAE;YACxB,gBAAgB,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC,CAAC;IACN,CAAC,CAAC;IAEF,OAAO,CAEH,eACI,SAAS,EAAE,yFACP,UAAU,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,6BAClD,IAAI,SAAS,EAAE,EACf,UAAU,EAAE,cAAc,EAC1B,WAAW,EAAE,eAAe,EAC5B,MAAM,EAAE,UAAU,aAElB,KAAC,UAAU,IACP,SAAS,EAAE,oCAAoC,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,eAAe,EAAE,GAChG,EACF,YAAG,SAAS,EAAC,YAAY,YAAE,OAAO,GAAK,EAEvC,eAAK,SAAS,EAAC,gCAAgC,aAC3C,KAAC,MAAM,IAAC,OAAO,EAAE,UAAU,YAAG,mBAAmB,GAAU,EAC1D,YAAY,IAAI,KAAC,MAAM,IAAC,OAAO,EAAE,YAAY,YAAG,CAAC,CAAC,qBAAqB,CAAC,GAAU,IACjF,IACJ,CACT,CAAC;AACN,CAAC"}
1
+ {"version":3,"file":"DropZone.js","sourceRoot":"","sources":["../../../src/widgets/upload/DropZone.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vertesia/ui",
3
- "version": "1.5.0-dev.20260910.052912Z",
3
+ "version": "1.5.0",
4
4
  "description": "Vertesia UI components and and hooks",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -92,11 +92,11 @@
92
92
  "vega": "^6.3.1",
93
93
  "vega-embed": "^7.1.0",
94
94
  "vega-lite": "^6.4.3",
95
- "@vertesia/client": "1.5.0-dev.20260910.052912Z",
96
- "@vertesia/common": "1.5.0-dev.20260910.052912Z",
97
- "@vertesia/fusion-ux": "1.5.0-dev.20260910.052912Z",
98
- "@vertesia/json": "1.5.0-dev.20260910.052912Z",
99
- "@vertesia/rich-text": "1.5.0-dev.20260910.052912Z"
95
+ "@vertesia/fusion-ux": "1.5.0",
96
+ "@vertesia/common": "1.5.0",
97
+ "@vertesia/json": "1.5.0",
98
+ "@vertesia/rich-text": "1.5.0",
99
+ "@vertesia/client": "1.5.0"
100
100
  },
101
101
  "devDependencies": {
102
102
  "@testing-library/react": "^16.3.2",
@@ -179,7 +179,7 @@
179
179
  "url": "https://github.com/vertesia/composableai.git",
180
180
  "directory": "packages/ui"
181
181
  },
182
- "gitHead": "95d481ca856012cd67b501b901dc365afeb7cf81",
182
+ "gitHead": "3485742020066ab1fd3292487cf3a9577b5e4d91",
183
183
  "scripts": {
184
184
  "clean:lib": "rimraf ./lib ./tsconfig.tsbuildinfo",
185
185
  "clean": "rimraf ./node_modules ./lib ./tsconfig.tsbuildinfo",
@@ -12,7 +12,7 @@ export function Link({ underline = 'always', className, children, ...others }: L
12
12
  underlineClass = 'hover:underline';
13
13
  }
14
14
  return (
15
- <a className={clsx('text-primary', className, underlineClass)} {...others}>
15
+ <a className={clsx('text-info', className, underlineClass)} {...others}>
16
16
  {children}
17
17
  </a>
18
18
  );
@@ -27,7 +27,7 @@ export function Spinner({ size, className }: SpinnerProps) {
27
27
  const sizeClass = getRealSize(size || 'md');
28
28
  return (
29
29
  <svg
30
- className={clsx('animate-[spin_0.8s_linear_infinite] text-primary', sizeClass, className)}
30
+ className={clsx('animate-[spin_0.8s_linear_infinite] text-info', sizeClass, className)}
31
31
  xmlns="http://www.w3.org/2000/svg"
32
32
  fill="none"
33
33
  viewBox="0 0 24 24"
@@ -278,7 +278,7 @@ function TagsInputContent({
278
278
  <span
279
279
  key={item}
280
280
  className={clsx(
281
- 'inline-flex items-center justify-between gap-2 px-2 py-1 text-sm bg-primary/20 text-foreground ring-1 ring-primary/30 rounded-md w-full transition-all',
281
+ 'inline-flex items-center justify-between gap-2 px-2 py-1 text-sm bg-info text-foreground ring-1 ring-primary/30 rounded-md w-full transition-all',
282
282
  pendingDeleteIndex === index &&
283
283
  'ring-2 ring-destructive shadow-[0_0_8px_rgba(252,165,165,0.5)]',
284
284
  )}
@@ -288,7 +288,7 @@ function TagsInputContent({
288
288
  type="button"
289
289
  onClick={(e) => handleRemove(item, e)}
290
290
  disabled={disabled}
291
- className="hover:bg-primary/30 rounded-sm transition-colors flex-shrink-0"
291
+ className="hover:bg-info rounded-sm transition-colors flex-shrink-0"
292
292
  >
293
293
  <X className="h-3 w-3" />
294
294
  </button>
@@ -303,7 +303,7 @@ function TagsInputContent({
303
303
  <span
304
304
  key={item}
305
305
  className={clsx(
306
- 'inline-flex items-center gap-1 px-2 py-1 text-sm bg-primary/20 text-foreground ring-1 ring-primary/30 rounded-md transition-all',
306
+ 'inline-flex items-center gap-1 px-2 py-1 text-sm bg-info text-foreground ring-1 ring-primary/30 rounded-md transition-all',
307
307
  pendingDeleteIndex === index &&
308
308
  'ring-2 ring-destructive shadow-[0_0_8px_rgba(252,165,165,0.5)]',
309
309
  )}
@@ -313,7 +313,7 @@ function TagsInputContent({
313
313
  type="button"
314
314
  onClick={(e) => handleRemove(item, e)}
315
315
  disabled={disabled}
316
- className="hover:bg-primary/30 rounded-sm transition-colors"
316
+ className="hover:bg-info rounded-sm transition-colors"
317
317
  >
318
318
  <X className="h-3 w-3" />
319
319
  </button>
@@ -381,7 +381,7 @@ function TagsInputContent({
381
381
  className={clsx(
382
382
  'px-3 py-2 text-sm cursor-pointer transition-colors',
383
383
  index === highlightedIndex
384
- ? 'bg-primary/20 text-foreground'
384
+ ? 'bg-info text-foreground'
385
385
  : 'hover:bg-muted/50',
386
386
  )}
387
387
  >
@@ -404,9 +404,9 @@ function TagsInputContent({
404
404
  onClick={() => handleCreate(searchTerm)}
405
405
  onMouseEnter={() => setHighlightedIndex(filteredOptions.length)}
406
406
  className={clsx(
407
- '!flex w-full justify-start px-3 py-2 text-sm cursor-pointer transition-colors text-primary',
407
+ '!flex w-full justify-start px-3 py-2 text-sm cursor-pointer transition-colors text-info',
408
408
  highlightedIndex === filteredOptions.length
409
- ? 'bg-primary/20'
409
+ ? 'bg-info'
410
410
  : 'hover:bg-muted/50',
411
411
  )}
412
412
  >
@@ -8,7 +8,7 @@ const badgeVariants = cva('inline-flex items-center rounded-md px-2 py-1 text-xs
8
8
  variants: {
9
9
  variant: {
10
10
  default: 'text-foreground bg-muted',
11
- secondary: 'bg-secondary text-primary',
11
+ secondary: 'bg-secondary text-info',
12
12
  destructive: 'bg-destructive text-destructive',
13
13
  attention: 'bg-attention text-attention',
14
14
  success: 'bg-success text-success',
@@ -47,11 +47,10 @@ const buttonVariants = cva(
47
47
  destructive:
48
48
  'bg-destructive text-destructive ring-1 ring-inset ring-destructive/50 shadow-xs hover:bg-destructive/50',
49
49
  outline: 'border border-input bg-background shadow-xs hover:bg-muted ring-inset',
50
- secondary:
51
- 'bg-primary/5 dark:bg-primary/10 text-primary shadow-xs hover:bg-primary/10 dark:hover:bg-primary/20 ring-inset',
50
+ secondary: 'bg-info text-info shadow-xs hover:bg-mixer-info/10 ring-inset',
52
51
  ghost: 'hover:bg-muted/50 dark:hover:bg-muted/20 ring-inset',
53
52
  link: 'text-foreground underline-offset-4 hover:underline ring-inset',
54
- primary: 'bg-primary text-white shadow-xs hover:bg-primary/90 ring-inset',
53
+ primary: 'bg-primary text-primary shadow-xs hover:bg-primary/90 ring-inset',
55
54
  unstyled: '',
56
55
  },
57
56
  size: {
@@ -91,7 +91,7 @@ export const DateCombobox = ({
91
91
 
92
92
  return (
93
93
  <Popover _open={open} onOpenChange={setOpen}>
94
- <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition">
94
+ <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-info shrink-0 transition">
95
95
  <div className="flex gap-1.5 items-center min-h-[20px]">{getDisplayText()}</div>
96
96
  </PopoverTrigger>
97
97
  <PopoverContent className="w-auto p-0" align="start" side="bottom" alignOffset={-4} sideOffset={6}>
@@ -137,7 +137,7 @@ export const DateCombobox = ({
137
137
  return 'bg-primary text-primary-foreground rounded-e-md font-semibold';
138
138
  }
139
139
  if (currentDate > startDate && currentDate < endDate) {
140
- return 'bg-primary/20 text-primary font-medium';
140
+ return 'bg-info text-info font-medium';
141
141
  }
142
142
  } else {
143
143
  // Only start date selected
@@ -50,7 +50,7 @@ export const SelectionCombobox = ({
50
50
  }
51
51
  }}
52
52
  >
53
- <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 transition text-muted hover:text-primary shrink-0">
53
+ <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 transition text-muted hover:text-info shrink-0">
54
54
  <div className="flex gap-1.5 items-center">
55
55
  {filterValues?.length === 1
56
56
  ? (() => {
@@ -30,7 +30,7 @@ export const StringListCombobox = ({
30
30
  }
31
31
  }}
32
32
  >
33
- <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition">
33
+ <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-info shrink-0 transition">
34
34
  <div className="flex gap-1.5 items-center">
35
35
  {filterValues.length > 0
36
36
  ? filterValues.length === 1
@@ -32,7 +32,7 @@ export const TextCombobox = ({
32
32
  }
33
33
  }}
34
34
  >
35
- <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-primary shrink-0 transition">
35
+ <PopoverTrigger className="rounded-none p-1 h-8 bg-muted hover:bg-muted/50 text-muted hover:text-info shrink-0 transition">
36
36
  <div className="flex gap-1.5 items-center">{filterValue || 'Enter text...'}</div>
37
37
  </PopoverTrigger>
38
38
  <PopoverContent className="w-[300px] p-3">
@@ -205,7 +205,7 @@ export default function DateFilter({
205
205
  return 'bg-primary text-primary-foreground rounded-e-md font-semibold';
206
206
  }
207
207
  if (currentDate > startDate && currentDate < endDate) {
208
- return 'bg-primary/20 text-primary font-medium';
208
+ return 'bg-info text-info font-medium';
209
209
  }
210
210
  } else {
211
211
  // Only start date selected
@@ -130,7 +130,7 @@ export default function Filters({ filters, setFilters, filterGroups }: FiltersPr
130
130
  onClick={() => {
131
131
  setFilters((prev) => prev.filter((f) => f !== filter));
132
132
  }}
133
- className="bg-muted rounded-s-none rounded-e-sm size-8 hover:text-primary hover:bg-muted/50 transition shrink-0"
133
+ className="bg-muted rounded-s-none rounded-e-sm size-8 hover:text-info hover:bg-muted/50 transition shrink-0"
134
134
  >
135
135
  <X className="size-6" />
136
136
  </Button>
@@ -15,7 +15,7 @@ const VARIANT_CLASSES: Record<OverflowTabsVariant, { base: string; active: strin
15
15
  tabs: {
16
16
  base: 'flex items-center border-b-2 px-2 py-1.5 text-sm font-medium whitespace-nowrap cursor-pointer shrink-0',
17
17
  inactive: 'border-transparent text-muted hover:border-border hover:text-foreground',
18
- active: 'border-primary text-primary',
18
+ active: 'border-primary text-info',
19
19
  icon: 'ms-1 size-4',
20
20
  },
21
21
  pills: {
@@ -307,7 +307,7 @@ export function OverflowTabsBar({ tabs, current, onTabChange, variant = 'tabs',
307
307
  key={tab.name}
308
308
  disabled={tab.disabled}
309
309
  onClick={() => onTabChange(tab.name)}
310
- className={cn(tab.name === current && 'text-primary')}
310
+ className={cn(tab.name === current && 'text-info')}
311
311
  >
312
312
  {tab.label}
313
313
  </DropdownMenuItem>
@@ -344,7 +344,7 @@ const TabsTrigger: React.ForwardRefExoticComponent<
344
344
  ? cn(
345
345
  'border-b-2 px-2 py-1.5 text-sm font-medium whitespace-nowrap cursor-pointer',
346
346
  'border-transparent text-muted hover:border-border hover:text-foreground',
347
- 'data-[state=active]:border-primary data-[state=active]:text-primary',
347
+ 'data-[state=active]:border-primary data-[state=active]:text-info',
348
348
  'disabled:pointer-events-none disabled:opacity-50',
349
349
  )
350
350
  : cn(
@@ -4,6 +4,13 @@
4
4
  .dark {
5
5
  --mixer: oklch(0 0 0);
6
6
  }
7
+ /* PROTOTYPE: mirror of `bg-*`. Resolves --color-<name>-foreground first so `text-info`
8
+ * yields white on the solid primary surface; tokens without a -foreground (the six status
9
+ * semantics) fall through to the built-in utility and keep their current meaning. */
10
+ @utility text-* {
11
+ color: --value(--color-* -foreground, [*]);
12
+ }
13
+
7
14
  @utility text-mixer-* {
8
15
  color: color-mix(
9
16
  in oklab,
@@ -6,7 +6,7 @@ import type React from 'react';
6
6
  import { useMemo, useState } from 'react';
7
7
 
8
8
  function Badge({ children, secondary = false }: { children: React.ReactNode; secondary?: boolean }) {
9
- const className = secondary ? 'bg-secondary text-primary' : 'text-foreground bg-muted';
9
+ const className = secondary ? 'bg-secondary text-info' : 'text-foreground bg-muted';
10
10
  return <span className={className}>{children}</span>;
11
11
  }
12
12
 
@@ -1,3 +1,5 @@
1
+ import { fireEvent, screen } from '@testing-library/react';
2
+ import { Env } from '@vertesia/ui/env';
1
3
  import type { ReactNode } from 'react';
2
4
  import { describe, expect, it, vi } from 'vitest';
3
5
  import { renderWithProviders } from '../../../__tests__/test-utils.js';
@@ -18,7 +20,7 @@ function getScrollablePrompt(container: HTMLElement): HTMLElement {
18
20
 
19
21
  describe('AskUserWidget', () => {
20
22
  it('does not crash when runtime options data is not an array', () => {
21
- const warn = vi.spyOn(console, 'warn').mockImplementation(() => undefined);
23
+ const warn = vi.spyOn(Env.logger, 'warn').mockImplementation(() => undefined);
22
24
 
23
25
  expect(() =>
24
26
  renderWithProviders(
@@ -32,7 +34,27 @@ describe('AskUserWidget', () => {
32
34
  ),
33
35
  ).not.toThrow();
34
36
 
35
- expect(warn).toHaveBeenCalledWith('[AskUserWidget] Invalid options received; rendering without options.');
37
+ expect(warn).toHaveBeenCalledWith('AskUserWidget received invalid options; rendering without options', {
38
+ vertesia: { component: 'AskUserWidget', received_type: 'string' },
39
+ });
40
+ warn.mockRestore();
41
+ });
42
+
43
+ it.each([false, true])('rejects malformed entries in compact=%s without breaking text submission', (compact) => {
44
+ const onSubmit = vi.fn();
45
+ const warn = vi.spyOn(Env.logger, 'warn').mockImplementation(() => undefined);
46
+ renderWithProviders(
47
+ <AskUserWidget
48
+ question="Choose"
49
+ compact={compact}
50
+ options={[null] as unknown as AskUserOption[]}
51
+ allowFreeResponse
52
+ onSubmit={onSubmit}
53
+ />,
54
+ );
55
+ fireEvent.change(screen.getByRole('textbox'), { target: { value: 'My answer' } });
56
+ fireEvent.click(screen.getByRole('button', { name: 'Send' }));
57
+ expect(onSubmit).toHaveBeenCalledWith('My answer');
36
58
  warn.mockRestore();
37
59
  });
38
60
 
@@ -13,6 +13,21 @@ export interface AskUserOption {
13
13
  icon?: React.ReactNode;
14
14
  }
15
15
 
16
+ export function isAskUserOptions(value: unknown): value is AskUserOption[] {
17
+ return (
18
+ Array.isArray(value) &&
19
+ value.every((option: unknown) => {
20
+ if (!option || typeof option !== 'object' || Array.isArray(option)) return false;
21
+ const { id, label, description } = option as Partial<AskUserOption>;
22
+ return (
23
+ typeof id === 'string' &&
24
+ typeof label === 'string' &&
25
+ (description == null || typeof description === 'string')
26
+ );
27
+ })
28
+ );
29
+ }
30
+
16
31
  /** Props for the AskUserWidget component */
17
32
  export interface AskUserWidgetProps {
18
33
  /** The question or prompt to display */
@@ -153,11 +168,12 @@ export function AskUserWidget({
153
168
 
154
169
  const styles = VARIANT_STYLES[variant];
155
170
  const DefaultIcon = VARIANT_ICONS[variant];
156
- const safeOptions = Array.isArray(options) ? options : [];
171
+ const validOptions = isAskUserOptions(options);
172
+ const safeOptions = validOptions ? options : [];
157
173
  const invalidOptionsReported = React.useRef(false);
158
174
 
159
175
  React.useEffect(() => {
160
- if (options === undefined || Array.isArray(options) || invalidOptionsReported.current) return;
176
+ if (options === undefined || validOptions || invalidOptionsReported.current) return;
161
177
 
162
178
  invalidOptionsReported.current = true;
163
179
  Env.logger.warn('AskUserWidget received invalid options; rendering without options', {
@@ -166,8 +182,7 @@ export function AskUserWidget({
166
182
  received_type: typeof options,
167
183
  },
168
184
  });
169
- console.warn('[AskUserWidget] Invalid options received; rendering without options.');
170
- }, [options]);
185
+ }, [options, validOptions]);
171
186
 
172
187
  const toggleOption = (optionId: string) => {
173
188
  setSelectedOptions((prev) => {
@@ -1599,6 +1599,68 @@ describe('AllMessagesMixed summary view', () => {
1599
1599
  expect(screen.getAllByText(/quotes\.md/).length).toBeGreaterThan(0);
1600
1600
  });
1601
1601
 
1602
+ describe.each(['summary', 'stacked', 'activity'] as const)('request input in %s view', (mode) => {
1603
+ function renderPrompt(options: unknown) {
1604
+ const onSendMessage = vi.fn();
1605
+ const prompt = makeMessage({
1606
+ timestamp: 2_000,
1607
+ type: AgentMessageType.REQUEST_INPUT,
1608
+ message: 'Choose a response',
1609
+ details: { request_id: 'robust-ask', ux: { options, variant: 'default', multiSelect: false } },
1610
+ });
1611
+ if (mode === 'stacked') {
1612
+ renderStacked([prompt], false, { onSendMessage });
1613
+ } else if (mode === 'activity') {
1614
+ renderSummary(
1615
+ [
1616
+ makeMessage({
1617
+ timestamp: 1_000,
1618
+ message: 'Waiting for input',
1619
+ details: {
1620
+ event_class: 'activity',
1621
+ tool: 'ask_user',
1622
+ tool_run_id: 'ask-run',
1623
+ tool_status: 'running',
1624
+ activity_group_id: 'ask-group',
1625
+ },
1626
+ }),
1627
+ { ...prompt, details: { ...prompt.details, activity_group_id: 'ask-group', tool: 'ask_user' } },
1628
+ makeMessage({ timestamp: 3_000, message: 'Finished', type: AgentMessageType.COMPLETE }),
1629
+ ],
1630
+ true,
1631
+ new Map(),
1632
+ { onSendMessage },
1633
+ );
1634
+ fireEvent.click(screen.getByRole('button', { name: /Worked\s*for/ }));
1635
+ } else {
1636
+ renderSummary([prompt], false, new Map(), { onSendMessage });
1637
+ }
1638
+ return onSendMessage;
1639
+ }
1640
+
1641
+ it.each([
1642
+ { name: 'a string', options: 'null' },
1643
+ { name: 'null', options: null },
1644
+ { name: 'a null entry', options: [null] },
1645
+ { name: 'an object label', options: [{ id: 'a', label: {} }] },
1646
+ { name: 'mixed valid and invalid entries', options: [{ id: 'a', label: 'A' }, null] },
1647
+ ])('allows text submission for $name', ({ options }) => {
1648
+ const onSendMessage = renderPrompt(options);
1649
+ fireEvent.change(screen.getByRole('textbox'), { target: { value: 'Custom response' } });
1650
+ fireEvent.click(screen.getByRole('button', { name: 'Send' }));
1651
+ expect(onSendMessage).toHaveBeenCalledWith('Custom response', {
1652
+ request_input_response: { request_id: 'robust-ask' },
1653
+ });
1654
+ });
1655
+
1656
+ it('preserves valid choices and their response IDs', () => {
1657
+ const onSendMessage = renderPrompt([{ id: 'a', label: 'Choice A' }]);
1658
+ fireEvent.click(screen.getByRole('button', { name: 'Choice A' }));
1659
+ expect(onSendMessage).toHaveBeenCalledWith('a', { request_input_response: { request_id: 'robust-ask' } });
1660
+ expect(screen.queryByRole('textbox')).toBeNull();
1661
+ });
1662
+ });
1663
+
1602
1664
  it('renders pending ask options compactly in summary view', () => {
1603
1665
  renderSummary([
1604
1666
  makeMessage({
@@ -30,7 +30,7 @@ import {
30
30
  } from 'lucide-react';
31
31
  import React, { Component, type ReactNode, useCallback, useEffect, useMemo, useRef, useState } from 'react';
32
32
  import { AnimatedThinkingDots, PulsatingCircle } from '../AnimatedThinkingDots';
33
- import { AskUserWidget } from '../AskUserWidget';
33
+ import { AskUserWidget, isAskUserOptions } from '../AskUserWidget';
34
34
  import { DocumentEditingActionCard, parseMarkdownEditingAction } from '../DocumentEditingActionCard.js';
35
35
  import { ThinkingMessages } from '../WaitingMessages';
36
36
  import {
@@ -758,11 +758,12 @@ function SummaryMessage({
758
758
  const requestInputDetails = message.details as AskUserMessageDetails | undefined;
759
759
  if (message.type === AgentMessageType.REQUEST_INPUT && requestInputDetails?.ux) {
760
760
  const uxConfig = requestInputDetails.ux;
761
+ const hasSelectableOptions = isAskUserOptions(uxConfig.options) && uxConfig.options.length > 0;
761
762
  return (
762
763
  <div className="mx-auto w-full max-w-3xl px-1">
763
764
  <AskUserWidget
764
765
  question={content}
765
- options={uxConfig.options}
766
+ options={hasSelectableOptions ? uxConfig.options : undefined}
766
767
  variant={uxConfig.variant}
767
768
  multiSelect={uxConfig.multiSelect}
768
769
  onSelect={(optionId) =>
@@ -776,7 +777,7 @@ function SummaryMessage({
776
777
  onMultiSelect={(optionIds) =>
777
778
  sendRequestInputResponse(onSendMessage, message, optionIds.join(', '))
778
779
  }
779
- allowFreeResponse={!uxConfig.options?.length || !!uxConfig.free_response}
780
+ allowFreeResponse={!hasSelectableOptions || !!uxConfig.free_response}
780
781
  placeholder={uxConfig.free_response?.placeholder}
781
782
  submitLabel={uxConfig.free_response?.submit_label}
782
783
  onSubmit={(value) =>
@@ -2300,11 +2301,13 @@ function SummaryActivityRow({
2300
2301
  <div className="mt-3 space-y-3">
2301
2302
  {requestInputMessages.map((message) => {
2302
2303
  const uxConfig = message.details.ux;
2304
+ const hasSelectableOptions =
2305
+ isAskUserOptions(uxConfig.options) && uxConfig.options.length > 0;
2303
2306
  return (
2304
2307
  <AskUserWidget
2305
2308
  key={getAgentMessageRenderKey(message, 'work-request-input')}
2306
2309
  question={getRequestInputDisplayText(message)}
2307
- options={uxConfig.options}
2310
+ options={hasSelectableOptions ? uxConfig.options : undefined}
2308
2311
  variant={uxConfig.variant}
2309
2312
  multiSelect={uxConfig.multiSelect}
2310
2313
  onSelect={(optionId) =>
@@ -2322,9 +2325,7 @@ function SummaryActivityRow({
2322
2325
  optionIds.join(', '),
2323
2326
  )
2324
2327
  }
2325
- allowFreeResponse={
2326
- !uxConfig.options?.length || !!uxConfig.free_response
2327
- }
2328
+ allowFreeResponse={!hasSelectableOptions || !!uxConfig.free_response}
2328
2329
  placeholder={uxConfig.free_response?.placeholder}
2329
2330
  submitLabel={uxConfig.free_response?.submit_label}
2330
2331
  onSubmit={(value) =>
@@ -28,7 +28,7 @@ import { memo, useEffect, useMemo, useRef, useState } from 'react';
28
28
  import dayjs from '../../../../core/utils/dayjs.js';
29
29
  import { useDownloadFile } from '../../../store/objects/components/useDownloadFile.js';
30
30
  import { PulsatingCircle } from '../AnimatedThinkingDots';
31
- import { AskUserWidget } from '../AskUserWidget';
31
+ import { AskUserWidget, isAskUserOptions } from '../AskUserWidget';
32
32
  import { DocumentEditingActionCard, parseMarkdownEditingAction } from '../DocumentEditingActionCard.js';
33
33
  import { useImageLightbox } from '../ImageLightbox';
34
34
  import { getArtifactCacheKey, useArtifactUrlCache } from '../useArtifactUrlCache.js';
@@ -375,6 +375,7 @@ function MessageItemComponent({
375
375
  // UX config for REQUEST_INPUT messages (narrowed const so it stays typed inside the JSX closures below)
376
376
  const askUserUx =
377
377
  message.type === AgentMessageType.REQUEST_INPUT ? (message.details as AskUserMessageDetails)?.ux : undefined;
378
+ const hasSelectableAskUserOptions = isAskUserOptions(askUserUx?.options) && askUserUx.options.length > 0;
378
379
 
379
380
  // PERFORMANCE: Memoize markdown components to prevent MarkdownRenderer remounts
380
381
  const markdownComponents = useMemo(
@@ -616,7 +617,7 @@ function MessageItemComponent({
616
617
  {askUserUx ? (
617
618
  <AskUserWidget
618
619
  question={typeof messageContent === 'string' ? messageContent : ''}
619
- options={askUserUx.options}
620
+ options={hasSelectableAskUserOptions ? askUserUx.options : undefined}
620
621
  variant={askUserUx.variant}
621
622
  multiSelect={askUserUx.multiSelect}
622
623
  onSelect={(optionId) =>
@@ -630,7 +631,7 @@ function MessageItemComponent({
630
631
  onMultiSelect={(optionIds) =>
631
632
  sendRequestInputResponse(onSendMessage, message, optionIds.join(', '))
632
633
  }
633
- allowFreeResponse={!askUserUx.options?.length || !!askUserUx.free_response}
634
+ allowFreeResponse={!hasSelectableAskUserOptions || !!askUserUx.free_response}
634
635
  placeholder={askUserUx.free_response?.placeholder}
635
636
  submitLabel={askUserUx.free_response?.submit_label}
636
637
  onSubmit={(value) =>