@payloadcms/ui 3.35.0-internal.b3d367c → 3.35.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.
Files changed (141) hide show
  1. package/dist/elements/BulkUpload/ActionsBar/index.scss +0 -4
  2. package/dist/elements/Button/index.scss +1 -1
  3. package/dist/elements/ColumnSelector/index.d.ts +1 -0
  4. package/dist/elements/ColumnSelector/index.d.ts.map +1 -1
  5. package/dist/elements/ColumnSelector/index.js +37 -34
  6. package/dist/elements/ColumnSelector/index.js.map +1 -1
  7. package/dist/elements/{PillSelector → ColumnSelector}/index.scss +5 -5
  8. package/dist/elements/FieldDiffLabel/index.scss +1 -1
  9. package/dist/elements/Localizer/LocalizerLabel/index.js +1 -2
  10. package/dist/elements/Localizer/LocalizerLabel/index.js.map +1 -1
  11. package/dist/elements/Localizer/LocalizerLabel/index.scss +1 -2
  12. package/dist/elements/PerPage/index.scss +0 -4
  13. package/dist/elements/Pill/index.scss +2 -1
  14. package/dist/elements/Popup/PopupTrigger/index.scss +3 -3
  15. package/dist/elements/QueryPresets/fields/ColumnsField/index.d.ts.map +1 -1
  16. package/dist/elements/QueryPresets/fields/ColumnsField/index.js +14 -24
  17. package/dist/elements/QueryPresets/fields/ColumnsField/index.js.map +1 -1
  18. package/dist/elements/QueryPresets/fields/WhereField/index.d.ts.map +1 -1
  19. package/dist/elements/QueryPresets/fields/WhereField/index.js +3 -15
  20. package/dist/elements/QueryPresets/fields/WhereField/index.js.map +1 -1
  21. package/dist/elements/ReactSelect/ValueContainer/index.d.ts.map +1 -1
  22. package/dist/elements/ReactSelect/ValueContainer/index.js +4 -7
  23. package/dist/elements/ReactSelect/ValueContainer/index.js.map +1 -1
  24. package/dist/elements/ReactSelect/ValueContainer/index.scss +0 -8
  25. package/dist/elements/ReactSelect/index.scss +0 -4
  26. package/dist/elements/ReactSelect/types.d.ts +0 -1
  27. package/dist/elements/ReactSelect/types.d.ts.map +1 -1
  28. package/dist/elements/ReactSelect/types.js.map +1 -1
  29. package/dist/elements/SortColumn/index.scss +1 -1
  30. package/dist/exports/client/index.d.ts +0 -4
  31. package/dist/exports/client/index.d.ts.map +1 -1
  32. package/dist/exports/client/index.js +11 -11
  33. package/dist/exports/client/index.js.map +4 -4
  34. package/dist/exports/rsc/index.d.ts +0 -2
  35. package/dist/exports/rsc/index.d.ts.map +1 -1
  36. package/dist/exports/rsc/index.js +0 -2
  37. package/dist/exports/rsc/index.js.map +1 -1
  38. package/dist/fields/Array/index.d.ts.map +1 -1
  39. package/dist/fields/Array/index.js +5 -4
  40. package/dist/fields/Array/index.js.map +1 -1
  41. package/dist/fields/Blocks/index.d.ts.map +1 -1
  42. package/dist/fields/Blocks/index.js +5 -4
  43. package/dist/fields/Blocks/index.js.map +1 -1
  44. package/dist/fields/Checkbox/index.d.ts.map +1 -1
  45. package/dist/fields/Checkbox/index.js +3 -2
  46. package/dist/fields/Checkbox/index.js.map +1 -1
  47. package/dist/fields/Checkbox/index.scss +1 -1
  48. package/dist/fields/Code/index.d.ts.map +1 -1
  49. package/dist/fields/Code/index.js +3 -2
  50. package/dist/fields/Code/index.js.map +1 -1
  51. package/dist/fields/DateTime/index.d.ts.map +1 -1
  52. package/dist/fields/DateTime/index.js +3 -2
  53. package/dist/fields/DateTime/index.js.map +1 -1
  54. package/dist/fields/Email/index.d.ts.map +1 -1
  55. package/dist/fields/Email/index.js +4 -3
  56. package/dist/fields/Email/index.js.map +1 -1
  57. package/dist/fields/FieldLabel/index.d.ts.map +1 -1
  58. package/dist/fields/FieldLabel/index.js +1 -1
  59. package/dist/fields/FieldLabel/index.js.map +1 -1
  60. package/dist/fields/Hidden/index.d.ts.map +1 -1
  61. package/dist/fields/Hidden/index.js +6 -4
  62. package/dist/fields/Hidden/index.js.map +1 -1
  63. package/dist/fields/JSON/index.d.ts.map +1 -1
  64. package/dist/fields/JSON/index.js +3 -2
  65. package/dist/fields/JSON/index.js.map +1 -1
  66. package/dist/fields/Join/index.d.ts.map +1 -1
  67. package/dist/fields/Join/index.js +3 -2
  68. package/dist/fields/Join/index.js.map +1 -1
  69. package/dist/fields/Number/index.d.ts.map +1 -1
  70. package/dist/fields/Number/index.js +3 -2
  71. package/dist/fields/Number/index.js.map +1 -1
  72. package/dist/fields/Point/index.d.ts.map +1 -1
  73. package/dist/fields/Point/index.js +3 -2
  74. package/dist/fields/Point/index.js.map +1 -1
  75. package/dist/fields/RadioGroup/index.d.ts.map +1 -1
  76. package/dist/fields/RadioGroup/index.js +3 -2
  77. package/dist/fields/RadioGroup/index.js.map +1 -1
  78. package/dist/fields/Relationship/index.d.ts.map +1 -1
  79. package/dist/fields/Relationship/index.js +85 -22
  80. package/dist/fields/Relationship/index.js.map +1 -1
  81. package/dist/fields/Select/index.d.ts.map +1 -1
  82. package/dist/fields/Select/index.js +3 -2
  83. package/dist/fields/Select/index.js.map +1 -1
  84. package/dist/fields/Tabs/index.js +41 -51
  85. package/dist/fields/Tabs/index.js.map +1 -1
  86. package/dist/fields/Text/index.d.ts.map +1 -1
  87. package/dist/fields/Text/index.js +3 -2
  88. package/dist/fields/Text/index.js.map +1 -1
  89. package/dist/fields/Textarea/index.d.ts.map +1 -1
  90. package/dist/fields/Textarea/index.js +3 -2
  91. package/dist/fields/Textarea/index.js.map +1 -1
  92. package/dist/fields/Upload/index.d.ts.map +1 -1
  93. package/dist/fields/Upload/index.js +3 -2
  94. package/dist/fields/Upload/index.js.map +1 -1
  95. package/dist/forms/Form/fieldReducer.d.ts.map +1 -1
  96. package/dist/forms/Form/fieldReducer.js +3 -1
  97. package/dist/forms/Form/fieldReducer.js.map +1 -1
  98. package/dist/forms/RenderFields/context.d.ts +4 -0
  99. package/dist/forms/RenderFields/context.d.ts.map +1 -0
  100. package/dist/forms/RenderFields/context.js +11 -0
  101. package/dist/forms/RenderFields/context.js.map +1 -0
  102. package/dist/forms/RenderFields/index.d.ts.map +1 -1
  103. package/dist/forms/RenderFields/index.js +15 -11
  104. package/dist/forms/RenderFields/index.js.map +1 -1
  105. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.d.ts.map +1 -1
  106. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js +1 -0
  107. package/dist/forms/fieldSchemasToFormState/addFieldStatePromise.js.map +1 -1
  108. package/dist/forms/fieldSchemasToFormState/iterateFields.d.ts.map +1 -1
  109. package/dist/forms/fieldSchemasToFormState/iterateFields.js +1 -0
  110. package/dist/forms/fieldSchemasToFormState/iterateFields.js.map +1 -1
  111. package/dist/forms/useField/index.d.ts +1 -1
  112. package/dist/forms/useField/index.d.ts.map +1 -1
  113. package/dist/forms/useField/index.js +128 -116
  114. package/dist/forms/useField/index.js.map +1 -1
  115. package/dist/forms/useField/types.d.ts +22 -1
  116. package/dist/forms/useField/types.d.ts.map +1 -1
  117. package/dist/forms/useField/types.js.map +1 -1
  118. package/dist/icons/Chevron/index.js +2 -2
  119. package/dist/icons/Chevron/index.js.map +1 -1
  120. package/dist/icons/Chevron/index.scss +4 -4
  121. package/dist/styles.css +1 -1
  122. package/package.json +5 -5
  123. package/dist/elements/FieldDiffContainer/index.d.ts +0 -15
  124. package/dist/elements/FieldDiffContainer/index.d.ts.map +0 -1
  125. package/dist/elements/FieldDiffContainer/index.js +0 -40
  126. package/dist/elements/FieldDiffContainer/index.js.map +0 -1
  127. package/dist/elements/FieldDiffContainer/index.scss +0 -42
  128. package/dist/elements/HTMLDiff/colors.scss +0 -35
  129. package/dist/elements/HTMLDiff/diff/index.d.ts +0 -75
  130. package/dist/elements/HTMLDiff/diff/index.d.ts.map +0 -1
  131. package/dist/elements/HTMLDiff/diff/index.js +0 -536
  132. package/dist/elements/HTMLDiff/diff/index.js.map +0 -1
  133. package/dist/elements/HTMLDiff/index.d.ts +0 -11
  134. package/dist/elements/HTMLDiff/index.d.ts.map +0 -1
  135. package/dist/elements/HTMLDiff/index.js +0 -32
  136. package/dist/elements/HTMLDiff/index.js.map +0 -1
  137. package/dist/elements/HTMLDiff/index.scss +0 -158
  138. package/dist/elements/PillSelector/index.d.ts +0 -26
  139. package/dist/elements/PillSelector/index.d.ts.map +0 -1
  140. package/dist/elements/PillSelector/index.js +0 -71
  141. package/dist/elements/PillSelector/index.js.map +0 -1
