@qoretechnologies/reqraft 0.10.65 → 0.10.66-pr.145.g26dce00

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 (161) hide show
  1. package/dist/components/form/engine/CompactRow.d.ts.map +1 -1
  2. package/dist/components/form/engine/CompactRow.js +130 -25
  3. package/dist/components/form/engine/CompactRow.js.map +1 -1
  4. package/dist/components/form/engine/CompactToolbar.d.ts.map +1 -1
  5. package/dist/components/form/engine/CompactToolbar.js +78 -15
  6. package/dist/components/form/engine/CompactToolbar.js.map +1 -1
  7. package/dist/components/form/engine/FormEngine.d.ts +48 -1
  8. package/dist/components/form/engine/FormEngine.d.ts.map +1 -1
  9. package/dist/components/form/engine/FormEngine.js +260 -99
  10. package/dist/components/form/engine/FormEngine.js.map +1 -1
  11. package/dist/components/form/engine/OptionFieldMessages.d.ts +18 -2
  12. package/dist/components/form/engine/OptionFieldMessages.d.ts.map +1 -1
  13. package/dist/components/form/engine/OptionFieldMessages.js +22 -3
  14. package/dist/components/form/engine/OptionFieldMessages.js.map +1 -1
  15. package/dist/components/form/engine/_structuredData/SchemaDataView.d.ts.map +1 -1
  16. package/dist/components/form/engine/_structuredData/SchemaDataView.js +27 -1
  17. package/dist/components/form/engine/_structuredData/SchemaDataView.js.map +1 -1
  18. package/dist/components/form/engine/compactRowContext.d.ts +5 -0
  19. package/dist/components/form/engine/compactRowContext.d.ts.map +1 -1
  20. package/dist/components/form/engine/compactRowContext.js.map +1 -1
  21. package/dist/components/form/engine/compactRowStyles.d.ts +12 -0
  22. package/dist/components/form/engine/compactRowStyles.d.ts.map +1 -1
  23. package/dist/components/form/engine/compactRowStyles.js +72 -39
  24. package/dist/components/form/engine/compactRowStyles.js.map +1 -1
  25. package/dist/components/form/engine/compactToolbarContext.d.ts +3 -0
  26. package/dist/components/form/engine/compactToolbarContext.d.ts.map +1 -1
  27. package/dist/components/form/engine/compactToolbarContext.js.map +1 -1
  28. package/dist/components/form/engine/formAppearance.d.ts +48 -0
  29. package/dist/components/form/engine/formAppearance.d.ts.map +1 -0
  30. package/dist/components/form/engine/formAppearance.js +50 -0
  31. package/dist/components/form/engine/formAppearance.js.map +1 -0
  32. package/dist/components/form/engine/readFirst.d.ts +14 -2
  33. package/dist/components/form/engine/readFirst.d.ts.map +1 -1
  34. package/dist/components/form/engine/readFirst.js +6 -2
  35. package/dist/components/form/engine/readFirst.js.map +1 -1
  36. package/dist/components/form/engine/rowFocus.d.ts +9 -1
  37. package/dist/components/form/engine/rowFocus.d.ts.map +1 -1
  38. package/dist/components/form/engine/rowFocus.js +17 -5
  39. package/dist/components/form/engine/rowFocus.js.map +1 -1
  40. package/dist/components/form/expressions/renderExpressionToText.d.ts.map +1 -1
  41. package/dist/components/form/expressions/renderExpressionToText.js +21 -0
  42. package/dist/components/form/expressions/renderExpressionToText.js.map +1 -1
  43. package/dist/components/form/fields/ChoiceGroupHeading.d.ts +21 -0
  44. package/dist/components/form/fields/ChoiceGroupHeading.d.ts.map +1 -0
  45. package/dist/components/form/fields/ChoiceGroupHeading.js +33 -0
  46. package/dist/components/form/fields/ChoiceGroupHeading.js.map +1 -0
  47. package/dist/components/form/fields/Field.d.ts.map +1 -1
  48. package/dist/components/form/fields/Field.js +13 -11
  49. package/dist/components/form/fields/Field.js.map +1 -1
  50. package/dist/components/form/fields/allowed-values/AllowedValues.d.ts.map +1 -1
  51. package/dist/components/form/fields/allowed-values/AllowedValues.js +20 -7
  52. package/dist/components/form/fields/allowed-values/AllowedValues.js.map +1 -1
  53. package/dist/components/form/fields/allowed-values/savedValues.d.ts +30 -0
  54. package/dist/components/form/fields/allowed-values/savedValues.d.ts.map +1 -0
  55. package/dist/components/form/fields/allowed-values/savedValues.js +39 -0
  56. package/dist/components/form/fields/allowed-values/savedValues.js.map +1 -0
  57. package/dist/components/form/fields/auto/AutoFormField.d.ts.map +1 -1
  58. package/dist/components/form/fields/auto/AutoFormField.js +18 -8
  59. package/dist/components/form/fields/auto/AutoFormField.js.map +1 -1
  60. package/dist/components/form/fields/long-string/LongString.d.ts +7 -1
  61. package/dist/components/form/fields/long-string/LongString.d.ts.map +1 -1
  62. package/dist/components/form/fields/long-string/LongString.js +9 -5
  63. package/dist/components/form/fields/long-string/LongString.js.map +1 -1
  64. package/dist/components/form/fields/multi-select/MultiSelectFormField.d.ts.map +1 -1
  65. package/dist/components/form/fields/multi-select/MultiSelectFormField.js +6 -5
  66. package/dist/components/form/fields/multi-select/MultiSelectFormField.js.map +1 -1
  67. package/dist/components/form/fields/number/Number.d.ts +4 -1
  68. package/dist/components/form/fields/number/Number.d.ts.map +1 -1
  69. package/dist/components/form/fields/number/Number.js +13 -5
  70. package/dist/components/form/fields/number/Number.js.map +1 -1
  71. package/dist/components/form/fields/radio-group/RadioGroup.d.ts.map +1 -1
  72. package/dist/components/form/fields/radio-group/RadioGroup.js +13 -7
  73. package/dist/components/form/fields/radio-group/RadioGroup.js.map +1 -1
  74. package/dist/components/form/fields/template/TemplateField.d.ts.map +1 -1
  75. package/dist/components/form/fields/template/TemplateField.js +86 -53
  76. package/dist/components/form/fields/template/TemplateField.js.map +1 -1
  77. package/dist/components/form/index.d.ts +2 -0
  78. package/dist/components/form/index.d.ts.map +1 -1
  79. package/dist/components/form/index.js +2 -0
  80. package/dist/components/form/index.js.map +1 -1
  81. package/dist/components/imageLightbox/ImageLightbox.d.ts.map +1 -1
  82. package/dist/components/imageLightbox/ImageLightbox.js +2 -0
  83. package/dist/components/imageLightbox/ImageLightbox.js.map +1 -1
  84. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts +3 -2
  85. package/dist/components/supportTicket/InterfaceReferenceTags.d.ts.map +1 -1
  86. package/dist/components/supportTicket/InterfaceReferenceTags.js.map +1 -1
  87. package/dist/components/supportTicket/ReferencePicker.d.ts +2 -1
  88. package/dist/components/supportTicket/ReferencePicker.d.ts.map +1 -1
  89. package/dist/components/supportTicket/ReferencePicker.js +19 -13
  90. package/dist/components/supportTicket/ReferencePicker.js.map +1 -1
  91. package/dist/components/supportTicket/TicketHeader.d.ts.map +1 -1
  92. package/dist/components/supportTicket/TicketHeader.js +4 -1
  93. package/dist/components/supportTicket/TicketHeader.js.map +1 -1
  94. package/dist/components/supportTicket/TicketReplyBox.d.ts.map +1 -1
  95. package/dist/components/supportTicket/TicketReplyBox.js +29 -10
  96. package/dist/components/supportTicket/TicketReplyBox.js.map +1 -1
  97. package/dist/components/supportTicket/useLoadedImages.d.ts +10 -0
  98. package/dist/components/supportTicket/useLoadedImages.d.ts.map +1 -1
  99. package/dist/components/supportTicket/useLoadedImages.js +63 -1
  100. package/dist/components/supportTicket/useLoadedImages.js.map +1 -1
  101. package/dist/components/ticketReferences/TicketReferences.d.ts.map +1 -1
  102. package/dist/components/ticketReferences/TicketReferences.js +6 -2
  103. package/dist/components/ticketReferences/TicketReferences.js.map +1 -1
  104. package/dist/components/ticketThread/TicketThread.d.ts.map +1 -1
  105. package/dist/components/ticketThread/TicketThread.js +10 -16
  106. package/dist/components/ticketThread/TicketThread.js.map +1 -1
  107. package/dist/helpers/allowedValues.d.ts +12 -0
  108. package/dist/helpers/allowedValues.d.ts.map +1 -1
  109. package/dist/helpers/allowedValues.js +20 -1
  110. package/dist/helpers/allowedValues.js.map +1 -1
  111. package/dist/helpers/fieldDescription.d.ts +16 -0
  112. package/dist/helpers/fieldDescription.d.ts.map +1 -0
  113. package/dist/helpers/fieldDescription.js +40 -0
  114. package/dist/helpers/fieldDescription.js.map +1 -0
  115. package/dist/helpers/singleLineString.d.ts.map +1 -1
  116. package/dist/helpers/singleLineString.js +1 -0
  117. package/dist/helpers/singleLineString.js.map +1 -1
  118. package/package.json +1 -1
  119. package/src/components/form/engine/CompactRow.tsx +143 -23
  120. package/src/components/form/engine/CompactToolbar.tsx +85 -16
  121. package/src/components/form/engine/FormEngine.stories.tsx +25 -13
  122. package/src/components/form/engine/FormEngine.tsx +367 -81
  123. package/src/components/form/engine/FormEngineAppearance.stories.tsx +540 -0
  124. package/src/components/form/engine/FormEngineStickyHeaders.stories.tsx +5 -1
  125. package/src/components/form/engine/OptionFieldMessages.tsx +73 -2
  126. package/src/components/form/engine/_structuredData/SchemaDataView.tsx +17 -4
  127. package/src/components/form/engine/compactRowContext.ts +5 -0
  128. package/src/components/form/engine/compactRowStyles.ts +218 -38
  129. package/src/components/form/engine/compactToolbarContext.ts +3 -0
  130. package/src/components/form/engine/formAppearance.ts +78 -0
  131. package/src/components/form/engine/readFirst.ts +16 -3
  132. package/src/components/form/engine/rowFocus.ts +17 -6
  133. package/src/components/form/expressions/renderExpressionToText.ts +15 -0
  134. package/src/components/form/fields/ChoiceGroupHeading.tsx +38 -0
  135. package/src/components/form/fields/Field.tsx +11 -9
  136. package/src/components/form/fields/allowed-values/AllowedValues.tsx +21 -9
  137. package/src/components/form/fields/allowed-values/savedValues.ts +64 -0
  138. package/src/components/form/fields/auto/AutoFormField.tsx +17 -4
  139. package/src/components/form/fields/long-string/LongString.stories.tsx +27 -0
  140. package/src/components/form/fields/long-string/LongString.tsx +14 -3
  141. package/src/components/form/fields/multi-select/MultiSelectFormField.tsx +5 -4
  142. package/src/components/form/fields/number/Number.tsx +19 -4
  143. package/src/components/form/fields/radio-group/RadioGroup.tsx +13 -7
  144. package/src/components/form/fields/template/TemplateField.tsx +49 -17
  145. package/src/components/form/index.tsx +2 -0
  146. package/src/components/imageLightbox/ImageLightbox.tsx +2 -0
  147. package/src/components/supportTicket/InterfaceReferenceTags.tsx +3 -2
  148. package/src/components/supportTicket/ReferencePicker.stories.tsx +0 -4
  149. package/src/components/supportTicket/ReferencePicker.tsx +22 -12
  150. package/src/components/supportTicket/TicketConversation.stories.tsx +0 -1
  151. package/src/components/supportTicket/TicketHeader.tsx +2 -1
  152. package/src/components/supportTicket/TicketReplyBox.stories.tsx +24 -21
  153. package/src/components/supportTicket/TicketReplyBox.tsx +27 -5
  154. package/src/components/supportTicket/useLoadedImages.ts +20 -0
  155. package/src/components/ticketReferences/TicketReferences.stories.tsx +26 -0
  156. package/src/components/ticketReferences/TicketReferences.tsx +12 -4
  157. package/src/components/ticketThread/TicketThread.stories.tsx +71 -2
  158. package/src/components/ticketThread/TicketThread.tsx +15 -28
  159. package/src/helpers/allowedValues.ts +19 -0
  160. package/src/helpers/fieldDescription.ts +39 -0
  161. package/src/helpers/singleLineString.ts +1 -0
