@panneau/fields 5.0.0-alpha.15 → 5.0.0-alpha.16

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 (139) hide show
  1. package/README.md +53 -3
  2. package/dist/address/AddressField.css +44 -0
  3. package/dist/address/AddressField.d.ts +37 -0
  4. package/dist/address/AddressField.d.ts.map +1 -0
  5. package/dist/address/AddressField.js +411 -0
  6. package/dist/address/AddressField.js.map +1 -0
  7. package/dist/address/AddressField.module.js +22 -0
  8. package/dist/address/AddressField.module.js.map +1 -0
  9. package/dist/address/address.d.ts +23 -0
  10. package/dist/address/address.d.ts.map +1 -0
  11. package/dist/address/address.js +58 -0
  12. package/dist/address/address.js.map +1 -0
  13. package/dist/address/index.d.ts +3 -0
  14. package/dist/address/index.d.ts.map +1 -0
  15. package/dist/address/index.js +3 -0
  16. package/dist/color/ColorField.css +9 -0
  17. package/dist/color/ColorField.d.ts +10 -3
  18. package/dist/color/ColorField.d.ts.map +1 -1
  19. package/dist/color/ColorField.js +341 -81
  20. package/dist/color/ColorField.js.map +1 -1
  21. package/dist/color/ColorField.module.js +4 -2
  22. package/dist/color/ColorField.module.js.map +1 -1
  23. package/dist/color/index.d.ts +1 -0
  24. package/dist/color/index.d.ts.map +1 -1
  25. package/dist/color/index.js +3 -1
  26. package/dist/color/palette.d.ts +23 -0
  27. package/dist/color/palette.d.ts.map +1 -0
  28. package/dist/color/palette.js +34 -0
  29. package/dist/color/palette.js.map +1 -0
  30. package/dist/country/CountryField.css +42 -0
  31. package/dist/country/CountryField.d.ts +19 -4
  32. package/dist/country/CountryField.d.ts.map +1 -1
  33. package/dist/country/CountryField.js +355 -82
  34. package/dist/country/CountryField.js.map +1 -1
  35. package/dist/country/CountryField.module.js +20 -0
  36. package/dist/country/CountryField.module.js.map +1 -0
  37. package/dist/country/index.d.ts +1 -1
  38. package/dist/country/index.d.ts.map +1 -1
  39. package/dist/daterange/DateRangeField.css +9 -0
  40. package/dist/daterange/DateRangeField.d.ts +31 -0
  41. package/dist/daterange/DateRangeField.d.ts.map +1 -0
  42. package/dist/daterange/DateRangeField.js +372 -0
  43. package/dist/daterange/DateRangeField.js.map +1 -0
  44. package/dist/daterange/DateRangeField.module.js +12 -0
  45. package/dist/daterange/DateRangeField.module.js.map +1 -0
  46. package/dist/daterange/index.d.ts +3 -0
  47. package/dist/daterange/index.d.ts.map +1 -0
  48. package/dist/daterange/index.js +3 -0
  49. package/dist/daterange/range.d.ts +61 -0
  50. package/dist/daterange/range.d.ts.map +1 -0
  51. package/dist/daterange/range.js +119 -0
  52. package/dist/daterange/range.js.map +1 -0
  53. package/dist/duration/DurationField.css +1 -1
  54. package/dist/duration/DurationField.d.ts +54 -13
  55. package/dist/duration/DurationField.d.ts.map +1 -1
  56. package/dist/duration/DurationField.js +205 -159
  57. package/dist/duration/DurationField.js.map +1 -1
  58. package/dist/duration/DurationField.module.js.map +1 -1
  59. package/dist/duration/index.d.ts +1 -1
  60. package/dist/duration/index.d.ts.map +1 -1
  61. package/dist/duration/index.js +1 -1
  62. package/dist/embed/EmbedField.d.ts +11 -2
  63. package/dist/embed/EmbedField.d.ts.map +1 -1
  64. package/dist/embed/EmbedField.js +179 -116
  65. package/dist/embed/EmbedField.js.map +1 -1
  66. package/dist/link/LinkField.css +12 -0
  67. package/dist/link/LinkField.d.ts +38 -0
  68. package/dist/link/LinkField.d.ts.map +1 -0
  69. package/dist/link/LinkField.js +742 -0
  70. package/dist/link/LinkField.js.map +1 -0
  71. package/dist/link/LinkField.module.js +8 -0
  72. package/dist/link/LinkField.module.js.map +1 -0
  73. package/dist/link/index.d.ts +3 -0
  74. package/dist/link/index.d.ts.map +1 -0
  75. package/dist/link/index.js +3 -0
  76. package/dist/link/link.d.ts +30 -0
  77. package/dist/link/link.d.ts.map +1 -0
  78. package/dist/link/link.js +63 -0
  79. package/dist/link/link.js.map +1 -0
  80. package/dist/link/pages.d.ts +17 -0
  81. package/dist/link/pages.d.ts.map +1 -0
  82. package/dist/link/pages.js +104 -0
  83. package/dist/link/pages.js.map +1 -0
  84. package/dist/location/LocationField.d.ts.map +1 -1
  85. package/dist/location/LocationField.js +9 -85
  86. package/dist/location/LocationField.js.map +1 -1
  87. package/dist/location/nominatim.d.ts +8 -2
  88. package/dist/location/nominatim.d.ts.map +1 -1
  89. package/dist/location/nominatim.js +32 -3
  90. package/dist/location/nominatim.js.map +1 -1
  91. package/dist/location/search.d.ts +10 -0
  92. package/dist/location/search.d.ts.map +1 -0
  93. package/dist/location/search.js +83 -0
  94. package/dist/location/search.js.map +1 -0
  95. package/dist/location/types.d.ts +8 -2
  96. package/dist/location/types.d.ts.map +1 -1
  97. package/dist/money/MoneyField.d.ts +28 -0
  98. package/dist/money/MoneyField.d.ts.map +1 -0
  99. package/dist/money/MoneyField.js +269 -0
  100. package/dist/money/MoneyField.js.map +1 -0
  101. package/dist/money/index.d.ts +3 -0
  102. package/dist/money/index.d.ts.map +1 -0
  103. package/dist/money/index.js +3 -0
  104. package/dist/money/money.d.ts +27 -0
  105. package/dist/money/money.d.ts.map +1 -0
  106. package/dist/money/money.js +56 -0
  107. package/dist/money/money.js.map +1 -0
  108. package/dist/region/RegionField.js +1 -1
  109. package/dist/shared/builtIn.d.ts +3 -1
  110. package/dist/shared/builtIn.d.ts.map +1 -1
  111. package/dist/shared/builtIn.js +18 -8
  112. package/dist/shared/builtIn.js.map +1 -1
  113. package/dist/shared/dates.js +2 -2
  114. package/dist/shared/dates.js.map +1 -1
  115. package/dist/shared/flow.d.ts.map +1 -1
  116. package/dist/shared/flow.js +1 -0
  117. package/dist/shared/flow.js.map +1 -1
  118. package/dist/shared/part.d.ts +26 -0
  119. package/dist/shared/part.d.ts.map +1 -0
  120. package/dist/shared/part.js +64 -0
  121. package/dist/shared/part.js.map +1 -0
  122. package/dist/tel/TelField.css +25 -0
  123. package/dist/tel/TelField.d.ts +14 -2
  124. package/dist/tel/TelField.d.ts.map +1 -1
  125. package/dist/tel/TelField.js +246 -145
  126. package/dist/tel/TelField.js.map +1 -1
  127. package/dist/tel/TelField.module.js +12 -0
  128. package/dist/tel/TelField.module.js.map +1 -0
  129. package/dist/tel/index.d.ts +1 -1
  130. package/dist/tel/index.d.ts.map +1 -1
  131. package/dist/tel/index.js +2 -2
  132. package/dist/tel/phone.d.ts +28 -0
  133. package/dist/tel/phone.d.ts.map +1 -1
  134. package/dist/tel/phone.js +48 -1
  135. package/dist/tel/phone.js.map +1 -1
  136. package/dist/url/UrlField.d.ts.map +1 -1
  137. package/dist/url/UrlField.js +1 -1
  138. package/dist/url/UrlField.js.map +1 -1
  139. package/package.json +24 -4
