@reqquest/ui 1.8.1 → 1.9.1

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.
@@ -0,0 +1,47 @@
1
+ <!--
2
+ @component
3
+ Lays out a prompt's display data as challenge/response rows that align with the
4
+ surrounding prompt list, for prompts that collect several question/answer pairs in a
5
+ single form but should read as individual rows on the review screens. Rows take on
6
+ the same padding and border treatment as the prompt rows around them, so each
7
+ challenge/response is indistinguishable from a standalone prompt.
8
+
9
+ Place this as the root element of a `displayComponent` and register the prompt with
10
+ `displayMode: 'large'`. The full-width answer area becomes a subgrid of the prompt
11
+ list, so rows share the exact column tracks of the real prompt rows around them and
12
+ wrap at the same breakpoints. Fill it with `PromptDisplayRow` children; pass `full`
13
+ on a row to span the entire width.
14
+
15
+ It may also be the root element of a `formComponent` registered with
16
+ `formMode: 'large'`: the reviewer screen's inline edit form is bridged into the same
17
+ subgrid, so rows of field inputs align with the prompt rows too. Rendered anywhere
18
+ without a prompt list around it (the edit modal, applicant pages), the grid falls back
19
+ to laying out its own two columns.
20
+ -->
21
+ <dl class="prompt-display-grid">
22
+ <slot />
23
+ </dl>
24
+
25
+ <style>
26
+ dl.prompt-display-grid {
27
+ display: grid;
28
+ grid-column: 1 / -1;
29
+ /* The review screens set --prompt-display-subgrid: subgrid when this grid is positioned
30
+ to share their prompt-list tracks. Anywhere else (edit modals, applicant pages) it
31
+ lays out its own two columns so full rows and placement still work. */
32
+ grid-template-columns: var(--prompt-display-subgrid, var(--prompt-display-columns, fit-content(50%) minmax(0, 1fr)));
33
+ align-items: stretch;
34
+ row-gap: var(--prompt-display-row-gap, 0);
35
+ margin: 0;
36
+ }
37
+ dl.prompt-display-grid > :global(.prompt-display-challenge),
38
+ dl.prompt-display-grid > :global(.prompt-display-response),
39
+ dl.prompt-display-grid > :global(.prompt-display-full) {
40
+ border-bottom: 1px solid var(--cds-border-subtle);
41
+ padding: var(--prompt-display-row-padding, 1rem 15px);
42
+ }
43
+ dl.prompt-display-grid > :global(.prompt-display-challenge),
44
+ dl.prompt-display-grid > :global(.prompt-display-full) {
45
+ padding-left: calc(var(--prompt-display-challenge-padding-left, 32px) + var(--prompt-display-indent, 0) * var(--prompt-display-indent-size, 1rem));
46
+ }
47
+ </style>
@@ -0,0 +1,45 @@
1
+ export default PromptDisplayGrid;
2
+ type PromptDisplayGrid = SvelteComponent<any, {
3
+ [evt: string]: CustomEvent<any>;
4
+ }, {
5
+ default: {};
6
+ }> & {
7
+ $$bindings?: string | undefined;
8
+ };
9
+ /**
10
+ * Lays out a prompt's display data as challenge/response rows that align with the
11
+ * surrounding prompt list, for prompts that collect several question/answer pairs in a
12
+ * single form but should read as individual rows on the review screens. Rows take on
13
+ * the same padding and border treatment as the prompt rows around them, so each
14
+ * challenge/response is indistinguishable from a standalone prompt.
15
+ *
16
+ * Place this as the root element of a `displayComponent` and register the prompt with
17
+ * `displayMode: 'large'`. The full-width answer area becomes a subgrid of the prompt
18
+ * list, so rows share the exact column tracks of the real prompt rows around them and
19
+ * wrap at the same breakpoints. Fill it with `PromptDisplayRow` children; pass `full`
20
+ * on a row to span the entire width.
21
+ *
22
+ * It may also be the root element of a `formComponent` registered with
23
+ * `formMode: 'large'`: the reviewer screen's inline edit form is bridged into the same
24
+ * subgrid, so rows of field inputs align with the prompt rows too. Rendered anywhere
25
+ * without a prompt list around it (the edit modal, applicant pages), the grid falls back
26
+ * to laying out its own two columns.
27
+ */
28
+ declare const PromptDisplayGrid: $$__sveltets_2_IsomorphicComponent<any, {
29
+ [evt: string]: CustomEvent<any>;
30
+ }, {
31
+ default: {};
32
+ }, {}, string>;
33
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
34
+ new (options: import("svelte").ComponentConstructorOptions<Props>): import("svelte").SvelteComponent<Props, Events, Slots> & {
35
+ $$bindings?: Bindings;
36
+ } & Exports;
37
+ (internal: unknown, props: {
38
+ $$events?: Events;
39
+ $$slots?: Slots;
40
+ }): Exports & {
41
+ $set?: any;
42
+ $on?: any;
43
+ };
44
+ z_$$bindings?: Bindings;
45
+ }
@@ -0,0 +1,42 @@
1
+ <!--
2
+ @component
3
+ One challenge/response row inside a `PromptDisplayGrid`. The challenge lands in the
4
+ same column as the prompt titles around it and the response in the answer column.
5
+
6
+ - `challenge` prop or slot for the question, default slot for the answer.
7
+ - `full` spans the entire grid width instead, for content that needs the whole row
8
+ (documents, notes, notifications).
9
+ - `indentLevel` indents the challenge (or full-row content) to suggest hierarchy,
10
+ e.g. follow-up questions under a parent question.
11
+ -->
12
+ <script lang="ts">
13
+ /** The question being answered. Use the `challenge` slot instead if you need markup. */
14
+ export let challenge: string | undefined = undefined
15
+ /** Span the full width of the grid instead of splitting into challenge/response. */
16
+ export let full = false
17
+ /**
18
+ * Indent the challenge (or full-row content) by this multiple of a small indent unit
19
+ * (1rem per level, tunable with --prompt-display-indent-size). Default 0.
20
+ */
21
+ export let indentLevel = 0
22
+ </script>
23
+
24
+ {#if full}
25
+ <div class="prompt-display-full" style:--prompt-display-indent={indentLevel || undefined}><slot /></div>
26
+ {:else}
27
+ <dt class="prompt-display-challenge" style:--prompt-display-indent={indentLevel || undefined}><slot name="challenge">{challenge}</slot></dt>
28
+ <dd class="prompt-display-response"><slot /></dd>
29
+ {/if}
30
+
31
+ <style>
32
+ dt.prompt-display-challenge {
33
+ grid-column: 1;
34
+ }
35
+ dd.prompt-display-response {
36
+ grid-column: 2;
37
+ margin: 0;
38
+ }
39
+ div.prompt-display-full {
40
+ grid-column: 1 / -1;
41
+ }
42
+ </style>
@@ -0,0 +1,46 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: Props & {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
15
+ default: any;
16
+ } ? Props extends Record<string, never> ? any : {
17
+ children?: any;
18
+ } : {});
19
+ /**
20
+ * One challenge/response row inside a `PromptDisplayGrid`. The challenge lands in the
21
+ * same column as the prompt titles around it and the response in the answer column.
22
+ *
23
+ * - `challenge` prop or slot for the question, default slot for the answer.
24
+ * - `full` spans the entire grid width instead, for content that needs the whole row
25
+ * (documents, notes, notifications).
26
+ * - `indentLevel` indents the challenge (or full-row content) to suggest hierarchy,
27
+ * e.g. follow-up questions under a parent question.
28
+ */
29
+ declare const PromptDisplayRow: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
30
+ /** The question being answered. Use the `challenge` slot instead if you need markup. */ challenge?: string | undefined;
31
+ /** Span the full width of the grid instead of splitting into challenge/response. */ full?: boolean;
32
+ /**
33
+ * Indent the challenge (or full-row content) by this multiple of a small indent unit
34
+ * (1rem per level, tunable with --prompt-display-indent-size). Default 0.
35
+ */ indentLevel?: number;
36
+ }, {
37
+ default: {};
38
+ challenge: {};
39
+ }>, {
40
+ [evt: string]: CustomEvent<any>;
41
+ }, {
42
+ default: {};
43
+ challenge: {};
44
+ }, {}, string>;
45
+ type PromptDisplayRow = InstanceType<typeof PromptDisplayRow>;
46
+ export default PromptDisplayRow;
@@ -2,4 +2,6 @@ export { default as CommentCard } from './CommentCard.svelte';
2
2
  export { default as FieldCardCheckbox } from './FieldCardCheckbox.svelte';