@@ -1 +1 @@
1
- {"version":3,"file":"CompactRow.d.ts","sourceRoot":"","sources":["../../../../src/components/form/engine/CompactRow.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,eAAe,EAIhB,MAAM,8BAA8B,CAAC;AAItC,OAAO,KAAe,MAAM,OAAO,CAAC;AA8HpC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,SAAU,OAAO,KAAG,MAAM,GAAG,SAG7C,CAAC;AAEd,eAAO,MAAM,UAAU,yHASlB;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;mBAGe;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAI1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,6CAy3EF,CAAC"}
1
+ {"version":3,"file":"CompactRow.d.ts","sourceRoot":"","sources":["../../../../src/components/form/engine/CompactRow.tsx"],"names":[],"mappings":"AAeA,OAAO,EACL,eAAe,EAIhB,MAAM,8BAA8B,CAAC;AAItC,OAAO,KAAe,MAAM,OAAO,CAAC;AAgIpC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,gBAAgB,SAAU,OAAO,KAAG,MAAM,GAAG,SAG7C,CAAC;AAEd,eAAO,MAAM,UAAU,yHASlB;IACD,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,eAAe,CAAC;IAC7B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;mBAGe;IACf,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAI1B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB,6CA++EF,CAAC"}
@@ -106,6 +106,7 @@ var use_context_selector_1 = require("use-context-selector");
106
106
  var validations_1 = require("../../../helpers/validations");
107
107
  var templates_1 = require("../../../helpers/templates");
108
108
  var common_1 = require("../../../helpers/common");
109
+ var fieldDescription_1 = require("../../../helpers/fieldDescription");
109
110
  var templateText_1 = require("../../../helpers/templateText");
110
111
  var ReadOnlyTemplateTag_1 = require("../fields/template/ReadOnlyTemplateTag");
111
112
  var TemplateText_1 = require("../fields/template/TemplateText");
@@ -114,6 +115,7 @@ var Description_1 = require("../../Description");
114
115
  var markdownRendererContext_1 = require("../../Description/markdownRendererContext");
115
116
  var FocusedEditing_1 = require("../../FocusedEditing");
116
117
  var compactRowContext_1 = require("./compactRowContext");
118
+ var formAppearance_1 = require("./formAppearance");
117
119
  var revealRow_1 = require("./revealRow");
118
120
  var compactRowStyles_1 = require("./compactRowStyles");
119
121
  var OptionFieldMessages_1 = require("./OptionFieldMessages");
@@ -214,8 +216,14 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
214
216
  var _c, _d, _e, _f, _g, _h, _j, _k, _l, _m, _o, _p, _q;
215
217
  var optionName = _a.optionName, optionField = _a.optionField, _r = _a.hidden, hidden = _r === void 0 ? false : _r, _s = _a.clustered, clustered = _s === void 0 ? false : _s, _t = _a.clusterFirst, clusterFirst = _t === void 0 ? false : _t, _u = _a.clusterLast, clusterLast = _u === void 0 ? false : _u, absorbedFields = _a.absorbedFields;
216
218
  var readOnly = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.readOnly; });
