@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
@@ -41,6 +41,12 @@ import {
41
41
  import { basicFormValue, getBasicFormOptions as getOptions } from './__fixtures__/basicFormOptions';
42
42
  import { chromeFieldBases, metaFieldBases } from './__fixtures__/fieldChromeOptions';
43
43
 
44
+ /** The first status box: "To fill in" while nothing in it is a fault (a new form),
45
+ * "Needs attention" once something is. Stories about which box a field lands in find
46
+ * it under either name. */
47
+ const FIRST_BOX = /^(Needs attention|To fill in)$/;
48
+ const FIRST_BOX_PREFIX = /^(Needs attention|To fill in)/;
49
+
44
50
  // schema data
45
51
 
46
52
  const TestOptionsWithRequiredGroups: IOptionsSchema = {
@@ -2243,6 +2249,7 @@ export const CompactLockedRequiredNeedsNoAttention: Story = {
2243
2249
  await expect(document.querySelector('[data-field="min"]')).toBeTruthy();
2244
2250
  await expect(document.querySelector('[data-field="max"]')).toBeTruthy();
2245
2251
  await _testsWaitForTextToNotExist('Needs attention');
2252
+ await _testsWaitForTextToNotExist('To fill in');
2246
2253
  // Nothing the author can fill in is missing, so the form is Ready — the
2247
2254
  // locked fields do not apply until a kind is picked.
2248
2255
  await _testsWaitForText('Ready');
@@ -2266,11 +2273,11 @@ export const CompactUnlockedRequiredNeedsAttention: Story = {
2266
2273
  value: { kind: { type: 'string', value: 'between' } } as IOptions,
2267
2274
  },
2268
2275
  play: async () => {
2269
- await _testsWaitForText('Needs attention');
2276
+ await _testsWaitForText(FIRST_BOX);
2270
2277
  await _testsWaitForText('Incomplete');
2271
2278
  await _testsWaitForTextToNotExist('Draft');
2272
2279
  const attention = [...document.querySelectorAll('.options-readfirst-group')].find((group) =>
2273
- (group.textContent || '').startsWith('Needs attention')
2280
+ FIRST_BOX_PREFIX.test(group.textContent || '')
2274
2281
  );
2275
2282
  await expect(attention).toBeTruthy();
2276
2283
  for (const field of ['expected', 'min', 'max']) {
@@ -3070,6 +3077,7 @@ export const CompactReadOnly: Story = {
3070
3077
  await _testsWaitForTextToNotExist('Incomplete');
3071
3078
  await _testsWaitForTextToNotExist('Draft');
3072
3079
  await _testsWaitForTextToNotExist('Needs attention');
3080
+ await _testsWaitForTextToNotExist('To fill in');
3073
3081
  await _testsWaitForTextToNotExist('Optional');
3074
3082
  // A required field nobody set is listed, unset, with no amber dot.
3075
3083
  await _testsWaitForText('Description');
@@ -3551,6 +3559,7 @@ export const CompactReadOnlyValues: Story = {
3551
3559
  expect(document.querySelector('.options-readfirst-completion')).toBeNull();
3552
3560
  expect(document.querySelector('.options-readfirst-group')).toBeNull();
3553
3561
  await _testsWaitForTextToNotExist('Needs attention');
3562
+ await _testsWaitForTextToNotExist('To fill in');
3554
3563
  await _testsWaitForTextToNotExist('Optional');
3555
3564
  // An optional field nobody set is not listed at all…
3556
3565
  await _testsWaitForTextToNotExist('Notes');
@@ -3932,7 +3941,7 @@ export const CompactValidIdentifierRule: Story = {
3932
3941
  // The rules-driven validation marks the form as needing attention — the
3933
3942
  // dedicated "Needs attention" box (and the header link) signal it.
3934
3943
  await _testsWaitForText('Incomplete');
3935
- await _testsWaitForText('Needs attention');
3944
+ await _testsWaitForText(FIRST_BOX);
3936
3945
  },
3937
3946
  };
3938
3947
 
@@ -6764,7 +6773,7 @@ export const CompactShowcase: Story = {
6764
6773
  // Optional box's fold, which scrolls, so the frame is put back afterwards:
6765
6774
  // this story's snapshot is the form's top.
6766
6775
  const attentionBox = Array.from(document.querySelectorAll('.options-readfirst-group')).find(
6767
- (group) => (group.textContent || '').startsWith('Needs attention')
6776
+ (group) => FIRST_BOX_PREFIX.test(group.textContent || '')
6768
6777
  );
6769
6778
  await expect(
6770
6779
  attentionBox?.querySelector('[data-field="optionWithShortDescription"]')
@@ -8092,9 +8101,11 @@ export const CompactExpressionWithoutCatalogue: Story = {
8092
8101
  * A collapsed ReqorePanel unmounts its content, so "has no
8093
8102
  * `.reqore-panel-content`" IS the collapsed assertion. */
8094
8103
  const findStatusBox = (title: string) =>
8095
- Array.from(document.querySelectorAll('.options-readfirst-group')).find((panel) =>
8096
- panel.querySelector('.reqore-panel-title')?.textContent?.includes(title)
8097
- );
8104
+ Array.from(document.querySelectorAll('.options-readfirst-group')).find((panel) => {
8105
+ const heading = panel.querySelector('.reqore-panel-title')?.textContent ?? '';
8106
+ // The first box is "To fill in" until something in it is a fault.
8107
+ return title === 'Needs attention' ? FIRST_BOX_PREFIX.test(heading) : heading.includes(title);
8108
+ });
8098
8109
 
8099
8110
  const expectBoxCollapsed = async (title: string) => {
8100
8111
  await waitFor(
@@ -9417,7 +9428,7 @@ export const ANewFormSaysWhatIsRequired: Story = {
9417
9428
  docs: {
9418
9429
  description: {
9419
9430
  story:
9420
- 'A brand-new form with two empty required fields. Each says "This field is required" from the start, including the first one, which opens for editing, without waiting for the author to visit it.',
9431
+ 'A brand-new form with two empty required fields. Each says "This field is required" from the start, including the first one, which opens for editing, without waiting for the author to visit it. Saying what is required is not saying something is wrong: the first box reads "To fill in", in the quiet colour, until a field has been visited and left empty.',
9421
9432
  },
9422
9433
  },
9423
9434
  },
@@ -9429,7 +9440,8 @@ export const ANewFormSaysWhatIsRequired: Story = {
9429
9440
  expandFirstRequired: true,
9430
9441
  },
9431
9442
  play: async ({ canvasElement }) => {
9432
- await _testsWaitForText('Needs attention');
9443
+ await _testsWaitForText('To fill in');
9444
+ await _testsWaitForTextToNotExist('Needs attention');
9433
9445
  await waitFor(() => {
9434
9446
  const title = canvasElement.querySelector('[data-field="title"]');
9435
9447
  const owner = canvasElement.querySelector('[data-field="owner"]');
@@ -9551,7 +9563,7 @@ export const AMovedRowInViewIsNotScrolled: Story = {
9551
9563
  options: MovedRowSchema,
9552
9564
  },
9553
9565
  play: async () => {
9554
- await _testsWaitForText('Needs attention');
9566
+ await _testsWaitForText(FIRST_BOX);
9555
9567
  const watch = watchRowScrolls();
9556
9568
  try {
9557
9569
  const scroller = movedRowScroller();
@@ -9610,7 +9622,7 @@ export const AMovedRowLandsClearOfThePinnedHeader: Story = {
9610
9622
  await scrolled;
9611
9623
  const row = document.querySelector<HTMLElement>('.readfirst-row[data-field="owner"]')!;
9612
9624
  const attention = [...document.querySelectorAll<HTMLElement>('.options-readfirst-group')].find(
9613
- (group) => (group.textContent || '').startsWith('Needs attention')
9625
+ (group) => FIRST_BOX_PREFIX.test(group.textContent || '')
9614
9626
  )!;
9615
9627
  const header = attention.querySelector<HTMLElement>(':scope > .reqore-panel-title')!;
9616
9628
  const rowRect = row.getBoundingClientRect();
@@ -9634,12 +9646,12 @@ export const AMovedRowLandsClearOfThePinnedHeader: Story = {
9634
9646
  * slide UNDER the toolbar, never over it. Each step waits on `scrollend`.
9635
9647
  */
9636
9648
  const assertBoxHeaderSlidesUnderToolbar = async (scroller: HTMLElement) => {
9637
- await _testsWaitForText('Needs attention');
9649
+ await _testsWaitForText(FIRST_BOX);
9638
9650
  const toolbar = document.querySelector<HTMLElement>(
9639
9651
  '.options-readfirst-scroll > .reqore-panel > .reqore-panel-title'
9640
9652
  )!;
9641
9653
  const box = [...document.querySelectorAll<HTMLElement>('.options-readfirst-group')].find(
9642
- (group) => (group.textContent || '').startsWith('Needs attention')
9654
+ (group) => FIRST_BOX_PREFIX.test(group.textContent || '')
9643
9655
  )!;
9644
9656
  const header = box.querySelector<HTMLElement>(':scope > .reqore-panel-title')!;
9645
9657
  const scrollBy = async (delta: number) => {