@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
@@ -13,7 +13,7 @@ import {
13
13
  import { getReadableColor } from '@qoretechnologies/reqore/dist/helpers/colors';
14
14
  import { IReqoreIconName } from '@qoretechnologies/reqore/dist/types/icons';
15
15
  import { rgba } from 'polished';
16
- import { ComponentProps, useEffect, useMemo, useRef, useState } from 'react';
16
+ import { useEffect, useMemo, useRef, useState } from 'react';
17
17
  import ReactMarkdown from 'react-markdown';
18
18
  import styled from 'styled-components';
19
19
  import { formatBytes, isImage } from '../../helpers/common';
@@ -25,6 +25,7 @@ import {
25
25
  TTicketMessageAuthor,
26
26
  TTicketViewerRole,
27
27
  } from '../supportTicket';
28
+ import { loadedImageUrl } from '../supportTicket/useLoadedImages';
28
29
 
29
30
  /*
30
31
  * Shared support-ticket conversation thread, used by every Qorus surface that
@@ -32,12 +33,11 @@ import {
32
33
  * the Qonsole `support-ticket` renderer. Presentational — data in, callbacks out
33
34
  * — so each consumer keeps its own fetch/websocket wiring.
34
35
  *
35
- * Rendered as a comment feed: an avatar beside a bordered, accent-tinted card per
36
+ * Rendered as a comment feed: an avatar beside a bordered, neutral card per
36
37
  * message, each hugging its own side. Built on Reqore's `ReqoreBubble` (which
37
- * supplies the avatar, the bold author label, the alignment and the tint), so the
38
- * accent follows whatever the host app themes `custom1` to rather than a colour
39
- * baked in here. Interface references render via the shared
40
- * `InterfaceReferenceTags`; the status/priority/category vocabularies live in
38
+ * supplies the avatar, the bold author label and the alignment). Interface
39
+ * references render via the shared `InterfaceReferenceTags`, as quiet tags with
40
+ * the kind's icon; the status/priority/category vocabularies live in
41
41
  * `../supportTicket/meta`.
42
42
  *
43
43
  * Runs of consecutive messages are wrapped in a `ReqoreBubbleGroup`, which prints
@@ -114,10 +114,11 @@ const AUTHOR_META: Record<TTicketMessageAuthor, IAuthorMeta> = {
114
114
  system: { icon: 'InformationLine' },
115
115
  };
116
116
 
117
- // Both sides share one accent: the side, the avatar and the author label already
118
- // carry who is speaking, which frees colour to mean "internal note" and nothing
119
- // else. `custom1` is a theme slot, so each host app supplies its own hue.
120
- const ACCENT: ComponentProps<typeof ReqoreBubble>['customTheme'] = { main: 'custom1' };
117
+ // No side is tinted: the side, the avatar and the author label ("You", "Qorus
118
+ // Support") already carry who is speaking, which leaves colour one job here —
119
+ // amber for an internal note. Never the product's purple, which a support thread
120
+ // does not wear (instruction-files decision 002: purple marks where you are, a
121
+ // chart's accent, and Qonsole).
121
122
 
122
123
  /** Avatar glyph; an internal note carries the "not visible to the customer" eye. */
123
124
  const authorIcon = (message: ITicketThreadMessage): IReqoreIconName =>
@@ -444,6 +445,7 @@ const ImageThumb = ({
444
445
  useEffect(() => {
445
446
  let alive = true;
446
447
  fetchAttachmentUrl(attachment.attachment_id)
448
+ .then(loadedImageUrl)
447
449
  .then((resolved) => alive && setUrl(resolved))
448
450
  .catch(() => alive && setFailed(true));
449
451
  return () => {
@@ -666,23 +668,9 @@ export const TicketThread = ({
666
668
  avatar={{ icon: authorIcon(message) }}
667
669
  label={authorLabel(message, viewerRole)}
668
670
  timestamp={message.created ? <ReqoreTimeAgo time={message.created} /> : undefined}
669
- // Own messages read as info-blue, the other party's as the purple
670
- // accent — so the two sides of the conversation are told apart by
671
- // colour as well as by side, and "which of these did I write?" is
672
- // answerable at a glance. Deliberately keyed off `viewerRole`, so it
673
- // stays correct on the staff surface too (staff replies are the blue
674
- // ones there). Internal notes keep their warning intent and are not
675
- // re-tinted — they are neither side of the conversation.
676
- intent={
677
- message.internal
678
- ? 'warning'
679
- : message.author_type === viewerRole
680
- ? 'info'
681
- : undefined
682
- }
683
- customTheme={
684
- message.internal || message.author_type === viewerRole ? undefined : ACCENT
685
- }
671
+ // Both sides are neutral cards; an internal note is amber, so it can
672
+ // never be mistaken for a reply the customer sees.
673
+ intent={message.internal ? 'warning' : undefined}
686
674
  flat={false}
687
675
  minimal
688
676
  >
@@ -698,7 +686,6 @@ export const TicketThread = ({
698
686
  <div style={{ marginTop: 8 }}>
699
687
  <InterfaceReferenceTags
700
688
  size='tiny'
701
- customTheme={ACCENT}
702
689
  references={refsFor(message)}
703
690
  resolveInterfaceIcon={resolveInterfaceIcon}
704
691
  preferKindImage={preferKindImage}
@@ -79,6 +79,25 @@ export const findAllowedValueOption = (
79
79
  );
80
80
  };
81
81
 
82
+ /**
83
+ * The value a choice stands for, whichever of the three ways its entry is
84
+ * written (see `findAllowedValueOption`): the envelope's `value`, a bare
85
+ * `value`, or the entry's `name`.
86
+ *
87
+ * The row that names a stored choice and the validator that accepts it have
88
+ * always read all three. The pickers that WRITE a choice read only the
89
+ * envelope, so a list written bare showed nothing selected for the stored value
90
+ * and stored `undefined` when a choice was clicked: picking a pipeline
91
+ * processor's class cleared the field instead of setting it.
92
+ */
93
+ export const allowedValueOf = (option: any): unknown => {
94
+ const value = option?.value;
95
+ if (value && typeof value === 'object' && !Array.isArray(value) && 'value' in value) {
96
+ return value.value;
97
+ }
98
+ return value !== undefined ? value : option?.name;
99
+ };
100
+
82
101
  /**
83
102
  * A Slate rich-text document: a non-empty array of element nodes, each with
84
103
  * `children`. Told apart from a LIST value, which is an array of elements.
@@ -0,0 +1,39 @@
1
+ /**
2
+ * Does a field's long description say more than its one-line summary?
3
+ *
4
+ * The Qorus server copies a field's plain-text `short_desc` into its markdown
5
+ * `desc` whenever the field declares no `desc` of its own
6
+ * (`QorusMapManager::getUiFieldInfo()`), so a `desc` alone does not mean there
7
+ * is anything more to read. Offering help on every field meant most help opened
8
+ * a dialog repeating the line already under the field, which teaches people the
9
+ * affordance is worth nothing. qorus-ide answers the same question the same way
10
+ * (`getFieldLongDescription` in its `helpers/descriptions.ts`).
11
+ */
12
+
13
+ /** Whitespace-, case- and trailing-full-stop-insensitive. */
14
+ const comparisonKey = (value: string): string =>
15
+ value
16
+ .replace(/\s+/g, ' ')
17
+ .trim()
18
+ .replace(/[.\s]+$/, '')
19
+ .toLowerCase();
20
+
21
+ /** Enough of markdown removed that `**Webhooks**` reads as the word it styles. */
22
+ const plainText = (markdown: string): string =>
23
+ markdown
24
+ .replace(/`([^`\n]+)`/g, '$1')
25
+ .replace(/!?\[([^\]]+)\]\([^)]*\)/g, '$1')
26
+ .replace(/^\s{0,3}#{1,6}\s+/gm, '')
27
+ .replace(/(\*\*|__|\*|_)(.+?)\1/g, '$2');
28
+
29
+ export const fieldHasLongDescription = (field?: {
30
+ desc?: unknown;
31
+ short_desc?: unknown;
32
+ }): boolean => {
33
+ const long = typeof field?.desc === 'string' ? field.desc.trim() : '';
34
+ if (!long) {
35
+ return false;
36
+ }
37
+ const short = typeof field?.short_desc === 'string' ? field.short_desc.trim() : '';
38
+ return !short || comparisonKey(short) !== comparisonKey(plainText(long));
39
+ };
@@ -35,6 +35,7 @@
35
35
  const SINGLE_LINE_STRING_TYPES = new Set([
36
36
  'string',
37
37
  'email',
38
+ 'uri',
38
39
  'uuid',
39
40
  'hostname',
40
41
  'ipv4',