219
+ // The look only — see `TFormEngineAppearance`. Nothing a row DOES reads it.
220
+ var calm = (0, formAppearance_1.useIsCalmForm)();
217
221
  var commitMode = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.commitMode; });
218
222
  var options = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.options; });
223
+ // Whether this field's emptiness is a fault yet: the person has opened it and left,
224
+ // or the host reported a submit attempt. Before that a required field is only to
225
+ // fill in, and says so in the quiet colour.
226
+ var visited = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { var _a; return v.revealRequired || !!((_a = v.visitedOptions) === null || _a === void 0 ? void 0 : _a.includes(optionName)); });
219
227
  // An absorbed field keeps its own name — it is a different field, not a
220
228
  // property of its host — so the label comes from its schema exactly as it
221
229
  // would on its own row.
@@ -298,6 +306,11 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
298
306
  var cDanger = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.cDanger; });
299
307
  var cWarning = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.cWarning; });
300
308
  var cInfo = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.cInfo; });
309
+ var cText = (0, use_context_selector_1.useContextSelector)(compactRowContext_1.CompactRowContext, function (v) { return v.cText; });
310
+ // A field's NAME: full text colour by default; grey in the calm look, so the
311
+ // value beside it is what the eye lands on. One colour for the read row, the
312
+ // open row and the edit card, so a name does not change as its field opens.
313
+ var cLabel = calm ? "".concat(cText, "b3") : cKey;
301
314
  // A markdown value renders as a document in the row's inset; the host's
