@panneau/fields 5.0.0-alpha.1 → 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 (243) hide show
  1. package/README.md +101 -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 +11 -2
  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 +2 -2
  120. package/dist/relation/RelationField.d.ts.map +1 -1
  121. package/dist/relation/RelationField.js +509 -169
  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/repeater/RepeaterField.css +12 -11
  126. package/dist/repeater/RepeaterField.d.ts +1 -1
  127. package/dist/repeater/RepeaterField.js +118 -34
  128. package/dist/repeater/RepeaterField.js.map +1 -1
  129. package/dist/repeater/RepeaterField.module.js +9 -9
  130. package/dist/repeater/RepeaterField.module.js.map +1 -1
  131. package/dist/repeater/index.d.ts +1 -1
  132. package/dist/select/SelectField.css +1 -1
  133. package/dist/select/SelectField.d.ts +1 -1
  134. package/dist/select/SelectField.js.map +1 -1
  135. package/dist/select/SelectField.module.js +1 -1
  136. package/dist/select/index.d.ts +1 -1
  137. package/dist/shared/DefinitionField.d.ts +4 -2
  138. package/dist/shared/DefinitionField.d.ts.map +1 -1
  139. package/dist/shared/DefinitionField.js +80 -72
  140. package/dist/shared/DefinitionField.js.map +1 -1
  141. package/dist/shared/builtIn.d.ts +5 -3
  142. package/dist/shared/builtIn.d.ts.map +1 -1
  143. package/dist/shared/builtIn.js +21 -3
  144. package/dist/shared/builtIn.js.map +1 -1
  145. package/dist/shared/check.d.ts +27 -0
  146. package/dist/shared/check.d.ts.map +1 -0
  147. package/dist/shared/check.js +18 -0
  148. package/dist/shared/check.js.map +1 -0
  149. package/dist/shared/context.d.ts +28 -5
  150. package/dist/shared/context.d.ts.map +1 -1
  151. package/dist/shared/context.js +35 -19
  152. package/dist/shared/context.js.map +1 -1
  153. package/dist/shared/cx.js.map +1 -1
  154. package/dist/shared/dates.js.map +1 -1
  155. package/dist/shared/embed.d.ts +19 -0
  156. package/dist/shared/embed.d.ts.map +1 -0
  157. package/dist/shared/embed.js +14 -0
  158. package/dist/shared/embed.js.map +1 -0
  159. package/dist/shared/entry.d.ts +11 -2
  160. package/dist/shared/entry.d.ts.map +1 -1
  161. package/dist/shared/entry.js +19 -3
  162. package/dist/shared/entry.js.map +1 -1
  163. package/dist/shared/relation.js.map +1 -1
  164. package/dist/shared/types.d.ts +2 -0
  165. package/dist/shared/types.d.ts.map +1 -1
  166. package/dist/slug/SlugField.css +18 -0
  167. package/dist/slug/SlugField.d.ts +33 -5
  168. package/dist/slug/SlugField.d.ts.map +1 -1
  169. package/dist/slug/SlugField.js +346 -126
  170. package/dist/slug/SlugField.js.map +1 -1
  171. package/dist/slug/SlugField.module.js +14 -0
  172. package/dist/slug/SlugField.module.js.map +1 -0
  173. package/dist/slug/index.d.ts +1 -1
  174. package/dist/slug/index.d.ts.map +1 -1
  175. package/dist/slug/index.js +1 -1
  176. package/dist/tags/TagsField.d.ts +17 -0
  177. package/dist/tags/TagsField.d.ts.map +1 -0
  178. package/dist/tags/TagsField.js +120 -0
  179. package/dist/tags/TagsField.js.map +1 -0
  180. package/dist/tags/index.d.ts +2 -0
  181. package/dist/tags/index.d.ts.map +1 -0
  182. package/dist/tags/index.js +1 -0
  183. package/dist/tel/TelField.d.ts +11 -0
  184. package/dist/tel/TelField.d.ts.map +1 -0
  185. package/dist/tel/TelField.js +87 -0
  186. package/dist/tel/TelField.js.map +1 -0
  187. package/dist/tel/index.d.ts +2 -0
  188. package/dist/tel/index.d.ts.map +1 -0
  189. package/dist/tel/index.js +1 -0
  190. package/dist/text/TextField.d.ts +12 -4
  191. package/dist/text/TextField.d.ts.map +1 -1
  192. package/dist/text/TextField.js +104 -60
  193. package/dist/text/TextField.js.map +1 -1
  194. package/dist/text/index.d.ts +1 -1
  195. package/dist/textarea/TextAreaField.d.ts +1 -1
  196. package/dist/textarea/TextAreaField.js.map +1 -1
  197. package/dist/textarea/index.d.ts +1 -1
  198. package/dist/time/TimeField.d.ts +1 -1
  199. package/dist/time/TimeField.js +64 -10
  200. package/dist/time/TimeField.js.map +1 -1
  201. package/dist/time/index.d.ts +1 -1
  202. package/dist/upload/FilePicker.css +24 -0
  203. package/dist/upload/FilePicker.d.ts +14 -0
  204. package/dist/upload/FilePicker.d.ts.map +1 -0
  205. package/dist/upload/FilePicker.js +130 -0
  206. package/dist/upload/FilePicker.js.map +1 -0
  207. package/dist/upload/FilePicker.module.js +12 -0
  208. package/dist/upload/FilePicker.module.js.map +1 -0
  209. package/dist/upload/UploadList.css +93 -0
  210. package/dist/upload/UploadList.d.ts +18 -0
  211. package/dist/upload/UploadList.d.ts.map +1 -0
  212. package/dist/upload/UploadList.js +144 -0
  213. package/dist/upload/UploadList.js.map +1 -0
  214. package/dist/upload/UploadList.module.js +32 -0
  215. package/dist/upload/UploadList.module.js.map +1 -0
  216. package/dist/upload/files.d.ts +5 -0
  217. package/dist/upload/files.d.ts.map +1 -0
  218. package/dist/upload/files.js +26 -0
  219. package/dist/upload/files.js.map +1 -0
  220. package/dist/upload/types.d.ts +58 -0
  221. package/dist/upload/types.d.ts.map +1 -0
  222. package/dist/upload/useRejectionMessage.d.ts +4 -0
  223. package/dist/upload/useRejectionMessage.d.ts.map +1 -0
  224. package/dist/upload/useRejectionMessage.js +25 -0
  225. package/dist/upload/useRejectionMessage.js.map +1 -0
  226. package/dist/upload/useUploads.d.ts +30 -0
  227. package/dist/upload/useUploads.d.ts.map +1 -0
  228. package/dist/upload/useUploads.js +115 -0
  229. package/dist/upload/useUploads.js.map +1 -0
  230. package/dist/uppy/index.d.ts +3 -0
  231. package/dist/uppy/index.d.ts.map +1 -0
  232. package/dist/uppy/index.js +1 -0
  233. package/dist/uppy/uploader.d.ts +44 -0
  234. package/dist/uppy/uploader.d.ts.map +1 -0
  235. package/dist/uppy/uploader.js +139 -0
  236. package/dist/uppy/uploader.js.map +1 -0
  237. package/dist/url/UrlField.css +2 -2
  238. package/dist/url/UrlField.d.ts +2 -2
  239. package/dist/url/UrlField.js +69 -14
  240. package/dist/url/UrlField.js.map +1 -1
  241. package/dist/url/UrlField.module.js +1 -1
  242. package/dist/url/index.d.ts +1 -1
  243. package/package.json +69 -7