@@ -0,0 +1,742 @@
1
+ import { useFieldsContext } from "../shared/context.js";
2
+ import { getFieldProps, getSetting, isString } from "../shared/entry.js";
3
+ import { messages } from "../shared/messages.js";
4
+ import { LocalizedField } from "../localized/LocalizedField.js";
5
+ import { TextField } from "../text/TextField.js";
6
+ import { BoundPart } from "../shared/part.js";
7
+ import { EmailField } from "../email/EmailField.js";
8
+ import { TelField } from "../tel/TelField.js";
9
+ import { UrlField } from "../url/UrlField.js";
10
+ import LinkField_module_default from "./LinkField.module.js";
11
+ import { cleanLink, getLinkPage, isLink } from "./link.js";
12
+ import { usePageSearch } from "./pages.js";
13
+ import { DefinitionField } from "../shared/DefinitionField.js";
14
+ import { c } from "react/compiler-runtime";
15
+ import { getLinkNewTab, getLinkTypes } from "@panneau/protocol/runtime";
16
+ import { File, FileText, Globe, Hash, Mail, Phone } from "lucide-react";
17
+ import { useState } from "react";
18
+ import { Checkbox, ComboBox, Fieldset, SegmentedControl, TextInput, usePanneauIntl } from "@panneau/ui";
19
+ import { jsx, jsxs } from "react/jsx-runtime";
20
+ //#region src/link/LinkField.tsx
21
+ var DEFAULT_TYPES = [
22
+ { id: "url" },
23
+ { id: "email" },
24
+ { id: "tel" }
25
+ ];
26
+ var TYPE_ICONS = {
27
+ url: Globe,
28
+ page: FileText,
29
+ email: Mail,
30
+ tel: Phone,
31
+ file: File
32
+ };
33
+ /** The text of a URL after its scheme: `info@example.com` in `mailto:info@example.com`. */
34
+ function withoutScheme(url, scheme) {
35
+ if (url === void 0 || url === "") return null;
36
+ return url.toLowerCase().startsWith(scheme) ? url.slice(scheme.length) : url;
37
+ }
38
+ /**
39
+ * A link (decision 0055): its type, in a segmented control, then the input of the type (a URL, a
40
+ * page searched in the resources of `pages`, an email address, a phone number, a media, or the
41
+ * text of a type of the site), its label per locale, and whether it opens in a new tab. Each part
42
+ * shows the errors of its own path (`link.url`) in a form.
43
+ */
44
+ function LinkField(t0) {
45
+ const $ = c(129);
46
+ const { value, onChange, onBlur, path, name, types: typesProp, pages: t1, libraries, newTab: t2, labelMode: t3, singleLabel: t4, label, description, errors, disabled, readOnly, required, className } = t0;
47
+ let t5;
48
+ if ($[0] !== t1) {
49
+ t5 = t1 === void 0 ? [] : t1;
50
+ $[0] = t1;
51
+ $[1] = t5;
52
+ } else t5 = $[1];
53
+ const pages = t5;
54
+ const newTab = t2 === void 0 ? "choose" : t2;
55
+ const labelMode = t3 === void 0 ? "optional" : t3;
56
+ const singleLabel = t4 === void 0 ? false : t4;
57
+ const intl = usePanneauIntl();
58
+ const { locales, relationSource } = useFieldsContext();
59
+ const types = typesProp !== void 0 && typesProp.length > 0 ? typesProp : DEFAULT_TYPES;
60
+ const defaultType = types[0]?.id;
61
+ let t6;
62
+ if ($[2] !== types || $[3] !== value?.type) {
63
+ t6 = types.find((candidate) => candidate.id === value?.type) ?? types[0];
64
+ $[2] = types;
65
+ $[3] = value?.type;
66
+ $[4] = t6;
67
+ } else t6 = $[4];
68
+ const type = t6;
69
+ const base = path ?? name ?? "";
70
+ let t7;
71
+ if ($[5] !== base) {
72
+ t7 = (part) => base !== "" ? `${base}.${part}` : part;
73
+ $[5] = base;
74
+ $[6] = t7;
75
+ } else t7 = $[6];
76
+ const partPath = t7;
77
+ const editable = disabled !== true && readOnly !== true;
78
+ let t8;
79
+ if ($[7] !== defaultType || $[8] !== newTab || $[9] !== onChange || $[10] !== value) {
80
+ t8 = (next) => {
81
+ const link = {
82
+ ...value,
83
+ type: value?.type ?? defaultType ?? "url",
84
+ ...next
85
+ };
86
+ onChange?.(cleanLink(link, {
87
+ newTab,
88
+ defaultType
89
+ }));
90
+ };
91
+ $[7] = defaultType;
92
+ $[8] = newTab;
93
+ $[9] = onChange;
94
+ $[10] = value;
95
+ $[11] = t8;
96
+ } else t8 = $[11];
97
+ const change = t8;
98
+ let t9;
99
+ if ($[12] !== change) {
100
+ t9 = (url) => change({ url: url ?? void 0 });
101
+ $[12] = change;
102
+ $[13] = t9;
103
+ } else t9 = $[13];
104
+ const setUrl = t9;
105
+ let t10;
106
+ if ($[14] !== intl) {
107
+ t10 = (candidate_0) => {
108
+ switch (candidate_0.id) {
109
+ case "url": return intl.formatMessage(messages.linkTypeUrl);
110
+ case "page": return intl.formatMessage(messages.linkTypePage);
111
+ case "email": return intl.formatMessage(messages.linkTypeEmail);
112
+ case "tel": return intl.formatMessage(messages.linkTypeTel);
113
+ case "file": return intl.formatMessage(messages.linkTypeFile);
114
+ default: return candidate_0.label ?? candidate_0.id;
115
+ }
116
+ };
117
+ $[14] = intl;
118
+ $[15] = t10;
119
+ } else t10 = $[15];
120
+ const typeName = t10;
121
+ let t11;
122
+ if ($[16] !== disabled || $[17] !== readOnly || $[18] !== required || $[19] !== value) {
123
+ t11 = (bound) => ({
124
+ errors: bound.errors ?? [],
125
+ ...bound.onBlur !== void 0 ? { onBlur: bound.onBlur } : {},
126
+ ...disabled !== void 0 ? { disabled } : {},
127
+ ...readOnly !== void 0 ? { readOnly } : {},
128
+ required: required === true || (value ?? null) !== null
129
+ });
130
+ $[16] = disabled;
131
+ $[17] = readOnly;
132
+ $[18] = required;
133
+ $[19] = value;
134
+ $[20] = t11;
135
+ } else t11 = $[20];
136
+ const shared = t11;
137
+ let t12;
138
+ if ($[21] !== onBlur || $[22] !== partPath) {
139
+ t12 = (partName, partType, render) => /* @__PURE__ */ jsx(BoundPart, {
140
+ field: {
141
+ name: partName,
142
+ type: partType
143
+ },
144
+ path: partPath(partName),
145
+ ...onBlur !== void 0 ? { onBlur } : {},
146
+ render
147
+ });
148
+ $[21] = onBlur;
149
+ $[22] = partPath;
150
+ $[23] = t12;
151
+ } else t12 = $[23];
152
+ const part_0 = t12;
153
+ let input = null;
154
+ if (type !== void 0) bb0: switch (type.id) {
155
+ case "url": {
156
+ let t13;
157
+ if ($[24] !== intl || $[25] !== setUrl || $[26] !== shared || $[27] !== value?.url) {
158
+ t13 = (bound_5) => /* @__PURE__ */ jsx(UrlField, {
159
+ ...shared(bound_5),
160
+ label: intl.formatMessage(messages.linkUrl),
161
+ value: value?.url ?? null,
162
+ onChange: setUrl
163
+ });
164
+ $[24] = intl;
165
+ $[25] = setUrl;
166
+ $[26] = shared;
167
+ $[27] = value?.url;
168
+ $[28] = t13;
169
+ } else t13 = $[28];
170
+ let t14;
171
+ if ($[29] !== part_0 || $[30] !== t13) {
172
+ t14 = part_0("url", "url", t13);
173
+ $[29] = part_0;
174
+ $[30] = t13;
175
+ $[31] = t14;
176
+ } else t14 = $[31];
177
+ input = t14;
178
+ break bb0;
179
+ }
180
+ case "email": {
181
+ let t13;
182
+ if ($[32] !== intl || $[33] !== setUrl || $[34] !== shared || $[35] !== value?.url) {
183
+ t13 = (bound_4) => /* @__PURE__ */ jsx(EmailField, {
184
+ ...shared(bound_4),
185
+ label: intl.formatMessage(messages.linkEmail),
186
+ value: withoutScheme(value?.url, "mailto:"),
187
+ onChange: (email) => setUrl(email !== null ? `mailto:${email}` : null)
188
+ });
189
+ $[32] = intl;
190
+ $[33] = setUrl;
191
+ $[34] = shared;
192
+ $[35] = value?.url;
193
+ $[36] = t13;
194
+ } else t13 = $[36];
195
+ let t14;
196
+ if ($[37] !== part_0 || $[38] !== t13) {
197
+ t14 = part_0("url", "email", t13);
198
+ $[37] = part_0;
199
+ $[38] = t13;
200
+ $[39] = t14;
201
+ } else t14 = $[39];
202
+ input = t14;
203
+ break bb0;
204
+ }
205
+ case "tel": {
206
+ let t13;
207
+ if ($[40] !== intl || $[41] !== setUrl || $[42] !== shared || $[43] !== value?.url) {
208
+ t13 = (bound_3) => /* @__PURE__ */ jsx(TelField, {
209
+ ...shared(bound_3),
210
+ label: intl.formatMessage(messages.linkTel),
211
+ value: withoutScheme(value?.url, "tel:"),
212
+ onChange: (number) => setUrl(number !== null ? `tel:${number}` : null)
213
+ });
214
+ $[40] = intl;
215
+ $[41] = setUrl;
216
+ $[42] = shared;
217
+ $[43] = value?.url;
218
+ $[44] = t13;
219
+ } else t13 = $[44];
220
+ let t14;
221
+ if ($[45] !== part_0 || $[46] !== t13) {
222
+ t14 = part_0("url", "tel", t13);
223
+ $[45] = part_0;
224
+ $[46] = t13;
225
+ $[47] = t14;
226
+ } else t14 = $[47];
227
+ input = t14;
228
+ break bb0;
229
+ }
230
+ case "page": {
231
+ let t13;
232
+ if ($[48] !== change || $[49] !== editable || $[50] !== intl || $[51] !== pages || $[52] !== relationSource || $[53] !== shared || $[54] !== value) {
233
+ t13 = (bound_2) => /* @__PURE__ */ jsx(PagePicker, {
234
+ ...shared(bound_2),
235
+ label: intl.formatMessage(messages.linkPage),
236
+ resources: pages,
237
+ page: getLinkPage(value),
238
+ editable: editable && relationSource !== null,
239
+ onChange: (page) => change({ page: page !== null ? { ...page } : void 0 })
240
+ });
241
+ $[48] = change;
242
+ $[49] = editable;
243
+ $[50] = intl;
244
+ $[51] = pages;
245
+ $[52] = relationSource;
246
+ $[53] = shared;
247
+ $[54] = value;
248
+ $[55] = t13;
249
+ } else t13 = $[55];
250
+ let t14;
251
+ if ($[56] !== part_0 || $[57] !== t13) {
252
+ t14 = part_0("page", "relation", t13);
253
+ $[56] = part_0;
254
+ $[57] = t13;
255
+ $[58] = t14;
256
+ } else t14 = $[58];
257
+ input = t14;
258
+ break bb0;
259
+ }
260
+ case "file": {
261
+ let t13;
262
+ if ($[59] !== intl) {
263
+ t13 = intl.formatMessage(messages.linkFile);
264
+ $[59] = intl;
265
+ $[60] = t13;
266
+ } else t13 = $[60];
267
+ let t14;
268
+ if ($[61] !== libraries) {
269
+ t14 = libraries !== void 0 && libraries.length > 0 ? { resource: [...libraries] } : {};
270
+ $[61] = libraries;
271
+ $[62] = t14;
272
+ } else t14 = $[62];
273
+ let t15;
274
+ if ($[63] !== t13 || $[64] !== t14) {
275
+ t15 = {
276
+ name: "file",
277
+ type: "media",
278
+ label: t13,
279
+ ...t14
280
+ };
281
+ $[63] = t13;
282
+ $[64] = t14;
283
+ $[65] = t15;
284
+ } else t15 = $[65];
285
+ const fileField = t15;
286
+ let t16;
287
+ if ($[66] !== change || $[67] !== disabled || $[68] !== fileField || $[69] !== partPath || $[70] !== readOnly || $[71] !== value?.file) {
288
+ t16 = (bound_1) => /* @__PURE__ */ jsx(DefinitionField, {
289
+ field: fileField,
290
+ path: partPath("file"),
291
+ value: value?.file ?? null,
292
+ onChange: (file) => change({ file: file ?? void 0 }),
293
+ errors: bound_1.errors ?? [],
294
+ ...bound_1.onBlur !== void 0 ? { onBlur: bound_1.onBlur } : {},
295
+ ...disabled !== void 0 ? { disabled } : {},
296
+ ...readOnly !== void 0 ? { readOnly } : {}
297
+ });
298
+ $[66] = change;
299
+ $[67] = disabled;
300
+ $[68] = fileField;
301
+ $[69] = partPath;
302
+ $[70] = readOnly;
303
+ $[71] = value?.file;
304
+ $[72] = t16;
305
+ } else t16 = $[72];
306
+ let t17;
307
+ if ($[73] !== part_0 || $[74] !== t16) {
308
+ t17 = part_0("file", "media", t16);
309
+ $[73] = part_0;
310
+ $[74] = t16;
311
+ $[75] = t17;
312
+ } else t17 = $[75];
313
+ input = t17;
314
+ break bb0;
315
+ }
316
+ default: {
317
+ let t13;
318
+ if ($[76] !== setUrl || $[77] !== shared || $[78] !== type || $[79] !== typeName || $[80] !== value?.url) {
319
+ t13 = (bound_0) => /* @__PURE__ */ jsx(TextField, {
320
+ ...shared(bound_0),
321
+ label: typeName(type),
322
+ autoComplete: "off",
323
+ ...type.placeholder !== void 0 ? { placeholder: type.placeholder } : {},
324
+ value: value?.url ?? null,
325
+ onChange: setUrl
326
+ });
327
+ $[76] = setUrl;
328
+ $[77] = shared;
329
+ $[78] = type;
330
+ $[79] = typeName;
331
+ $[80] = value?.url;
332
+ $[81] = t13;
333
+ } else t13 = $[81];
334
+ let t14;
335
+ if ($[82] !== part_0 || $[83] !== t13) {
336
+ t14 = part_0("url", "text", t13);
337
+ $[82] = part_0;
338
+ $[83] = t13;
339
+ $[84] = t14;
340
+ } else t14 = $[84];
341
+ input = t14;
342
+ }
343
+ }
344
+ let t13;
345
+ if ($[85] !== intl) {
346
+ t13 = intl.formatMessage(messages.linkLabel);
347
+ $[85] = intl;
348
+ $[86] = t13;
349
+ } else t13 = $[86];
350
+ const labelText = t13;
351
+ const labelRequired = labelMode === "required";
352
+ let t14;
353
+ if ($[87] !== change || $[88] !== disabled || $[89] !== labelMode || $[90] !== labelRequired || $[91] !== labelText || $[92] !== locales || $[93] !== part_0 || $[94] !== readOnly || $[95] !== shared || $[96] !== singleLabel || $[97] !== value) {
354
+ t14 = labelMode === "none" ? null : part_0("label", "text", (bound_6) => singleLabel || locales.length === 0 ? /* @__PURE__ */ jsx(TextField, {
355
+ ...shared(bound_6),
356
+ label: labelText,
357
+ required: labelRequired,
358
+ value: typeof value?.label === "string" ? value.label : null,
359
+ onChange: (text) => change({ label: text })
360
+ }) : /* @__PURE__ */ jsx(LocalizedField, {
361
+ label: labelText,
362
+ errors: bound_6.errors ?? [],
363
+ required: labelRequired,
364
+ locales,
365
+ value: value?.label !== null && typeof value?.label === "object" ? value.label : {},
366
+ onChange: (next_0) => change({ label: next_0 ?? null }),
367
+ children: (localeInput) => /* @__PURE__ */ jsx(TextInput, {
368
+ "aria-label": `${labelText} (${localeInput.label})`,
369
+ value: localeInput.value ?? "",
370
+ onChange: (text_0) => localeInput.onChange(text_0 === "" ? null : text_0),
371
+ ...bound_6.onBlur !== void 0 ? { onBlur: bound_6.onBlur } : {},
372
+ isDisabled: disabled === true,
373
+ isReadOnly: readOnly === true
374
+ })
375
+ }));
376
+ $[87] = change;
377
+ $[88] = disabled;
378
+ $[89] = labelMode;
379
+ $[90] = labelRequired;
380
+ $[91] = labelText;
381
+ $[92] = locales;
382
+ $[93] = part_0;
383
+ $[94] = readOnly;
384
+ $[95] = shared;
385
+ $[96] = singleLabel;
386
+ $[97] = value;
387
+ $[98] = t14;
388
+ } else t14 = $[98];
389
+ const labelInput = t14;
390
+ let t15;
391
+ if ($[99] !== defaultType || $[100] !== editable || $[101] !== intl || $[102] !== newTab || $[103] !== onChange || $[104] !== type || $[105] !== typeName || $[106] !== types || $[107] !== value?.label || $[108] !== value?.newTab) {
392
+ t15 = types.length > 1 ? /* @__PURE__ */ jsx(SegmentedControl, {
393
+ "aria-label": intl.formatMessage(messages.linkType),
394
+ size: "sm",
395
+ isDisabled: !editable,
396
+ options: types.map((candidate_1) => ({
397
+ value: candidate_1.id,
398
+ label: typeName(candidate_1),
399
+ icon: TYPE_ICONS[candidate_1.id] ?? Hash
400
+ })),
401
+ ...type !== void 0 ? { value: type.id } : {},
402
+ onChange: (next_1) => {
403
+ if (next_1 !== type?.id) onChange?.(cleanLink({
404
+ type: next_1,
405
+ label: value?.label ?? null,
406
+ newTab: value?.newTab ?? false
407
+ }, {
408
+ newTab,
409
+ defaultType
410
+ }));
411
+ }
412
+ }) : null;
413
+ $[99] = defaultType;
414
+ $[100] = editable;
415
+ $[101] = intl;
416
+ $[102] = newTab;
417
+ $[103] = onChange;
418
+ $[104] = type;
419
+ $[105] = typeName;
420
+ $[106] = types;
421
+ $[107] = value?.label;
422
+ $[108] = value?.newTab;
423
+ $[109] = t15;
424
+ } else t15 = $[109];
425
+ let t16;
426
+ if ($[110] !== change || $[111] !== editable || $[112] !== intl || $[113] !== newTab || $[114] !== value?.newTab) {
427
+ t16 = newTab === "choose" ? /* @__PURE__ */ jsx(Checkbox, {
428
+ isSelected: value?.newTab === true,
429
+ onChange: (selected) => change({ newTab: selected }),
430
+ isDisabled: !editable,
431
+ children: intl.formatMessage(messages.linkNewTab)
432
+ }) : null;
433
+ $[110] = change;
434
+ $[111] = editable;
435
+ $[112] = intl;
436
+ $[113] = newTab;
437
+ $[114] = value?.newTab;
438
+ $[115] = t16;
439
+ } else t16 = $[115];
440
+ let t17;
441
+ if ($[116] !== input || $[117] !== labelInput || $[118] !== t15 || $[119] !== t16) {
442
+ t17 = /* @__PURE__ */ jsxs("div", {
443
+ className: LinkField_module_default.link,
444
+ children: [
445
+ t15,
446
+ input,
447
+ labelInput,
448
+ t16
449
+ ]
450
+ });
451
+ $[116] = input;
452
+ $[117] = labelInput;
453
+ $[118] = t15;
454
+ $[119] = t16;
455
+ $[120] = t17;
456
+ } else t17 = $[120];
457
+ let t18;
458
+ if ($[121] !== className || $[122] !== description || $[123] !== disabled || $[124] !== errors || $[125] !== label || $[126] !== required || $[127] !== t17) {
459
+ t18 = /* @__PURE__ */ jsx(Fieldset, {
460
+ legend: label,
461
+ description,
462
+ errors,
463
+ isRequired: required,
464
+ isDisabled: disabled,
465
+ className,
466
+ children: t17
467
+ });
468
+ $[121] = className;
469
+ $[122] = description;
470
+ $[123] = disabled;
471
+ $[124] = errors;
472
+ $[125] = label;
473
+ $[126] = required;
474
+ $[127] = t17;
475
+ $[128] = t18;
476
+ } else t18 = $[128];
477
+ return t18;
478
+ }
479
+ /** The page of a link: searched in every resource of `pages`, with the relation source. */
480
+ function PagePicker(t0) {
481
+ const $ = c(51);
482
+ const { label, resources, page, onChange, editable, errors, onBlur, required } = t0;
483
+ const intl = usePanneauIntl();
484
+ const { relationSource } = useFieldsContext();
485
+ const [query, setQuery] = useState(null);
486
+ let t1;
487
+ if ($[0] !== editable) {
488
+ t1 = { enabled: editable };
489
+ $[0] = editable;
490
+ $[1] = t1;
491
+ } else t1 = $[1];
492
+ const { items, isLoading } = usePageSearch(relationSource, resources, query ?? "", t1);
493
+ let t2;
494
+ if ($[2] !== resources) {
495
+ t2 = (item) => `${item.resource ?? resources[0] ?? ""}\u0000${item.id}`;
496
+ $[2] = resources;
497
+ $[3] = t2;
498
+ } else t2 = $[3];
499
+ const keyOf = t2;
500
+ let T0;
501
+ let current;
502
+ let shown;
503
+ let t3;
504
+ let t4;
505
+ let t5;
506
+ let t6;
507
+ let t7;
508
+ let t8;
509
+ if ($[4] !== editable || $[5] !== errors || $[6] !== items || $[7] !== keyOf || $[8] !== label || $[9] !== page || $[10] !== required) {
510
+ current = page !== null ? {
511
+ ...page,
512
+ label: page.label ?? page.id
513
+ } : null;
514
+ shown = current !== null && !items.some((item_0) => keyOf(item_0) === keyOf(current)) ? [current, ...items] : items;
515
+ T0 = ComboBox;
516
+ t3 = label;
517
+ t4 = errors;
518
+ t5 = required;
519
+ t6 = !editable;
520
+ let t9;
521
+ if ($[20] !== keyOf) {
522
+ t9 = (item_1) => ({
523
+ id: keyOf(item_1),
524
+ label: item_1.label
525
+ });
526
+ $[20] = keyOf;
527
+ $[21] = t9;
528
+ } else t9 = $[21];
529
+ t7 = shown.map(t9);
530
+ t8 = current !== null ? keyOf(current) : null;
531
+ $[4] = editable;
532
+ $[5] = errors;
533
+ $[6] = items;
534
+ $[7] = keyOf;
535
+ $[8] = label;
536
+ $[9] = page;
537
+ $[10] = required;
538
+ $[11] = T0;
539
+ $[12] = current;
540
+ $[13] = shown;
541
+ $[14] = t3;
542
+ $[15] = t4;
543
+ $[16] = t5;
544
+ $[17] = t6;
545
+ $[18] = t7;
546
+ $[19] = t8;
547
+ } else {
548
+ T0 = $[11];
549
+ current = $[12];
550
+ shown = $[13];
551
+ t3 = $[14];
552
+ t4 = $[15];
553
+ t5 = $[16];
554
+ t6 = $[17];
555
+ t7 = $[18];
556
+ t8 = $[19];
557
+ }
558
+ const t9 = query ?? current?.label ?? "";
559
+ let t10;
560
+ if ($[22] !== current || $[23] !== onChange) {
561
+ t10 = (text) => {
562
+ setQuery(text);
563
+ if (text === "" && current !== null) onChange(null);
564
+ };
565
+ $[22] = current;
566
+ $[23] = onChange;
567
+ $[24] = t10;
568
+ } else t10 = $[24];
569
+ let t11;
570
+ if ($[25] !== keyOf || $[26] !== onChange || $[27] !== resources || $[28] !== shown) {
571
+ t11 = (key) => {
572
+ setQuery(null);
573
+ const found = shown.find((item_2) => keyOf(item_2) === key);
574
+ if (found !== void 0) onChange({
575
+ id: found.id,
576
+ label: found.label,
577
+ ...found.resource !== void 0 ? { resource: found.resource } : resources[0] !== void 0 ? { resource: resources[0] } : {}
578
+ });
579
+ };
580
+ $[25] = keyOf;
581
+ $[26] = onChange;
582
+ $[27] = resources;
583
+ $[28] = shown;
584
+ $[29] = t11;
585
+ } else t11 = $[29];
586
+ let t12;
587
+ if ($[30] !== intl) {
588
+ t12 = intl.formatMessage(messages.search);
589
+ $[30] = intl;
590
+ $[31] = t12;
591
+ } else t12 = $[31];
592
+ let t13;
593
+ if ($[32] !== intl) {
594
+ t13 = intl.formatMessage(messages.noResults);
595
+ $[32] = intl;
596
+ $[33] = t13;
597
+ } else t13 = $[33];
598
+ let t14;
599
+ if ($[34] !== onBlur) {
600
+ t14 = onBlur !== void 0 ? { onBlur: () => onBlur() } : {};
601
+ $[34] = onBlur;
602
+ $[35] = t14;
603
+ } else t14 = $[35];
604
+ let t15;
605
+ if ($[36] !== T0 || $[37] !== isLoading || $[38] !== t10 || $[39] !== t11 || $[40] !== t12 || $[41] !== t13 || $[42] !== t14 || $[43] !== t3 || $[44] !== t4 || $[45] !== t5 || $[46] !== t6 || $[47] !== t7 || $[48] !== t8 || $[49] !== t9) {
606
+ t15 = /* @__PURE__ */ jsx(T0, {
607
+ label: t3,
608
+ errors: t4,
609
+ isRequired: t5,
610
+ isDisabled: t6,
611
+ items: t7,
612
+ value: t8,
613
+ inputValue: t9,
614
+ onInputChange: t10,
615
+ onChange: t11,
616
+ isLoading,
617
+ placeholder: t12,
618
+ emptyMessage: t13,
619
+ ...t14
620
+ });
621
+ $[36] = T0;
622
+ $[37] = isLoading;
623
+ $[38] = t10;
624
+ $[39] = t11;
625
+ $[40] = t12;
626
+ $[41] = t13;
627
+ $[42] = t14;
628
+ $[43] = t3;
629
+ $[44] = t4;
630
+ $[45] = t5;
631
+ $[46] = t6;
632
+ $[47] = t7;
633
+ $[48] = t8;
634
+ $[49] = t9;
635
+ $[50] = t15;
636
+ } else t15 = $[50];
637
+ return t15;
638
+ }
639
+ var isLabelMode = (value) => value === "optional" || value === "required" || value === "none";
640
+ var isCodes = (value) => Array.isArray(value) && value.every(isString);
641
+ /**
642
+ * The `link` type: its `resource` (the resources of `page` links), and settings `types`,
643
+ * `newTab`, `label` and `libraries`. In a localized field, the label of each locale's link is a
644
+ * string.
645
+ */
646
+ function LinkFieldEntry(props) {
647
+ const $ = c(29);
648
+ const { field } = props;
649
+ let t0;
650
+ if ($[0] !== field) {
651
+ t0 = getSetting(field, "label", isLabelMode);
652
+ $[0] = field;
653
+ $[1] = t0;
654
+ } else t0 = $[1];
655
+ const labelMode = t0;
656
+ let t1;
657
+ if ($[2] !== field) {
658
+ t1 = getSetting(field, "libraries", isCodes);
659
+ $[2] = field;
660
+ $[3] = t1;
661
+ } else t1 = $[3];
662
+ const libraries = t1;
663
+ let t2;
664
+ if ($[4] !== field.resource) {
665
+ t2 = field.resource === void 0 ? [] : typeof field.resource === "string" ? [field.resource] : field.resource;
666
+ $[4] = field.resource;
667
+ $[5] = t2;
668
+ } else t2 = $[5];
669
+ const pages = t2;
670
+ let t3;
671
+ if ($[6] !== props) {
672
+ t3 = getFieldProps(props);
673
+ $[6] = props;
674
+ $[7] = t3;
675
+ } else t3 = $[7];
676
+ let fieldProps;
677
+ if ($[8] !== t3) {
678
+ const { placeholder: _placeholder, ...t4 } = t3;
679
+ fieldProps = t4;
680
+ $[8] = t3;
681
+ $[9] = fieldProps;
682
+ } else fieldProps = $[9];
683
+ const t4 = props.path;
684
+ const t5 = isLink(props.value) ? props.value : null;
685
+ const t6 = props.onChange;
686
+ let t7;
687
+ if ($[10] !== field) {
688
+ t7 = getLinkTypes(field);
689
+ $[10] = field;
690
+ $[11] = t7;
691
+ } else t7 = $[11];
692
+ let t8;
693
+ if ($[12] !== field) {
694
+ t8 = getLinkNewTab(field);
695
+ $[12] = field;
696
+ $[13] = t8;
697
+ } else t8 = $[13];
698
+ const t9 = props.locale !== void 0;
699
+ let t10;
700
+ if ($[14] !== labelMode) {
701
+ t10 = labelMode !== void 0 ? { labelMode } : {};
702
+ $[14] = labelMode;
703
+ $[15] = t10;
704
+ } else t10 = $[15];
705
+ let t11;
706
+ if ($[16] !== libraries) {
707
+ t11 = libraries !== void 0 ? { libraries } : {};
708
+ $[16] = libraries;
709
+ $[17] = t11;
710
+ } else t11 = $[17];
711
+ let t12;
712
+ if ($[18] !== fieldProps || $[19] !== pages || $[20] !== props.onChange || $[21] !== props.path || $[22] !== t10 || $[23] !== t11 || $[24] !== t5 || $[25] !== t7 || $[26] !== t8 || $[27] !== t9) {
713
+ t12 = /* @__PURE__ */ jsx(LinkField, {
714
+ ...fieldProps,
715
+ path: t4,
716
+ value: t5,
717
+ onChange: t6,
718
+ types: t7,
719
+ pages,
720
+ newTab: t8,
721
+ singleLabel: t9,
722
+ ...t10,
723
+ ...t11
724
+ });
725
+ $[18] = fieldProps;
726
+ $[19] = pages;
727
+ $[20] = props.onChange;
728
+ $[21] = props.path;
729
+ $[22] = t10;
730
+ $[23] = t11;
731
+ $[24] = t5;
732
+ $[25] = t7;
733
+ $[26] = t8;
734
+ $[27] = t9;
735
+ $[28] = t12;
736
+ } else t12 = $[28];
737
+ return t12;
738
+ }
739
+ //#endregion
740
+ export { LinkField, LinkFieldEntry };
741
+
742
+ //# sourceMappingURL=LinkField.js.map