302
315
  // renderer when it supplied one, reqraft's own otherwise.
303
316
  // Value-cell content: colour adds a swatch, file an icon + size; hash keeps
@@ -354,6 +367,11 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
354
367
  return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { size: 'small', minimal: true, intent: 'info', icon: 'FileLine', label: formatted, labelKey: fileSize !== undefined ? (0, readFirst_1.formatBytes)(fileSize) : undefined }));
355
368
  }
356
369
  if (valueType === 'bool' || valueType === 'boolean') {
370
+ // Calm: Yes and No are words. Neither is a status — "No" is not a
371
+ // failure — so neither is coloured.
372
+ if (calm) {
373
+ return (0, jsx_runtime_1.jsx)("span", { style: textStyle, children: formatted });
374
+ }
357
375
  var truthy = (field === null || field === void 0 ? void 0 : field.value) === true || (field === null || field === void 0 ? void 0 : field.value) === 'true';
358
376
  return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { size: 'small', minimal: true, intent: truthy ? 'success' : 'danger', label: formatted }));
359
377
  }
@@ -545,8 +563,11 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
545
563
  }, children: actionLabel }), "".concat(optionName, "-injected-action-").concat(index)));
546
564
  };
547
565
  var required = !!((schema === null || schema === void 0 ? void 0 : schema.required) || (schema === null || schema === void 0 ? void 0 : schema.required_groups));
548
- // The asterisk says "you have to fill this in". Read-only, nobody does.
549
- var requiredMark = required && !readOnly;
566
+ // The asterisk says "you have to fill this in". Read-only, nobody does. The
567
+ // calm look draws none at all: an empty required field says so in its
568
+ // value column instead ("Required · add a value"), and a filled one has
569
+ // nothing left to ask for.
570
+ var requiredMark = required && !readOnly && !calm;
550
571
  var removable = !readOnly && !(schema === null || schema === void 0 ? void 0 : schema.preselected) && !(schema === null || schema === void 0 ? void 0 : schema.required) && !(schema === null || schema === void 0 ? void 0 : schema.required_groups);
551
572
  var changed = !hidden && !readOnly && hasOptionChanged(optionField === null || optionField === void 0 ? void 0 : optionField.value, optionName);
552
573
  // "Has a value" = set to anything non-empty. Drives the edit-row Clear
@@ -589,7 +610,13 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
589
610
  var requiredGroupChip = !hidden && !readOnly && memberGroups.length && !(schema === null || schema === void 0 ? void 0 : schema.required) ?
