@panneau/fields 5.0.0-alpha.0 → 5.0.0-alpha.10

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 (248) hide show
  1. package/README.md +103 -20
  2. package/dist/boolean/BooleanField.d.ts +1 -1
  3. package/dist/boolean/BooleanField.js +78 -17
  4. package/dist/boolean/BooleanField.js.map +1 -1
  5. package/dist/boolean/index.d.ts +1 -1
  6. package/dist/color/ColorField.css +5 -5
  7. package/dist/color/ColorField.d.ts +2 -2
  8. package/dist/color/ColorField.js.map +1 -1
  9. package/dist/color/ColorField.module.js +3 -3
  10. package/dist/color/index.d.ts +1 -1
  11. package/dist/date/DateField.d.ts +1 -1
  12. package/dist/date/DateField.js.map +1 -1
  13. package/dist/date/index.d.ts +1 -1
  14. package/dist/datetime/DateTimeField.d.ts +1 -1
  15. package/dist/datetime/DateTimeField.js +107 -20
  16. package/dist/datetime/DateTimeField.js.map +1 -1
  17. package/dist/datetime/index.d.ts +1 -1
  18. package/dist/duration/DurationField.css +11 -0
  19. package/dist/duration/DurationField.d.ts +26 -0
  20. package/dist/duration/DurationField.d.ts.map +1 -0
  21. package/dist/duration/DurationField.js +214 -0
  22. package/dist/duration/DurationField.js.map +1 -0
  23. package/dist/duration/DurationField.module.js +12 -0
  24. package/dist/duration/DurationField.module.js.map +1 -0
  25. package/dist/duration/index.d.ts +2 -0
  26. package/dist/duration/index.d.ts.map +1 -0
  27. package/dist/duration/index.js +1 -0
  28. package/dist/email/EmailField.d.ts +2 -2
  29. package/dist/email/EmailField.js.map +1 -1
  30. package/dist/email/index.d.ts +1 -1
  31. package/dist/embed/EmbedField.css +60 -0
  32. package/dist/embed/EmbedField.d.ts +20 -0
  33. package/dist/embed/EmbedField.d.ts.map +1 -0
  34. package/dist/embed/EmbedField.js +246 -0
  35. package/dist/embed/EmbedField.js.map +1 -0
  36. package/dist/embed/EmbedField.module.js +22 -0
  37. package/dist/embed/EmbedField.module.js.map +1 -0
  38. package/dist/embed/index.d.ts +3 -0
  39. package/dist/embed/index.d.ts.map +1 -0
  40. package/dist/embed/index.js +3 -0
  41. package/dist/file/FileField.css +54 -0
  42. package/dist/file/FileField.d.ts +50 -0
  43. package/dist/file/FileField.d.ts.map +1 -0
  44. package/dist/file/FileField.js +288 -0
  45. package/dist/file/FileField.js.map +1 -0
  46. package/dist/file/FileField.module.js +22 -0
  47. package/dist/file/FileField.module.js.map +1 -0
  48. package/dist/file/index.d.ts +3 -0
  49. package/dist/file/index.d.ts.map +1 -0
  50. package/dist/file/index.js +1 -0
  51. package/dist/group/GroupField.css +2 -2
  52. package/dist/group/GroupField.d.ts +1 -1
  53. package/dist/group/GroupField.js.map +1 -1
  54. package/dist/group/GroupField.module.js +1 -1
  55. package/dist/group/index.d.ts +1 -1
  56. package/dist/index.d.ts +18 -7
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +12 -3
  59. package/dist/json/JsonField.css +7 -0
  60. package/dist/json/JsonField.d.ts +22 -0
  61. package/dist/json/JsonField.d.ts.map +1 -0
  62. package/dist/json/JsonField.js +207 -0
  63. package/dist/json/JsonField.js.map +1 -0
  64. package/dist/json/JsonField.module.js +8 -0
  65. package/dist/json/JsonField.module.js.map +1 -0
  66. package/dist/json/index.d.ts +2 -0
  67. package/dist/json/index.d.ts.map +1 -0
  68. package/dist/json/index.js +1 -0
  69. package/dist/locales/index.js.map +1 -1
  70. package/dist/localized/LocalizedField.css +2 -2
  71. package/dist/localized/LocalizedField.d.ts +1 -1
  72. package/dist/localized/LocalizedField.d.ts.map +1 -1
  73. package/dist/localized/LocalizedField.js +1 -0
  74. package/dist/localized/LocalizedField.js.map +1 -1
  75. package/dist/localized/LocalizedField.module.js +2 -2
  76. package/dist/localized/index.d.ts +1 -1
  77. package/dist/location/LocationField.css +54 -0
  78. package/dist/location/LocationField.d.ts +31 -0
  79. package/dist/location/LocationField.d.ts.map +1 -0
  80. package/dist/location/LocationField.js +563 -0
  81. package/dist/location/LocationField.js.map +1 -0
  82. package/dist/location/LocationField.module.js +22 -0
  83. package/dist/location/LocationField.module.js.map +1 -0
  84. package/dist/location/LocationMap.d.ts +25 -0
  85. package/dist/location/LocationMap.d.ts.map +1 -0
  86. package/dist/location/LocationMap.js +205 -0
  87. package/dist/location/LocationMap.js.map +1 -0
  88. package/dist/location/index.d.ts +5 -0
  89. package/dist/location/index.d.ts.map +1 -0
  90. package/dist/location/index.js +4 -0
  91. package/dist/location/leafletCss.d.ts +2 -0
  92. package/dist/location/leafletCss.d.ts.map +1 -0
  93. package/dist/location/leafletCss.js +6 -0
  94. package/dist/location/leafletCss.js.map +1 -0
  95. package/dist/location/nominatim.d.ts +17 -0
  96. package/dist/location/nominatim.d.ts.map +1 -0
  97. package/dist/location/nominatim.js +50 -0
  98. package/dist/location/nominatim.js.map +1 -0
  99. package/dist/location/types.d.ts +40 -0
  100. package/dist/location/types.d.ts.map +1 -0
  101. package/dist/missing/MissingField.css +4 -3
  102. package/dist/missing/MissingField.d.ts +4 -3
  103. package/dist/missing/MissingField.d.ts.map +1 -1
  104. package/dist/missing/MissingField.js +3 -2
  105. package/dist/missing/MissingField.js.map +1 -1
  106. package/dist/missing/MissingField.module.js +3 -3
  107. package/dist/missing/MissingField.module.js.map +1 -1
  108. package/dist/number/NumberField.d.ts +1 -1
  109. package/dist/number/NumberField.js.map +1 -1
  110. package/dist/number/index.d.ts +1 -1
  111. package/dist/range/RangeField.d.ts +22 -0
  112. package/dist/range/RangeField.d.ts.map +1 -0
  113. package/dist/range/RangeField.js +203 -0
  114. package/dist/range/RangeField.js.map +1 -0
  115. package/dist/range/index.d.ts +2 -0
  116. package/dist/range/index.d.ts.map +1 -0
  117. package/dist/range/index.js +1 -0
  118. package/dist/relation/RelationField.css +7 -7
  119. package/dist/relation/RelationField.d.ts +12 -4
  120. package/dist/relation/RelationField.d.ts.map +1 -1
  121. package/dist/relation/RelationField.js +535 -160
  122. package/dist/relation/RelationField.js.map +1 -1
  123. package/dist/relation/RelationField.module.js +6 -6
  124. package/dist/relation/index.d.ts +2 -2
  125. package/dist/relation/index.d.ts.map +1 -1
  126. package/dist/relation/index.js +2 -2
  127. package/dist/repeater/RepeaterField.css +12 -11
  128. package/dist/repeater/RepeaterField.d.ts +1 -1
  129. package/dist/repeater/RepeaterField.js +118 -34
  130. package/dist/repeater/RepeaterField.js.map +1 -1
  131. package/dist/repeater/RepeaterField.module.js +9 -9
  132. package/dist/repeater/RepeaterField.module.js.map +1 -1
  133. package/dist/repeater/index.d.ts +1 -1
  134. package/dist/select/SelectField.css +1 -1
  135. package/dist/select/SelectField.d.ts +1 -1
  136. package/dist/select/SelectField.js.map +1 -1
  137. package/dist/select/SelectField.module.js +1 -1
  138. package/dist/select/index.d.ts +1 -1
  139. package/dist/shared/DefinitionField.d.ts +5 -3
  140. package/dist/shared/DefinitionField.d.ts.map +1 -1
  141. package/dist/shared/DefinitionField.js +81 -73
  142. package/dist/shared/DefinitionField.js.map +1 -1
  143. package/dist/shared/builtIn.d.ts +5 -3
  144. package/dist/shared/builtIn.d.ts.map +1 -1
  145. package/dist/shared/builtIn.js +21 -3
  146. package/dist/shared/builtIn.js.map +1 -1
  147. package/dist/shared/check.d.ts +27 -0
  148. package/dist/shared/check.d.ts.map +1 -0
  149. package/dist/shared/check.js +18 -0
  150. package/dist/shared/check.js.map +1 -0
  151. package/dist/shared/context.d.ts +28 -5
  152. package/dist/shared/context.d.ts.map +1 -1
  153. package/dist/shared/context.js +35 -19
  154. package/dist/shared/context.js.map +1 -1
  155. package/dist/shared/cx.js.map +1 -1
  156. package/dist/shared/dates.js.map +1 -1
  157. package/dist/shared/embed.d.ts +19 -0
  158. package/dist/shared/embed.d.ts.map +1 -0
  159. package/dist/shared/embed.js +14 -0
  160. package/dist/shared/embed.js.map +1 -0
  161. package/dist/shared/entry.d.ts +11 -2
  162. package/dist/shared/entry.d.ts.map +1 -1
  163. package/dist/shared/entry.js +19 -3
  164. package/dist/shared/entry.js.map +1 -1
  165. package/dist/shared/relation.d.ts +41 -5
  166. package/dist/shared/relation.d.ts.map +1 -1
  167. package/dist/shared/relation.js +119 -12
  168. package/dist/shared/relation.js.map +1 -1
  169. package/dist/shared/types.d.ts +2 -0
  170. package/dist/shared/types.d.ts.map +1 -1
  171. package/dist/slug/SlugField.css +18 -0
  172. package/dist/slug/SlugField.d.ts +33 -5
  173. package/dist/slug/SlugField.d.ts.map +1 -1
  174. package/dist/slug/SlugField.js +346 -126
  175. package/dist/slug/SlugField.js.map +1 -1
  176. package/dist/slug/SlugField.module.js +14 -0
  177. package/dist/slug/SlugField.module.js.map +1 -0
  178. package/dist/slug/index.d.ts +1 -1
  179. package/dist/slug/index.d.ts.map +1 -1
  180. package/dist/slug/index.js +1 -1
  181. package/dist/tags/TagsField.d.ts +17 -0
  182. package/dist/tags/TagsField.d.ts.map +1 -0
  183. package/dist/tags/TagsField.js +120 -0
  184. package/dist/tags/TagsField.js.map +1 -0
  185. package/dist/tags/index.d.ts +2 -0
  186. package/dist/tags/index.d.ts.map +1 -0
  187. package/dist/tags/index.js +1 -0
  188. package/dist/tel/TelField.d.ts +11 -0
  189. package/dist/tel/TelField.d.ts.map +1 -0
  190. package/dist/tel/TelField.js +87 -0
  191. package/dist/tel/TelField.js.map +1 -0
  192. package/dist/tel/index.d.ts +2 -0
  193. package/dist/tel/index.d.ts.map +1 -0
  194. package/dist/tel/index.js +1 -0
  195. package/dist/text/TextField.d.ts +12 -4
  196. package/dist/text/TextField.d.ts.map +1 -1
  197. package/dist/text/TextField.js +104 -60
  198. package/dist/text/TextField.js.map +1 -1
  199. package/dist/text/index.d.ts +1 -1
  200. package/dist/textarea/TextAreaField.d.ts +1 -1
  201. package/dist/textarea/TextAreaField.js.map +1 -1
  202. package/dist/textarea/index.d.ts +1 -1
  203. package/dist/time/TimeField.d.ts +1 -1
  204. package/dist/time/TimeField.js +64 -10
  205. package/dist/time/TimeField.js.map +1 -1
  206. package/dist/time/index.d.ts +1 -1
  207. package/dist/upload/FilePicker.css +24 -0
  208. package/dist/upload/FilePicker.d.ts +14 -0
  209. package/dist/upload/FilePicker.d.ts.map +1 -0
  210. package/dist/upload/FilePicker.js +130 -0
  211. package/dist/upload/FilePicker.js.map +1 -0
  212. package/dist/upload/FilePicker.module.js +12 -0
  213. package/dist/upload/FilePicker.module.js.map +1 -0
  214. package/dist/upload/UploadList.css +93 -0
  215. package/dist/upload/UploadList.d.ts +18 -0
  216. package/dist/upload/UploadList.d.ts.map +1 -0
  217. package/dist/upload/UploadList.js +144 -0
  218. package/dist/upload/UploadList.js.map +1 -0
  219. package/dist/upload/UploadList.module.js +32 -0
  220. package/dist/upload/UploadList.module.js.map +1 -0
  221. package/dist/upload/files.d.ts +5 -0
  222. package/dist/upload/files.d.ts.map +1 -0
  223. package/dist/upload/files.js +26 -0
  224. package/dist/upload/files.js.map +1 -0
  225. package/dist/upload/types.d.ts +58 -0
  226. package/dist/upload/types.d.ts.map +1 -0
  227. package/dist/upload/useRejectionMessage.d.ts +4 -0
  228. package/dist/upload/useRejectionMessage.d.ts.map +1 -0
  229. package/dist/upload/useRejectionMessage.js +25 -0
  230. package/dist/upload/useRejectionMessage.js.map +1 -0
  231. package/dist/upload/useUploads.d.ts +30 -0
  232. package/dist/upload/useUploads.d.ts.map +1 -0
  233. package/dist/upload/useUploads.js +115 -0
  234. package/dist/upload/useUploads.js.map +1 -0
  235. package/dist/uppy/index.d.ts +3 -0
  236. package/dist/uppy/index.d.ts.map +1 -0
  237. package/dist/uppy/index.js +1 -0
  238. package/dist/uppy/uploader.d.ts +44 -0
  239. package/dist/uppy/uploader.d.ts.map +1 -0
  240. package/dist/uppy/uploader.js +139 -0
  241. package/dist/uppy/uploader.js.map +1 -0
  242. package/dist/url/UrlField.css +2 -2
  243. package/dist/url/UrlField.d.ts +2 -2
  244. package/dist/url/UrlField.js +69 -14
  245. package/dist/url/UrlField.js.map +1 -1
  246. package/dist/url/UrlField.module.js +1 -1
  247. package/dist/url/index.d.ts +1 -1
  248. package/package.json +69 -7