@@ -9,20 +9,32 @@ import { useDocumentInfo } from '../../providers/DocumentInfo/index.js';
9
9
  import { useOperation } from '../../providers/Operation/index.js';
10
10
  import { useTranslation } from '../../providers/Translation/index.js';
11
11
  import { useDocumentForm, useForm, useFormFields, useFormInitializing, useFormModified, useFormProcessing, useFormSubmitted } from '../Form/context.js';
12
+ import { useFieldPath } from '../RenderFields/context.js';
12
13
  /**
13
14
  * Get and set the value of a form field.
14
15
  *
15
16
  * @see https://payloadcms.com/docs/admin/react-hooks#usefield
16
17
  */
17
18
  export const useField = options => {
18
- const $ = _c(62);
19
+ const $ = _c(64);
20
+ let t0;
21
+ if ($[0] !== options) {
22
+ t0 = options || {};
23
+ $[0] = options;
24
+ $[1] = t0;
25
+ } else {
26
+ t0 = $[1];
27
+ }
19
28
  const {
20
- disableFormData: t0,
29
+ disableFormData: t1,
21
30
  hasRows,
22
- path,
31
+ path: pathFromOptions,
32
+ potentiallyStalePath,
23
33
  validate
24
- } = options;
25
- const disableFormData = t0 === undefined ? false : t0;
34
+ } = t0;
35
+ const disableFormData = t1 === undefined ? false : t1;
36
+ const pathFromContext = useFieldPath();
37
+ const path = pathFromOptions || pathFromContext || potentiallyStalePath;
26
38
  const submitted = useFormSubmitted();
27
39
  const processing = useFormProcessing();
28
40
  const initializing = useFormInitializing();
@@ -35,18 +47,18 @@ export const useField = options => {
35
47
  } = useDocumentInfo();
36
48
  const operation = useOperation();
37
49
  const dispatchField = useFormFields(_temp);