3
3
  export { default as FieldCardRadio } from './FieldCardRadio.svelte';
4
4
  export { default as InfoCard } from './InfoCard.svelte';
5
+ export { default as PromptDisplayGrid } from './PromptDisplayGrid.svelte';
6
+ export { default as PromptDisplayRow } from './PromptDisplayRow.svelte';
5
7
  export { default as QuestionnairePrompt } from './QuestionnairePrompt.svelte';
@@ -2,4 +2,6 @@ export { default as CommentCard } from './CommentCard.svelte';
2
2
  export { default as FieldCardCheckbox } from './FieldCardCheckbox.svelte';
3
3
  export { default as FieldCardRadio } from './FieldCardRadio.svelte';
4
4
  export { default as InfoCard } from './InfoCard.svelte';
5
+ export { default as PromptDisplayGrid } from './PromptDisplayGrid.svelte';
6
+ export { default as PromptDisplayRow } from './PromptDisplayRow.svelte';
5
7
  export { default as QuestionnairePrompt } from './QuestionnairePrompt.svelte';
@@ -86,6 +86,10 @@ export interface PromptDefinition {
86
86
  *
87
87
  * There is no 'full' mode for displayComponent, since we always want to be able to print the
88
88
  * full information dump on a one-pager.
89
+ *
90
+ * If your prompt collects several question/answer pairs that should each read as their own
91
+ * row in the prompt list, set 'large' and build the displayComponent on `PromptDisplayGrid` /
92
+ * `PromptDisplayRow` — its rows will align with the surrounding prompt rows.
89
93
  */
90
94
  displayMode?: 'small' | 'large';
91
95
  /**
@@ -271,7 +271,7 @@ export type AppRequestPhase = 'ACCEPTANCE' | 'COMPLETE' | 'STARTED' | 'SUBMITTED
271
271
  * the database and the status of each application.
272
272
  *
273
273
  */
274
- export type AppRequestStatus = 'ACCEPTANCE' | 'ACCEPTED' | 'APPROVAL' | 'APPROVED' | 'CANCELLED' | 'DISQUALIFIED' | 'NOT_ACCEPTED' | 'NOT_APPROVED' | 'PREAPPROVAL' | 'READY_TO_ACCEPT' | 'READY_TO_SUBMIT' | 'REVIEW_IN_PROGRESS' | 'REVIEW_COMPLETE' | 'STARTED' | 'WITHDRAWN';
274
+ export type AppRequestStatus = 'ACCEPTANCE' | 'ACCEPTED' | 'APPROVAL' | 'APPROVED' | 'CANCELLED' | 'DISQUALIFIED' | 'NOT_ACCEPTED' | 'NOT_APPROVED' | 'PREAPPROVAL' | 'READY_TO_ACCEPT' | 'READY_TO_SUBMIT' | 'REVIEW_COMPLETE' | 'REVIEW_IN_PROGRESS' | 'STARTED' | 'WITHDRAWN';
275
275
  /** An application represents the applicant applying to a specific program. Each appRequest has multiple applications - one per program defined in the system. Some applications are mutually exclusive and/or will be eliminated early based on PREQUAL requirements, but they all technically exist in the data model - there is no concept of picking one application over another, just two applications where one dies and the other survives. */
276
276
  export interface Application {
277
277
  actions: ApplicationActions;
@@ -453,7 +453,7 @@ export interface Mutation {
453
453
  acceptOffer: ValidatedAppRequestResponse;
454
454
  /** Add a note to the app request. */
455
455
  addNote: ValidatedNoteResponse;
456
- /** Moves the application to the next workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. If on the last non-blocking workflow, moves the application to COMPLETE. If all applications are COMPLETE, automatically triggers the app request close mutation. */
456
+ /** Moves the application to the next blocking workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. In the non-blocking (WORKFLOW_NONBLOCKING) phase the workflow is non-sequential with all non-blocking requirements editable at once and once they are all resolved this becomes a single "Send to Complete" action that moves the application to COMPLETE. */
457
457
  advanceWorkflow: ValidatedAppRequestResponse;
458
458
  /** Cancel or withdraw the app request, depending on its current phase. This is only available if the app request is in a cancellable state. */
459
459
  cancelAppRequest: ValidatedAppRequestResponse;
@@ -480,7 +480,7 @@ export interface Mutation {
480
480
  returnToOffer: ValidatedAppRequestResponse;
481
481
  /** Return the app request to the review phase from acceptance, non-blocking workflow, or completion. */
482
482
  returnToReview: ValidatedAppRequestResponse;
483
- /** Moves the application back to the previous workflow stage. If on the first blocking workflow stage, moves back to APPROVAL. If on the first non-blocking workflow, throws an error. */
483
+ /** Moves the application back to the previous blocking workflow stage. Non-blocking workflow stages are excluded from the reverse order, so this only steps back through the blocking workflow during the review (SUBMITTED) phase. If no blocking then moved to APPROVAL */
484
484
  reverseWorkflow: ValidatedAppRequestResponse;
485
485
  roleAddGrant: AccessRoleValidatedResponse;
486
486
  roleCreate: AccessRoleValidatedResponse;
@@ -1107,6 +1107,8 @@ export interface AppRequestActivityFilters {
1107
1107
  impersonatedBy?: (Scalars['ID'][] | null);
1108
1108
  /** Return activities that were performed while one of the given logins was being impersonated by someone else. */
1109
1109
  impersonatedUsers?: (Scalars['ID'][] | null);
1110
+ /** Filter activities by matching description content. */
1111
+ search?: (Scalars['String'] | null);
1110
1112
  /** Return activities that were performed by one of the given logins. Also returns activities that were performed while one of the given logins was impersonating someone else. */
1111
1113
  users?: (Scalars['ID'][] | null);
1112
1114
  }
@@ -1421,7 +1423,7 @@ export interface MutationGenqlSelection {
1421
1423
  validateOnly?: (Scalars['Boolean'] | null);
1422
1424
  };
1423
1425
  });
1424
- /** Moves the application to the next workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. If on the last non-blocking workflow, moves the application to COMPLETE. If all applications are COMPLETE, automatically triggers the app request close mutation. */
1426
+ /** Moves the application to the next blocking workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. In the non-blocking (WORKFLOW_NONBLOCKING) phase the workflow is non-sequential with all non-blocking requirements editable at once and once they are all resolved this becomes a single "Send to Complete" action that moves the application to COMPLETE. */
1425
1427
  advanceWorkflow?: (ValidatedAppRequestResponseGenqlSelection & {
1426
1428
  __args: {
1427
1429
  applicationId: Scalars['ID'];
@@ -1515,7 +1517,7 @@ export interface MutationGenqlSelection {
1515
1517
  appRequestId: Scalars['ID'];
1516
1518
  };
1517
1519
  });
1518
- /** Moves the application back to the previous workflow stage. If on the first blocking workflow stage, moves back to APPROVAL. If on the first non-blocking workflow, throws an error. */
1520
+ /** Moves the application back to the previous blocking workflow stage. Non-blocking workflow stages are excluded from the reverse order, so this only steps back through the blocking workflow during the review (SUBMITTED) phase. If no blocking then moved to APPROVAL */
1519
1521
  reverseWorkflow?: (ValidatedAppRequestResponseGenqlSelection & {
1520
1522
  __args: {
1521
1523
  applicationId: Scalars['ID'];
@@ -486,6 +486,9 @@ input AppRequestActivityFilters {
486
486
  """
487
487
  impersonatedUsers: [ID!]
488
488
 
489
+ """Filter activities by matching description content."""
490
+ search: String
491
+
489
492
  """
490
493
  Return activities that were performed by one of the given logins. Also returns activities that were performed while one of the given logins was impersonating someone else.
491
494
  """
@@ -726,6 +729,11 @@ enum AppRequestStatus {
726
729
  """
727
730
  REVIEW_COMPLETE
728
731
 
732
+ """
733
+ A reviewer has begun their part on at least one application, some APPROVAL requirement prompt data has been input, but application has not finished review yet.
734
+ """
735
+ REVIEW_IN_PROGRESS
736
+
729
737
  """Applicant has begun the process and has not yet submitted."""
730
738
  STARTED
731
739
 
@@ -847,7 +855,7 @@ enum ApplicationPhase {
847
855
  ACCEPTANCE
848
856
 
849
857
  """
850
- The applicant has submitted the application and any PREAPPROVAL requirements are passing. The application is under review.
858
+ The applicant has submitted the application and any PREAPPROVAL requirements are passing. The application is pending review.
851
859
  """
852
860
  APPROVAL
853
861
 
@@ -892,10 +900,15 @@ enum ApplicationPhase {
892
900
  READY_TO_SUBMIT
893
901
 
894
902
  """
895
- The application has been reviewed and any blocking workflow stages have been completed. The application is ready for results (whether eligible or not) to be released to the applicant. A reviewer must manually advanced the phase, and will do so for the whole appRequest, not one application at a time. So the application will sit in this state until all applications are REVIEW_COMPLETE. If there is no acceptance phase (because there are no acceptance requirements), or if the application is not eligible, the makeOffer prompt will move the phase to WORKFLOW_NONBLOCKING or COMPLETE.
903
+ The application has been reviewed and any blocking workflow stages have been completed. Its results (whether eligible or not) are released to the applicant as soon as it reaches this phase - the eligibility decision no longer waits for the appRequest Complete Review. A reviewer must still manually advance the appRequest phase, so the application will sit in this state until all applications are REVIEW_COMPLETE and the reviewer completes the review. If there is no acceptance phase, or if the application is not eligible, the makeOffer prompt will move the phase to WORKFLOW_NONBLOCKING or COMPLETE.
896
904
  """
897
905
  REVIEW_COMPLETE
898
906
 
907
+ """
908
+ The review for this application is currently in progress (some APPROVAL requirement prompt data has been input)
909
+ """
910
+ REVIEW_IN_PROGRESS
911
+
899
912
  """
900
913
  The application review has been completed and now there is a workflow process to audit the review BEFORE marking the application status as eligible or ineligible. It should remain pending until the blocking workflow stages have been completed. Workflow stages that evaluate to INELIGIBLE will also make the application status INELIGIBLE. Prompts from the applicant and review phases are locked.
901
914
  """
@@ -1223,7 +1236,7 @@ type Mutation {
1223
1236
  ): ValidatedNoteResponse!
1224
1237
 
1225
1238
  """
1226
- Moves the application to the next workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. If on the last non-blocking workflow, moves the application to COMPLETE. If all applications are COMPLETE, automatically triggers the app request close mutation.
1239
+ Moves the application to the next blocking workflow stage. If phase is READY_FOR_WORKFLOW, moves to the first or next blocking workflow stage. If on the last blocking workflow, moves to REVIEW_COMPLETE. In the non-blocking (WORKFLOW_NONBLOCKING) phase the workflow is non-sequential with all non-blocking requirements editable at once and once they are all resolved this becomes a single "Send to Complete" action that moves the application to COMPLETE.
1227
1240
  """
1228
1241
  advanceWorkflow(applicationId: ID!): ValidatedAppRequestResponse!
1229
1242
 
@@ -1287,7 +1300,7 @@ type Mutation {
1287
1300
  returnToReview(appRequestId: ID!): ValidatedAppRequestResponse!
1288
1301
 
1289
1302
  """
1290
- Moves the application back to the previous workflow stage. If on the first blocking workflow stage, moves back to APPROVAL. If on the first non-blocking workflow, throws an error.
1303
+ Moves the application back to the previous blocking workflow stage. Non-blocking workflow stages are excluded from the reverse order, so this only steps back through the blocking workflow during the review (SUBMITTED) phase. If no blocking then moved to APPROVAL
1291
1304
  """
1292
1305
  reverseWorkflow(applicationId: ID!): ValidatedAppRequestResponse!
1293
1306
  roleAddGrant(grant: AccessRoleGrantCreate!, roleId: ID!, validateOnly: Boolean): AccessRoleValidatedResponse!
@@ -230,6 +230,7 @@ declare const _default: {
230
230
  impersonated: number[];
231
231
  impersonatedBy: number[];
232
232
  impersonatedUsers: number[];
233
+ search: number[];
233
234
  users: number[];
234
235
  __typename: number[];
235
236
  };
@@ -600,6 +600,9 @@ export default {
600
600
  "impersonatedUsers": [
601
601
  49
602
602
  ],
603
+ "search": [
604
+ 85
605
+ ],
603
606
  "users": [
604
607
  49
605
608
  ],
package/package.json CHANGED
@@ -1,6 +1,9 @@
1
1
  {
2
2
  "name": "@reqquest/ui",
3
- "version": "1.8.1",
3
+ "version": "1.9.1",
4
+ "overrides": {
5
+ "esrap": "2.3.2"
6
+ },
4
7
  "exports": {
5
8
  ".": {
6
9
  "types": "./dist/index.d.ts",