@@ -2,7 +2,7 @@ import { useFieldsContext } from "../shared/context.js";
2
2
  import { cx } from "../shared/cx.js";
3
3
  import { getFieldProps } from "../shared/entry.js";
4
4
  import { messages } from "../shared/messages.js";
5
- import { toReferences } from "../shared/relation.js";
5
+ import { toReferences, useRelationReferences } from "../shared/relation.js";
6
6
  import RelationField_module_default from "./RelationField.module.js";
7
7
  import { c } from "react/compiler-runtime";
8
8
  import { ComboBox, Fieldset, IconButton, usePanneauIntl } from "@panneau/ui";
@@ -10,53 +10,95 @@ import { useEffect, useState } from "react";
10
10
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
11
11
  import { X } from "lucide-react";
12
12
  //#region src/relation/RelationField.tsx
13
+ /** The id of the "Create “…”" option of the picker. */
14
+ var CREATE_ID = "\0create";
13
15
  /** Results of a search in a relation source, as it types. */
14
- function useRelationSearch(source, resource, query, { enabled = true, delay = 250 } = {}) {
15
- const [state, setState] = useState({
16
- key: "",
17
- items: [],
18
- isLoading: false
19
- });
16
+ function useRelationSearch(source, resource, query, t0) {
17
+ const $ = c(14);
18
+ let t1;
19
+ if ($[0] !== t0) {
20
+ t1 = t0 === void 0 ? {} : t0;
21
+ $[0] = t0;
22
+ $[1] = t1;
23
+ } else t1 = $[1];
24
+ const { enabled: t2, delay: t3 } = t1;
25
+ const enabled = t2 === void 0 ? true : t2;
26
+ const delay = t3 === void 0 ? 250 : t3;
27
+ let t4;
28
+ if ($[2] === Symbol.for("react.memo_cache_sentinel")) {
29
+ t4 = {
30
+ key: "",
31
+ items: [],
32
+ isLoading: false
33
+ };
34
+ $[2] = t4;
35
+ } else t4 = $[2];
36
+ const [state, setState] = useState(t4);
20
37
  const key = `${resource}\u0000${query}`;
21
- useEffect(() => {
22
- if (source === null || !enabled) return;
23
- const controller = new AbortController();
24
- const timer = setTimeout(() => {
25
- setState((current) => ({
26
- ...current,
27
- key,
28
- isLoading: true
29
- }));
30
- source.search(resource, query, { signal: controller.signal }).then((items) => {
31
- if (!controller.signal.aborted) setState({
32
- key,
33
- items,
34
- isLoading: false
35
- });
36
- }).catch(() => {
37
- if (!controller.signal.aborted) setState({
38
+ let t5;
39
+ let t6;
40
+ if ($[3] !== delay || $[4] !== enabled || $[5] !== key || $[6] !== query || $[7] !== resource || $[8] !== source) {
41
+ t5 = () => {
42
+ if (source === null || !enabled) return;
43
+ const controller = new AbortController();
44
+ const timer = setTimeout(() => {
45
+ setState((current) => ({
46
+ ...current,
38
47
  key,
39
- items: [],
40
- isLoading: false
48
+ isLoading: true
49
+ }));
50
+ source.search(resource, query, { signal: controller.signal }).then((items) => {
51
+ if (!controller.signal.aborted) setState({
52
+ key,
53
+ items,
54
+ isLoading: false
55
+ });
56
+ }).catch(() => {
57
+ if (!controller.signal.aborted) setState({
58
+ key,
59
+ items: [],
60
+ isLoading: false
61
+ });
41
62
  });
42
- });
43
- }, delay);
44
- return () => {
45
- clearTimeout(timer);
46
- controller.abort();
63
+ }, delay);
64
+ return () => {
65
+ clearTimeout(timer);
66
+ controller.abort();
67
+ };
47
68
  };
48
- }, [
49
- source,
50
- resource,
51
- query,
52
- key,
53
- enabled,
54
- delay
55
- ]);
56
- return {
57
- items: state.items,
58
- isLoading: state.isLoading || state.key !== key
59
- };
69
+ t6 = [
70
+ source,
71
+ resource,
72
+ query,
73
+ key,
74
+ enabled,
75
+ delay
76
+ ];
77
+ $[3] = delay;
78
+ $[4] = enabled;
79
+ $[5] = key;
80
+ $[6] = query;
81
+ $[7] = resource;
82
+ $[8] = source;
83
+ $[9] = t5;
84
+ $[10] = t6;
85
+ } else {
86
+ t5 = $[9];
87
+ t6 = $[10];
88
+ }
89
+ useEffect(t5, t6);
90
+ const t7 = state.isLoading || state.key !== key;
91
+ let t8;
92
+ if ($[11] !== state.items || $[12] !== t7) {
93
+ t8 = {
94
+ items: state.items,
95
+ isLoading: t7
96
+ };
97
+ $[11] = state.items;
98
+ $[12] = t7;
99
+ $[13] = t8;
100
+ } else t8 = $[13];
101
+ return t8;
60
102
  }
61
103
  function References(t0) {
62
104
  const $ = c(12);
@@ -109,125 +151,458 @@ function References(t0) {
109
151
  }
110
152
  /**
111
153
  * A reference to an item of another resource, or several with `multiple`, picked by searching a
112
- * `RelationSource`. Values are references (`{ id, label }`), as items carry them. Without a
113
- * source, the field shows its references and can't change them.
154
+ * `RelationSource`. Values are references (`{ id, label }`), as items carry them; plain ids get
155
+ * their labels from the source's `resolve()`. When the source can `create()` (or with `onCreate`),
156
+ * the picker offers to create an item from the typed text. Without a source, the field shows its
157
+ * references and can't change them.
114
158
  */
115
159
  function RelationField(props) {
160
+ const $ = c(143);
116
161
  const intl = usePanneauIntl();
117
162
  const context = useFieldsContext();
118
163
  const source = props.source === void 0 ? context.relationSource : props.source;
119
- const { resource, label, description, errors, disabled, readOnly, required, placeholder = intl.formatMessage(messages.search), onBlur, name, id, className, labelClassName, descriptionClassName, errorsClassName, controlClassName } = props;
120
- const selected = toReferences(props.value);
164
+ const { resource, label, description, errors, disabled, readOnly, required, onBlur, name, id, className, labelClassName, descriptionClassName, errorsClassName, controlClassName } = props;
165
+ let t0;
166
+ if ($[0] !== intl || $[1] !== props.placeholder) {
167
+ t0 = props.placeholder ?? intl.formatMessage(messages.search);
168
+ $[0] = intl;
169
+ $[1] = props.placeholder;
170
+ $[2] = t0;
171
+ } else t0 = $[2];
172
+ const placeholder = t0;
173
+ let t1;
174
+ if ($[3] !== props.value) {
175
+ t1 = toReferences(props.value);
176
+ $[3] = props.value;
177
+ $[4] = t1;
178
+ } else t1 = $[4];
179
+ const selected = useRelationReferences(source, resource, t1);
121
180
  const [query, setQuery] = useState(null);
181
+ const [creating, setCreating] = useState(false);
182
+ const [createError, setCreateError] = useState(null);
122
183
  const editable = source !== null && disabled !== true && readOnly !== true;
123
- const { items, isLoading } = useRelationSearch(source, resource, query ?? "", { enabled: editable });
124
- const removeLabel = (reference) => `${intl.formatMessage(messages.remove)} ${reference.label}`;
125
- const chrome = {
126
- legend: label,
127
- errors,
128
- isRequired: required,
129
- className,
130
- legendClassName: labelClassName,
131
- descriptionClassName,
132
- errorsClassName
133
- };
134
- if (!editable) return /* @__PURE__ */ jsx(Fieldset, {
135
- ...chrome,
136
- description: source === null && disabled !== true && readOnly !== true ? /* @__PURE__ */ jsxs(Fragment, { children: [
137
- description,
138
- " ",
139
- intl.formatMessage(messages.relationUnavailable)
140
- ] }) : description,
141
- children: selected.length > 0 ? /* @__PURE__ */ jsx(References, {
142
- references: selected,
143
- removeLabel
144
- }) : /* @__PURE__ */ jsx("span", {
145
- className: RelationField_module_default.none,
146
- children: intl.formatMessage(messages.noRelation)
147
- })
148
- });
149
- const comboLabel = typeof label === "string" ? label : props["aria-label"];
150
- if (props.multiple === true) {
151
- const { onChange } = props;
152
- const set = (next) => onChange?.(next.length > 0 ? next : null);
153
- return /* @__PURE__ */ jsx(Fieldset, {
154
- ...chrome,
155
- description,
156
- children: /* @__PURE__ */ jsxs("div", {
157
- className: RelationField_module_default.multiple,
158
- children: [selected.length > 0 ? /* @__PURE__ */ jsx(References, {
159
- references: selected,
160
- removeLabel,
161
- onRemove: (reference_0) => set(selected.filter((entry) => entry.id !== reference_0.id))
162
- }) : null, /* @__PURE__ */ jsx(ComboBox, {
184
+ let t2;
185
+ if ($[5] !== editable) {
186
+ t2 = { enabled: editable };
187
+ $[5] = editable;
188
+ $[6] = t2;
189
+ } else t2 = $[6];
190
+ const { items: found, isLoading: searching } = useRelationSearch(source, resource, query ?? "", t2);
191
+ const sourceCreate = source?.create;
192
+ let t3;
193
+ if ($[7] !== props.onCreate || $[8] !== resource || $[9] !== source || $[10] !== sourceCreate) {
194
+ t3 = props.onCreate !== void 0 ? props.onCreate : sourceCreate !== void 0 && source?.canCreate?.(resource) !== false ? (text) => sourceCreate.call(source, resource, text) : null;
195
+ $[7] = props.onCreate;
196
+ $[8] = resource;
197
+ $[9] = source;
198
+ $[10] = sourceCreate;
199
+ $[11] = t3;
200
+ } else t3 = $[11];
201
+ const create = t3;
202
+ const t4 = query ?? "";
203
+ let allErrors;
204
+ let createFrom;
205
+ let isLoading;
206
+ let items;
207
+ let t5;
208
+ if ($[12] !== className || $[13] !== controlClassName || $[14] !== create || $[15] !== createError || $[16] !== creating || $[17] !== description || $[18] !== descriptionClassName || $[19] !== disabled || $[20] !== editable || $[21] !== errors || $[22] !== errorsClassName || $[23] !== found || $[24] !== id || $[25] !== intl || $[26] !== label || $[27] !== labelClassName || $[28] !== name || $[29] !== onBlur || $[30] !== placeholder || $[31] !== props || $[32] !== query || $[33] !== readOnly || $[34] !== required || $[35] !== searching || $[36] !== selected || $[37] !== source || $[38] !== t4) {
209
+ t5 = Symbol.for("react.early_return_sentinel");
210
+ bb0: {
211
+ const text_0 = t4.trim();
212
+ items = create !== null && text_0 !== "" && !searching && ![...found, ...selected].some((item) => item.label.toLocaleLowerCase(intl.locale) === text_0.toLocaleLowerCase(intl.locale)) ? [...found, {
213
+ id: CREATE_ID,
214
+ label: intl.formatMessage(messages.createRelation, { text: text_0 })
215
+ }] : found;
216
+ isLoading = searching || creating;
217
+ let t6;
218
+ if ($[44] !== createError || $[45] !== errors) {
219
+ t6 = createError !== null ? [...errors ?? [], createError] : errors;
220
+ $[44] = createError;
221
+ $[45] = errors;
222
+ $[46] = t6;
223
+ } else t6 = $[46];
224
+ allErrors = t6;
225
+ createFrom = (add) => {
226
+ if (create === null) return;
227
+ setCreating(true);
228
+ setCreateError(null);
229
+ create(text_0).then((reference) => {
230
+ if (reference !== null) {
231
+ add(reference);
232
+ setQuery(null);
233
+ }
234
+ }).catch(() => setCreateError(intl.formatMessage(messages.createRelationFailed, { text: text_0 }))).finally(() => setCreating(false));
235
+ };
236
+ let t7;
237
+ if ($[47] !== intl) {
238
+ t7 = (reference_0) => `${intl.formatMessage(messages.remove)} ${reference_0.label}`;
239
+ $[47] = intl;
240
+ $[48] = t7;
241
+ } else t7 = $[48];
242
+ const removeLabel = t7;
243
+ let t8;
244
+ if ($[49] !== allErrors || $[50] !== className || $[51] !== descriptionClassName || $[52] !== errorsClassName || $[53] !== label || $[54] !== labelClassName || $[55] !== required) {
245
+ t8 = {
246
+ legend: label,
247
+ errors: allErrors,
248
+ isRequired: required,
249
+ className,
250
+ legendClassName: labelClassName,
251
+ descriptionClassName,
252
+ errorsClassName
253
+ };
254
+ $[49] = allErrors;
255
+ $[50] = className;
256
+ $[51] = descriptionClassName;
257
+ $[52] = errorsClassName;
258
+ $[53] = label;
259
+ $[54] = labelClassName;
260
+ $[55] = required;
261
+ $[56] = t8;
262
+ } else t8 = $[56];
263
+ const chrome = t8;
264
+ if (!editable) {
265
+ let t9;
266
+ if ($[57] !== description || $[58] !== disabled || $[59] !== intl || $[60] !== readOnly || $[61] !== source) {
267
+ t9 = source === null && disabled !== true && readOnly !== true ? /* @__PURE__ */ jsxs(Fragment, { children: [
268
+ description,
269
+ " ",
270
+ intl.formatMessage(messages.relationUnavailable)
271
+ ] }) : description;
272
+ $[57] = description;
273
+ $[58] = disabled;
274
+ $[59] = intl;
275
+ $[60] = readOnly;
276
+ $[61] = source;
277
+ $[62] = t9;
278
+ } else t9 = $[62];
279
+ let t10;
280
+ if ($[63] !== intl || $[64] !== removeLabel || $[65] !== selected) {
281
+ t10 = selected.length > 0 ? /* @__PURE__ */ jsx(References, {
282
+ references: selected,
283
+ removeLabel
284
+ }) : /* @__PURE__ */ jsx("span", {
285
+ className: RelationField_module_default.none,
286
+ children: intl.formatMessage(messages.noRelation)
287
+ });
288
+ $[63] = intl;
289
+ $[64] = removeLabel;
290
+ $[65] = selected;
291
+ $[66] = t10;
292
+ } else t10 = $[66];
293
+ let t11;
294
+ if ($[67] !== chrome || $[68] !== t10 || $[69] !== t9) {
295
+ t11 = /* @__PURE__ */ jsx(Fieldset, {
296
+ ...chrome,
297
+ description: t9,
298
+ children: t10
299
+ });
300
+ $[67] = chrome;
301
+ $[68] = t10;
302
+ $[69] = t9;
303
+ $[70] = t11;
304
+ } else t11 = $[70];
305
+ t5 = t11;
306
+ break bb0;
307
+ }
308
+ const comboLabel = typeof label === "string" ? label : props["aria-label"];
309
+ if (props.multiple === true) {
310
+ const { onChange } = props;
311
+ let t9;
312
+ if ($[71] !== onChange) {
313
+ t9 = (next) => onChange?.(next.length > 0 ? next : null);
314
+ $[71] = onChange;
315
+ $[72] = t9;
316
+ } else t9 = $[72];
317
+ const set = t9;
318
+ let t10;
319
+ if ($[73] !== removeLabel || $[74] !== selected || $[75] !== set) {
320
+ t10 = selected.length > 0 ? /* @__PURE__ */ jsx(References, {
321
+ references: selected,
322
+ removeLabel,
323
+ onRemove: (reference_1) => set(selected.filter((entry) => entry.id !== reference_1.id))
324
+ }) : null;
325
+ $[73] = removeLabel;
326
+ $[74] = selected;
327
+ $[75] = set;
328
+ $[76] = t10;
329
+ } else t10 = $[76];
330
+ let t11;
331
+ if ($[77] !== selected) {
332
+ t11 = (item_0) => !selected.some((entry_0) => entry_0.id === item_0.id);
333
+ $[77] = selected;
334
+ $[78] = t11;
335
+ } else t11 = $[78];
336
+ const t12 = items.filter(t11).map(_temp);
337
+ let t13;
338
+ if ($[79] !== intl) {
339
+ t13 = intl.formatMessage(messages.noResults);
340
+ $[79] = intl;
341
+ $[80] = t13;
342
+ } else t13 = $[80];
343
+ let t14;
344
+ if ($[81] !== onBlur) {
345
+ t14 = onBlur !== void 0 ? { onBlur: () => onBlur() } : {};
346
+ $[81] = onBlur;
347
+ $[82] = t14;
348
+ } else t14 = $[82];
349
+ let t15;
350
+ if ($[83] !== name) {
351
+ t15 = name !== void 0 ? { name } : {};
352
+ $[83] = name;
353
+ $[84] = t15;
354
+ } else t15 = $[84];
355
+ let t16;
356
+ if ($[85] !== id) {
357
+ t16 = id !== void 0 ? { id } : {};
358
+ $[85] = id;
359
+ $[86] = t16;
360
+ } else t16 = $[86];
361
+ let t17;
362
+ if ($[87] !== controlClassName) {
363
+ t17 = controlClassName !== void 0 ? { controlClassName } : {};
364
+ $[87] = controlClassName;
365
+ $[88] = t17;
366
+ } else t17 = $[88];
367
+ const t18 = /* @__PURE__ */ jsx(ComboBox, {
163
368
  "aria-label": comboLabel,
164
- items: items.filter((item) => !selected.some((entry_0) => entry_0.id === item.id)).map((item_0) => ({
165
- id: item_0.id,
166
- label: item_0.label
167
- })),
369
+ items: t12,
168
370
  value: null,
169
371
  inputValue: query ?? "",
170
372
  onInputChange: setQuery,
171
373
  onChange: (itemId) => {
172
- const reference_1 = items.find((item_1) => item_1.id === itemId);
173
- if (reference_1 !== void 0) {
174
- set([...selected, reference_1]);
374
+ if (itemId === CREATE_ID) {
375
+ createFrom((reference_2) => set([...selected, reference_2]));
376
+ return;
377
+ }
378
+ const reference_3 = found.find((item_2) => item_2.id === itemId);
379
+ if (reference_3 !== void 0) {
380
+ set([...selected, reference_3]);
175
381
  setQuery(null);
176
382
  }
177
383
  },
178
384
  isLoading,
179
385
  placeholder,
180
- emptyMessage: intl.formatMessage(messages.noResults),
181
- ...onBlur !== void 0 ? { onBlur: () => onBlur() } : {},
182
- ...name !== void 0 ? { name } : {},
183
- ...id !== void 0 ? { id } : {},
184
- ...controlClassName !== void 0 ? { controlClassName } : {}
185
- })]
186
- })
187
- });
386
+ emptyMessage: t13,
387
+ ...t14,
388
+ ...t15,
389
+ ...t16,
390
+ ...t17
391
+ });
392
+ let t19;
393
+ if ($[89] !== t10 || $[90] !== t18) {
394
+ t19 = /* @__PURE__ */ jsxs("div", {
395
+ className: RelationField_module_default.multiple,
396
+ children: [t10, t18]
397
+ });
398
+ $[89] = t10;
399
+ $[90] = t18;
400
+ $[91] = t19;
401
+ } else t19 = $[91];
402
+ let t20;
403
+ if ($[92] !== chrome || $[93] !== description || $[94] !== t19) {
404
+ t20 = /* @__PURE__ */ jsx(Fieldset, {
405
+ ...chrome,
406
+ description,
407
+ children: t19
408
+ });
409
+ $[92] = chrome;
410
+ $[93] = description;
411
+ $[94] = t19;
412
+ $[95] = t20;
413
+ } else t20 = $[95];
414
+ t5 = t20;
415
+ break bb0;
416
+ }
417
+ }
418
+ $[12] = className;
419
+ $[13] = controlClassName;
420
+ $[14] = create;
421
+ $[15] = createError;
422
+ $[16] = creating;
423
+ $[17] = description;
424
+ $[18] = descriptionClassName;
425
+ $[19] = disabled;
426
+ $[20] = editable;
427
+ $[21] = errors;
428
+ $[22] = errorsClassName;
429
+ $[23] = found;
430
+ $[24] = id;
431
+ $[25] = intl;
432
+ $[26] = label;
433
+ $[27] = labelClassName;
434
+ $[28] = name;
435
+ $[29] = onBlur;
436
+ $[30] = placeholder;
437
+ $[31] = props;
438
+ $[32] = query;
439
+ $[33] = readOnly;
440
+ $[34] = required;
441
+ $[35] = searching;
442
+ $[36] = selected;
443
+ $[37] = source;
444
+ $[38] = t4;
445
+ $[39] = allErrors;
446
+ $[40] = createFrom;
447
+ $[41] = isLoading;
448
+ $[42] = items;
449
+ $[43] = t5;
450
+ } else {
451
+ allErrors = $[39];
452
+ createFrom = $[40];
453
+ isLoading = $[41];
454
+ items = $[42];
455
+ t5 = $[43];
188
456
  }
457
+ if (t5 !== Symbol.for("react.early_return_sentinel")) return t5;
189
458
  const { onChange: onChange_0 } = props;
190
459
  const current = selected[0] ?? null;
191
- const shown = current !== null && !items.some((item_2) => item_2.id === current.id) ? [current, ...items] : items;
192
- return /* @__PURE__ */ jsx(ComboBox, {
193
- label,
194
- description,
195
- errors,
196
- isRequired: required,
197
- className,
198
- labelClassName,
199
- descriptionClassName,
200
- errorsClassName,
201
- ...controlClassName !== void 0 ? { controlClassName } : {},
202
- ...props["aria-label"] !== void 0 ? { "aria-label": props["aria-label"] } : {},
203
- items: shown.map((item_3) => ({
204
- id: item_3.id,
205
- label: item_3.label
206
- })),
207
- value: current?.id ?? null,
208
- inputValue: query ?? current?.label ?? "",
209
- onInputChange: (text) => {
210
- setQuery(text);
211
- if (text === "" && current !== null) onChange_0?.(null);
212
- },
213
- onChange: (itemId_0) => {
460
+ let t6;
461
+ if ($[96] !== current || $[97] !== items) {
462
+ t6 = current !== null && !items.some((item_3) => item_3.id === current.id) ? [current, ...items] : items;
463
+ $[96] = current;
464
+ $[97] = items;
465
+ $[98] = t6;
466
+ } else t6 = $[98];
467
+ const shown = t6;
468
+ let t7;
469
+ if ($[99] !== controlClassName) {
470
+ t7 = controlClassName !== void 0 ? { controlClassName } : {};
471
+ $[99] = controlClassName;
472
+ $[100] = t7;
473
+ } else t7 = $[100];
474
+ let t8;
475
+ if ($[101] !== props) {
476
+ t8 = props["aria-label"] !== void 0 ? { "aria-label": props["aria-label"] } : {};
477
+ $[101] = props;
478
+ $[102] = t8;
479
+ } else t8 = $[102];
480
+ let t9;
481
+ if ($[103] !== shown) {
482
+ t9 = shown.map(_temp2);
483
+ $[103] = shown;
484
+ $[104] = t9;
485
+ } else t9 = $[104];
486
+ const t10 = current?.id ?? null;
487
+ const t11 = query ?? current?.label ?? "";
488
+ let t12;
489
+ if ($[105] !== current || $[106] !== onChange_0) {
490
+ t12 = (text_1) => {
491
+ setQuery(text_1);
492
+ if (text_1 === "" && current !== null) onChange_0?.(null);
493
+ };
494
+ $[105] = current;
495
+ $[106] = onChange_0;
496
+ $[107] = t12;
497
+ } else t12 = $[107];
498
+ let t13;
499
+ if ($[108] !== createFrom || $[109] !== current?.id || $[110] !== onChange_0 || $[111] !== shown) {
500
+ t13 = (itemId_0) => {
501
+ if (itemId_0 === CREATE_ID) {
502
+ createFrom((reference_4) => onChange_0?.(reference_4));
503
+ return;
504
+ }
214
505
  setQuery(null);
215
506
  if (itemId_0 === null) return;
216
- const reference_2 = shown.find((item_4) => item_4.id === itemId_0) ?? null;
217
- if (reference_2?.id !== current?.id) onChange_0?.(reference_2);
218
- },
219
- isLoading,
220
- placeholder,
221
- emptyMessage: intl.formatMessage(messages.noResults),
222
- ...onBlur !== void 0 ? { onBlur: () => {
507
+ const reference_5 = shown.find((item_5) => item_5.id === itemId_0) ?? null;
508
+ if (reference_5?.id !== current?.id) onChange_0?.(reference_5);
509
+ };
510
+ $[108] = createFrom;
511
+ $[109] = current?.id;
512
+ $[110] = onChange_0;
513
+ $[111] = shown;
514
+ $[112] = t13;
515
+ } else t13 = $[112];
516
+ let t14;
517
+ if ($[113] !== intl) {
518
+ t14 = intl.formatMessage(messages.noResults);
519
+ $[113] = intl;
520
+ $[114] = t14;
521
+ } else t14 = $[114];
522
+ let t15;
523
+ if ($[115] !== onBlur) {
524
+ t15 = onBlur !== void 0 ? { onBlur: () => {
223
525
  setQuery(null);
224
526
  onBlur();
225
- } } : { onBlur: () => setQuery(null) },
226
- ...name !== void 0 ? { name } : {},
227
- ...id !== void 0 ? { id } : {}
228
- });
527
+ } } : { onBlur: () => setQuery(null) };
528
+ $[115] = onBlur;
529
+ $[116] = t15;
530
+ } else t15 = $[116];
531
+ let t16;
532
+ if ($[117] !== name) {
533
+ t16 = name !== void 0 ? { name } : {};
534
+ $[117] = name;
535
+ $[118] = t16;
536
+ } else t16 = $[118];
537
+ let t17;
538
+ if ($[119] !== id) {
539
+ t17 = id !== void 0 ? { id } : {};
540
+ $[119] = id;
541
+ $[120] = t17;
542
+ } else t17 = $[120];
543
+ let t18;
544
+ if ($[121] !== allErrors || $[122] !== className || $[123] !== description || $[124] !== descriptionClassName || $[125] !== errorsClassName || $[126] !== isLoading || $[127] !== label || $[128] !== labelClassName || $[129] !== placeholder || $[130] !== required || $[131] !== t10 || $[132] !== t11 || $[133] !== t12 || $[134] !== t13 || $[135] !== t14 || $[136] !== t15 || $[137] !== t16 || $[138] !== t17 || $[139] !== t7 || $[140] !== t8 || $[141] !== t9) {
545
+ t18 = /* @__PURE__ */ jsx(ComboBox, {
546
+ label,
547
+ description,
548
+ errors: allErrors,
549
+ isRequired: required,
550
+ className,
551
+ labelClassName,
552
+ descriptionClassName,
553
+ errorsClassName,
554
+ ...t7,
555
+ ...t8,
556
+ items: t9,
557
+ value: t10,
558
+ inputValue: t11,
559
+ onInputChange: t12,
560
+ onChange: t13,
561
+ isLoading,
562
+ placeholder,
563
+ emptyMessage: t14,
564
+ ...t15,
565
+ ...t16,
566
+ ...t17
567
+ });
568
+ $[121] = allErrors;
569
+ $[122] = className;
570
+ $[123] = description;
571
+ $[124] = descriptionClassName;
572
+ $[125] = errorsClassName;
573
+ $[126] = isLoading;
574
+ $[127] = label;
575
+ $[128] = labelClassName;
576
+ $[129] = placeholder;
577
+ $[130] = required;
578
+ $[131] = t10;
579
+ $[132] = t11;
580
+ $[133] = t12;
581
+ $[134] = t13;
582
+ $[135] = t14;
583
+ $[136] = t15;
584
+ $[137] = t16;
585
+ $[138] = t17;
586
+ $[139] = t7;
587
+ $[140] = t8;
588
+ $[141] = t9;
589
+ $[142] = t18;
590
+ } else t18 = $[142];
591
+ return t18;
229
592
  }
230
593
  /** The `relation` type: `resource` and `multiple`. Items search the fields context's source. */
594
+ function _temp2(item_4) {
595
+ return {
596
+ id: item_4.id,
597
+ label: item_4.label
598
+ };
599
+ }
600
+ function _temp(item_1) {
601
+ return {
602
+ id: item_1.id,
603
+ label: item_1.label
604
+ };
605
+ }
231
606
  function RelationFieldEntry(props) {
232
607
  const $ = c(15);
233
608
  const { field } = props;
@@ -238,28 +613,28 @@ function RelationFieldEntry(props) {
238
613
  $[1] = t0;
239
614
  } else t0 = $[1];
240
615
  const references = t0;
616
+ const resource = typeof field.resource === "string" ? field.resource : "";
241
617
  let t1;
242
618
  if ($[2] !== props) {
243
619
  t1 = getFieldProps(props);
244
620
  $[2] = props;
245
621
  $[3] = t1;
246
622
  } else t1 = $[3];
247
- const t2 = field.resource ?? "";
248
- let t3;
249
- if ($[4] !== t1 || $[5] !== t2) {
250
- t3 = {
623
+ let t2;
624
+ if ($[4] !== resource || $[5] !== t1) {
625
+ t2 = {
251
626
  ...t1,
252
- resource: t2
627
+ resource
253
628
  };
254
- $[4] = t1;
255
- $[5] = t2;
256
- $[6] = t3;
257
- } else t3 = $[6];
258
- const shared = t3;
629
+ $[4] = resource;
630
+ $[5] = t1;
631
+ $[6] = t2;
632
+ } else t2 = $[6];
633
+ const shared = t2;
259
634
  if (field.multiple === true) {
260
- let t4;
635
+ let t3;
261
636
  if ($[7] !== props.onChange || $[8] !== references || $[9] !== shared) {
262
- t4 = /* @__PURE__ */ jsx(RelationField, {
637
+ t3 = /* @__PURE__ */ jsx(RelationField, {
263
638
  ...shared,
264
639
  multiple: true,
265
640
  value: references,
@@ -268,24 +643,24 @@ function RelationFieldEntry(props) {
268
643
  $[7] = props.onChange;
269
644
  $[8] = references;
270
645
  $[9] = shared;
271
- $[10] = t4;
272
- } else t4 = $[10];
273
- return t4;
646
+ $[10] = t3;
647
+ } else t3 = $[10];
648
+ return t3;
274
649
  }
275
- const t4 = references[0] ?? null;
276
- let t5;
277
- if ($[11] !== props.onChange || $[12] !== shared || $[13] !== t4) {
278
- t5 = /* @__PURE__ */ jsx(RelationField, {
650
+ const t3 = references[0] ?? null;
651
+ let t4;
652
+ if ($[11] !== props.onChange || $[12] !== shared || $[13] !== t3) {
653
+ t4 = /* @__PURE__ */ jsx(RelationField, {
279
654
  ...shared,
280
- value: t4,
655
+ value: t3,
281
656
  onChange: props.onChange
282
657
  });
283
658
  $[11] = props.onChange;
284
659
  $[12] = shared;
285
- $[13] = t4;
286
- $[14] = t5;
287
- } else t5 = $[14];
288
- return t5;
660
+ $[13] = t3;
661
+ $[14] = t4;
662
+ } else t4 = $[14];
663
+ return t4;
289
664
  }
290
665
  //#endregion
291
666
  export { RelationField, RelationFieldEntry, useRelationSearch };