590
611
  (0, jsx_runtime_1.jsx)("span", { style: { display: 'inline-flex' }, role: 'presentation', onClick: function (e) { return e.stopPropagation(); }, onKeyDown: function (e) { return e.stopPropagation(); }, onMouseEnter: function () {
591
612
  return setHighlightedOptions(requiredGroupsInfo.members[chipGroups[0]] || []);
592
- }, onMouseLeave: function () { return setHighlightedOptions([]); }, children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { className: 'options-readfirst-required-group', size: 'tiny', minimal: true, flat: true, compact: true, effect: { uppercase: true, spaced: 1 }, intent: groupResolved ? 'success' : 'warning', icon: groupResolved ? 'CheckLine' : 'LinkM', label: !groupResolved ? 'One of'
613
+ }, onMouseLeave: function () { return setHighlightedOptions([]); }, children: (0, jsx_runtime_1.jsx)(reqore_1.ReqoreDropdown, { className: 'options-readfirst-required-group', size: 'tiny', minimal: true, flat: true, compact: true, effect: calm ? undefined : { uppercase: true, spaced: 1 },
614
+ // Calm: a met group is nothing to point at — only the unmet one is
615
+ // coloured.
616
+ intent: groupResolved ?
617
+ calm ? undefined
618
+ : 'success'
619
+ : 'warning', icon: groupResolved ? 'CheckLine' : 'LinkM', label: !groupResolved ? 'One of'
593
620
  : coveredByLabel ?
594
621
  "Covered by \u201C".concat(coveredByLabel, "\u201D")
595
622
  : 'Covers', filterable: chipGroups.reduce(function (n, g) { return n + requiredGroupsInfo.members[g].length; }, 0) > 6, items: chipGroups.flatMap(function (groupName) { return __spreadArray(__spreadArray([], (chipGroups.length > 1 ?
@@ -729,18 +756,43 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
729
756
  if (!editor)
730
757
  return undefined;
731
758
  var settled = false;
759
+ /* A control that is not a text box holds the caret PROVISIONALLY. An editor that
760
+ takes text can mount after the row opens (a code editor loads late), and until
761
+ it does the only control there is its chrome: a fullscreen toggle. When the
762
+ text box arrives it takes the caret, unless the reader has moved it since. A
763
+ row that never grows one (a pick-one) simply keeps its control. */
764
+ var provisional = null;
732
765
  var takeCaret = function () {
733
766
  var _a;
734
767
  if (settled)
735
768
  return true;
736
769
  var active = document.activeElement;
770
+ if (provisional) {
771
+ if (active !== provisional) {
772
+ // The reader moved the caret themselves. Leave it there.
773
+ settled = true;
774
+ return true;
775
+ }
776
+ var textEntry = (0, rowFocus_1.findRowFocusTarget)(editor, { textEntryOnly: true });
777
+ if (!textEntry)
778
+ return false;
779
+ textEntry.focus({ preventScroll: true });
780
+ // An editor's text box can be in the DOM before it can take focus (Monaco's
781
+ // edit area, mid-layout), and `focus()` then does nothing. Only a caret
782
+ // that landed counts; otherwise try again on the editor's next change.
783
+ if (document.activeElement !== textEntry)
784
+ return false;
785
+ settled = true;
786
+ return true;
787
+ }
737
788
  if (active && active !== document.body && !((_a = rowRef.current) === null || _a === void 0 ? void 0 : _a.contains(active))) {
738
789
  // Someone else holds the caret — a field the reader moved into while
739
790
  // this row's editor was still arriving. Leave it where it is.
740
791
  settled = true;
741
792
  return true;
742
793
  }
743
- var control = (0, rowFocus_1.findRowFocusTarget)(editor);
794
+ // A card hands the caret only to where text goes (see `findRowFocusTarget`).
795
+ var control = (0, rowFocus_1.findRowFocusTarget)(editor, { textEntryOnly: !inlineEditable });
744
796
  if (!control)
745
797
  return false;
746
798
  // The least scroll that shows the row clear of the pinned box header,
@@ -751,6 +803,10 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
751
803
  // `preventScroll`, because the reveal above has already put the row
752
804
  // where it belongs; letting focus scroll as well moves it twice.
753
805
  control.focus({ preventScroll: true });
806
+ // A control that cannot take focus yet (still laying out) did not take
807
+ // the caret: try again on the editor's next change.
808
+ if (document.activeElement !== control)
809
+ return false;
754
810
  /* …and if the control the row offers is a PICKER, open it.
755
811
  *
756
812
  * A closed picker prints the value it holds, which is exactly what the
@@ -768,6 +824,13 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
768
824
  if (openedByAuthor.current && inlineEditable && (0, rowFocus_1.isClosedPickerTrigger)(control)) {
769
825
  openedByAuthor.current = false;
770
826
  setOpenThePicker(true);
827
+ settled = true;
828
+ return true;
829
+ }
830
+ if ((0, rowFocus_1.findRowFocusTarget)(editor, { textEntryOnly: true }) !== control) {
831
+ // Not a text box: hold it until one arrives (see `provisional`).
832
+ provisional = control;
833
+ return false;
771
834
  }
772
835
  settled = true;
773
836
  return true;
@@ -778,7 +841,9 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
778
841
  if (takeCaret())
779
842
  observer.disconnect();
780
843
  });
781
- observer.observe(editor, { childList: true, subtree: true });
844
+ // Attributes too: an editor's text box can become focusable by an attribute or
845
+ // style change after it is inserted (see the `focus()` checks above).
846
+ observer.observe(editor, { childList: true, subtree: true, attributes: true });
782
847
  return function () { return observer.disconnect(); };
783
848
  }, [isExpanded, optionName, inlineEditable]);
784
849
  // What the field held when it was opened — the baseline Cancel restores.
@@ -921,7 +986,7 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
921
986
  // Batched commit: a changed row is a draft until Save — mark it with the
922
987
  // product's Draft chip (always visible, unlike the hover-revealed revert).
923
988
  var draftChip = commitMode === 'batched' && changed ?
924
- (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { className: 'options-readfirst-draft', label: 'Draft', intent: 'warning', icon: 'EditLine', size: 'tiny', minimal: true, fixed: true, flat: true, compact: true, effect: { uppercase: true, spaced: 1 } })
989
+ (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { className: 'options-readfirst-draft', label: 'Draft', intent: 'warning', icon: 'EditLine', size: 'tiny', minimal: true, fixed: true, flat: true, compact: true, effect: calm ? undefined : { uppercase: true, spaced: 1 } })
925
990
  : null;
926
991
  var isPassiveCloseAction = fixedAllowedValueOption;
927
992
  // Cancel — the counterpart to Done, and the answer to "how do I get out of
@@ -936,7 +1001,7 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
936
1001
  // Not offered when the close action is passive (a fixed choice) —
937
1002
  // nothing can have been typed, so there is nothing to cancel.
938
1003
  var cancelEditButton = !isPassiveCloseAction && editedSinceOpened ?
939
- (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { className: 'options-readfirst-cancel', size: 'small', flat: true, minimal: true, fixed: true, icon: 'CloseLine', intent: 'warning', "aria-label": 'Cancel edit', tooltip: 'Cancel edit \u2014 discard the changes made since this field was opened', onClick: function (event) {
1004
+ (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { className: 'options-readfirst-cancel', size: 'small', flat: true, minimal: true, fixed: true, icon: 'CloseLine', intent: calm ? undefined : 'warning', "aria-label": 'Cancel edit', tooltip: 'Cancel edit \u2014 discard the changes made since this field was opened', onClick: function (event) {
940
1005
  event.stopPropagation();
941
1006
  cancelEdit();
942
1007
  } })
@@ -945,7 +1010,10 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
945
1010
  var openedWithFormLoadValue = !editEntryValue.current ||
946
1011
  (0, isEqual_1.default)(editEntryValue.current.value, (_f = (_e = originalValue.current) === null || _e === void 0 ? void 0 : _e[optionName]) === null || _f === void 0 ? void 0 : _f.value);
947
1012
  var editRowRevertButton = openedWithFormLoadValue ? null : revertButton;
948
- var closeExpandedFieldButton = ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { className: 'options-readfirst-done', size: 'small', intent: !isPassiveCloseAction ? 'success' : undefined, flat: isPassiveCloseAction, minimal: isPassiveCloseAction, fixed: true, icon: isPassiveCloseAction ? 'CloseLine' : 'CheckLine', "aria-label": isPassiveCloseAction ? 'Close field' : 'Done', tooltip: isPassiveCloseAction ? 'Close field' : 'Done', onClick: function () { return toggleExpandedOption(optionName); } }));
1013
+ var closeExpandedFieldButton = ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { className: 'options-readfirst-done', size: 'small',
1014
+ // Calm: a neutral button. Closing a field is not a healthy figure and
1015
+ // not the page's one primary action, so it takes neither colour.
1016
+ intent: !isPassiveCloseAction && !calm ? 'success' : undefined, flat: isPassiveCloseAction, minimal: isPassiveCloseAction, fixed: true, icon: isPassiveCloseAction ? 'CloseLine' : 'CheckLine', "aria-label": isPassiveCloseAction ? 'Close field' : 'Done', tooltip: isPassiveCloseAction ? 'Close field' : 'Done', onClick: function () { return toggleExpandedOption(optionName); } }));
949
1017
  // Info tiers: Tier 1 (danger/warning + dependency hints) must be visible
950
1018
  // without interaction; Tier 2 (info/success, default notes) sits behind ⓘ.
951
1019
  var infoActive = !hidden;
@@ -971,6 +1039,10 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
971
1039
  allOptions: availableOptions,
972
1040
  getType: getTypeForOption,
973
1041
  isRendererOnly: isRendererOnly,
1042
+ calm: calm,
1043
+ readOnly: readOnly,
1044
+ // Until the person has been to the field, its requirement is stated plainly.
1045
+ requirementPending: !visited,
974
1046
  }).map(function (m) { return ({ intent: m.intent, content: String(m.label) }); })
975
1047
  : [];
976
1048
  // TWO display channels, matching the Focus prototype:
@@ -1001,7 +1073,7 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1001
1073
  // the inline editor: opening a field used to drop it, leaving an editing row
1002
1074
  // with no route to the field's description at all. Stops propagation because
1003
1075
  // both labels are click targets themselves (the row expands / collapses).
1004
- var helpIcon = (schema === null || schema === void 0 ? void 0 : schema.desc) ?
1076
+ var helpIcon = (0, fieldDescription_1.fieldHasLongDescription)(schema) ?
1005
1077
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreIcon, { icon: 'QuestionLine', size: '12px', effect: { opacity: 0.55 }, margin: 'left', marginSize: 'tiny', role: 'button', tabIndex: -1, "aria-label": 'Help', className: 'options-readfirst-help', style: { cursor: 'help' }, onClick: function (event) {
1006
1078
  event.stopPropagation();
1007
1079
  handleOptionLabelClick(optionName);
@@ -1025,7 +1097,13 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1025
1097
  inside a row, never a page, and markdown authored as a document opens with
1026
1098
  a heading that would outgrow the field label above it. Without a host
1027
1099
  renderer the string is drawn as it always was. */
1028
- var renderInfoStrip = function (m, index) { return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { size: 'small', opaque: false, flat: true, intent: m.intent, title: m.title, style: { marginBottom: 8 }, children: markdownRenderer && typeof m.content === 'string' ?
1100
+ var renderInfoStrip = function (m, index) { return ((0, jsx_runtime_1.jsx)(reqore_1.ReqoreMessage, { size: 'small', opaque: false, flat: true,
1101
+ // Calm: a note that only informs takes no colour — blue is kept for "a
1102
+ // filter is on", green for a healthy figure. A warning or a failure
1103
+ // keeps its intent: those are what a person has to act on.
1104
+ intent: (calm && (!m.intent || m.intent === 'info' || m.intent === 'success') ?
1105
+ undefined
1106
+ : m.intent), title: m.title, style: { marginBottom: 8 }, children: markdownRenderer && typeof m.content === 'string' ?
1029
1107
  markdownRenderer({ value: m.content, compact: true })
1030
1108
  : m.content }, "".concat(m.content, "-").concat(index))); };
1031
1109
  var reasonColor = function (intent) {
@@ -1133,16 +1211,16 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1133
1211
  var collapse_1 = function () { return toggleExpandedOption(optionName); };
1134
1212
  var editingRow = ((0, jsx_runtime_1.jsxs)("div", __assign({ ref: rowRef, "data-field": optionName, className: 'readfirst-row readfirst-row-editing options-readfirst-inline options-readfirst-value', style: readRowHeights.current[optionName] ?
1135
1213
  { minHeight: readRowHeights.current[optionName] }
1136
- : undefined }, clusterHoverProps, { children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledLabelBlock, { className: 'options-readfirst-label-block', children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledRowLabel, { role: 'button', tabIndex: 0, "aria-label": "Collapse ".concat(label), title: (schema === null || schema === void 0 ? void 0 : schema.short_desc) || undefined, "$color": cKey, "$pointer": true, onClick: collapse_1, onKeyDown: function (event) {
1214
+ : undefined }, clusterHoverProps, { children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledLabelBlock, { className: 'options-readfirst-label-block', children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledRowLabel, { role: 'button', tabIndex: 0, "aria-label": "Collapse ".concat(label), title: (schema === null || schema === void 0 ? void 0 : schema.short_desc) || undefined, "$color": cLabel, "$pointer": true, onClick: collapse_1, onKeyDown: function (event) {
1137
1215
  if (event.key === 'Enter' || event.key === ' ') {
1138
1216
  event.preventDefault();
1139
1217
  collapse_1();
1140
1218
  }
1141
- }, children: [label, required ?
1219
+ }, children: [label, required && !calm ?
1142
1220
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreIcon, { icon: 'Asterisk', color: 'danger', size: '10px' })
1143
1221
  : null, helpIcon] }), labelShortDesc ?
1144
1222
  (0, jsx_runtime_1.jsx)(compactRowStyles_1.StyledLabelDesc, { className: 'options-readfirst-label-desc', size: 'small', effect: { opacity: 0.55 }, children: labelShortDesc })
1145
- : null, codeSizeNode] }), (0, jsx_runtime_1.jsxs)("div", { ref: editorRef, style: { minWidth: 0 }, onKeyDown: function (event) {
1223
+ : null, codeSizeNode] }), (0, jsx_runtime_1.jsxs)("div", { ref: editorRef, className: 'options-readfirst-row-editor', style: { minWidth: 0 }, onKeyDown: function (event) {
1146
1224
  if (event.key === 'Escape') {
1147
1225
  event.stopPropagation();
1148
1226
  // Escape discards. It used to call `collapse()`, which closed
@@ -1177,17 +1255,17 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1177
1255
  var schemaIntentColor = (schema === null || schema === void 0 ? void 0 : schema.intent) ?
1178
1256
  (_j = theme === null || theme === void 0 ? void 0 : theme.intents) === null || _j === void 0 ? void 0 : _j[schema.intent]
1179
1257
  : undefined;
1180
- return ((0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledEditCard, { "data-field": optionName, className: COMPACT_SINGLE_VALUE_TYPES.has(editType) ?
1258
+ return ((0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledEditCard, { ref: rowRef, "data-field": optionName, className: COMPACT_SINGLE_VALUE_TYPES.has(editType) ?
1181
1259
  'options-readfirst-card options-readfirst-card-single'
1182
- : 'options-readfirst-card', "$bg": cHover, "$border": schemaIntentColor ? "".concat(schemaIntentColor, "66") : "".concat(cInfo, "66"), children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1260
+ : 'options-readfirst-card', "$bg": cHover, "$border": schemaIntentColor ? "".concat(schemaIntentColor, "66") : "".concat(cInfo, "66"), "$calm": calm, children: [(0, jsx_runtime_1.jsxs)("div", { style: {
1183
1261
  display: 'flex',
1184
1262
  alignItems: 'flex-start',
1185
1263
  justifyContent: 'space-between',
1186
1264
  gap: 12,
1187
- }, children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledCardHeading, { children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledCardLabel, { "$color": cKey, children: [((schema === null || schema === void 0 ? void 0 : schema.icon) ||
1265
+ }, children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledCardHeading, { children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledCardLabel, { "$color": cLabel, children: [((schema === null || schema === void 0 ? void 0 : schema.icon) ||
1188
1266
  (schema === null || schema === void 0 ? void 0 : schema.image)) ?
1189
1267
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreIcon, { icon: schema === null || schema === void 0 ? void 0 : schema.icon, image: schema === null || schema === void 0 ? void 0 : schema.image, size: '14px' })
1190
- : null, (0, jsx_runtime_1.jsxs)("span", { children: [label, required ?
1268
+ : null, (0, jsx_runtime_1.jsxs)("span", { children: [label, required && !calm ?
1191
1269
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreIcon, { icon: 'Asterisk', color: 'danger', size: '10px' })
1192
1270
  : null, helpIcon] }), cardBadges.map(function (badge, index) {
1193
1271
  return typeof badge === 'object' ?
@@ -1204,7 +1282,11 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1204
1282
  return renderInjectedOptionAction(action, index);
1205
1283
  }), editRowRevertButton, cancelEditButton, hasValue && !readOnly ?
1206
1284
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreButton, { size: 'small', icon: 'DeleteBinLine', minimal: true, flat: true, fixed: true, intent: 'danger', className: 'options-readfirst-clear', "aria-label": 'Clear value', tooltip: 'Clear value', onClick: confirmClearValue })
1207
- : null, moreMenu, closeExpandedFieldButton] })] }), absorbedNodes, (0, jsx_runtime_1.jsx)("div", { style: { display: 'contents' }, onKeyDown: function (event) {
1285
+ : null, moreMenu, closeExpandedFieldButton] })] }), absorbedNodes, (0, jsx_runtime_1.jsx)("div", {
1286
+ // The card's editor, as the inline row's is: an opened card takes the
1287
+ // caret too (the tap-to-edit rule above), so opening Description or
1288
+ // Source Code by a click or by a blocked submit puts the cursor in it.
1289
+ ref: editorRef, className: 'options-readfirst-row-editor', style: { display: 'contents' }, onKeyDown: function (event) {
1208
1290
  if (event.key === 'Escape') {
1209
1291
  event.stopPropagation();
1210
1292
  cancelEdit();
@@ -1238,7 +1320,7 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1238
1320
  // default-value hints, plus a read-only covered-by note (editable covered rows
1239
1321
  // carry that in their chip instead).
1240
1322
  var valueReasons = __spreadArray(__spreadArray([], inlineMessages, true), (empty && coveredByLabel ?
1241
- [{ content: "Covered by \u201C".concat(coveredByLabel, "\u201D"), intent: 'success' }]
1323
+ [{ content: "Covered by \u201C".concat(coveredByLabel, "\u201D"), intent: calm ? undefined : 'success' }]
1242
1324
  : []), true);
1243
1325
  // A hash row reveals its sub-fields as read-only sub-rows under a "view
1244
1326
  // more" disclosure; the row itself still expands the real editor on click.
@@ -1518,10 +1600,26 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1518
1600
  covered: !!coveredByLabel || groupResolved,
1519
1601
  invalid: worstIntent === 'danger',
1520
1602
  warned: worstIntent === 'warning',
1603
+ visited: visited,
1521
1604
  });
1522
1605
  // No dot at all in a read-only form: the dot reports progress on the
1523
1606
  // form, and a read view has no progress to report.
1524
- var dotStatus = hidden || fieldDisabled || readOnly ? undefined : rowStatus;
1607
+ //
1608
+ // Calm: no dot on a healthy row, and none on an empty required one either —
1609
+ // its value column already says "Required · add a value" in amber, and one
1610
+ // thing is said once. Only a failing value keeps the red dot beside the
1611
+ // reason it gives.
1612
+ var dotStatus = hidden || fieldDisabled || readOnly || (calm && rowStatus !== 'invalid') ?
1613
+ undefined
1614
+ : rowStatus;
1615
+ // Calm: an empty required value is said IN the value column, in amber,
1616
+ // where the value would be — instead of a dash plus a red reason beside it.
1617
+ // Not on a locked field (its lock and reason speak for it) or one that
1618
+ // shows the default it will fall back to.
1619
+ var calmRequiredWord = calm && empty && !hidden && !!(schema === null || schema === void 0 ? void 0 : schema.required) && !fieldDisabled && !formattedDefault ?
1620
+ readOnly ? formAppearance_1.CALM_REQUIRED_READ_LABEL
1621
+ : formAppearance_1.CALM_REQUIRED_LABEL
1622
+ : undefined;
1525
1623
  var dotColor = dotStatus === 'invalid' ? cDanger
1526
1624
  : dotStatus === 'todo' ? cWarning
1527
1625
  : dotStatus === 'set' ? cSuccess || cInfo
@@ -1539,7 +1637,7 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1539
1637
  event.preventDefault();
1540
1638
  activate(event);
1541
1639
  }
1542
- }) }, clusterHoverProps, { children: [clusterNode, (0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledLabelBlock, { className: 'options-readfirst-label-block', children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledRowLabel, { title: (schema === null || schema === void 0 ? void 0 : schema.short_desc) || undefined, "$color": cKey, children: [rowChromeIcon, (0, jsx_runtime_1.jsxs)("span", { className: 'options-readfirst-label-text', style: { minWidth: 0 }, children: [label, requiredMark ?
1640
+ }) }, clusterHoverProps, { children: [clusterNode, (0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledLabelBlock, { className: 'options-readfirst-label-block', children: [(0, jsx_runtime_1.jsxs)(compactRowStyles_1.StyledRowLabel, { title: (schema === null || schema === void 0 ? void 0 : schema.short_desc) || undefined, "$color": cLabel, children: [rowChromeIcon, (0, jsx_runtime_1.jsxs)("span", { className: 'options-readfirst-label-text', style: { minWidth: 0 }, children: [label, requiredMark ?
1543
1641
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreIcon, { icon: 'Asterisk', color: 'danger', size: '10px', margin: 'left', marginSize: 'tiny' })
1544
1642
  : null, helpIcon] }), typeLabel ?
1545
1643
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreTag, { size: 'tiny', minimal: true, label: typeLabel, labelEffect: { opacity: 0.55 } })
@@ -1574,13 +1672,20 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1574
1672
  !showsTemplateText &&
1575
1673
  typeof formatted === 'string') ?
1576
1674
  formatted
1577
- : undefined, "$color": empty || hidden ? "".concat(cMuted, "66") : cKey, "$empty": empty || hidden, children: [(showMarkdownPreview || showLongTextInset || (previewWithSchema && showStructuredPreview)) ?
1675
+ : undefined, "$color": calmRequiredWord ?
1676
+ rowStatus === 'pending' ?
1677
+ "".concat(cMuted, "a6")
1678
+ : cWarning
1679
+ : empty || hidden ? "".concat(cMuted, "66")
1680
+ : cKey, "$empty": (empty || hidden) && !calmRequiredWord, children: [(showMarkdownPreview || showLongTextInset || (previewWithSchema && showStructuredPreview)) ?
1578
1681
  null
1579
1682
  : (0, jsx_runtime_1.jsx)("span", { className: 'options-readfirst-valuetext', children: hidden || empty ?
1580
- formattedDefault || '—'
1683
+ calmRequiredWord || formattedDefault || '—'
1581
1684
  : renderReadFirstValue(optionField, schema, formatted, readOnly) }), readOnlyChoiceDesc ?
1582
1685
  (0, jsx_runtime_1.jsx)("span", { className: 'options-readfirst-choice-desc', children: readOnlyChoiceDesc })
1583
- : null, valueReasons.map(function (m, i) { return ((0, jsx_runtime_1.jsx)("span", { className: 'options-readfirst-reason', style: { color: reasonColor(m.intent) }, children: m.content }, "".concat(m.content, "-").concat(i))); }), panelMessages.length ?
1686
+ : null, (calmRequiredWord ?
1687
+ valueReasons.filter(function (m) { return m.content !== calmRequiredWord; })
1688
+ : valueReasons).map(function (m, i) { return ((0, jsx_runtime_1.jsx)("span", { className: 'options-readfirst-reason', style: { color: reasonColor(m.intent) }, children: m.content }, "".concat(m.content, "-").concat(i))); }), panelMessages.length ?
1584
1689
  (0, jsx_runtime_1.jsx)(reqore_1.ReqoreControlGroup, { className: 'options-readfirst-info-panel', vertical: true, fluid: true, gapSize: 'normal', children: panelMessages.map(renderInfoStrip) })
1585
1690
  : null, showStructuredPreview ?
1586
1691
  // The inset lives inside the row now, so a click on a value chip would
@@ -1661,7 +1766,7 @@ exports.CompactRow = (0, react_1.memo)(function (_a) {
1661
1766
  handleValueChange(optionName, (_b = (_a = originalValue.current) === null || _a === void 0 ? void 0 : _a[optionName]) === null || _b === void 0 ? void 0 : _b.value, (_d = (_c = originalValue.current) === null || _c === void 0 ? void 0 : _c[optionName]) === null || _d === void 0 ? void 0 : _d.type);
1662
1767
  } })
1663
1768
  : dotColor ?
1664
- (0, jsx_runtime_1.jsx)(compactRowStyles_1.StyledStatusDot, { "$color": dotColor, "$ring": dotStatus !== 'set', "aria-hidden": true })
1769
+ (0, jsx_runtime_1.jsx)(compactRowStyles_1.StyledStatusDot, { className: 'options-readfirst-status-dot', "$color": dotColor, "$ring": dotStatus !== 'set', "aria-hidden": true })
1665
1770
  : null })] })] }), optionName));
1666
1771
  return row;
1667
1772
  });