@panneau/fields 5.0.0-alpha.14 → 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
@@ -3,8 +3,9 @@ import { getFieldProps, isString } from "../shared/entry.js";
3
3
  import { messages } from "../shared/messages.js";
4
4
  import { TextField } from "../text/TextField.js";
5
5
  import ColorField_module_default from "./ColorField.module.js";
6
+ import { getColorPalette, getSwatchColor } from "./palette.js";
6
7
  import { c } from "react/compiler-runtime";
7
- import { usePanneauIntl } from "@panneau/ui";
8
+ import { Select, usePanneauIntl } from "@panneau/ui";
8
9
  import { jsx } from "react/jsx-runtime";
9
10
  //#region src/color/ColorField.tsx
10
11
  /**
@@ -23,49 +24,75 @@ function normalizeColor(value) {
23
24
  * The value is normalized on blur.
24
25
  */
25
26
  function ColorField(t0) {
26
- const $ = c(42);
27
+ const $ = c(51);
27
28
  let disabled;
28
29
  let inputClassName;
29
30
  let onBlur;
30
31
  let onChange;
32
+ let palette;
31
33
  let props;
32
34
  let readOnly;
33
35
  let value;
34
36
  if ($[0] !== t0) {
35
- ({value, onChange, onBlur, disabled, readOnly, inputClassName, ...props} = t0);
37
+ ({value, onChange, onBlur, disabled, readOnly, inputClassName, palette, ...props} = t0);
36
38
  $[0] = t0;
37
39
  $[1] = disabled;
38
40
  $[2] = inputClassName;
39
41
  $[3] = onBlur;
40
42
  $[4] = onChange;
41
- $[5] = props;
42
- $[6] = readOnly;
43
- $[7] = value;
43
+ $[5] = palette;
44
+ $[6] = props;
45
+ $[7] = readOnly;
46
+ $[8] = value;
44
47
  } else {
45
48
  disabled = $[1];
46
49
  inputClassName = $[2];
47
50
  onBlur = $[3];
48
51
  onChange = $[4];
49
- props = $[5];
50
- readOnly = $[6];
51
- value = $[7];
52
+ palette = $[5];
53
+ props = $[6];
54
+ readOnly = $[7];
55
+ value = $[8];
52
56
  }
53
57
  const intl = usePanneauIntl();
58
+ if (palette !== void 0 && palette !== null && palette.length > 0) {
59
+ let t1;
60
+ if ($[9] !== disabled || $[10] !== onBlur || $[11] !== onChange || $[12] !== palette || $[13] !== props || $[14] !== readOnly || $[15] !== value) {
61
+ t1 = /* @__PURE__ */ jsx(PaletteSelect, {
62
+ ...props,
63
+ palette,
64
+ value,
65
+ onChange,
66
+ onBlur,
67
+ disabled,
68
+ readOnly
69
+ });
70
+ $[9] = disabled;
71
+ $[10] = onBlur;
72
+ $[11] = onChange;
73
+ $[12] = palette;
74
+ $[13] = props;
75
+ $[14] = readOnly;
76
+ $[15] = value;
77
+ $[16] = t1;
78
+ } else t1 = $[16];
79
+ return t1;
80
+ }
54
81
  let t1;
55
- if ($[8] !== value) {
82
+ if ($[17] !== value) {
56
83
  t1 = value !== null && value !== void 0 && /^#[0-9a-f]{6}$/i.test(value);
57
- $[8] = value;
58
- $[9] = t1;
59
- } else t1 = $[9];
84
+ $[17] = value;
85
+ $[18] = t1;
86
+ } else t1 = $[18];
60
87
  const valid = t1;
61
88
  let t2;
62
- if ($[10] !== inputClassName) {
89
+ if ($[19] !== inputClassName) {
63
90
  t2 = cx(ColorField_module_default.input, inputClassName);
64
- $[10] = inputClassName;
65
- $[11] = t2;
66
- } else t2 = $[11];
91
+ $[19] = inputClassName;
92
+ $[20] = t2;
93
+ } else t2 = $[20];
67
94
  let t3;
68
- if ($[12] !== onBlur || $[13] !== onChange || $[14] !== value) {
95
+ if ($[21] !== onBlur || $[22] !== onChange || $[23] !== value) {
69
96
  t3 = () => {
70
97
  if (value !== null && value !== void 0) {
71
98
  const next = normalizeColor(value);
@@ -73,40 +100,40 @@ function ColorField(t0) {
73
100
  }
74
101
  onBlur?.();
75
102
  };
76
- $[12] = onBlur;
77
- $[13] = onChange;
78
- $[14] = value;
79
- $[15] = t3;
80
- } else t3 = $[15];
103
+ $[21] = onBlur;
104
+ $[22] = onChange;
105
+ $[23] = value;
106
+ $[24] = t3;
107
+ } else t3 = $[24];
81
108
  const t4 = valid ? value : "transparent";
82
109
  let t5;
83
- if ($[16] !== t4) {
110
+ if ($[25] !== t4) {
84
111
  t5 = { backgroundColor: t4 };
85
- $[16] = t4;
86
- $[17] = t5;
87
- } else t5 = $[17];
112
+ $[25] = t4;
113
+ $[26] = t5;
114
+ } else t5 = $[26];
88
115
  let t6;
89
- if ($[18] !== valid || $[19] !== value) {
116
+ if ($[27] !== valid || $[28] !== value) {
90
117
  t6 = valid ? value.toLowerCase() : "#000000";
91
- $[18] = valid;
92
- $[19] = value;
93
- $[20] = t6;
94
- } else t6 = $[20];
118
+ $[27] = valid;
119
+ $[28] = value;
120
+ $[29] = t6;
121
+ } else t6 = $[29];
95
122
  let t7;
96
- if ($[21] !== onChange) {
123
+ if ($[30] !== onChange) {
97
124
  t7 = (event) => onChange?.(event.target.value);
98
- $[21] = onChange;
99
- $[22] = t7;
100
- } else t7 = $[22];
125
+ $[30] = onChange;
126
+ $[31] = t7;
127
+ } else t7 = $[31];
101
128
  const t8 = disabled === true || readOnly === true;
102
129
  let t9;
103
- if ($[23] !== intl) {
130
+ if ($[32] !== intl) {
104
131
  t9 = intl.formatMessage(messages.pickColor);
105
- $[23] = intl;
106
- $[24] = t9;
107
- } else t9 = $[24];
132
+ $[32] = intl;
133
+ $[33] = t9;
134
+ } else t9 = $[33];
108
135
  let t10;
109
- if ($[25] !== t6 || $[26] !== t7 || $[27] !== t8 || $[28] !== t9) {
136
+ if ($[34] !== t6 || $[35] !== t7 || $[36] !== t8 || $[37] !== t9) {
110
137
  t10 = /* @__PURE__ */ jsx("input", {
111
138
  type: "color",
112
139
  className: ColorField_module_default.picker,
@@ -115,25 +142,25 @@ function ColorField(t0) {
115
142
  disabled: t8,
116
143
  "aria-label": t9
117
144
  });
118
- $[25] = t6;
119
- $[26] = t7;
120
- $[27] = t8;
121
- $[28] = t9;
122
- $[29] = t10;
123
- } else t10 = $[29];
145
+ $[34] = t6;
146
+ $[35] = t7;
147
+ $[36] = t8;
148
+ $[37] = t9;
149
+ $[38] = t10;
150
+ } else t10 = $[38];
124
151
  let t11;
125
- if ($[30] !== t10 || $[31] !== t5) {
152
+ if ($[39] !== t10 || $[40] !== t5) {
126
153
  t11 = /* @__PURE__ */ jsx("span", {
127
154
  className: ColorField_module_default.swatch,
128
155
  style: t5,
129
156
  children: t10
130
157
  });
131
- $[30] = t10;
132
- $[31] = t5;
133
- $[32] = t11;
134
- } else t11 = $[32];
158
+ $[39] = t10;
159
+ $[40] = t5;
160
+ $[41] = t11;
161
+ } else t11 = $[41];
135
162
  let t12;
136
- if ($[33] !== disabled || $[34] !== onChange || $[35] !== props || $[36] !== readOnly || $[37] !== t11 || $[38] !== t2 || $[39] !== t3 || $[40] !== value) {
163
+ if ($[42] !== disabled || $[43] !== onChange || $[44] !== props || $[45] !== readOnly || $[46] !== t11 || $[47] !== t2 || $[48] !== t3 || $[49] !== value) {
137
164
  t12 = /* @__PURE__ */ jsx(TextField, {
138
165
  autoComplete: "off",
139
166
  ...props,
@@ -145,41 +172,274 @@ function ColorField(t0) {
145
172
  onBlur: t3,
146
173
  prefix: t11
147
174
  });
148
- $[33] = disabled;
149
- $[34] = onChange;
150
- $[35] = props;
151
- $[36] = readOnly;
152
- $[37] = t11;
153
- $[38] = t2;
154
- $[39] = t3;
155
- $[40] = value;
156
- $[41] = t12;
157
- } else t12 = $[41];
175
+ $[42] = disabled;
176
+ $[43] = onChange;
177
+ $[44] = props;
178
+ $[45] = readOnly;
179
+ $[46] = t11;
180
+ $[47] = t2;
181
+ $[48] = t3;
182
+ $[49] = value;
183
+ $[50] = t12;
184
+ } else t12 = $[50];
158
185
  return t12;
159
186
  }
160
- /** The `color` type. */
187
+ /** The swatch of a color, decorative: an empty box when it has no color to draw. */
188
+ function Swatch(t0) {
189
+ const $ = c(4);
190
+ const { color } = t0;
191
+ let t1;
192
+ if ($[0] !== color) {
193
+ t1 = color !== null ? { backgroundColor: color } : void 0;
194
+ $[0] = color;
195
+ $[1] = t1;
196
+ } else t1 = $[1];
197
+ let t2;
198
+ if ($[2] !== t1) {
199
+ t2 = /* @__PURE__ */ jsx("span", {
200
+ className: ColorField_module_default.paletteSwatch,
201
+ style: t1
202
+ });
203
+ $[2] = t1;
204
+ $[3] = t2;
205
+ } else t2 = $[3];
206
+ return t2;
207
+ }
208
+ /**
209
+ * The colors of a palette, as a select whose options show their swatches. It can be emptied
210
+ * unless the field is required. A value outside the palette, kept from before, shows as it is.
211
+ */
212
+ function PaletteSelect(t0) {
213
+ const $ = c(65);
214
+ let autoFocus;
215
+ let className;
216
+ let controlClassName;
217
+ let description;
218
+ let descriptionClassName;
219
+ let disabled;
220
+ let errors;
221
+ let errorsClassName;
222
+ let id;
223
+ let label;
224
+ let labelClassName;
225
+ let name;
226
+ let onBlur;
227
+ let onChange;
228
+ let palette;
229
+ let placeholder;
230
+ let props;
231
+ let readOnly;
232
+ let required;
233
+ let value;
234
+ if ($[0] !== t0) {
235
+ ({palette, value, onChange, onBlur, disabled, readOnly, required, label, description, errors, name, id, autoFocus, placeholder, className, labelClassName, descriptionClassName, errorsClassName, controlClassName, ...props} = t0);
236
+ $[0] = t0;
237
+ $[1] = autoFocus;
238
+ $[2] = className;
239
+ $[3] = controlClassName;
240
+ $[4] = description;
241
+ $[5] = descriptionClassName;
242
+ $[6] = disabled;
243
+ $[7] = errors;
244
+ $[8] = errorsClassName;
245
+ $[9] = id;
246
+ $[10] = label;
247
+ $[11] = labelClassName;
248
+ $[12] = name;
249
+ $[13] = onBlur;
250
+ $[14] = onChange;
251
+ $[15] = palette;
252
+ $[16] = placeholder;
253
+ $[17] = props;
254
+ $[18] = readOnly;
255
+ $[19] = required;
256
+ $[20] = value;
257
+ } else {
258
+ autoFocus = $[1];
259
+ className = $[2];
260
+ controlClassName = $[3];
261
+ description = $[4];
262
+ descriptionClassName = $[5];
263
+ disabled = $[6];
264
+ errors = $[7];
265
+ errorsClassName = $[8];
266
+ id = $[9];
267
+ label = $[10];
268
+ labelClassName = $[11];
269
+ name = $[12];
270
+ onBlur = $[13];
271
+ onChange = $[14];
272
+ palette = $[15];
273
+ placeholder = $[16];
274
+ props = $[17];
275
+ readOnly = $[18];
276
+ required = $[19];
277
+ value = $[20];
278
+ }
279
+ const intl = usePanneauIntl();
280
+ const current = value !== null && value !== void 0 && value !== "" ? value : null;
281
+ let t1;
282
+ if ($[21] !== current || $[22] !== palette) {
283
+ t1 = current !== null && !palette.some((entry) => entry.value === current) ? [...palette, { value: current }] : palette;
284
+ $[21] = current;
285
+ $[22] = palette;
286
+ $[23] = t1;
287
+ } else t1 = $[23];
288
+ const entries = t1;
289
+ let t2;
290
+ if ($[24] !== entries) {
291
+ t2 = entries.map(_temp);
292
+ $[24] = entries;
293
+ $[25] = t2;
294
+ } else t2 = $[25];
295
+ const options = t2;
296
+ let t3;
297
+ if ($[26] !== onChange) {
298
+ t3 = (next) => onChange?.(typeof next === "string" ? next : null);
299
+ $[26] = onChange;
300
+ $[27] = t3;
301
+ } else t3 = $[27];
302
+ let t4;
303
+ if ($[28] !== errors) {
304
+ t4 = errors ?? [];
305
+ $[28] = errors;
306
+ $[29] = t4;
307
+ } else t4 = $[29];
308
+ const t5 = disabled === true || readOnly === true;
309
+ let t6;
310
+ if ($[30] !== intl || $[31] !== placeholder) {
311
+ t6 = placeholder ?? intl.formatMessage(messages.pickColor);
312
+ $[30] = intl;
313
+ $[31] = placeholder;
314
+ $[32] = t6;
315
+ } else t6 = $[32];
316
+ let t7;
317
+ if ($[33] !== props) {
318
+ t7 = props["aria-label"] !== void 0 ? { "aria-label": props["aria-label"] } : {};
319
+ $[33] = props;
320
+ $[34] = t7;
321
+ } else t7 = $[34];
322
+ let t8;
323
+ if ($[35] !== name) {
324
+ t8 = name !== void 0 ? { name } : {};
325
+ $[35] = name;
326
+ $[36] = t8;
327
+ } else t8 = $[36];
328
+ let t9;
329
+ if ($[37] !== id) {
330
+ t9 = id !== void 0 ? { id } : {};
331
+ $[37] = id;
332
+ $[38] = t9;
333
+ } else t9 = $[38];
334
+ let t10;
335
+ if ($[39] !== autoFocus) {
336
+ t10 = autoFocus !== void 0 ? { autoFocus } : {};
337
+ $[39] = autoFocus;
338
+ $[40] = t10;
339
+ } else t10 = $[40];
340
+ let t11;
341
+ if ($[41] !== onBlur) {
342
+ t11 = onBlur !== void 0 ? { onBlur } : {};
343
+ $[41] = onBlur;
344
+ $[42] = t11;
345
+ } else t11 = $[42];
346
+ let t12;
347
+ if ($[43] !== controlClassName) {
348
+ t12 = controlClassName !== void 0 ? { triggerClassName: controlClassName } : {};
349
+ $[43] = controlClassName;
350
+ $[44] = t12;
351
+ } else t12 = $[44];
352
+ let t13;
353
+ if ($[45] !== className || $[46] !== current || $[47] !== description || $[48] !== descriptionClassName || $[49] !== errorsClassName || $[50] !== label || $[51] !== labelClassName || $[52] !== options || $[53] !== required || $[54] !== t10 || $[55] !== t11 || $[56] !== t12 || $[57] !== t3 || $[58] !== t4 || $[59] !== t5 || $[60] !== t6 || $[61] !== t7 || $[62] !== t8 || $[63] !== t9) {
354
+ t13 = /* @__PURE__ */ jsx(Select, {
355
+ options,
356
+ value: current,
357
+ onChange: t3,
358
+ label,
359
+ description,
360
+ errors: t4,
361
+ isRequired: required,
362
+ isDisabled: t5,
363
+ placeholder: t6,
364
+ className,
365
+ labelClassName,
366
+ descriptionClassName,
367
+ errorsClassName,
368
+ ...t7,
369
+ ...t8,
370
+ ...t9,
371
+ ...t10,
372
+ ...t11,
373
+ ...t12
374
+ });
375
+ $[45] = className;
376
+ $[46] = current;
377
+ $[47] = description;
378
+ $[48] = descriptionClassName;
379
+ $[49] = errorsClassName;
380
+ $[50] = label;
381
+ $[51] = labelClassName;
382
+ $[52] = options;
383
+ $[53] = required;
384
+ $[54] = t10;
385
+ $[55] = t11;
386
+ $[56] = t12;
387
+ $[57] = t3;
388
+ $[58] = t4;
389
+ $[59] = t5;
390
+ $[60] = t6;
391
+ $[61] = t7;
392
+ $[62] = t8;
393
+ $[63] = t9;
394
+ $[64] = t13;
395
+ } else t13 = $[64];
396
+ return t13;
397
+ }
398
+ /** The `color` type: `settings.palette`, the colors to pick from. */
399
+ function _temp(entry_0) {
400
+ return {
401
+ value: entry_0.value,
402
+ label: entry_0.label ?? entry_0.value,
403
+ prefix: /* @__PURE__ */ jsx(Swatch, { color: getSwatchColor(entry_0) })
404
+ };
405
+ }
161
406
  function ColorFieldEntry(props) {
162
- const $ = c(6);
407
+ const $ = c(11);
163
408
  let t0;
164
- if ($[0] !== props) {
165
- t0 = getFieldProps(props);
166
- $[0] = props;
409
+ if ($[0] !== props.field) {
410
+ t0 = getColorPalette(props.field);
411
+ $[0] = props.field;
167
412
  $[1] = t0;
168
413
  } else t0 = $[1];
169
- const t1 = isString(props.value) ? props.value : null;
170
- let t2;
171
- if ($[2] !== props.onChange || $[3] !== t0 || $[4] !== t1) {
172
- t2 = /* @__PURE__ */ jsx(ColorField, {
173
- ...t0,
174
- value: t1,
175
- onChange: props.onChange
414
+ const palette = t0;
415
+ let t1;
416
+ if ($[2] !== props) {
417
+ t1 = getFieldProps(props);
418
+ $[2] = props;
419
+ $[3] = t1;
420
+ } else t1 = $[3];
421
+ const t2 = isString(props.value) ? props.value : null;
422
+ let t3;
423
+ if ($[4] !== palette) {
424
+ t3 = palette !== null ? { palette } : {};
425
+ $[4] = palette;
426
+ $[5] = t3;
427
+ } else t3 = $[5];
428
+ let t4;
429
+ if ($[6] !== props.onChange || $[7] !== t1 || $[8] !== t2 || $[9] !== t3) {
430
+ t4 = /* @__PURE__ */ jsx(ColorField, {
431
+ ...t1,
432
+ value: t2,
433
+ onChange: props.onChange,
434
+ ...t3
176
435
  });
177
- $[2] = props.onChange;
178
- $[3] = t0;
179
- $[4] = t1;
180
- $[5] = t2;
181
- } else t2 = $[5];
182
- return t2;
436
+ $[6] = props.onChange;
437
+ $[7] = t1;
438
+ $[8] = t2;
439
+ $[9] = t3;
440
+ $[10] = t4;
441
+ } else t4 = $[10];
442
+ return t4;
183
443
  }
184
444
  //#endregion
185
445
  export { ColorField, ColorFieldEntry, normalizeColor };
@@ -1 +1 @@
1
- {"version":3,"file":"ColorField.js","names":["usePanneauIntl","cx","getFieldProps","isString","messages","FieldEntryProps","TextField","TextFieldProps","styles","ColorFieldProps","Omit","normalizeColor","value","trimmed","trim","toLowerCase","digits","replace","test","map","digit","join","ColorField","t0","$","_c","disabled","inputClassName","onBlur","onChange","props","readOnly","intl","t1","undefined","valid","t2","input","t3","next","t4","t5","backgroundColor","t6","t7","event","target","t8","t9","formatMessage","pickColor","t10","picker","t11","swatch","t12","ColorFieldEntry","_c","styles"],"sources":["../../src/color/ColorField.tsx"],"sourcesContent":["import { usePanneauIntl } from '@panneau/ui';\n\nimport { cx } from '../shared/cx';\nimport { getFieldProps, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\nimport styles from './ColorField.module.css';\n\nexport type ColorFieldProps = Omit<TextFieldProps, 'type' | 'prefix' | 'maxLength'>;\n\n/**\n * Normalizes a hexadecimal color: `#` prefix, lowercase, and 3 digits expanded to 6. Returns the\n * text as is when it isn't a hexadecimal color.\n */\nexport function normalizeColor(value: string): string {\n const trimmed = value.trim().toLowerCase();\n const digits = trimmed.replace(/^#/, '');\n if (/^[0-9a-f]{3}$/.test(digits)) {\n return `#${[...digits].map((digit) => digit + digit).join('')}`;\n }\n if (/^[0-9a-f]{6}$/.test(digits) || /^[0-9a-f]{8}$/.test(digits)) {\n return `#${digits}`;\n }\n return trimmed;\n}\n\n/**\n * A color as a hexadecimal value (`#1d4ed8`): typed, or picked with the browser's color picker.\n * The value is normalized on blur.\n */\nexport function ColorField({\n value,\n onChange,\n onBlur,\n disabled,\n readOnly,\n inputClassName,\n ...props\n}: ColorFieldProps) {\n const intl = usePanneauIntl();\n const valid = value !== null && value !== undefined && /^#[0-9a-f]{6}$/i.test(value);\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n value={value}\n onChange={onChange}\n disabled={disabled}\n readOnly={readOnly}\n inputClassName={cx(styles.input, inputClassName)}\n onBlur={() => {\n if (value !== null && value !== undefined) {\n const next = normalizeColor(value);\n if (next !== value) {\n onChange?.(next === '' ? null : next);\n }\n }\n onBlur?.();\n }}\n prefix={\n <span\n className={styles.swatch}\n style={{ backgroundColor: valid ? value : 'transparent' }}\n >\n <input\n type=\"color\"\n className={styles.picker}\n value={valid ? value.toLowerCase() : '#000000'}\n onChange={(event) => onChange?.(event.target.value)}\n disabled={disabled === true || readOnly === true}\n aria-label={intl.formatMessage(messages.pickColor)}\n />\n </span>\n }\n />\n );\n}\n\n/** The `color` type. */\nexport function ColorFieldEntry(props: FieldEntryProps) {\n return (\n <ColorField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"ColorField.js","names":["Select","SelectOption","usePanneauIntl","cx","getFieldProps","isString","messages","FieldEntryProps","TextField","TextFieldProps","styles","ColorPaletteEntry","getColorPalette","getSwatchColor","ColorFieldProps","Omit","palette","normalizeColor","value","trimmed","trim","toLowerCase","digits","replace","test","map","digit","join","ColorField","t0","$","_c","disabled","inputClassName","onBlur","onChange","props","readOnly","intl","undefined","length","t1","valid","t2","input","t3","next","t4","t5","backgroundColor","t6","t7","event","target","t8","t9","formatMessage","pickColor","t10","picker","t11","swatch","t12","Swatch","color","paletteSwatch","PaletteSelect","autoFocus","className","controlClassName","description","descriptionClassName","errors","errorsClassName","id","label","labelClassName","name","placeholder","required","current","some","entry","entries","_temp","options","triggerClassName","t13","entry_0","prefix","ColorFieldEntry","field","_c","styles"],"sources":["../../src/color/ColorField.tsx"],"sourcesContent":["import { Select, type SelectOption, usePanneauIntl } from '@panneau/ui';\n\nimport { cx } from '../shared/cx';\nimport { getFieldProps, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\nimport styles from './ColorField.module.css';\nimport { type ColorPaletteEntry, getColorPalette, getSwatchColor } from './palette';\n\nexport interface ColorFieldProps extends Omit<TextFieldProps, 'type' | 'prefix' | 'maxLength'> {\n /**\n * The colors to pick from (decision 0058). With a palette, the field only offers its colors,\n * and the value is the `value` of one of them.\n */\n palette?: readonly ColorPaletteEntry[] | null;\n}\n\n/**\n * Normalizes a hexadecimal color: `#` prefix, lowercase, and 3 digits expanded to 6. Returns the\n * text as is when it isn't a hexadecimal color.\n */\nexport function normalizeColor(value: string): string {\n const trimmed = value.trim().toLowerCase();\n const digits = trimmed.replace(/^#/, '');\n if (/^[0-9a-f]{3}$/.test(digits)) {\n return `#${[...digits].map((digit) => digit + digit).join('')}`;\n }\n if (/^[0-9a-f]{6}$/.test(digits) || /^[0-9a-f]{8}$/.test(digits)) {\n return `#${digits}`;\n }\n return trimmed;\n}\n\n/**\n * A color as a hexadecimal value (`#1d4ed8`): typed, or picked with the browser's color picker.\n * The value is normalized on blur.\n */\nexport function ColorField({\n value,\n onChange,\n onBlur,\n disabled,\n readOnly,\n inputClassName,\n palette,\n ...props\n}: ColorFieldProps) {\n const intl = usePanneauIntl();\n if (palette !== undefined && palette !== null && palette.length > 0) {\n return (\n <PaletteSelect\n {...props}\n palette={palette}\n value={value}\n onChange={onChange}\n onBlur={onBlur}\n disabled={disabled}\n readOnly={readOnly}\n />\n );\n }\n const valid = value !== null && value !== undefined && /^#[0-9a-f]{6}$/i.test(value);\n return (\n <TextField\n autoComplete=\"off\"\n {...props}\n value={value}\n onChange={onChange}\n disabled={disabled}\n readOnly={readOnly}\n inputClassName={cx(styles.input, inputClassName)}\n onBlur={() => {\n if (value !== null && value !== undefined) {\n const next = normalizeColor(value);\n if (next !== value) {\n onChange?.(next === '' ? null : next);\n }\n }\n onBlur?.();\n }}\n prefix={\n <span\n className={styles.swatch}\n style={{ backgroundColor: valid ? value : 'transparent' }}\n >\n <input\n type=\"color\"\n className={styles.picker}\n value={valid ? value.toLowerCase() : '#000000'}\n onChange={(event) => onChange?.(event.target.value)}\n disabled={disabled === true || readOnly === true}\n aria-label={intl.formatMessage(messages.pickColor)}\n />\n </span>\n }\n />\n );\n}\n\n/** The swatch of a color, decorative: an empty box when it has no color to draw. */\nfunction Swatch({ color }: { color: string | null }) {\n return (\n <span\n className={styles.paletteSwatch}\n style={color !== null ? { backgroundColor: color } : undefined}\n />\n );\n}\n\n/**\n * The colors of a palette, as a select whose options show their swatches. It can be emptied\n * unless the field is required. A value outside the palette, kept from before, shows as it is.\n */\nfunction PaletteSelect({\n palette,\n value,\n onChange,\n onBlur,\n disabled,\n readOnly,\n required,\n label,\n description,\n errors,\n name,\n id,\n autoFocus,\n placeholder,\n className,\n labelClassName,\n descriptionClassName,\n errorsClassName,\n controlClassName,\n ...props\n}: Omit<ColorFieldProps, 'palette' | 'inputClassName'> & {\n palette: readonly ColorPaletteEntry[];\n}) {\n const intl = usePanneauIntl();\n const current = value !== null && value !== undefined && value !== '' ? value : null;\n const entries =\n current !== null && !palette.some((entry) => entry.value === current)\n ? [...palette, { value: current }]\n : palette;\n const options = entries.map((entry): SelectOption => ({\n value: entry.value,\n label: entry.label ?? entry.value,\n prefix: <Swatch color={getSwatchColor(entry)} />,\n }));\n return (\n <Select\n options={options}\n value={current}\n onChange={(next) => onChange?.(typeof next === 'string' ? next : null)}\n label={label}\n description={description}\n errors={errors ?? []}\n isRequired={required}\n isDisabled={disabled === true || readOnly === true}\n placeholder={placeholder ?? intl.formatMessage(messages.pickColor)}\n className={className}\n labelClassName={labelClassName}\n descriptionClassName={descriptionClassName}\n errorsClassName={errorsClassName}\n {...(props['aria-label'] !== undefined ? { 'aria-label': props['aria-label'] } : {})}\n {...(name !== undefined ? { name } : {})}\n {...(id !== undefined ? { id } : {})}\n {...(autoFocus !== undefined ? { autoFocus } : {})}\n {...(onBlur !== undefined ? { onBlur } : {})}\n {...(controlClassName !== undefined ? { triggerClassName: controlClassName } : {})}\n />\n );\n}\n\n/** The `color` type: `settings.palette`, the colors to pick from. */\nexport function ColorFieldEntry(props: FieldEntryProps) {\n const palette = getColorPalette(props.field);\n return (\n <ColorField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(palette !== null ? { palette } : {})}\n />\n );\n}\n"],"mappings":"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"}
@@ -3,12 +3,14 @@ import "./ColorField.css";
3
3
  var swatch = "panneau-color-field-swatch";
4
4
  var picker = "panneau-color-field-picker";
5
5
  var input = "panneau-color-field-input";
6
+ var paletteSwatch = "panneau-color-field-palette-swatch";
6
7
  var ColorField_module_default = {
7
8
  swatch,
8
9
  picker,
9
- input
10
+ input,
11
+ paletteSwatch
10
12
  };
11
13
  //#endregion
12
- export { ColorField_module_default as default, input, picker, swatch };
14
+ export { ColorField_module_default as default, input, paletteSwatch, picker, swatch };
13
15
 
14
16
  //# sourceMappingURL=ColorField.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ColorField.module.js","names":[],"sources":["../../src/color/ColorField.module.css"],"sourcesContent":[".swatch {\n position: relative;\n display: inline-flex;\n width: 1.5rem;\n height: 1.5rem;\n overflow: hidden;\n border: var(--panneau-border-width) solid var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-sm);\n}\n\n.swatch:focus-within {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n.picker {\n position: absolute;\n inset: -0.5rem;\n width: calc(100% + 1rem);\n height: calc(100% + 1rem);\n padding: 0;\n cursor: pointer;\n background: none;\n border: 0;\n}\n\n.picker:disabled {\n cursor: not-allowed;\n}\n\n.input {\n font-family: var(--panneau-font-family-mono);\n}\n"],"mappings":""}
1
+ {"version":3,"file":"ColorField.module.js","names":[],"sources":["../../src/color/ColorField.module.css"],"sourcesContent":[".swatch {\n position: relative;\n display: inline-flex;\n width: 1.5rem;\n height: 1.5rem;\n overflow: hidden;\n border: var(--panneau-border-width) solid var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-sm);\n}\n\n.swatch:focus-within {\n outline: var(--panneau-focus-width) solid var(--panneau-color-focus);\n outline-offset: 2px;\n}\n\n.picker {\n position: absolute;\n inset: -0.5rem;\n width: calc(100% + 1rem);\n height: calc(100% + 1rem);\n padding: 0;\n cursor: pointer;\n background: none;\n border: 0;\n}\n\n.picker:disabled {\n cursor: not-allowed;\n}\n\n.input {\n font-family: var(--panneau-font-family-mono);\n}\n\n.paletteSwatch {\n display: inline-block;\n width: 1rem;\n height: 1rem;\n vertical-align: middle;\n border: var(--panneau-border-width) solid var(--panneau-color-border-control);\n border-radius: var(--panneau-radius-sm);\n}\n"],"mappings":""}
@@ -1,2 +1,3 @@
1
1
  export { ColorField, ColorFieldEntry, type ColorFieldProps, normalizeColor } from './ColorField.js';
2
+ export { type ColorPaletteEntry, getColorPalette, getSwatchColor, isHexColor, toColorPalette, } from './palette.js';
2
3
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/color/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/color/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,KAAK,eAAe,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AACjG,OAAO,EACH,KAAK,iBAAiB,EACtB,eAAe,EACf,cAAc,EACd,UAAU,EACV,cAAc,GACjB,MAAM,WAAW,CAAC"}
@@ -1 +1,3 @@
1
- export { ColorField, ColorFieldEntry, normalizeColor } from "./ColorField.js";
1
+ import { getColorPalette, getSwatchColor, isHexColor, toColorPalette } from "./palette.js";
2
+ import { ColorField, ColorFieldEntry, normalizeColor } from "./ColorField.js";
3
+ export { ColorField, ColorFieldEntry, getColorPalette, getSwatchColor, isHexColor, normalizeColor, toColorPalette };
@@ -0,0 +1,23 @@
1
+ import type { Field } from '@panneau/protocol';
2
+ /**
3
+ * A color of a palette (`settings.palette` of a `color` field, decision 0058): `value` is what the
4
+ * field stores, `color` (hexadecimal) draws its swatch, and `label` names it. Without `color`,
5
+ * `value` is a hexadecimal color, which draws itself.
6
+ */
7
+ export interface ColorPaletteEntry {
8
+ value: string;
9
+ label?: string;
10
+ color?: string;
11
+ }
12
+ /** Whether a value is a hexadecimal color: `#1d4ed8`, `#fff` or `#1d4ed880`. */
13
+ export declare function isHexColor(value: unknown): value is string;
14
+ /**
15
+ * The colors of a palette, from a field's `settings.palette`: entries with a `value`, and the
16
+ * `label` and `color` they have. `null` when it has none.
17
+ */
18
+ export declare function toColorPalette(value: unknown): ColorPaletteEntry[] | null;
19
+ /** The palette of a `color` field (`settings.palette`), or `null` when it has none. */
20
+ export declare function getColorPalette(field: Field | null | undefined): ColorPaletteEntry[] | null;
21
+ /** The color that draws an entry's swatch: its `color`, or its value when it is hexadecimal. */
22
+ export declare function getSwatchColor(entry: ColorPaletteEntry): string | null;
23
+ //# sourceMappingURL=palette.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"palette.d.ts","sourceRoot":"","sources":["../../src/color/palette.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AAE/C;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,gFAAgF;AAChF,wBAAgB,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE1D;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,iBAAiB,EAAE,GAAG,IAAI,CAgBzE;AAED,uFAAuF;AACvF,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,GAAG,SAAS,GAAG,iBAAiB,EAAE,GAAG,IAAI,CAE3F;AAED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,KAAK,EAAE,iBAAiB,GAAG,MAAM,GAAG,IAAI,CAEtE"}
@@ -0,0 +1,34 @@
1
+ //#region src/color/palette.ts
2
+ var HEX = /^#(?:[0-9a-f]{3}|[0-9a-f]{6}|[0-9a-f]{8})$/i;
3
+ /** Whether a value is a hexadecimal color: `#1d4ed8`, `#fff` or `#1d4ed880`. */
4
+ function isHexColor(value) {
5
+ return typeof value === "string" && HEX.test(value);
6
+ }
7
+ function isRecord(value) {
8
+ return typeof value === "object" && value !== null && !Array.isArray(value);
9
+ }
10
+ /**
11
+ * The colors of a palette, from a field's `settings.palette`: entries with a `value`, and the
12
+ * `label` and `color` they have. `null` when it has none.
13
+ */
14
+ function toColorPalette(value) {
15
+ if (!Array.isArray(value)) return null;
16
+ const palette = value.flatMap((entry) => isRecord(entry) && typeof entry.value === "string" && entry.value !== "" ? [{
17
+ value: entry.value,
18
+ ...typeof entry.label === "string" ? { label: entry.label } : {},
19
+ ...isHexColor(entry.color) ? { color: entry.color } : {}
20
+ }] : []);
21
+ return palette.length > 0 ? palette : null;
22
+ }
23
+ /** The palette of a `color` field (`settings.palette`), or `null` when it has none. */
24
+ function getColorPalette(field) {
25
+ return toColorPalette(field?.settings?.palette);
26
+ }
27
+ /** The color that draws an entry's swatch: its `color`, or its value when it is hexadecimal. */
28
+ function getSwatchColor(entry) {
29
+ return entry.color ?? (isHexColor(entry.value) ? entry.value : null);
30
+ }
31
+ //#endregion
32
+ export { getColorPalette, getSwatchColor, isHexColor, toColorPalette };
33
+
34
+ //# sourceMappingURL=palette.js.map