@@ -1 +1 @@
1
- export { SlugField, SlugFieldEntry, slugify } from "./SlugField.js";
1
+ export { SlugField, SlugFieldEntry, slugify, sourceText } from "./SlugField.js";
@@ -0,0 +1,17 @@
1
+ import { type TagSuggestion } from '@panneau/ui';
2
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
3
+ export interface TagsFieldProps extends FieldProps<string[]> {
4
+ placeholder?: string;
5
+ /** Tags offered as the user types. */
6
+ suggestions?: readonly TagSuggestion[];
7
+ /** Whether tags outside the suggestions are allowed. Defaults to true. */
8
+ allowCustom?: boolean;
9
+ }
10
+ /** A list of words, typed or picked among suggestions. An empty list is `null`. */
11
+ export declare function TagsField({ disabled, readOnly, required, ...props }: TagsFieldProps): import("react").JSX.Element;
12
+ /**
13
+ * The `tags` type: its `options` as suggestions, and setting `allowCustom` (true by default)
14
+ * for tags outside them.
15
+ */
16
+ export declare function TagsFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
17
+ //# sourceMappingURL=TagsField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagsField.d.ts","sourceRoot":"","sources":["../../src/tags/TagsField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,aAAa,EAAa,MAAM,aAAa,CAAC;AAG5D,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,cAAe,SAAQ,UAAU,CAAC,MAAM,EAAE,CAAC;IACxD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sCAAsC;IACtC,WAAW,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACvC,0EAA0E;IAC1E,WAAW,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,mFAAmF;AACnF,wBAAgB,SAAS,CAAC,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,KAAK,EAAE,EAAE,cAAc,+BAInF;AAOD;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,+BAiBpD"}
@@ -0,0 +1,120 @@
1
+ import { getFieldProps, getSetting, isString } from "../shared/entry.js";
2
+ import { c } from "react/compiler-runtime";
3
+ import { TagsInput } from "@panneau/ui";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/tags/TagsField.tsx
6
+ /** A list of words, typed or picked among suggestions. An empty list is `null`. */
7
+ function TagsField(t0) {
8
+ const $ = c(10);
9
+ let disabled;
10
+ let props;
11
+ let readOnly;
12
+ let required;
13
+ if ($[0] !== t0) {
14
+ ({disabled, readOnly, required, ...props} = t0);
15
+ $[0] = t0;
16
+ $[1] = disabled;
17
+ $[2] = props;
18
+ $[3] = readOnly;
19
+ $[4] = required;
20
+ } else {
21
+ disabled = $[1];
22
+ props = $[2];
23
+ readOnly = $[3];
24
+ required = $[4];
25
+ }
26
+ let t1;
27
+ if ($[5] !== disabled || $[6] !== props || $[7] !== readOnly || $[8] !== required) {
28
+ t1 = /* @__PURE__ */ jsx(TagsInput, {
29
+ ...props,
30
+ isDisabled: disabled,
31
+ isReadOnly: readOnly,
32
+ isRequired: required
33
+ });
34
+ $[5] = disabled;
35
+ $[6] = props;
36
+ $[7] = readOnly;
37
+ $[8] = required;
38
+ $[9] = t1;
39
+ } else t1 = $[9];
40
+ return t1;
41
+ }
42
+ /** The options of a field as suggestions: their values as strings. */
43
+ function toSuggestions(options) {
44
+ return options.map((option) => ({
45
+ value: String(option.value),
46
+ label: option.label
47
+ }));
48
+ }
49
+ /**
50
+ * The `tags` type: its `options` as suggestions, and setting `allowCustom` (true by default)
51
+ * for tags outside them.
52
+ */
53
+ function TagsFieldEntry(props) {
54
+ const $ = c(18);
55
+ const { field } = props;
56
+ let t0;
57
+ if ($[0] !== field) {
58
+ t0 = getSetting(field, "allowCustom", _temp);
59
+ $[0] = field;
60
+ $[1] = t0;
61
+ } else t0 = $[1];
62
+ const allowCustom = t0;
63
+ let t1;
64
+ if ($[2] !== props.value) {
65
+ t1 = Array.isArray(props.value) ? props.value.filter(isString) : null;
66
+ $[2] = props.value;
67
+ $[3] = t1;
68
+ } else t1 = $[3];
69
+ const value_0 = t1;
70
+ let t2;
71
+ if ($[4] !== props) {
72
+ t2 = getFieldProps(props);
73
+ $[4] = props;
74
+ $[5] = t2;
75
+ } else t2 = $[5];
76
+ const t3 = value_0 !== null && value_0.length > 0 ? value_0 : null;
77
+ const t4 = props.onChange;
78
+ let t5;
79
+ if ($[6] !== field.options) {
80
+ t5 = field.options ?? [];
81
+ $[6] = field.options;
82
+ $[7] = t5;
83
+ } else t5 = $[7];
84
+ let t6;
85
+ if ($[8] !== t5) {
86
+ t6 = toSuggestions(t5);
87
+ $[8] = t5;
88
+ $[9] = t6;
89
+ } else t6 = $[9];
90
+ let t7;
91
+ if ($[10] !== allowCustom) {
92
+ t7 = allowCustom !== void 0 ? { allowCustom } : {};
93
+ $[10] = allowCustom;
94
+ $[11] = t7;
95
+ } else t7 = $[11];
96
+ let t8;
97
+ if ($[12] !== props.onChange || $[13] !== t2 || $[14] !== t3 || $[15] !== t6 || $[16] !== t7) {
98
+ t8 = /* @__PURE__ */ jsx(TagsField, {
99
+ ...t2,
100
+ value: t3,
101
+ onChange: t4,
102
+ suggestions: t6,
103
+ ...t7
104
+ });
105
+ $[12] = props.onChange;
106
+ $[13] = t2;
107
+ $[14] = t3;
108
+ $[15] = t6;
109
+ $[16] = t7;
110
+ $[17] = t8;
111
+ } else t8 = $[17];
112
+ return t8;
113
+ }
114
+ function _temp(value) {
115
+ return typeof value === "boolean";
116
+ }
117
+ //#endregion
118
+ export { TagsField, TagsFieldEntry };
119
+
120
+ //# sourceMappingURL=TagsField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TagsField.js","names":["Option","TagSuggestion","TagsInput","getFieldProps","getSetting","isString","FieldEntryProps","FieldProps","TagsFieldProps","placeholder","suggestions","allowCustom","TagsField","t0","$","_c","disabled","props","readOnly","required","t1","toSuggestions","options","map","option","value","String","label","TagsFieldEntry","field","_temp","Array","isArray","filter","value_0","t2","t3","length","t4","onChange","t5","t6","t7","undefined","t8","_c"],"sources":["../../src/tags/TagsField.tsx"],"sourcesContent":["import type { Option } from '@panneau/protocol';\nimport { type TagSuggestion, TagsInput } from '@panneau/ui';\n\nimport { getFieldProps, getSetting, isString } from '../shared/entry';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface TagsFieldProps extends FieldProps<string[]> {\n placeholder?: string;\n /** Tags offered as the user types. */\n suggestions?: readonly TagSuggestion[];\n /** Whether tags outside the suggestions are allowed. Defaults to true. */\n allowCustom?: boolean;\n}\n\n/** A list of words, typed or picked among suggestions. An empty list is `null`. */\nexport function TagsField({ disabled, readOnly, required, ...props }: TagsFieldProps) {\n return (\n <TagsInput {...props} isDisabled={disabled} isReadOnly={readOnly} isRequired={required} />\n );\n}\n\n/** The options of a field as suggestions: their values as strings. */\nfunction toSuggestions(options: readonly Option[]): TagSuggestion[] {\n return options.map((option) => ({ value: String(option.value), label: option.label }));\n}\n\n/**\n * The `tags` type: its `options` as suggestions, and setting `allowCustom` (true by default)\n * for tags outside them.\n */\nexport function TagsFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const allowCustom = getSetting(\n field,\n 'allowCustom',\n (value): value is boolean => typeof value === 'boolean',\n );\n const value = Array.isArray(props.value) ? props.value.filter(isString) : null;\n return (\n <TagsField\n {...getFieldProps(props)}\n value={value !== null && value.length > 0 ? value : null}\n onChange={props.onChange}\n suggestions={toSuggestions(field.options ?? [])}\n {...(allowCustom !== undefined ? { allowCustom } : {})}\n />\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { TagsField, TagsFieldEntry, type TagsFieldProps } from './TagsField.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tags/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,KAAK,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export { TagsField, TagsFieldEntry } from "./TagsField.js";
@@ -0,0 +1,11 @@
1
+ import type { FieldEntryProps } from '../shared/types.js';
2
+ import { type TextFieldProps } from '../text/TextField.js';
3
+ export type TelFieldProps = Omit<TextFieldProps, 'type' | 'inputMode'>;
4
+ /**
5
+ * A phone number, as typed, with the phone keyboard on phones. Spaces around it are removed on
6
+ * blur. A `pattern` rule constrains its format when a project needs one.
7
+ */
8
+ export declare function TelField({ value, onChange, onBlur, ...props }: TelFieldProps): import("react").JSX.Element;
9
+ /** The `tel` type. */
10
+ export declare function TelFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
11
+ //# sourceMappingURL=TelField.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelField.d.ts","sourceRoot":"","sources":["../../src/tel/TelField.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAa,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnE,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,cAAc,EAAE,MAAM,GAAG,WAAW,CAAC,CAAC;AAEvE;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,KAAK,EAAE,EAAE,aAAa,+BAkB5E;AAED,sBAAsB;AACtB,wBAAgB,aAAa,CAAC,KAAK,EAAE,eAAe,+BAQnD"}
@@ -0,0 +1,87 @@
1
+ import { getFieldProps, isString } from "../shared/entry.js";
2
+ import { TextField } from "../text/TextField.js";
3
+ import { c } from "react/compiler-runtime";
4
+ import { jsx } from "react/jsx-runtime";
5
+ //#region src/tel/TelField.tsx
6
+ /**
7
+ * A phone number, as typed, with the phone keyboard on phones. Spaces around it are removed on
8
+ * blur. A `pattern` rule constrains its format when a project needs one.
9
+ */
10
+ function TelField(t0) {
11
+ const $ = c(14);
12
+ let onBlur;
13
+ let onChange;
14
+ let props;
15
+ let value;
16
+ if ($[0] !== t0) {
17
+ ({value, onChange, onBlur, ...props} = t0);
18
+ $[0] = t0;
19
+ $[1] = onBlur;
20
+ $[2] = onChange;
21
+ $[3] = props;
22
+ $[4] = value;
23
+ } else {
24
+ onBlur = $[1];
25
+ onChange = $[2];
26
+ props = $[3];
27
+ value = $[4];
28
+ }
29
+ let t1;
30
+ if ($[5] !== onBlur || $[6] !== onChange || $[7] !== value) {
31
+ t1 = () => {
32
+ const trimmed = value?.trim() ?? null;
33
+ if (trimmed !== value) onChange?.(trimmed === "" ? null : trimmed);
34
+ onBlur?.();
35
+ };
36
+ $[5] = onBlur;
37
+ $[6] = onChange;
38
+ $[7] = value;
39
+ $[8] = t1;
40
+ } else t1 = $[8];
41
+ let t2;
42
+ if ($[9] !== onChange || $[10] !== props || $[11] !== t1 || $[12] !== value) {
43
+ t2 = /* @__PURE__ */ jsx(TextField, {
44
+ autoComplete: "tel",
45
+ ...props,
46
+ type: "tel",
47
+ inputMode: "tel",
48
+ value,
49
+ onChange,
50
+ onBlur: t1
51
+ });
52
+ $[9] = onChange;
53
+ $[10] = props;
54
+ $[11] = t1;
55
+ $[12] = value;
56
+ $[13] = t2;
57
+ } else t2 = $[13];
58
+ return t2;
59
+ }
60
+ /** The `tel` type. */
61
+ function TelFieldEntry(props) {
62
+ const $ = c(6);
63
+ let t0;
64
+ if ($[0] !== props) {
65
+ t0 = getFieldProps(props);
66
+ $[0] = props;
67
+ $[1] = t0;
68
+ } else t0 = $[1];
69
+ const t1 = isString(props.value) ? props.value : null;
70
+ let t2;
71
+ if ($[2] !== props.onChange || $[3] !== t0 || $[4] !== t1) {
72
+ t2 = /* @__PURE__ */ jsx(TelField, {
73
+ ...t0,
74
+ value: t1,
75
+ onChange: props.onChange
76
+ });
77
+ $[2] = props.onChange;
78
+ $[3] = t0;
79
+ $[4] = t1;
80
+ $[5] = t2;
81
+ } else t2 = $[5];
82
+ return t2;
83
+ }
84
+ //#endregion
85
+ export { TelField, TelFieldEntry };
86
+
87
+ //# sourceMappingURL=TelField.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelField.js","names":["getFieldProps","isString","FieldEntryProps","TextField","TextFieldProps","TelFieldProps","Omit","TelField","t0","$","_c","onBlur","onChange","props","value","t1","trimmed","trim","t2","TelFieldEntry","_c"],"sources":["../../src/tel/TelField.tsx"],"sourcesContent":["import { getFieldProps, isString } from '../shared/entry';\nimport type { FieldEntryProps } from '../shared/types';\nimport { TextField, type TextFieldProps } from '../text/TextField';\n\nexport type TelFieldProps = Omit<TextFieldProps, 'type' | 'inputMode'>;\n\n/**\n * A phone number, as typed, with the phone keyboard on phones. Spaces around it are removed on\n * blur. A `pattern` rule constrains its format when a project needs one.\n */\nexport function TelField({ value, onChange, onBlur, ...props }: TelFieldProps) {\n return (\n <TextField\n autoComplete=\"tel\"\n {...props}\n type=\"tel\"\n inputMode=\"tel\"\n value={value}\n onChange={onChange}\n onBlur={() => {\n const trimmed = value?.trim() ?? null;\n if (trimmed !== value) {\n onChange?.(trimmed === '' ? null : trimmed);\n }\n onBlur?.();\n }}\n />\n );\n}\n\n/** The `tel` type. */\nexport function TelFieldEntry(props: FieldEntryProps) {\n return (\n <TelField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n />\n );\n}\n"],"mappings":";;;;;;;;;AAUA,SAAOO,SAAAC,IAAA;CAAA,MAAAC,IAAAC,EAAA,EAAA;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAC;CAAA,IAAAL,EAAA,OAAAD,IAAA;EAAkB,CAAA,CAAAM,OAAAF,UAAAD,QAAA,GAAAE,SAAAL;EAAoDC,EAAA,KAAAD;EAAAC,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAI;EAAAJ,EAAA,KAAAK;CAAA,OAAA;EAAAH,SAAAF,EAAA;EAAAG,WAAAH,EAAA;EAAAI,QAAAJ,EAAA;EAAAK,QAAAL,EAAA;CAAA;CAAA,IAAAM;CAAA,IAAAN,EAAA,OAAAE,UAAAF,EAAA,OAAAG,YAAAH,EAAA,OAAAK,OAAA;EASzDC,WAAA;GACJ,MAAAC,UAAgBF,OAAKG,KAAe,KAApB;GAChB,IAAID,YAAYF,OACZF,WAAWI,YAAY,KAAZ,OAAAA,OAA+B;GAE9CL,SAAS;EAAC;EACbF,EAAA,KAAAE;EAAAF,EAAA,KAAAG;EAAAH,EAAA,KAAAK;EAAAL,EAAA,KAAAM;CAAA,OAAAA,KAAAN,EAAA;CAAA,IAAAS;CAAA,IAAAT,EAAA,OAAAG,YAAAH,EAAA,QAAAI,SAAAJ,EAAA,QAAAM,MAAAN,EAAA,QAAAK,OAAA;EAbLI,KAAA,oBAAC,WAAD;GACiB,cAAA;GAAK,GACdL;GACC,MAAA;GACK,WAAA;GACHC;GACGF;GACF,QAAAG;EAMP,CAAA;EACHN,EAAA,KAAAG;EAAAH,EAAA,MAAAI;EAAAJ,EAAA,MAAAM;EAAAN,EAAA,MAAAK;EAAAL,EAAA,MAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAdFS;AAcE;;AAKV,SAAOC,cAAAN,OAAA;CAAA,MAAAJ,IAAAC,EAAA,CAAA;CAAA,IAAAF;CAAA,IAAAC,EAAA,OAAAI,OAAA;EAGSL,KAAAR,cAAca,KAAK;EAACJ,EAAA,KAAAI;EAAAJ,EAAA,KAAAD;CAAA,OAAAA,KAAAC,EAAA;CACjB,MAAAM,KAAAd,SAASY,MAAKC,KAA2B,IAAjBD,MAAKC,QAA7B;CAA0C,IAAAI;CAAA,IAAAT,EAAA,OAAAI,MAAAD,YAAAH,EAAA,OAAAD,MAAAC,EAAA,OAAAM,IAAA;EAFrDG,KAAA,oBAAC,UAAD;GAAS,GACDV;GACG,OAAAO;GACG,UAAAF,MAAKD;EAAS,CAAA;EAC1BH,EAAA,KAAAI,MAAAD;EAAAH,EAAA,KAAAD;EAAAC,EAAA,KAAAM;EAAAN,EAAA,KAAAS;CAAA,OAAAA,KAAAT,EAAA;CAAA,OAJFS;AAIE"}
@@ -0,0 +1,2 @@
1
+ export { TelField, TelFieldEntry, type TelFieldProps } from './TelField.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tel/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1 @@
1
+ export { TelField, TelFieldEntry } from "./TelField.js";
@@ -1,5 +1,5 @@
1
- import type { ReactNode } from 'react';
2
- import type { FieldEntryProps, FieldProps } from '../shared/types';
1
+ import { type ReactNode } from 'react';
2
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
3
3
  export interface TextFieldProps extends FieldProps<string> {
4
4
  placeholder?: string;
5
5
  /** Shows a count of characters against this maximum. It doesn't stop typing. */
@@ -12,13 +12,21 @@ export interface TextFieldProps extends FieldProps<string> {
12
12
  type?: 'text' | 'email' | 'url' | 'tel' | 'password' | 'search';
13
13
  inputMode?: 'text' | 'email' | 'url' | 'tel' | 'search' | 'numeric' | 'decimal' | 'none';
14
14
  autoComplete?: string;
15
+ /**
16
+ * A secret, such as an access key: typed in a password input, hidden until a button shows it,
17
+ * and never filled in by the browser.
18
+ */
19
+ secret?: boolean;
15
20
  controlClassName?: string;
16
21
  inputClassName?: string;
17
22
  }
18
23
  /** The description of a text field, with its character count. */
19
24
  export declare function useCountedDescription(description: ReactNode, value: string | null | undefined, maxLength: number | undefined): ReactNode;
20
25
  /** A single-line text. An empty text is `null`. */
21
- export declare function TextField({ value, onChange, description, maxLength, disabled, readOnly, required, ...props }: TextFieldProps): import("react").JSX.Element;
22
- /** The `text` type: settings `prefix` and `suffix`, and a character count from the `max` rule. */
26
+ export declare function TextField({ value, onChange, description, maxLength, disabled, readOnly, required, secret, ...props }: TextFieldProps): import("react").JSX.Element;
27
+ /**
28
+ * The `text` type: settings `prefix`, `suffix` and `secret`, and a character count from the `max`
29
+ * rule.
30
+ */
23
31
  export declare function TextFieldEntry(props: FieldEntryProps): import("react").JSX.Element;
24
32
  //# sourceMappingURL=TextField.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../src/text/TextField.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAMvC,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,cAAe,SAAQ,UAAU,CAAC,MAAM,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CACjC,WAAW,EAAE,SAAS,EACtB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC9B,SAAS,CAiBX;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,GAAG,KAAK,EACX,EAAE,cAAc,+BAahB;AAED,kGAAkG;AAClG,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,+BAepD"}
1
+ {"version":3,"file":"TextField.d.ts","sourceRoot":"","sources":["../../src/text/TextField.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,SAAS,EAAY,MAAM,OAAO,CAAC;AAMjD,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAEnE,MAAM,WAAW,cAAe,SAAQ,UAAU,CAAC,MAAM,CAAC;IACtD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mDAAmD;IACnD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,kDAAkD;IAClD,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,6CAA6C;IAC7C,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,UAAU,GAAG,QAAQ,CAAC;IAChE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACzF,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,iEAAiE;AACjE,wBAAgB,qBAAqB,CACjC,WAAW,EAAE,SAAS,EACtB,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,EAChC,SAAS,EAAE,MAAM,GAAG,SAAS,GAC9B,SAAS,CAiBX;AAED,mDAAmD;AACnD,wBAAgB,SAAS,CAAC,EACtB,KAAK,EACL,QAAQ,EACR,WAAW,EACX,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,QAAQ,EACR,MAAc,EACd,GAAG,KAAK,EACX,EAAE,cAAc,+BAkChB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,eAAe,+BAiBpD"}
@@ -1,8 +1,10 @@
1
- import { getFieldProps, getRuleNumber, getSetting, isString } from "../shared/entry.js";
1
+ import { getFieldProps, getRuleNumber, getSetting, isBoolean, isString } from "../shared/entry.js";
2
2
  import { messages } from "../shared/messages.js";
3
3
  import { c } from "react/compiler-runtime";
4
- import { TextInput, usePanneauIntl } from "@panneau/ui";
4
+ import { IconButton, TextInput, usePanneauIntl } from "@panneau/ui";
5
+ import { useState } from "react";
5
6
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
7
+ import { Eye, EyeOff } from "lucide-react";
6
8
  //#region src/text/TextField.tsx
7
9
  /** The description of a text field, with its character count. */
8
10
  function useCountedDescription(description, value, maxLength) {
@@ -43,7 +45,7 @@ function useCountedDescription(description, value, maxLength) {
43
45
  }
44
46
  /** A single-line text. An empty text is `null`. */
45
47
  function TextField(t0) {
46
- const $ = c(19);
48
+ const $ = c(26);
47
49
  let description;
48
50
  let disabled;
49
51
  let maxLength;
@@ -51,9 +53,10 @@ function TextField(t0) {
51
53
  let props;
52
54
  let readOnly;
53
55
  let required;
56
+ let t1;
54
57
  let value;
55
58
  if ($[0] !== t0) {
56
- ({value, onChange, description, maxLength, disabled, readOnly, required, ...props} = t0);
59
+ ({value, onChange, description, maxLength, disabled, readOnly, required, secret: t1, ...props} = t0);
57
60
  $[0] = t0;
58
61
  $[1] = description;
59
62
  $[2] = disabled;
@@ -62,7 +65,8 @@ function TextField(t0) {
62
65
  $[5] = props;
63
66
  $[6] = readOnly;
64
67
  $[7] = required;
65
- $[8] = value;
68
+ $[8] = t1;
69
+ $[9] = value;
66
70
  } else {
67
71
  description = $[1];
68
72
  disabled = $[2];
@@ -71,41 +75,72 @@ function TextField(t0) {
71
75
  props = $[5];
72
76
  readOnly = $[6];
73
77
  required = $[7];
74
- value = $[8];
78
+ t1 = $[8];
79
+ value = $[9];
75
80
  }
81
+ const secret = t1 === void 0 ? false : t1;
82
+ const intl = usePanneauIntl();
76
83
  const shownDescription = useCountedDescription(description, value, maxLength);
77
- const t1 = value ?? "";
84
+ const [shown, setShown] = useState(false);
78
85
  let t2;
79
- if ($[9] !== onChange) {
80
- t2 = (next) => onChange?.(next === "" ? null : next);
81
- $[9] = onChange;
82
- $[10] = t2;
83
- } else t2 = $[10];
84
- let t3;
85
- if ($[11] !== disabled || $[12] !== props || $[13] !== readOnly || $[14] !== required || $[15] !== shownDescription || $[16] !== t1 || $[17] !== t2) {
86
- t3 = /* @__PURE__ */ jsx(TextInput, {
86
+ if ($[10] !== disabled || $[11] !== intl || $[12] !== secret || $[13] !== shown) {
87
+ t2 = secret ? {
88
+ type: shown ? "text" : "password",
89
+ autoComplete: "new-password",
90
+ spellCheck: "false",
91
+ suffix: /* @__PURE__ */ jsx(IconButton, {
92
+ icon: shown ? EyeOff : Eye,
93
+ label: intl.formatMessage(shown ? messages.hideSecret : messages.showSecret),
94
+ size: "sm",
95
+ "aria-pressed": shown,
96
+ isDisabled: disabled,
97
+ onPress: () => setShown(!shown)
98
+ })
99
+ } : {};
100
+ $[10] = disabled;
101
+ $[11] = intl;
102
+ $[12] = secret;
103
+ $[13] = shown;
104
+ $[14] = t2;
105
+ } else t2 = $[14];
106
+ const secretProps = t2;
107
+ const t3 = value ?? "";
108
+ let t4;
109
+ if ($[15] !== onChange) {
110
+ t4 = (next) => onChange?.(next === "" ? null : next);
111
+ $[15] = onChange;
112
+ $[16] = t4;
113
+ } else t4 = $[16];
114
+ let t5;
115
+ if ($[17] !== disabled || $[18] !== props || $[19] !== readOnly || $[20] !== required || $[21] !== secretProps || $[22] !== shownDescription || $[23] !== t3 || $[24] !== t4) {
116
+ t5 = /* @__PURE__ */ jsx(TextInput, {
87
117
  ...props,
88
- value: t1,
89
- onChange: t2,
118
+ ...secretProps,
119
+ value: t3,
120
+ onChange: t4,
90
121
  description: shownDescription,
91
122
  isDisabled: disabled,
92
123
  isReadOnly: readOnly,
93
124
  isRequired: required
94
125
  });
95
- $[11] = disabled;
96
- $[12] = props;
97
- $[13] = readOnly;
98
- $[14] = required;
99
- $[15] = shownDescription;
100
- $[16] = t1;
101
- $[17] = t2;
102
- $[18] = t3;
103
- } else t3 = $[18];
104
- return t3;
126
+ $[17] = disabled;
127
+ $[18] = props;
128
+ $[19] = readOnly;
129
+ $[20] = required;
130
+ $[21] = secretProps;
131
+ $[22] = shownDescription;
132
+ $[23] = t3;
133
+ $[24] = t4;
134
+ $[25] = t5;
135
+ } else t5 = $[25];
136
+ return t5;
105
137
  }
106
- /** The `text` type: settings `prefix` and `suffix`, and a character count from the `max` rule. */
138
+ /**
139
+ * The `text` type: settings `prefix`, `suffix` and `secret`, and a character count from the `max`
140
+ * rule.
141
+ */
107
142
  function TextFieldEntry(props) {
108
- const $ = c(21);
143
+ const $ = c(24);
109
144
  const { field } = props;
110
145
  let t0;
111
146
  if ($[0] !== field) {
@@ -129,49 +164,58 @@ function TextFieldEntry(props) {
129
164
  } else t2 = $[5];
130
165
  const max = t2;
131
166
  let t3;
132
- if ($[6] !== props) {
133
- t3 = getFieldProps(props);
134
- $[6] = props;
167
+ if ($[6] !== field) {
168
+ t3 = getSetting(field, "secret", isBoolean) ?? false;
169
+ $[6] = field;
135
170
  $[7] = t3;
136
171
  } else t3 = $[7];
137
- const t4 = isString(props.value) ? props.value : null;
138
- let t5;
139
- if ($[8] !== max) {
140
- t5 = max !== void 0 ? { maxLength: max } : {};
141
- $[8] = max;
142
- $[9] = t5;
143
- } else t5 = $[9];
172
+ const secret = t3;
173
+ let t4;
174
+ if ($[8] !== props) {
175
+ t4 = getFieldProps(props);
176
+ $[8] = props;
177
+ $[9] = t4;
178
+ } else t4 = $[9];
179
+ const t5 = isString(props.value) ? props.value : null;
144
180
  let t6;
145
- if ($[10] !== prefix) {
146
- t6 = prefix !== void 0 ? { prefix } : {};
147
- $[10] = prefix;
181
+ if ($[10] !== max) {
182
+ t6 = max !== void 0 ? { maxLength: max } : {};
183
+ $[10] = max;
148
184
  $[11] = t6;
149
185
  } else t6 = $[11];
150
186
  let t7;
151
- if ($[12] !== suffix) {
152
- t7 = suffix !== void 0 ? { suffix } : {};
153
- $[12] = suffix;
187
+ if ($[12] !== prefix) {
188
+ t7 = prefix !== void 0 ? { prefix } : {};
189
+ $[12] = prefix;
154
190
  $[13] = t7;
155
191
  } else t7 = $[13];
156
192
  let t8;
157
- if ($[14] !== props.onChange || $[15] !== t3 || $[16] !== t4 || $[17] !== t5 || $[18] !== t6 || $[19] !== t7) {
158
- t8 = /* @__PURE__ */ jsx(TextField, {
159
- ...t3,
160
- value: t4,
193
+ if ($[14] !== suffix) {
194
+ t8 = suffix !== void 0 ? { suffix } : {};
195
+ $[14] = suffix;
196
+ $[15] = t8;
197
+ } else t8 = $[15];
198
+ let t9;
199
+ if ($[16] !== props.onChange || $[17] !== secret || $[18] !== t4 || $[19] !== t5 || $[20] !== t6 || $[21] !== t7 || $[22] !== t8) {
200
+ t9 = /* @__PURE__ */ jsx(TextField, {
201
+ ...t4,
202
+ value: t5,
161
203
  onChange: props.onChange,
162
- ...t5,
163
204
  ...t6,
164
- ...t7
205
+ ...t7,
206
+ ...t8,
207
+ secret
165
208
  });
166
- $[14] = props.onChange;
167
- $[15] = t3;
168
- $[16] = t4;
169
- $[17] = t5;
170
- $[18] = t6;
171
- $[19] = t7;
172
- $[20] = t8;
173
- } else t8 = $[20];
174
- return t8;
209
+ $[16] = props.onChange;
210
+ $[17] = secret;
211
+ $[18] = t4;
212
+ $[19] = t5;
213
+ $[20] = t6;
214
+ $[21] = t7;
215
+ $[22] = t8;
216
+ $[23] = t9;
217
+ } else t9 = $[23];
218
+ return t9;
175
219
  }
176
220
  //#endregion
177
221
  export { TextField, TextFieldEntry, useCountedDescription };
@@ -1 +1 @@
1
- {"version":3,"file":"TextField.js","names":["count","description","shownDescription","disabled","readOnly","required","_c","_Fragment"],"sources":["../../src/text/TextField.tsx"],"sourcesContent":["import type { ReactNode } from 'react';\n\nimport { TextInput, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getRuleNumber, getSetting, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface TextFieldProps extends FieldProps<string> {\n placeholder?: string;\n /** Shows a count of characters against this maximum. It doesn't stop typing. */\n maxLength?: number;\n /** Content before the text, inside the control. */\n prefix?: ReactNode;\n /** Content after the text, inside the control. */\n suffix?: ReactNode;\n /** Type of the input. Defaults to `text`. */\n type?: 'text' | 'email' | 'url' | 'tel' | 'password' | 'search';\n inputMode?: 'text' | 'email' | 'url' | 'tel' | 'search' | 'numeric' | 'decimal' | 'none';\n autoComplete?: string;\n controlClassName?: string;\n inputClassName?: string;\n}\n\n/** The description of a text field, with its character count. */\nexport function useCountedDescription(\n description: ReactNode,\n value: string | null | undefined,\n maxLength: number | undefined,\n): ReactNode {\n const intl = usePanneauIntl();\n if (maxLength === undefined) {\n return description;\n }\n const count = intl.formatMessage(messages.characterCount, {\n count: (value ?? '').length,\n max: maxLength,\n });\n if (description === undefined || description === null) {\n return count;\n }\n return (\n <>\n {description} <span>{count}</span>\n </>\n );\n}\n\n/** A single-line text. An empty text is `null`. */\nexport function TextField({\n value,\n onChange,\n description,\n maxLength,\n disabled,\n readOnly,\n required,\n ...props\n}: TextFieldProps) {\n const shownDescription = useCountedDescription(description, value, maxLength);\n return (\n <TextInput\n {...props}\n value={value ?? ''}\n onChange={(next) => onChange?.(next === '' ? null : next)}\n description={shownDescription}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/** The `text` type: settings `prefix` and `suffix`, and a character count from the `max` rule. */\nexport function TextFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const prefix = getSetting(field, 'prefix', isString);\n const suffix = getSetting(field, 'suffix', isString);\n const max = getRuleNumber(field, 'max');\n return (\n <TextField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(max !== undefined ? { maxLength: max } : {})}\n {...(prefix !== undefined ? { prefix } : {})}\n {...(suffix !== undefined ? { suffix } : {})}\n />\n );\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"TextField.js","names":["Eye","EyeOff","ReactNode","useState","IconButton","TextInput","usePanneauIntl","getFieldProps","getRuleNumber","getSetting","isBoolean","isString","messages","FieldEntryProps","FieldProps","TextFieldProps","placeholder","maxLength","prefix","suffix","type","inputMode","autoComplete","secret","controlClassName","inputClassName","useCountedDescription","description","value","$","_c","intl","undefined","t0","formatMessage","characterCount","count","length","max","t1","t2","TextField","disabled","onChange","props","readOnly","required","shownDescription","shown","setShown","const","spellCheck","hideSecret","showSecret","secretProps","t3","t4","next","t5","TextFieldEntry","field","t6","t7","t8","t9","_c","_Fragment"],"sources":["../../src/text/TextField.tsx"],"sourcesContent":["import { Eye, EyeOff } from 'lucide-react';\nimport { type ReactNode, useState } from 'react';\n\nimport { IconButton, TextInput, usePanneauIntl } from '@panneau/ui';\n\nimport { getFieldProps, getRuleNumber, getSetting, isBoolean, isString } from '../shared/entry';\nimport { messages } from '../shared/messages';\nimport type { FieldEntryProps, FieldProps } from '../shared/types';\n\nexport interface TextFieldProps extends FieldProps<string> {\n placeholder?: string;\n /** Shows a count of characters against this maximum. It doesn't stop typing. */\n maxLength?: number;\n /** Content before the text, inside the control. */\n prefix?: ReactNode;\n /** Content after the text, inside the control. */\n suffix?: ReactNode;\n /** Type of the input. Defaults to `text`. */\n type?: 'text' | 'email' | 'url' | 'tel' | 'password' | 'search';\n inputMode?: 'text' | 'email' | 'url' | 'tel' | 'search' | 'numeric' | 'decimal' | 'none';\n autoComplete?: string;\n /**\n * A secret, such as an access key: typed in a password input, hidden until a button shows it,\n * and never filled in by the browser.\n */\n secret?: boolean;\n controlClassName?: string;\n inputClassName?: string;\n}\n\n/** The description of a text field, with its character count. */\nexport function useCountedDescription(\n description: ReactNode,\n value: string | null | undefined,\n maxLength: number | undefined,\n): ReactNode {\n const intl = usePanneauIntl();\n if (maxLength === undefined) {\n return description;\n }\n const count = intl.formatMessage(messages.characterCount, {\n count: (value ?? '').length,\n max: maxLength,\n });\n if (description === undefined || description === null) {\n return count;\n }\n return (\n <>\n {description} <span>{count}</span>\n </>\n );\n}\n\n/** A single-line text. An empty text is `null`. */\nexport function TextField({\n value,\n onChange,\n description,\n maxLength,\n disabled,\n readOnly,\n required,\n secret = false,\n ...props\n}: TextFieldProps) {\n const intl = usePanneauIntl();\n const shownDescription = useCountedDescription(description, value, maxLength);\n const [shown, setShown] = useState(false);\n const secretProps = secret\n ? {\n type: shown ? ('text' as const) : ('password' as const),\n // Keeps password managers from filling in the user's own password\n autoComplete: 'new-password',\n spellCheck: 'false',\n suffix: (\n <IconButton\n icon={shown ? EyeOff : Eye}\n label={intl.formatMessage(shown ? messages.hideSecret : messages.showSecret)}\n size=\"sm\"\n aria-pressed={shown}\n isDisabled={disabled}\n onPress={() => setShown(!shown)}\n />\n ),\n }\n : {};\n return (\n <TextInput\n {...props}\n {...secretProps}\n value={value ?? ''}\n onChange={(next) => onChange?.(next === '' ? null : next)}\n description={shownDescription}\n isDisabled={disabled}\n isReadOnly={readOnly}\n isRequired={required}\n />\n );\n}\n\n/**\n * The `text` type: settings `prefix`, `suffix` and `secret`, and a character count from the `max`\n * rule.\n */\nexport function TextFieldEntry(props: FieldEntryProps) {\n const { field } = props;\n const prefix = getSetting(field, 'prefix', isString);\n const suffix = getSetting(field, 'suffix', isString);\n const max = getRuleNumber(field, 'max');\n const secret = getSetting(field, 'secret', isBoolean) ?? false;\n return (\n <TextField\n {...getFieldProps(props)}\n value={isString(props.value) ? props.value : null}\n onChange={props.onChange}\n {...(max !== undefined ? { maxLength: max } : {})}\n {...(prefix !== undefined ? { prefix } : {})}\n {...(suffix !== undefined ? { suffix } : {})}\n secret={secret}\n />\n );\n}\n"],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- export { TextField, TextFieldEntry, type TextFieldProps } from './TextField';
1
+ export { TextField, TextFieldEntry, type TextFieldProps } from './TextField.js';
2
2
  //# sourceMappingURL=index.d.ts.map
@@ -1,4 +1,4 @@
1
- import type { FieldEntryProps, FieldProps } from '../shared/types';
1
+ import type { FieldEntryProps, FieldProps } from '../shared/types.js';
2
2
  export interface TextAreaFieldProps extends FieldProps<string> {
3
3
  placeholder?: string;
4
4
  /** Shows a count of characters against this maximum. It doesn't stop typing. */