38
- let t1;
39
- if ($[0] !== path) {
40
- t1 = t2 => {
41
- const [fields] = t2;
50
+ let t2;
51
+ if ($[2] !== path) {
52
+ t2 = t3 => {
53
+ const [fields] = t3;
42
54
  return fields && fields?.[path] || null;
43
55
  };
44
- $[0] = path;
45
- $[1] = t1;
56
+ $[2] = path;
57
+ $[3] = t2;
46
58
  } else {
47
- t1 = $[1];
59
+ t2 = $[3];
48
60
  }
49
- const field = useFormFields(t1);
61
+ const field = useFormFields(t2);
50
62
  const {
51
63
  t
52
64
  } = useTranslation();
@@ -68,19 +80,19 @@ export const useField = options => {
68
80
  const showError = valid === false && submitted;
69
81
  const prevValid = useRef(valid);
70
82
  const prevErrorMessage = useRef(field?.errorMessage);
71
- let t2;
72
- if ($[2] !== path) {
73
- t2 = path ? path.split(".") : [];
74
- $[2] = path;
75
- $[3] = t2;
83
+ let t3;
84
+ if ($[4] !== path) {
85
+ t3 = path ? path.split(".") : [];
86
+ $[4] = path;
87
+ $[5] = t3;
76
88
  } else {
77
- t2 = $[3];
89
+ t3 = $[5];
78
90
  }
79
- const pathSegments = t2;
80
- let t3;
81
- if ($[4] !== disableFormData || $[5] !== dispatchField || $[6] !== hasRows || $[7] !== modified || $[8] !== path || $[9] !== setModified) {
82
- t3 = (e, t4) => {
83
- const disableModifyingForm = t4 === undefined ? false : t4;
91
+ const pathSegments = t3;
92
+ let t4;
93
+ if ($[6] !== disableFormData || $[7] !== dispatchField || $[8] !== hasRows || $[9] !== modified || $[10] !== path || $[11] !== setModified) {
94
+ t4 = (e, t5) => {
95
+ const disableModifyingForm = t5 === undefined ? false : t5;
84
96
  const val = e && e.target ? e.target.value : e;
85
97
  dispatchField({
86
98
  type: "UPDATE",
@@ -98,74 +110,74 @@ export const useField = options => {
98
110
  }
99
111
  }
100
112
  };
101
- $[4] = disableFormData;
102
- $[5] = dispatchField;
103
- $[6] = hasRows;
104
- $[7] = modified;
105
- $[8] = path;
106
- $[9] = setModified;
107
- $[10] = t3;
113
+ $[6] = disableFormData;
114
+ $[7] = dispatchField;
115
+ $[8] = hasRows;
116
+ $[9] = modified;
117
+ $[10] = path;
118
+ $[11] = setModified;
119
+ $[12] = t4;
108
120
  } else {
109
- t3 = $[10];
121
+ t4 = $[12];
110
122
  }
111
- const setValue = t3;
112
- let t4;
113
- const t5 = field?.customComponents;
114
- const t6 = processing || initializing;
115
- const t7 = field?.errorMessage;
116
- let t8;
117
- if ($[11] !== field?.errorPaths) {
118
- t8 = field?.errorPaths || [];
119
- $[11] = field?.errorPaths;
120
- $[12] = t8;
123
+ const setValue = t4;
124
+ let t5;
125
+ const t6 = field?.customComponents;
126
+ const t7 = processing || initializing;
127
+ const t8 = field?.errorMessage;
128
+ let t9;
129
+ if ($[13] !== field?.errorPaths) {
130
+ t9 = field?.errorPaths || [];
131
+ $[13] = field?.errorPaths;
132
+ $[14] = t9;
121
133
  } else {
122
- t8 = $[12];
134
+ t9 = $[14];
123
135
  }
124
- const t9 = field?.rows;
125
- const t10 = field?.valid;
126
- let t11;
127
- if ($[13] !== filterOptions || $[14] !== initialValue || $[15] !== initializing || $[16] !== path || $[17] !== processing || $[18] !== setValue || $[19] !== showError || $[20] !== submitted || $[21] !== t10 || $[22] !== t5 || $[23] !== t6 || $[24] !== t7 || $[25] !== t8 || $[26] !== t9 || $[27] !== value) {
128
- t11 = {
129
- customComponents: t5,
130
- disabled: t6,
131
- errorMessage: t7,
132
- errorPaths: t8,
136
+ const t10 = field?.rows;
137
+ const t11 = field?.valid;
138
+ let t12;
139
+ if ($[15] !== filterOptions || $[16] !== initialValue || $[17] !== initializing || $[18] !== path || $[19] !== processing || $[20] !== setValue || $[21] !== showError || $[22] !== submitted || $[23] !== t10 || $[24] !== t11 || $[25] !== t6 || $[26] !== t7 || $[27] !== t8 || $[28] !== t9 || $[29] !== value) {
140
+ t12 = {
141
+ customComponents: t6,
142
+ disabled: t7,
143
+ errorMessage: t8,
144
+ errorPaths: t9,
133
145
  filterOptions,
134
146
  formInitializing: initializing,
135
147
  formProcessing: processing,
136
148
  formSubmitted: submitted,
137
149
  initialValue,
138
150
  path,
139
- rows: t9,
151
+ rows: t10,
140
152
  setValue,
141
153
  showError,
142
- valid: t10,
154
+ valid: t11,
143
155
  value
144
156
  };
145
- $[13] = filterOptions;
146
- $[14] = initialValue;
147
- $[15] = initializing;
148
- $[16] = path;
149
- $[17] = processing;
150
- $[18] = setValue;
151
- $[19] = showError;
152
- $[20] = submitted;
153
- $[21] = t10;
154
- $[22] = t5;
155
- $[23] = t6;
156
- $[24] = t7;
157
- $[25] = t8;
158
- $[26] = t9;
159
- $[27] = value;
160
- $[28] = t11;
157
+ $[15] = filterOptions;
158
+ $[16] = initialValue;
159
+ $[17] = initializing;
160
+ $[18] = path;
161
+ $[19] = processing;
162
+ $[20] = setValue;
163
+ $[21] = showError;
164
+ $[22] = submitted;
165
+ $[23] = t10;
166
+ $[24] = t11;
167
+ $[25] = t6;
168
+ $[26] = t7;
169
+ $[27] = t8;
170
+ $[28] = t9;
171
+ $[29] = value;
172
+ $[30] = t12;
161
173
  } else {
162
- t11 = $[28];
174
+ t12 = $[30];
163
175
  }
164
- t4 = t11;
165
- const result = t4;
166
- let t12;
167
- if ($[29] !== collectionSlug || $[30] !== config || $[31] !== disableFormData || $[32] !== dispatchField || $[33] !== documentForm || $[34] !== field || $[35] !== getData || $[36] !== getDataByPath || $[37] !== getSiblingData || $[38] !== hasRows || $[39] !== id || $[40] !== operation || $[41] !== path || $[42] !== pathSegments || $[43] !== t || $[44] !== user || $[45] !== validate || $[46] !== value) {
168
- t12 = () => {
176
+ t5 = t12;
177
+ const result = t5;
178
+ let t13;
179
+ if ($[31] !== collectionSlug || $[32] !== config || $[33] !== disableFormData || $[34] !== dispatchField || $[35] !== documentForm || $[36] !== field || $[37] !== getData || $[38] !== getDataByPath || $[39] !== getSiblingData || $[40] !== hasRows || $[41] !== id || $[42] !== operation || $[43] !== path || $[44] !== pathSegments || $[45] !== t || $[46] !== user || $[47] !== validate || $[48] !== value) {
180
+ t13 = () => {
169
181
  const validateField = async () => {
170
182
  let valueToValidate = value;
171
183
  if (field?.rows && Array.isArray(field.rows)) {
@@ -223,50 +235,50 @@ export const useField = options => {
223
235
  };
224
236
  validateField();
225
237
  };
226
- $[29] = collectionSlug;
227
- $[30] = config;
228
- $[31] = disableFormData;
229
- $[32] = dispatchField;
230
- $[33] = documentForm;
231
- $[34] = field;
232
- $[35] = getData;
233
- $[36] = getDataByPath;
234
- $[37] = getSiblingData;
235
- $[38] = hasRows;
236
- $[39] = id;
237
- $[40] = operation;
238
- $[41] = path;
239
- $[42] = pathSegments;
240
- $[43] = t;
241
- $[44] = user;
242
- $[45] = validate;
243
- $[46] = value;
244
- $[47] = t12;
238
+ $[31] = collectionSlug;
239
+ $[32] = config;
240
+ $[33] = disableFormData;
241
+ $[34] = dispatchField;
242
+ $[35] = documentForm;
243
+ $[36] = field;
244
+ $[37] = getData;
245
+ $[38] = getDataByPath;
246
+ $[39] = getSiblingData;
247
+ $[40] = hasRows;
248
+ $[41] = id;
249
+ $[42] = operation;
250
+ $[43] = path;
251
+ $[44] = pathSegments;
252
+ $[45] = t;
253
+ $[46] = user;
254
+ $[47] = validate;
255
+ $[48] = value;
256
+ $[49] = t13;
245
257
  } else {
246
- t12 = $[47];
258
+ t13 = $[49];
247
259
  }
248
- const t13 = field?.rows;
249
- let t14;
250
- if ($[48] !== collectionSlug || $[49] !== disableFormData || $[50] !== dispatchField || $[51] !== getData || $[52] !== getDataByPath || $[53] !== getSiblingData || $[54] !== id || $[55] !== operation || $[56] !== path || $[57] !== t13 || $[58] !== user || $[59] !== validate || $[60] !== value) {
251
- t14 = [value, disableFormData, dispatchField, getData, getSiblingData, getDataByPath, id, operation, path, user, validate, t13, collectionSlug];
252
- $[48] = collectionSlug;
253
- $[49] = disableFormData;
254
- $[50] = dispatchField;
255
- $[51] = getData;
256
- $[52] = getDataByPath;
257
- $[53] = getSiblingData;
258
- $[54] = id;
259
- $[55] = operation;
260
- $[56] = path;
261
- $[57] = t13;
262
- $[58] = user;
263
- $[59] = validate;
264
- $[60] = value;
265
- $[61] = t14;
260
+ const t14 = field?.rows;
261
+ let t15;
262
+ if ($[50] !== collectionSlug || $[51] !== disableFormData || $[52] !== dispatchField || $[53] !== getData || $[54] !== getDataByPath || $[55] !== getSiblingData || $[56] !== id || $[57] !== operation || $[58] !== path || $[59] !== t14 || $[60] !== user || $[61] !== validate || $[62] !== value) {
263
+ t15 = [value, disableFormData, dispatchField, getData, getSiblingData, getDataByPath, id, operation, path, user, validate, t14, collectionSlug];
264
+ $[50] = collectionSlug;
265
+ $[51] = disableFormData;
266
+ $[52] = dispatchField;
267
+ $[53] = getData;
268
+ $[54] = getDataByPath;
269
+ $[55] = getSiblingData;
270
+ $[56] = id;
271
+ $[57] = operation;
272
+ $[58] = path;
273
+ $[59] = t14;
274
+ $[60] = user;
275
+ $[61] = validate;
276
+ $[62] = value;
277
+ $[63] = t15;
266
278
  } else {
267
- t14 = $[61];
279
+ t15 = $[63];
268
280
  }
269
- useThrottledEffect(t12, 150, t14);
281
+ useThrottledEffect(t13, 150, t15);
270
282
  return result;
271
283
  };
272
284
  function _temp(t0) {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["c","_c","useCallback","useMemo","useRef","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useOperation","useTranslation","useDocumentForm","useForm","useFormFields","useFormInitializing","useFormModified","useFormProcessing","useFormSubmitted","useField","options","$","disableFormData","t0","hasRows","path","validate","undefined","submitted","processing","initializing","user","id","collectionSlug","operation","dispatchField","_temp","t1","t2","fields","field","t","config","getData","getDataByPath","getSiblingData","setModified","documentForm","modified","filterOptions","value","initialValue","valid","showError","prevValid","prevErrorMessage","errorMessage","split","pathSegments","t3","e","t4","disableModifyingForm","val","target","type","setTimeout","setValue","t5","customComponents","t6","t7","t8","errorPaths","t9","rows","t10","t11","disabled","formInitializing","formProcessing","formSubmitted","result","t12","validateField","valueToValidate","Array","isArray","current","valid_0","data","isValid","blockData","event","preferences","req","payload","siblingData","update","t13","t14","dispatch"],"sources":["../../../src/forms/useField/index.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest } from 'payload'\n\nimport { useCallback, useMemo, useRef } from 'react'\n\nimport type { UPDATE } from '../Form/types.js'\nimport type { FieldType, Options } from './types.js'\n\nexport type { FieldType, Options }\n\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport {\n useDocumentForm,\n useForm,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../Form/context.js'\n\n/**\n * Get and set the value of a form field.\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#usefield\n */\nexport const useField = <TValue,>(options: Options): FieldType<TValue> => {\n const { disableFormData = false, hasRows, path, validate } = options\n\n const submitted = useFormSubmitted()\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n const { user } = useAuth()\n const { id, collectionSlug } = useDocumentInfo()\n const operation = useOperation()\n\n const dispatchField = useFormFields(([_, dispatch]) => dispatch)\n const field = useFormFields(([fields]) => (fields && fields?.[path]) || null)\n\n const { t } = useTranslation()\n const { config } = useConfig()\n\n const { getData, getDataByPath, getSiblingData, setModified } = useForm()\n const documentForm = useDocumentForm()\n const modified = useFormModified()\n\n const filterOptions = field?.filterOptions\n const value = field?.value as TValue\n const initialValue = field?.initialValue as TValue\n const valid = typeof field?.valid === 'boolean' ? field.valid : true\n const showError = valid === false && submitted\n\n const prevValid = useRef(valid)\n const prevErrorMessage = useRef(field?.errorMessage)\n\n const pathSegments = path ? path.split('.') : []\n\n // Method to return from `useField`, used to\n // update field values from field component(s)\n const setValue = useCallback(\n (e, disableModifyingForm = false) => {\n const val = e && e.target ? e.target.value : e\n dispatchField({\n type: 'UPDATE',\n disableFormData: disableFormData || (hasRows && val > 0),\n path,\n value: val,\n })\n\n if (!disableModifyingForm) {\n if (typeof setModified === 'function') {\n // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:\n // 1. Text field: someone types in it in an unmodified form\n // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!\n // 3. Type something in text field\n // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)\n // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, \"saved successfully\" toast appears\n // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way\n // until a NEW change happens. Due to this, the \"Leave without saving\" modal appears even though it should not when leaving the page fast immediately after saving the document.\n // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run\n // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster\n // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.\n // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.\n // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.\n if (modified === false) {\n // Update modified state after field value comes back\n // to avoid cursor jump caused by state value / DOM mismatch\n setTimeout(() => {\n setModified(true)\n }, 10)\n }\n }\n }\n },\n [setModified, path, dispatchField, disableFormData, hasRows, modified],\n )\n\n // Store result from hook as ref\n // to prevent unnecessary rerenders\n const result: FieldType<TValue> = useMemo(\n () => ({\n customComponents: field?.customComponents,\n disabled: processing || initializing,\n errorMessage: field?.errorMessage,\n errorPaths: field?.errorPaths || [],\n filterOptions,\n formInitializing: initializing,\n formProcessing: processing,\n formSubmitted: submitted,\n initialValue,\n path,\n rows: field?.rows,\n setValue,\n showError,\n valid: field?.valid,\n value,\n }),\n [\n field,\n processing,\n setValue,\n showError,\n submitted,\n value,\n initialValue,\n path,\n filterOptions,\n initializing,\n ],\n )\n\n // Throttle the validate function\n useThrottledEffect(\n () => {\n const validateField = async () => {\n let valueToValidate = value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = getDataByPath(path)\n }\n\n let errorMessage: string | undefined = prevErrorMessage.current\n let valid: boolean | string = prevValid.current\n\n const data = getData()\n const isValid =\n typeof validate === 'function'\n ? await validate(valueToValidate, {\n id,\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n collectionSlug,\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'onChange',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: getSiblingData(path),\n })\n : typeof prevErrorMessage.current === 'string'\n ? prevErrorMessage.current\n : prevValid.current\n\n if (typeof isValid === 'string') {\n valid = false\n errorMessage = isValid\n } else if (typeof isValid === 'boolean') {\n valid = isValid\n errorMessage = undefined\n }\n\n // Only dispatch if the validation result has changed\n // This will prevent unnecessary rerenders\n if (valid !== prevValid.current || errorMessage !== prevErrorMessage.current) {\n prevValid.current = valid\n prevErrorMessage.current = errorMessage\n\n const update: UPDATE = {\n type: 'UPDATE',\n errorMessage,\n path,\n rows: field?.rows,\n valid,\n validate,\n value,\n }\n\n if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {\n update.disableFormData = true\n }\n\n if (typeof dispatchField === 'function') {\n dispatchField(update)\n }\n }\n }\n\n void validateField()\n },\n 150,\n [\n value,\n disableFormData,\n dispatchField,\n getData,\n getSiblingData,\n getDataByPath,\n id,\n operation,\n path,\n user,\n validate,\n field?.rows,\n collectionSlug,\n ],\n )\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["c","_c","useCallback","useMemo","useRef","useThrottledEffect","useAuth","useConfig","useDocumentInfo","useOperation","useTranslation","useDocumentForm","useForm","useFormFields","useFormInitializing","useFormModified","useFormProcessing","useFormSubmitted","useFieldPath","useField","options","$","t0","disableFormData","t1","hasRows","path","pathFromOptions","potentiallyStalePath","validate","undefined","pathFromContext","submitted","processing","initializing","user","id","collectionSlug","operation","dispatchField","_temp","t2","t3","fields","field","t","config","getData","getDataByPath","getSiblingData","setModified","documentForm","modified","filterOptions","value","initialValue","valid","showError","prevValid","prevErrorMessage","errorMessage","split","pathSegments","t4","e","t5","disableModifyingForm","val","target","type","setTimeout","setValue","t6","customComponents","t7","t8","t9","errorPaths","t10","rows","t11","t12","disabled","formInitializing","formProcessing","formSubmitted","result","t13","validateField","valueToValidate","Array","isArray","current","valid_0","data","isValid","blockData","event","preferences","req","payload","siblingData","update","t14","t15","dispatch"],"sources":["../../../src/forms/useField/index.tsx"],"sourcesContent":["'use client'\nimport type { PayloadRequest } from 'payload'\n\nimport { useCallback, useMemo, useRef } from 'react'\n\nimport type { UPDATE } from '../Form/types.js'\nimport type { FieldType, Options } from './types.js'\n\nexport type { FieldType, Options }\n\nimport { useThrottledEffect } from '../../hooks/useThrottledEffect.js'\nimport { useAuth } from '../../providers/Auth/index.js'\nimport { useConfig } from '../../providers/Config/index.js'\nimport { useDocumentInfo } from '../../providers/DocumentInfo/index.js'\nimport { useOperation } from '../../providers/Operation/index.js'\nimport { useTranslation } from '../../providers/Translation/index.js'\nimport {\n useDocumentForm,\n useForm,\n useFormFields,\n useFormInitializing,\n useFormModified,\n useFormProcessing,\n useFormSubmitted,\n} from '../Form/context.js'\nimport { useFieldPath } from '../RenderFields/context.js'\n\n/**\n * Get and set the value of a form field.\n *\n * @see https://payloadcms.com/docs/admin/react-hooks#usefield\n */\nexport const useField = <TValue,>(options?: Options): FieldType<TValue> => {\n const {\n disableFormData = false,\n hasRows,\n path: pathFromOptions,\n potentiallyStalePath,\n validate,\n } = options || {}\n\n const pathFromContext = useFieldPath()\n\n // This is a workaround for stale props given to server rendered components.\n // See the notes in the `potentiallyStalePath` type definition for more details.\n const path = pathFromOptions || pathFromContext || potentiallyStalePath\n\n const submitted = useFormSubmitted()\n const processing = useFormProcessing()\n const initializing = useFormInitializing()\n const { user } = useAuth()\n const { id, collectionSlug } = useDocumentInfo()\n const operation = useOperation()\n\n const dispatchField = useFormFields(([_, dispatch]) => dispatch)\n const field = useFormFields(([fields]) => (fields && fields?.[path]) || null)\n\n const { t } = useTranslation()\n const { config } = useConfig()\n\n const { getData, getDataByPath, getSiblingData, setModified } = useForm()\n const documentForm = useDocumentForm()\n const modified = useFormModified()\n\n const filterOptions = field?.filterOptions\n const value = field?.value as TValue\n const initialValue = field?.initialValue as TValue\n const valid = typeof field?.valid === 'boolean' ? field.valid : true\n const showError = valid === false && submitted\n\n const prevValid = useRef(valid)\n const prevErrorMessage = useRef(field?.errorMessage)\n\n const pathSegments = path ? path.split('.') : []\n\n // Method to return from `useField`, used to\n // update field values from field component(s)\n const setValue = useCallback(\n (e, disableModifyingForm = false) => {\n const val = e && e.target ? e.target.value : e\n dispatchField({\n type: 'UPDATE',\n disableFormData: disableFormData || (hasRows && val > 0),\n path,\n value: val,\n })\n\n if (!disableModifyingForm) {\n if (typeof setModified === 'function') {\n // Only update setModified to true if the form is not already set to modified. Otherwise the following could happen:\n // 1. Text field: someone types in it in an unmodified form\n // 2. After setTimeout triggers setModified(true): form is set to modified. Save Button becomes available. Good!\n // 3. Type something in text field\n // 4. Click on save button before setTimeout in useField has finished (so setModified(true) has not been run yet)\n // 5. Form is saved, setModified(false) is set in the Form/index.tsx `submit` function, \"saved successfully\" toast appears\n // 6. setModified(true) inside the timeout is run, form is set to modified again, even though it was already saved and thus set to unmodified. Bad! This should have happened before the form is saved. Now the form should be unmodified and stay that way\n // until a NEW change happens. Due to this, the \"Leave without saving\" modal appears even though it should not when leaving the page fast immediately after saving the document.\n // This is only an issue for forms which have already been set to modified true, as that causes the save button to be enabled. If we prevent this setTimeout to be run\n // for already-modified forms first place (which is unnecessary), we can avoid this issue. As for unmodified forms, this race issue will not happen, because you cannot click the save button faster\n // than the timeout in useField is run. That's because the save button won't even be enabled for clicking until the setTimeout in useField has run.\n // This fixes e2e test flakes, as e2e tests were often so fast that they were saving the form before the timeout in useField has run.\n // Specifically, this fixes the 'should not warn about unsaved changes when navigating to lexical editor with blocks node and then leaving the page after making a change and saving' lexical e2e test.\n if (modified === false) {\n // Update modified state after field value comes back\n // to avoid cursor jump caused by state value / DOM mismatch\n setTimeout(() => {\n setModified(true)\n }, 10)\n }\n }\n }\n },\n [setModified, path, dispatchField, disableFormData, hasRows, modified],\n )\n\n // Store result from hook as ref\n // to prevent unnecessary rerenders\n const result: FieldType<TValue> = useMemo(\n () => ({\n customComponents: field?.customComponents,\n disabled: processing || initializing,\n errorMessage: field?.errorMessage,\n errorPaths: field?.errorPaths || [],\n filterOptions,\n formInitializing: initializing,\n formProcessing: processing,\n formSubmitted: submitted,\n initialValue,\n path,\n rows: field?.rows,\n setValue,\n showError,\n valid: field?.valid,\n value,\n }),\n [\n field,\n processing,\n setValue,\n showError,\n submitted,\n value,\n initialValue,\n path,\n filterOptions,\n initializing,\n ],\n )\n\n // Throttle the validate function\n useThrottledEffect(\n () => {\n const validateField = async () => {\n let valueToValidate = value\n\n if (field?.rows && Array.isArray(field.rows)) {\n valueToValidate = getDataByPath(path)\n }\n\n let errorMessage: string | undefined = prevErrorMessage.current\n let valid: boolean | string = prevValid.current\n\n const data = getData()\n const isValid =\n typeof validate === 'function'\n ? await validate(valueToValidate, {\n id,\n blockData: undefined, // Will be expensive to get - not worth to pass to client-side validation, as this can be obtained by the user using `useFormFields()`\n collectionSlug,\n data: documentForm?.getData ? documentForm.getData() : data,\n event: 'onChange',\n operation,\n path: pathSegments,\n preferences: {} as any,\n req: {\n payload: {\n config,\n },\n t,\n user,\n } as unknown as PayloadRequest,\n siblingData: getSiblingData(path),\n })\n : typeof prevErrorMessage.current === 'string'\n ? prevErrorMessage.current\n : prevValid.current\n\n if (typeof isValid === 'string') {\n valid = false\n errorMessage = isValid\n } else if (typeof isValid === 'boolean') {\n valid = isValid\n errorMessage = undefined\n }\n\n // Only dispatch if the validation result has changed\n // This will prevent unnecessary rerenders\n if (valid !== prevValid.current || errorMessage !== prevErrorMessage.current) {\n prevValid.current = valid\n prevErrorMessage.current = errorMessage\n\n const update: UPDATE = {\n type: 'UPDATE',\n errorMessage,\n path,\n rows: field?.rows,\n valid,\n validate,\n value,\n }\n\n if (disableFormData || (hasRows ? typeof value === 'number' && value > 0 : false)) {\n update.disableFormData = true\n }\n\n if (typeof dispatchField === 'function') {\n dispatchField(update)\n }\n }\n }\n\n void validateField()\n },\n 150,\n [\n value,\n disableFormData,\n dispatchField,\n getData,\n getSiblingData,\n getDataByPath,\n id,\n operation,\n path,\n user,\n validate,\n field?.rows,\n collectionSlug,\n ],\n )\n\n return result\n}\n"],"mappings":"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","ignoreList":[]}
@@ -2,7 +2,27 @@ import type { FieldState, FilterOptionsResult, Row, Validate } from 'payload';
2
2
  export type Options = {
3
3
  disableFormData?: boolean;
4
4
  hasRows?: boolean;
5
- path: string;
5
+ /**
6
+ * If `path` is provided to this hook, it will be used outright. This is useful when calling this hook directly within a custom component.
7
+ * Otherwise, the field will attempt to get the path from the `FieldPathContext` via the `useFieldPath` hook.
8
+ * If still not found, the `potentiallyStalePath` arg will be used. See the note below about why this is important.
9
+ */
10
+ path?: string;
11
+ /**
12
+ * Custom server components receive a static `path` prop at render-time, leading to temporarily stale paths when re-ordering rows in form state.
13
+ * This is because when manipulating rows, field paths change in form state, but the prop remains the same until the component is re-rendered on the server.
14
+ * This causes the component to temporarily point to the wrong field in form state until the server responds with a freshly rendered component.
15
+ * To prevent this, fields are wrapped with a `FieldPathContext` which is guaranteed to be up-to-date.
16
+ * The `path` prop that Payload's default fields receive, then, are sent into this hook as the `potentiallyStalePath` arg.
17
+ * This ensures that:
18
+ * 1. Custom components that use this hook directly will still respect the `path` prop as top priority.
19
+ * 2. Custom server components that blindly spread their props into default Payload fields still prefer the dynamic path from context.
20
+ * 3. Components that render default Payload fields directly do not require a `FieldPathProvider`, e.g. the email field in the account view.
21
+ */
22
+ potentiallyStalePath?: string;
23
+ /**
24
+ * Client-side validation function fired when the form is submitted.
25
+ */
6
26
  validate?: Validate;
7
27
  };
8
28
  export type FieldType<T> = {
@@ -15,6 +35,7 @@ export type FieldType<T> = {
15
35
  formProcessing: boolean;
16
36
  formSubmitted: boolean;
17
37
  initialValue?: T;
38
+ path: string;
18
39
  readOnly?: boolean;
19
40
  rows?: Row[];
20
41
  setValue: (val: unknown, disableModifyingForm?: boolean) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forms/useField/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE7E,MAAM,MAAM,OAAO,GAAG;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,gBAAgB,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAA;IACjD,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,gBAAgB,EAAE,OAAO,CAAA;IACzB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,CAAC,CAAA;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAChE,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,CAAC,CAAA;CACT,CAAA"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/forms/useField/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AAE7E,MAAM,MAAM,OAAO,GAAG;IACpB,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;;;;;;OAUG;IACH,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B;;OAEG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAA;CACpB,CAAA;AAED,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI;IACzB,gBAAgB,CAAC,EAAE,UAAU,CAAC,kBAAkB,CAAC,CAAA;IACjD,QAAQ,EAAE,OAAO,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;IACrB,aAAa,CAAC,EAAE,mBAAmB,CAAA;IACnC,gBAAgB,EAAE,OAAO,CAAA;IACzB,cAAc,EAAE,OAAO,CAAA;IACvB,aAAa,EAAE,OAAO,CAAA;IACtB,YAAY,CAAC,EAAE,CAAC,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,IAAI,CAAC,EAAE,GAAG,EAAE,CAAA;IACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,oBAAoB,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;IAChE,SAAS,EAAE,OAAO,CAAA;IAClB,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,KAAK,EAAE,CAAC,CAAA;CACT,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","names":[],"sources":["../../../src/forms/useField/types.ts"],"sourcesContent":["import type { FieldState, FilterOptionsResult, Row, Validate } from 'payload'\n\nexport type Options = {\n disableFormData?: boolean\n hasRows?: boolean\n path: string\n validate?: Validate\n}\n\nexport type FieldType<T> = {\n customComponents?: FieldState['customComponents']\n disabled: boolean\n errorMessage?: string\n errorPaths?: string[]\n filterOptions?: FilterOptionsResult\n formInitializing: boolean\n formProcessing: boolean\n formSubmitted: boolean\n initialValue?: T\n readOnly?: boolean\n rows?: Row[]\n setValue: (val: unknown, disableModifyingForm?: boolean) => void\n showError: boolean\n valid?: boolean\n value: T\n}\n"],"mappings":"AASA","ignoreList":[]}
1
+ {"version":3,"file":"types.js","names":[],"sources":["../../../src/forms/useField/types.ts"],"sourcesContent":["import type { FieldState, FilterOptionsResult, Row, Validate } from 'payload'\n\nexport type Options = {\n disableFormData?: boolean\n hasRows?: boolean\n /**\n * If `path` is provided to this hook, it will be used outright. This is useful when calling this hook directly within a custom component.\n * Otherwise, the field will attempt to get the path from the `FieldPathContext` via the `useFieldPath` hook.\n * If still not found, the `potentiallyStalePath` arg will be used. See the note below about why this is important.\n */\n path?: string\n /**\n * Custom server components receive a static `path` prop at render-time, leading to temporarily stale paths when re-ordering rows in form state.\n * This is because when manipulating rows, field paths change in form state, but the prop remains the same until the component is re-rendered on the server.\n * This causes the component to temporarily point to the wrong field in form state until the server responds with a freshly rendered component.\n * To prevent this, fields are wrapped with a `FieldPathContext` which is guaranteed to be up-to-date.\n * The `path` prop that Payload's default fields receive, then, are sent into this hook as the `potentiallyStalePath` arg.\n * This ensures that:\n * 1. Custom components that use this hook directly will still respect the `path` prop as top priority.\n * 2. Custom server components that blindly spread their props into default Payload fields still prefer the dynamic path from context.\n * 3. Components that render default Payload fields directly do not require a `FieldPathProvider`, e.g. the email field in the account view.\n */\n potentiallyStalePath?: string\n /**\n * Client-side validation function fired when the form is submitted.\n */\n validate?: Validate\n}\n\nexport type FieldType<T> = {\n customComponents?: FieldState['customComponents']\n disabled: boolean\n errorMessage?: string\n errorPaths?: string[]\n filterOptions?: FilterOptionsResult\n formInitializing: boolean\n formProcessing: boolean\n formSubmitted: boolean\n initialValue?: T\n path: string\n readOnly?: boolean\n rows?: Row[]\n setValue: (val: unknown, disableModifyingForm?: boolean) => void\n showError: boolean\n valid?: boolean\n value: T\n}\n"],"mappings":"AA6BA","ignoreList":[]}
@@ -13,12 +13,12 @@ export const ChevronIcon = ({
13
13
  style: {
14
14
  transform: direction === 'left' ? 'rotate(90deg)' : direction === 'right' ? 'rotate(-90deg)' : direction === 'up' ? 'rotate(180deg)' : undefined
15
15
  },
16
- viewBox: "0 0 22 12",
16
+ viewBox: "0 0 20 20",
17
17
  width: "100%",
18
18
  xmlns: "http://www.w3.org/2000/svg",
19
19
  children: /*#__PURE__*/_jsx("path", {
20
20
  className: "stroke",
21
- d: "M1 1.12109L11 11.1211L21 1.12109",
21
+ d: "M14 8L10 12L6 8",
22
22
  strokeLinecap: "square"
23
23
  })
24
24
  });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":["React","ChevronIcon","ariaLabel","className","direction","size","_jsx","filter","Boolean","join","height","style","transform","undefined","viewBox","width","xmlns","d","strokeLinecap"],"sources":["../../../src/icons/Chevron/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nexport const ChevronIcon: React.FC<{\n readonly ariaLabel?: string\n readonly className?: string\n readonly direction?: 'down' | 'left' | 'right' | 'up'\n readonly size?: 'large' | 'small'\n}> = ({ ariaLabel, className, direction, size }) => (\n <svg\n aria-label={ariaLabel}\n className={['icon icon--chevron', className, size && `icon--size-${size}`]\n .filter(Boolean)\n .join(' ')}\n height=\"100%\"\n style={{\n transform:\n direction === 'left'\n ? 'rotate(90deg)'\n : direction === 'right'\n ? 'rotate(-90deg)'\n : direction === 'up'\n ? 'rotate(180deg)'\n : undefined,\n }}\n viewBox=\"0 0 22 12\"\n width=\"100%\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path className=\"stroke\" d=\"M1 1.12109L11 11.1211L21 1.12109\" strokeLinecap=\"square\" />\n </svg>\n)\n"],"mappings":";AAAA,OAAOA,KAAA,MAAW;AAElB,OAAO;AAEP,OAAO,MAAMC,WAAA,GAKRA,CAAC;EAAEC,SAAS;EAAEC,SAAS;EAAEC,SAAS;EAAEC;AAAI,CAAE,kBAC7CC,IAAA,CAAC;EACC,cAAYJ,SAAA;EACZC,SAAA,EAAW,CAAC,sBAAsBA,SAAA,EAAWE,IAAA,IAAQ,cAAcA,IAAA,EAAM,CAAC,CACvEE,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EACRC,MAAA,EAAO;EACPC,KAAA,EAAO;IACLC,SAAA,EACER,SAAA,KAAc,SACV,kBACAA,SAAA,KAAc,UACZ,mBACAA,SAAA,KAAc,OACZ,mBACAS;EACZ;EACAC,OAAA,EAAQ;EACRC,KAAA,EAAM;EACNC,KAAA,EAAM;YAEN,aAAAV,IAAA,CAAC;IAAKH,SAAA,EAAU;IAASc,CAAA,EAAE;IAAmCC,aAAA,EAAc","ignoreList":[]}
1
+ {"version":3,"file":"index.js","names":["React","ChevronIcon","ariaLabel","className","direction","size","_jsx","filter","Boolean","join","height","style","transform","undefined","viewBox","width","xmlns","d","strokeLinecap"],"sources":["../../../src/icons/Chevron/index.tsx"],"sourcesContent":["import React from 'react'\n\nimport './index.scss'\n\nexport const ChevronIcon: React.FC<{\n readonly ariaLabel?: string\n readonly className?: string\n readonly direction?: 'down' | 'left' | 'right' | 'up'\n readonly size?: 'large' | 'small'\n}> = ({ ariaLabel, className, direction, size }) => (\n <svg\n aria-label={ariaLabel}\n className={['icon icon--chevron', className, size && `icon--size-${size}`]\n .filter(Boolean)\n .join(' ')}\n height=\"100%\"\n style={{\n transform:\n direction === 'left'\n ? 'rotate(90deg)'\n : direction === 'right'\n ? 'rotate(-90deg)'\n : direction === 'up'\n ? 'rotate(180deg)'\n : undefined,\n }}\n viewBox=\"0 0 20 20\"\n width=\"100%\"\n xmlns=\"http://www.w3.org/2000/svg\"\n >\n <path className=\"stroke\" d=\"M14 8L10 12L6 8\" strokeLinecap=\"square\" />\n </svg>\n)\n"],"mappings":";AAAA,OAAOA,KAAA,MAAW;AAElB,OAAO;AAEP,OAAO,MAAMC,WAAA,GAKRA,CAAC;EAAEC,SAAS;EAAEC,SAAS;EAAEC,SAAS;EAAEC;AAAI,CAAE,kBAC7CC,IAAA,CAAC;EACC,cAAYJ,SAAA;EACZC,SAAA,EAAW,CAAC,sBAAsBA,SAAA,EAAWE,IAAA,IAAQ,cAAcA,IAAA,EAAM,CAAC,CACvEE,MAAM,CAACC,OAAA,EACPC,IAAI,CAAC;EACRC,MAAA,EAAO;EACPC,KAAA,EAAO;IACLC,SAAA,EACER,SAAA,KAAc,SACV,kBACAA,SAAA,KAAc,UACZ,mBACAA,SAAA,KAAc,OACZ,mBACAS;EACZ;EACAC,OAAA,EAAQ;EACRC,KAAA,EAAM;EACNC,KAAA,EAAM;YAEN,aAAAV,IAAA,CAAC;IAAKH,SAAA,EAAU;IAASc,CAAA,EAAE;IAAkBC,aAAA,EAAc","ignoreList":[]}
@@ -2,8 +2,8 @@
2
2
 
3
3
  @layer payload-default {
4
4
  .icon--chevron {
5
- height: calc(var(--base) / 2);
6
- width: calc(var(--base) / 2);
5
+ height: var(--base);
6
+ width: var(--base);
7
7
 
8
8
  .stroke {
9
9
  fill: none;
@@ -18,8 +18,8 @@
18
18
  }
19
19
 
20
20
  &.icon--size-small {
21
- height: 8px;
22
- width: 8px;
21
+ height: 12px;
22
+ width: 12px;
23
23
  }
24
24
  }
25
25
  }