@reqquest/ui 1.1.17 → 1.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,95 @@
1
+ <script lang="ts">
2
+ import { ActionSet, type ActionItem } from '@txstate-mws/carbon-svelte'
3
+ import { DateTime } from 'luxon'
4
+
5
+ /**
6
+ * The HTML content of the comment.
7
+ * @type {string}
8
+ */
9
+ export let content: string
10
+
11
+ /**
12
+ * The full name of the author.
13
+ * @type {string}
14
+ */
15
+ export let authorName: string
16
+
17
+ /**
18
+ * The login name of the author (e.g. netid). Optional.
19
+ * @type {string | undefined}
20
+ */
21
+ export let authorLogin: string | undefined = undefined
22
+
23
+ /**
24
+ * The timestamp this comment was created. Accepts a Luxon DateTime or an ISO string.
25
+ * @type {DateTime | string}
26
+ */
27
+ export let createdAt: DateTime | string
28
+
29
+ /**
30
+ * Actions available on this comment (shown as an overflow menu in the top right).
31
+ * @type {ActionItem[]}
32
+ */
33
+ export let actions: ActionItem[] = []
34
+
35
+ /**
36
+ * If true, the comment box will not have a background, drop shadow, or padding.
37
+ * Use this when rendering a comment in a context that already provides its own framing.
38
+ * @type {boolean}
39
+ */
40
+ export let noborder = false
41
+
42
+ $: createdAtDt = typeof createdAt === 'string' ? DateTime.fromISO(createdAt) : createdAt
43
+ </script>
44
+
45
+ <div class="comment-card">
46
+ <div class="comment-box" class:noborder class:hasactions={actions.length > 0}>
47
+ <div class="comment-content">{@html content}</div>
48
+ {#if actions.length}
49
+ <div class="comment-actions">
50
+ <ActionSet {actions} noPrimaryAction small forceOverflow />
51
+ </div>
52
+ {/if}
53
+ </div>
54
+ <div class="comment-meta">
55
+ {authorName}{#if authorLogin}&nbsp;({authorLogin}){/if} &middot; {createdAtDt.toFormat('f')}
56
+ </div>
57
+ </div>
58
+
59
+ <style>
60
+ .comment-card {
61
+ display: flex;
62
+ flex-direction: column;
63
+ }
64
+ .comment-box {
65
+ position: relative;
66
+ background: white;
67
+ padding: 0.75rem;
68
+ box-shadow: 0 1px 3px rgba(0, 0, 0, 0.12), 0 1px 2px rgba(0, 0, 0, 0.08);
69
+ }
70
+ .comment-box.hasactions {
71
+ padding-right: 2.5rem;
72
+ }
73
+ .comment-box.noborder {
74
+ background: transparent;
75
+ padding: 0;
76
+ box-shadow: none;
77
+ }
78
+ .comment-box.noborder.hasactions {
79
+ padding-right: 2.5rem;
80
+ }
81
+ .comment-content :global(p) {
82
+ margin: 0;
83
+ font-size: 100%;
84
+ }
85
+ .comment-actions {
86
+ position: absolute;
87
+ top: 0.25rem;
88
+ right: 0.25rem;
89
+ }
90
+ .comment-meta {
91
+ font-size: 0.75rem;
92
+ color: var(--cds-text-02);
93
+ margin-top: 0.25rem;
94
+ }
95
+ </style>
@@ -0,0 +1,46 @@
1
+ import { type ActionItem } from '@txstate-mws/carbon-svelte';
2
+ import { DateTime } from 'luxon';
3
+ 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> {
4
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
5
+ $$bindings?: Bindings;
6
+ } & Exports;
7
+ (internal: unknown, props: Props & {
8
+ $$events?: Events;
9
+ $$slots?: Slots;
10
+ }): Exports & {
11
+ $set?: any;
12
+ $on?: any;
13
+ };
14
+ z_$$bindings?: Bindings;
15
+ }
16
+ declare const CommentCard: $$__sveltets_2_IsomorphicComponent<{
17
+ /**
18
+ * The HTML content of the comment.
19
+ * @type {string}
20
+ */ content: string;
21
+ /**
22
+ * The full name of the author.
23
+ * @type {string}
24
+ */ authorName: string;
25
+ /**
26
+ * The login name of the author (e.g. netid). Optional.
27
+ * @type {string | undefined}
28
+ */ authorLogin?: string | undefined;
29
+ /**
30
+ * The timestamp this comment was created. Accepts a Luxon DateTime or an ISO string.
31
+ * @type {DateTime | string}
32
+ */ createdAt: DateTime | string;
33
+ /**
34
+ * Actions available on this comment (shown as an overflow menu in the top right).
35
+ * @type {ActionItem[]}
36
+ */ actions?: ActionItem[];
37
+ /**
38
+ * If true, the comment box will not have a background, drop shadow, or padding.
39
+ * Use this when rendering a comment in a context that already provides its own framing.
40
+ * @type {boolean}
41
+ */ noborder?: boolean;
42
+ }, {
43
+ [evt: string]: CustomEvent<any>;
44
+ }, {}, {}, string>;
45
+ type CommentCard = InstanceType<typeof CommentCard>;
46
+ export default CommentCard;
@@ -0,0 +1,211 @@
1
+ <script lang="ts">
2
+ import { TagSet, type ActionItem, type TagItem } from '@txstate-mws/carbon-svelte'
3
+ import { modifierKey } from '@txstate-mws/svelte-components'
4
+ import Button from 'carbon-components-svelte/src/Button/Button.svelte'
5
+ import ChevronRight from 'carbon-icons-svelte/lib/ChevronRight.svelte'
6
+ import { afterUpdate, getContext } from 'svelte'
7
+ import { randomid } from 'txstate-utils'
8
+
9
+ /**
10
+ * The title of the component.
11
+ * @type {string}
12
+ */
13
+ export let title: string
14
+
15
+ /**
16
+ * The subheading for the component, which is optional.
17
+ * @type {string | undefined}
18
+ */
19
+ export let subhead: string | undefined = undefined
20
+
21
+ /**
22
+ * Adds visual emphasis to the title
23
+ * @type {boolean}
24
+ */
25
+ export let emphasizeTitle = false
26
+
27
+ /**
28
+ * Combined actions and navigations rendered as buttons at the bottom of the card.
29
+ * @type {ActionItem[]}
30
+ */
31
+ export let actions: ActionItem[] = []
32
+
33
+ /**
34
+ * Prevents the first button from having primary styling.
35
+ * @type {boolean}
36
+ */
37
+ export let noPrimaryAction = false
38
+
39
+ /**
40
+ * Array of tag items to display on the card.
41
+ * @type {TagItem[]}
42
+ */
43
+ export let tags: TagItem[] = []
44
+
45
+ /**
46
+ * Determines whether the tags should be displayed in the body of the card.
47
+ * @type {boolean}
48
+ */
49
+ export let tagsInBody = false
50
+
51
+ /**
52
+ * The ARIA role for the card. Defaults to 'listitem' when nested inside a CardGrid, 'region' otherwise.
53
+ * @type {string | undefined}
54
+ */
55
+ export let role: string | undefined = undefined
56
+
57
+ const isInCardGrid = getContext('card-grid') || false
58
+ $: ariaRole = role ?? (isInCardGrid ? 'listitem' : 'region')
59
+
60
+ let activeAction = 0
61
+ const actionelements: (HTMLButtonElement | HTMLAnchorElement)[] = []
62
+
63
+ function actionActivate (idx: number) {
64
+ activeAction = idx
65
+ actionelements[idx].focus()
66
+ }
67
+
68
+ function actionUp () {
69
+ const nextIdx = activeAction - 1
70
+ if (nextIdx >= 0 && nextIdx !== activeAction) actionActivate(nextIdx)
71
+ }
72
+
73
+ function actionDown () {
74
+ const nextIdx = activeAction + 1
75
+ if (nextIdx < actions.length && nextIdx !== activeAction) {
76
+ actionActivate(nextIdx)
77
+ }
78
+ }
79
+
80
+ function actionClick (action: ActionItem) {
81
+ return (e: MouseEvent) => {
82
+ if (action.disabled) e.preventDefault()
83
+ else void action.onClick?.()
84
+ }
85
+ }
86
+
87
+ function actionKeyDown (e: KeyboardEvent) {
88
+ if (modifierKey(e)) return
89
+ if (e.key.startsWith('Arrow')) {
90
+ e.stopPropagation()
91
+ e.preventDefault()
92
+ }
93
+ if (e.key === 'ArrowRight' || e.key === 'ArrowUp') actionUp()
94
+ else if (e.key === 'ArrowLeft' || e.key === 'ArrowDown') actionDown()
95
+ }
96
+
97
+ afterUpdate(() => {
98
+ for (const btn of actionelements) {
99
+ btn?.removeEventListener('keydown', actionKeyDown as any)
100
+ btn?.addEventListener('keydown', actionKeyDown as any)
101
+ }
102
+ })
103
+
104
+ const titleId = randomid()
105
+ </script>
106
+
107
+ <div
108
+ role={ariaRole}
109
+ class="info-card shadow [ flex flex-col ]"
110
+ aria-labelledby={titleId}
111
+ >
112
+ <header class="info-card-header [ flex items-start justify-between p-[8px] ]">
113
+ <div class="info-card-header-left [ flex-grow flex-shrink ]">
114
+ <div
115
+ id={titleId}
116
+ class="info-card-title [ text-lg font-bold ]"
117
+ class:emphasizeTitle
118
+ >
119
+ {title}
120
+ </div>
121
+ {#if subhead}<div class="info-card-subhead">{subhead}</div>{/if}
122
+ </div>
123
+ <div class="info-card-header-right">
124
+ <slot name="header-right" />
125
+ </div>
126
+ </header>
127
+
128
+ {#if tags.length}
129
+ <TagSet {tags} describedById={titleId} class={tagsInBody ? 'info-card-tags' : 'info-card-tags hasbg'} />
130
+ {/if}
131
+
132
+ <div class="info-card-content [ p-[8px] ]">
133
+ <slot />
134
+ </div>
135
+
136
+ {#if actions.length}
137
+ <!-- svelte-ignore a11y-no-noninteractive-element-to-interactive-role -->
138
+ <div
139
+ class="info-card-footer [ flex flex-wrap flex-row-reverse ]"
140
+ class:singular={actions.length === 1}
141
+ role="menubar"
142
+ >
143
+ {#each actions as action, i}
144
+ <Button
145
+ bind:ref={actionelements[i]}
146
+ href={action.href}
147
+ size="field"
148
+ role="menuitem"
149
+ aria-disabled={action.disabled}
150
+ aria-describedby={titleId}
151
+ tabindex={(i === activeAction ? 0 : -1) as any}
152
+ icon={action.icon ?? ChevronRight}
153
+ kind={noPrimaryAction || i > 0 ? 'secondary' : 'primary'}
154
+ class="info-card-action [ w-full ] {action.disabled ? 'bx--btn--disabled' : ''}"
155
+ on:click={actionClick(action)}
156
+ >{action.label}</Button>
157
+ {/each}
158
+ </div>
159
+ {/if}
160
+ </div>
161
+
162
+ <style>
163
+ .info-card {
164
+ border: 2px solid #e7e5e4;
165
+ }
166
+ .info-card-header {
167
+ background-color: #e7e5e4;
168
+ }
169
+ .info-card-title {
170
+ margin-block-start: 0;
171
+ width: -moz-fit-content;
172
+ width: fit-content;
173
+ }
174
+ .info-card-title.emphasizeTitle {
175
+ background-color: #d8d0cf;
176
+ padding: 0 8px;
177
+ }
178
+ .info-card :global(.info-card-tags) {
179
+ padding: 8px;
180
+ }
181
+ .info-card :global(.info-card-tags > *) {
182
+ max-width: calc(50% - 2px);
183
+ }
184
+ .info-card :global(.info-card-tags.hasbg) {
185
+ padding-top: 0;
186
+ background-color: #e7e5e4;
187
+ }
188
+ .info-card-footer {
189
+ margin-block-start: auto;
190
+ gap: 1px;
191
+ }
192
+ .info-card .info-card-footer > :global(*) {
193
+ flex-grow: 1;
194
+ flex-basis: calc((300px - 100%) * 999);
195
+ min-width: 100px;
196
+ max-width: 100%;
197
+ border: 0;
198
+ }
199
+ .info-card .info-card-footer.singular > :global(*) {
200
+ width: 100%;
201
+ }
202
+ /* 3 items get a higher threshold so they stack earlier */
203
+ .info-card .info-card-footer > :global(:nth-last-child(n + 3)),
204
+ .info-card .info-card-footer > :global(:nth-last-child(n + 3) ~ *) {
205
+ flex-basis: calc((400px - 100%) * 999);
206
+ }
207
+ .info-card .info-card-footer > :global(:nth-last-child(n + 4)),
208
+ .info-card .info-card-footer > :global(:nth-last-child(n + 4) ~ *) {
209
+ flex-basis: 100%;
210
+ }
211
+ </style>
@@ -0,0 +1,63 @@
1
+ import { type ActionItem, type TagItem } from '@txstate-mws/carbon-svelte';
2
+ 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> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
+ $$bindings?: Bindings;
5
+ } & Exports;
6
+ (internal: unknown, props: Props & {
7
+ $$events?: Events;
8
+ $$slots?: Slots;
9
+ }): Exports & {
10
+ $set?: any;
11
+ $on?: any;
12
+ };
13
+ z_$$bindings?: Bindings;
14
+ }
15
+ type $$__sveltets_2_PropsWithChildren<Props, Slots> = Props & (Slots extends {
16
+ default: any;
17
+ } ? Props extends Record<string, never> ? any : {
18
+ children?: any;
19
+ } : {});
20
+ declare const InfoCard: $$__sveltets_2_IsomorphicComponent<$$__sveltets_2_PropsWithChildren<{
21
+ /**
22
+ * The title of the component.
23
+ * @type {string}
24
+ */ title: string;
25
+ /**
26
+ * The subheading for the component, which is optional.
27
+ * @type {string | undefined}
28
+ */ subhead?: string | undefined;
29
+ /**
30
+ * Adds visual emphasis to the title
31
+ * @type {boolean}
32
+ */ emphasizeTitle?: boolean;
33
+ /**
34
+ * Combined actions and navigations rendered as buttons at the bottom of the card.
35
+ * @type {ActionItem[]}
36
+ */ actions?: ActionItem[];
37
+ /**
38
+ * Prevents the first button from having primary styling.
39
+ * @type {boolean}
40
+ */ noPrimaryAction?: boolean;
41
+ /**
42
+ * Array of tag items to display on the card.
43
+ * @type {TagItem[]}
44
+ */ tags?: TagItem[];
45
+ /**
46
+ * Determines whether the tags should be displayed in the body of the card.
47
+ * @type {boolean}
48
+ */ tagsInBody?: boolean;
49
+ /**
50
+ * The ARIA role for the card. Defaults to 'listitem' when nested inside a CardGrid, 'region' otherwise.
51
+ * @type {string | undefined}
52
+ */ role?: string | undefined;
53
+ }, {
54
+ 'header-right': {};
55
+ default: {};
56
+ }>, {
57
+ [evt: string]: CustomEvent<any>;
58
+ }, {
59
+ 'header-right': {};
60
+ default: {};
61
+ }, {}, string>;
62
+ type InfoCard = InstanceType<typeof InfoCard>;
63
+ export default InfoCard;
@@ -1,3 +1,5 @@
1
+ export { default as CommentCard } from './CommentCard.svelte';
1
2
  export { default as FieldCardCheckbox } from './FieldCardCheckbox.svelte';
2
3
  export { default as FieldCardRadio } from './FieldCardRadio.svelte';
4
+ export { default as InfoCard } from './InfoCard.svelte';
3
5
  export { default as QuestionnairePrompt } from './QuestionnairePrompt.svelte';
@@ -1,3 +1,5 @@
1
+ export { default as CommentCard } from './CommentCard.svelte';
1
2
  export { default as FieldCardCheckbox } from './FieldCardCheckbox.svelte';
2
3
  export { default as FieldCardRadio } from './FieldCardRadio.svelte';
4
+ export { default as InfoCard } from './InfoCard.svelte';
3
5
  export { default as QuestionnairePrompt } from './QuestionnairePrompt.svelte';
package/dist/registry.js CHANGED
@@ -15,7 +15,7 @@ export class UIRegistry {
15
15
  for (const program of config.programs)
16
16
  this.programMap[program.key] = program;
17
17
  this.lang = {
18
- appRequest: config.terminology?.appRequest ?? config.programs.length > 1 ? 'App Request' : 'Application',
18
+ appRequest: config.terminology?.appRequest ?? (config.programs.length > 1 ? 'App Request' : 'Application'),
19
19
  login: config.terminology?.login ?? 'Login',
20
20
  period: config.terminology?.period ?? 'Period'
21
21
  };
@@ -196,6 +196,10 @@ export interface AppRequestActions {
196
196
  completeRequest: Scalars['Boolean'];
197
197
  /** User may complete the review app request. Sends the app request to the acceptance phase, or if there is no acceptance phase, to the non-blocking workflow or completion. */
198
198
  completeReview: Scalars['Boolean'];
199
+ /** User is able to create a new internal note on the app request. */
200
+ createNote: Scalars['Boolean'];
201
+ /** User is able to create a new internal note on the app request. */
202
+ createPersistentNote: Scalars['Boolean'];
199
203
  /** User may reopen this app request, whether as the owner or as a reviewer/admin. */
200
204
  reopen: Scalars['Boolean'];
201
205
  /** User may return this app request to the applicant phase. */
@@ -402,7 +406,7 @@ export interface Mutation {
402
406
  /** This is for the applicant to accept or reject the offer that was made based on their app request. The difference between accept and reject is determined by the status of the acceptance requirements. They will still "accept offer" after they answer that they do not want the offer. If there is non-blocking workflow on any applications, the first one in each will begin. Applications without non-blocking workflow will be advanced to the COMPLETE phase. If all applications are complete, the app request will be closed. */
403
407
  acceptOffer: ValidatedAppRequestResponse;
404
408
  /** Add a note to the app request. */
405
- addNote: ValidatedAppRequestResponse;
409
+ addNote: ValidatedNoteResponse;
406
410
  /** 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. */
407
411
  advanceWorkflow: ValidatedAppRequestResponse;
408
412
  /** Cancel or withdraw the app request, depending on its current phase. This is only available if the app request is in a cancellable state. */
@@ -438,11 +442,15 @@ export interface Mutation {
438
442
  roleDeleteGrant: AccessRoleValidatedResponse;
439
443
  roleUpdate: AccessRoleValidatedResponse;
440
444
  roleUpdateGrant: AccessRoleValidatedResponse;
445
+ /** Stage the data for a prompt in this app request. */
446
+ stagePrompt: ValidatedAppRequestResponse;
441
447
  /** Submit the app request. */
442
448
  submitAppRequest: ValidatedAppRequestResponse;
449
+ /** Toggle an existing note's persistent status. */
450
+ togglePersistence: ValidatedNoteResponse;
443
451
  updateConfiguration: ValidatedConfigurationResponse;
444
452
  /** Update the content of an existing note. */
445
- updateNote: Note;
453
+ updateNote: ValidatedNoteResponse;
446
454
  updatePeriod: ValidatedPeriodResponse;
447
455
  updatePeriodRequirement: ValidatedResponse;
448
456
  /** Update the data for a prompt in this app request. */
@@ -470,6 +478,8 @@ export interface Note {
470
478
  content: Scalars['String'];
471
479
  createdAt: Scalars['DateTime'];
472
480
  id: Scalars['ID'];
481
+ /** Whether this note contains permanently useful information about a person, as opposed to only being relevant in the context of the app request it was posted to. */
482
+ persistent: Scalars['Boolean'];
473
483
  updatedAt: Scalars['DateTime'];
474
484
  __typename: 'Note';
475
485
  }
@@ -477,6 +487,7 @@ export interface Note {
477
487
  export interface NoteActions {
478
488
  delete: Scalars['Boolean'];
479
489
  update: Scalars['Boolean'];
490
+ updatePersistent: Scalars['Boolean'];
480
491
  __typename: 'NoteActions';
481
492
  }
482
493
  export interface PaginationInfoWithTotalItems {
@@ -630,6 +641,8 @@ export interface RequirementPrompt {
630
641
  fetchedData: (Scalars['JsonData'] | null);
631
642
  /** Extra configuration data that is relevant for this prompt. This configuration is explicitly gathered from related requirements and prompts by the gatherConfig function in the prompt definition. */
632
643
  gatheredConfigData: Scalars['JsonData'];
644
+ /** Identifies if the prompt already has saved data. Assists in determining if the user has previously interacted with this prompt. */
645
+ hasSavedData: Scalars['Boolean'];
633
646
  id: Scalars['ID'];
634
647
  /** When true, this prompt has been invalidated by the answer to another prompt. The `answered` field will remain true so be sure to check this field as well when determining whether the prompt is complete. */
635
648
  invalidated: Scalars['Boolean'];
@@ -643,6 +656,8 @@ export interface RequirementPrompt {
643
656
  navTitle: Scalars['String'];
644
657
  /** Preload data that has been generated according to the prompt definition. For example, a prompt might query the database for answers given in previous requests or query an external API to learn facts about the user. */
645
658
  preloadData: (Scalars['JsonData'] | null);
659
+ /** Smartly identifies if the prompt requires pre staging processing. */
660
+ prestage: Scalars['Boolean'];
646
661
  /** The requirement that this prompt is associated with. */
647
662
  requirement: ApplicationRequirement;
648
663
  /** A human readable title for the prompt. This is what will be shown to users. */
@@ -676,6 +691,13 @@ export interface ValidatedConfigurationResponse {
676
691
  success: Scalars['Boolean'];
677
692
  __typename: 'ValidatedConfigurationResponse';
678
693
  }
694
+ export interface ValidatedNoteResponse {
695
+ messages: MutationMessage[];
696
+ note: Note;
697
+ /** True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings. */
698
+ success: Scalars['Boolean'];
699
+ __typename: 'ValidatedNoteResponse';
700
+ }
679
701
  export interface ValidatedPeriodResponse {
680
702
  messages: MutationMessage[];
681
703
  period: (Period | null);
@@ -975,6 +997,10 @@ export interface AppRequestActionsGenqlSelection {
975
997
  completeRequest?: boolean | number;
976
998
  /** User may complete the review app request. Sends the app request to the acceptance phase, or if there is no acceptance phase, to the non-blocking workflow or completion. */
977
999
  completeReview?: boolean | number;
1000
+ /** User is able to create a new internal note on the app request. */
1001
+ createNote?: boolean | number;
1002
+ /** User is able to create a new internal note on the app request. */
1003
+ createPersistentNote?: boolean | number;
978
1004
  /** User may reopen this app request, whether as the owner or as a reviewer/admin. */
979
1005
  reopen?: boolean | number;
980
1006
  /** User may return this app request to the applicant phase. */
@@ -1147,7 +1173,11 @@ export interface ApplicationRequirementGenqlSelection {
1147
1173
  key?: boolean | number;
1148
1174
  /** A human readable title for the requirement in the navigation. You probably want it to be shorter than the full title. If not provided, the title will be used. */
1149
1175
  navTitle?: boolean | number;
1150
- prompts?: RequirementPromptGenqlSelection;
1176
+ prompts?: (RequirementPromptGenqlSelection & {
1177
+ __args?: {
1178
+ filter?: (RequirementPromptFilter | null);
1179
+ };
1180
+ });
1151
1181
  /** The smart title for this requirement in the app request's period. For instance, might be "Applicant must have GPA over 3.4" instead of the regular title "Applicant must meet GPA requirement". Will fall back to the regular title for any requirement that does not provide a smart title. */
1152
1182
  smartTitle?: boolean | number;
1153
1183
  /** The status of the requirement. This is what will be shown to users. */
@@ -1250,10 +1280,12 @@ export interface MutationGenqlSelection {
1250
1280
  };
1251
1281
  });
1252
1282
  /** Add a note to the app request. */
1253
- addNote?: (ValidatedAppRequestResponseGenqlSelection & {
1283
+ addNote?: (ValidatedNoteResponseGenqlSelection & {
1254
1284
  __args: {
1255
1285
  /** The content of the note. HTML is expected. */
1256
1286
  content: Scalars['String'];
1287
+ persistent?: (Scalars['Boolean'] | null);
1288
+ validateOnly?: (Scalars['Boolean'] | null);
1257
1289
  };
1258
1290
  });
1259
1291
  /** 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. */
@@ -1306,7 +1338,7 @@ export interface MutationGenqlSelection {
1306
1338
  /** Delete an existing note. */
1307
1339
  deleteNote?: {
1308
1340
  __args: {
1309
- noteId: Scalars['String'];
1341
+ noteId: Scalars['ID'];
1310
1342
  };
1311
1343
  };
1312
1344
  deletePeriod?: (ValidatedResponseGenqlSelection & {
@@ -1394,12 +1426,26 @@ export interface MutationGenqlSelection {
1394
1426
  validateOnly?: (Scalars['Boolean'] | null);
1395
1427
  };
1396
1428
  });
1429
+ /** Stage the data for a prompt in this app request. */
1430
+ stagePrompt?: (ValidatedAppRequestResponseGenqlSelection & {
1431
+ __args: {
1432
+ /** The data version of the app request at the time this prompt was loaded. If provided, the API will perform an optimistic concurrency check and fail the update if someone else has updated the data in the meantime. */
1433
+ dataVersion?: (Scalars['Int'] | null);
1434
+ promptId: Scalars['ID'];
1435
+ };
1436
+ });
1397
1437
  /** Submit the app request. */
1398
1438
  submitAppRequest?: (ValidatedAppRequestResponseGenqlSelection & {
1399
1439
  __args: {
1400
1440
  appRequestId: Scalars['ID'];
1401
1441
  };
1402
1442
  });
1443
+ /** Toggle an existing note's persistent status. */
1444
+ togglePersistence?: (ValidatedNoteResponseGenqlSelection & {
1445
+ __args: {
1446
+ noteId: Scalars['ID'];
1447
+ };
1448
+ });
1403
1449
  updateConfiguration?: (ValidatedConfigurationResponseGenqlSelection & {
1404
1450
  __args: {
1405
1451
  data: Scalars['JsonData'];
@@ -1409,10 +1455,10 @@ export interface MutationGenqlSelection {
1409
1455
  };
1410
1456
  });
1411
1457
  /** Update the content of an existing note. */
1412
- updateNote?: (NoteGenqlSelection & {
1458
+ updateNote?: (ValidatedNoteResponseGenqlSelection & {
1413
1459
  __args: {
1414
1460
  content: Scalars['String'];
1415
- noteId: Scalars['String'];
1461
+ noteId: Scalars['ID'];
1416
1462
  };
1417
1463
  });
1418
1464
  updatePeriod?: (ValidatedPeriodResponseGenqlSelection & {
@@ -1463,6 +1509,8 @@ export interface NoteGenqlSelection {
1463
1509
  content?: boolean | number;
1464
1510
  createdAt?: boolean | number;
1465
1511
  id?: boolean | number;
1512
+ /** Whether this note contains permanently useful information about a person, as opposed to only being relevant in the context of the app request it was posted to. */
1513
+ persistent?: boolean | number;
1466
1514
  updatedAt?: boolean | number;
1467
1515
  __typename?: boolean | number;
1468
1516
  __scalar?: boolean | number;
@@ -1471,6 +1519,7 @@ export interface NoteGenqlSelection {
1471
1519
  export interface NoteActionsGenqlSelection {
1472
1520
  delete?: boolean | number;
1473
1521
  update?: boolean | number;
1522
+ updatePersistent?: boolean | number;
1474
1523
  __typename?: boolean | number;
1475
1524
  __scalar?: boolean | number;
1476
1525
  }
@@ -1729,6 +1778,8 @@ export interface RequirementPromptGenqlSelection {
1729
1778
  } | boolean | number;
1730
1779
  /** Extra configuration data that is relevant for this prompt. This configuration is explicitly gathered from related requirements and prompts by the gatherConfig function in the prompt definition. */
1731
1780
  gatheredConfigData?: boolean | number;
1781
+ /** Identifies if the prompt already has saved data. Assists in determining if the user has previously interacted with this prompt. */
1782
+ hasSavedData?: boolean | number;
1732
1783
  id?: boolean | number;
1733
1784
  /** When true, this prompt has been invalidated by the answer to another prompt. The `answered` field will remain true so be sure to check this field as well when determining whether the prompt is complete. */
1734
1785
  invalidated?: boolean | number;
@@ -1747,6 +1798,8 @@ export interface RequirementPromptGenqlSelection {
1747
1798
  schemaVersion?: (Scalars['String'] | null);
1748
1799
  };
1749
1800
  } | boolean | number;
1801
+ /** Smartly identifies if the prompt requires pre staging processing. */
1802
+ prestage?: boolean | number;
1750
1803
  /** The requirement that this prompt is associated with. */
1751
1804
  requirement?: ApplicationRequirementGenqlSelection;
1752
1805
  /** A human readable title for the prompt. This is what will be shown to users. */
@@ -1761,6 +1814,17 @@ export interface RequirementPromptActionsGenqlSelection {
1761
1814
  __typename?: boolean | number;
1762
1815
  __scalar?: boolean | number;
1763
1816
  }
1817
+ export interface RequirementPromptFilter {
1818
+ /** When true only returns answered prompts. */
1819
+ answered?: (Scalars['Boolean'] | null);
1820
+ appRequestIds?: (Scalars['ID'][] | null);
1821
+ applicationIds?: (Scalars['ID'][] | null);
1822
+ ids?: (Scalars['ID'][] | null);
1823
+ promptKeys?: (Scalars['String'][] | null);
1824
+ /** When true only returns reachable prompts. */
1825
+ reachable?: (Scalars['Boolean'] | null);
1826
+ requirementIds?: (Scalars['ID'][] | null);
1827
+ }
1764
1828
  export interface RoleActionsGenqlSelection {
1765
1829
  delete?: boolean | number;
1766
1830
  update?: boolean | number;
@@ -1783,6 +1847,14 @@ export interface ValidatedConfigurationResponseGenqlSelection {
1783
1847
  __typename?: boolean | number;
1784
1848
  __scalar?: boolean | number;
1785
1849
  }
1850
+ export interface ValidatedNoteResponseGenqlSelection {
1851
+ messages?: MutationMessageGenqlSelection;
1852
+ note?: NoteGenqlSelection;
1853
+ /** True if the mutation succeeded (e.g. saved data or passed validation), even if there were warnings. */
1854
+ success?: boolean | number;
1855
+ __typename?: boolean | number;
1856
+ __scalar?: boolean | number;
1857
+ }
1786
1858
  export interface ValidatedPeriodResponseGenqlSelection {
1787
1859
  messages?: MutationMessageGenqlSelection;
1788
1860
  period?: PeriodGenqlSelection;
@@ -1939,6 +2011,9 @@ export declare const isValidatedAppRequestResponse: (obj?: {
1939
2011
  export declare const isValidatedConfigurationResponse: (obj?: {
1940
2012
  __typename?: any;
1941
2013
  } | null) => obj is ValidatedConfigurationResponse;
2014
+ export declare const isValidatedNoteResponse: (obj?: {
2015
+ __typename?: any;
2016
+ } | null) => obj is ValidatedNoteResponse;
1942
2017
  export declare const isValidatedPeriodResponse: (obj?: {
1943
2018
  __typename?: any;
1944
2019
  } | null) => obj is ValidatedPeriodResponse;