@plitzi/sdk-elements 0.37.2 → 0.37.4

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 (158) hide show
  1. package/CHANGELOG.md +1180 -0
  2. package/dist/Component/ComponentProvider.mjs +10 -5
  3. package/dist/Element/JsxManager.mjs +1 -0
  4. package/dist/Element/PluginRemote.d.ts +3 -1
  5. package/dist/Element/PluginRemote.mjs +9 -9
  6. package/dist/Element/helpers/elementConstants.mjs +28 -0
  7. package/dist/Element/helpers/elementUtils.mjs +1 -1
  8. package/dist/Element/helpers/loadComponent.d.ts +6 -1
  9. package/dist/Element/helpers/loadComponent.mjs +7 -7
  10. package/dist/Element/helpers/pluginSelector.mjs +1 -0
  11. package/dist/Element/hooks/useElementDataSource.mjs +23 -16
  12. package/dist/Element/hooks/useElementInternal.mjs +60 -52
  13. package/dist/Element/hooks/useInternalClassName.mjs +19 -18
  14. package/dist/Element/hooks/useKeyTriggers.d.ts +18 -0
  15. package/dist/Element/hooks/useKeyTriggers.mjs +36 -0
  16. package/dist/Element/hooks/useRootElementInteractions.mjs +65 -56
  17. package/dist/Element/hooks/useRscData.mjs +20 -15
  18. package/dist/dataSource/GlobalSources.mjs +114 -80
  19. package/dist/dataSource/getSourcesByElementId.mjs +2 -2
  20. package/dist/elements/advanced/BlockJsx/BlockJsx.mjs +1 -1
  21. package/dist/elements/advanced/NodeHtml/declaration.d.ts +1 -1
  22. package/dist/elements/advanced/NodeHtml/index.d.ts +1 -1
  23. package/dist/elements/basic/Button/Button.d.ts +10 -3
  24. package/dist/elements/basic/Button/Button.mjs +5 -5
  25. package/dist/elements/basic/Button/Settings.d.ts +2 -1
  26. package/dist/elements/basic/Button/Settings.mjs +14 -7
  27. package/dist/elements/basic/Button/declaration.d.ts +8 -3
  28. package/dist/elements/basic/Button/declaration.mjs +14 -6
  29. package/dist/elements/basic/Button/index.d.ts +8 -3
  30. package/dist/elements/basic/Dropdown/Dropdown.mjs +48 -39
  31. package/dist/elements/basic/Dropdown/declaration.d.ts +3 -0
  32. package/dist/elements/basic/Dropdown/declaration.mjs +9 -3
  33. package/dist/elements/basic/Dropdown/index.d.ts +3 -0
  34. package/dist/elements/basic/Dropdown/useDropdown.d.ts +6 -1
  35. package/dist/elements/basic/Dropdown/useDropdown.mjs +58 -41
  36. package/dist/elements/basic/Dropdown/useDropdownTrigger.d.ts +26 -0
  37. package/dist/elements/basic/Dropdown/useDropdownTrigger.mjs +30 -0
  38. package/dist/elements/basic/Heading/declaration.d.ts +9 -6
  39. package/dist/elements/basic/Heading/declaration.mjs +17 -9
  40. package/dist/elements/basic/Heading/index.d.ts +9 -6
  41. package/dist/elements/basic/Link/Link.mjs +4 -1
  42. package/dist/elements/basic/Link/Settings.d.ts +2 -1
  43. package/dist/elements/basic/Link/Settings.mjs +31 -24
  44. package/dist/elements/basic/Link/declaration.d.ts +5 -1
  45. package/dist/elements/basic/Link/declaration.mjs +16 -3
  46. package/dist/elements/basic/Link/index.d.ts +5 -1
  47. package/dist/elements/basic/Markdown/declaration.d.ts +1 -1
  48. package/dist/elements/basic/Markdown/declaration.mjs +1 -1
  49. package/dist/elements/basic/Markdown/index.d.ts +1 -1
  50. package/dist/elements/basic/RichText/declaration.d.ts +3 -0
  51. package/dist/elements/basic/RichText/declaration.mjs +8 -3
  52. package/dist/elements/basic/RichText/index.d.ts +3 -0
  53. package/dist/elements/basic/Text/declaration.d.ts +1 -1
  54. package/dist/elements/basic/Text/declaration.mjs +1 -1
  55. package/dist/elements/basic/Text/index.d.ts +1 -1
  56. package/dist/elements/basic/ThemeToggle/ThemeToggle.mjs +3 -0
  57. package/dist/elements/basic/ThemeToggle/declaration.d.ts +3 -0
  58. package/dist/elements/basic/ThemeToggle/declaration.mjs +4 -3
  59. package/dist/elements/basic/ThemeToggle/index.d.ts +3 -0
  60. package/dist/elements/declarations/index.d.ts +217 -17
  61. package/dist/elements/declarations/index.mjs +24 -22
  62. package/dist/elements/form/Form/declaration.d.ts +3 -0
  63. package/dist/elements/form/Form/declaration.mjs +4 -3
  64. package/dist/elements/form/Form/index.d.ts +3 -0
  65. package/dist/elements/form/FormControl/FormControl.d.ts +18 -6
  66. package/dist/elements/form/FormControl/FormControl.mjs +135 -127
  67. package/dist/elements/form/FormControl/Settings.d.ts +3 -1
  68. package/dist/elements/form/FormControl/Settings.mjs +73 -57
  69. package/dist/elements/form/FormControl/components/Label.d.ts +3 -1
  70. package/dist/elements/form/FormControl/components/Label.mjs +20 -18
  71. package/dist/elements/form/FormControl/components/visuallyHidden.d.ts +6 -0
  72. package/dist/elements/form/FormControl/components/visuallyHidden.mjs +14 -0
  73. package/dist/elements/form/FormControl/declaration.d.ts +5 -0
  74. package/dist/elements/form/FormControl/declaration.mjs +46 -30
  75. package/dist/elements/form/FormControl/hocs/withFieldValue.mjs +68 -61
  76. package/dist/elements/form/FormControl/index.d.ts +5 -0
  77. package/dist/elements/form/FormControl/inputs/Checkbox.d.ts +6 -1
  78. package/dist/elements/form/FormControl/inputs/Checkbox.mjs +5 -3
  79. package/dist/elements/form/FormControl/inputs/Input.d.ts +8 -1
  80. package/dist/elements/form/FormControl/inputs/Input.mjs +44 -38
  81. package/dist/elements/form/FormControl/inputs/Select.d.ts +6 -1
  82. package/dist/elements/form/FormControl/inputs/Select.mjs +12 -10
  83. package/dist/elements/form/FormControl/inputs/Textarea.d.ts +8 -1
  84. package/dist/elements/form/FormControl/inputs/Textarea.mjs +26 -21
  85. package/dist/elements/form/FormControl/inputs/useFocusWhenShown.d.ts +7 -0
  86. package/dist/elements/form/FormControl/inputs/useFocusWhenShown.mjs +9 -0
  87. package/dist/elements/index.d.ts +3 -1
  88. package/dist/elements/index.mjs +16 -14
  89. package/dist/elements/internal/LayoutContainer/declaration.d.ts +3 -0
  90. package/dist/elements/internal/LayoutContainer/declaration.mjs +15 -3
  91. package/dist/elements/internal/LayoutContainer/index.d.ts +3 -0
  92. package/dist/elements/media/FontAwesome/FontAwesome.d.ts +8 -1
  93. package/dist/elements/media/FontAwesome/FontAwesome.mjs +12 -5
  94. package/dist/elements/media/FontAwesome/Settings.d.ts +2 -1
  95. package/dist/elements/media/FontAwesome/Settings.mjs +29 -22
  96. package/dist/elements/media/FontAwesome/declaration.d.ts +1 -0
  97. package/dist/elements/media/FontAwesome/index.d.ts +1 -0
  98. package/dist/elements/media/Image/Image.d.ts +13 -2
  99. package/dist/elements/media/Image/Image.mjs +25 -25
  100. package/dist/elements/media/Image/Settings.d.ts +3 -1
  101. package/dist/elements/media/Image/Settings.mjs +29 -15
  102. package/dist/elements/media/Image/declaration.d.ts +7 -1
  103. package/dist/elements/media/Image/declaration.mjs +16 -3
  104. package/dist/elements/media/Image/index.d.ts +7 -1
  105. package/dist/elements/provider/ApiContainer/ApiContainer.mjs +145 -137
  106. package/dist/elements/provider/ApiContainer/declaration.d.ts +14 -1
  107. package/dist/elements/provider/ApiContainer/declaration.mjs +41 -4
  108. package/dist/elements/provider/ApiContainer/helpers/isEmptyAnswer.d.ts +16 -0
  109. package/dist/elements/provider/ApiContainer/helpers/isEmptyAnswer.mjs +4 -0
  110. package/dist/elements/provider/ApiContainer/helpers/queryInput.d.ts +5 -0
  111. package/dist/elements/provider/ApiContainer/helpers/queryInput.mjs +12 -0
  112. package/dist/elements/provider/ApiContainer/index.d.ts +14 -1
  113. package/dist/elements/provider/Channel/Channel.d.ts +26 -0
  114. package/dist/elements/provider/Channel/Channel.mjs +92 -0
  115. package/dist/elements/provider/Channel/Settings.d.ts +9 -0
  116. package/dist/elements/provider/Channel/Settings.mjs +38 -0
  117. package/dist/elements/provider/Channel/declaration.d.ts +138 -0
  118. package/dist/elements/provider/Channel/declaration.mjs +125 -0
  119. package/dist/elements/provider/Channel/index.d.ts +137 -0
  120. package/dist/elements/provider/Channel/index.mjs +6 -0
  121. package/dist/elements/settings.mjs +25 -23
  122. package/dist/elements/structure/Container/Container.d.ts +16 -2
  123. package/dist/elements/structure/Container/Container.mjs +18 -9
  124. package/dist/elements/structure/Container/Settings.d.ts +4 -2
  125. package/dist/elements/structure/Container/Settings.mjs +110 -69
  126. package/dist/elements/structure/Container/declaration.d.ts +12 -1
  127. package/dist/elements/structure/Container/declaration.mjs +35 -3
  128. package/dist/elements/structure/Container/index.d.ts +6 -1
  129. package/dist/elements/structure/Container/index.mjs +3 -3
  130. package/dist/elements/structure/DialogContainer/DialogContainer.mjs +123 -100
  131. package/dist/elements/structure/List/declaration.d.ts +4 -0
  132. package/dist/elements/structure/List/declaration.mjs +7 -3
  133. package/dist/elements/structure/List/index.d.ts +4 -0
  134. package/dist/elements/structure/ModalContainer/ModalContainer.mjs +92 -80
  135. package/dist/elements/structure/ModalContainer/metadataFromText.d.ts +1 -0
  136. package/dist/elements/structure/ModalContainer/metadataFromText.mjs +10 -0
  137. package/dist/elements/structure/ModalContainer/useModalDialog.d.ts +20 -0
  138. package/dist/elements/structure/ModalContainer/useModalDialog.mjs +31 -0
  139. package/dist/elements/structure/Pagination/Pagination.d.ts +6 -1
  140. package/dist/elements/structure/Pagination/Pagination.mjs +23 -21
  141. package/dist/elements/structure/Pagination/Settings.d.ts +2 -1
  142. package/dist/elements/structure/Pagination/Settings.mjs +16 -9
  143. package/dist/elements/structure/Pagination/declaration.d.ts +5 -0
  144. package/dist/elements/structure/Pagination/declaration.mjs +7 -3
  145. package/dist/elements/structure/Pagination/index.d.ts +5 -0
  146. package/dist/elements/structure/TabContainer/TabContainer.mjs +19 -17
  147. package/dist/elements/structure/TabContainer/TabContainerBody/TabContainerBody.mjs +8 -6
  148. package/dist/elements/structure/TabContainer/TabContainerContext.d.ts +2 -0
  149. package/dist/elements/structure/TabContainer/TabContainerHeader/TabContainerHeader.mjs +18 -14
  150. package/dist/elements/structure/TabContainer/TabContainerItem/TabContainerItem.d.ts +5 -1
  151. package/dist/elements/structure/TabContainer/TabContainerItem/TabContainerItem.mjs +48 -13
  152. package/dist/elements/structure/TabContainer/TabContainerItem/declaration.d.ts +1 -1
  153. package/dist/index.d.ts +220 -16
  154. package/dist/index.mjs +20 -17
  155. package/dist/realtime/useChannel.d.ts +35 -0
  156. package/dist/realtime/useChannel.mjs +57 -0
  157. package/package.json +67 -11
  158. package/dist/elements/media/FontAwesome/FontAwesome.stories-paused.d.ts +0 -1
@@ -1,6 +1,6 @@
1
- import { elementDeclaration as e } from "@plitzi/sdk-shared/authoring/declare";
1
+ import { elementDeclaration as e, valuesOf as t } from "@plitzi/sdk-shared/authoring/declare";
2
2
  //#region src/elements/form/FormControl/declaration.ts
3
- var t = {
3
+ var n = {
4
4
  width: "100%",
5
5
  display: "flex",
6
6
  "align-items": "center",
@@ -29,7 +29,7 @@ var t = {
29
29
  "line-height": "20px",
30
30
  outline: "none",
31
31
  position: "relative"
32
- }, n = {
32
+ }, r = {
33
33
  display: "flex",
34
34
  cursor: "pointer",
35
35
  "font-weight": "600",
@@ -37,15 +37,29 @@ var t = {
37
37
  "line-height": "18px",
38
38
  color: "#6b7280",
39
39
  "user-select": "none"
40
- }, r = {
41
- ...n,
42
- "margin-bottom": "4px"
43
40
  }, i = {
41
+ ...r,
42
+ "margin-bottom": "4px"
43
+ }, a = {
44
44
  display: "block",
45
45
  color: "red",
46
46
  "margin-top": "4px"
47
- }, a = e()({
47
+ }, o = e()({
48
48
  type: "formControl",
49
+ attributeValues: { subType: t()([
50
+ "text",
51
+ "number",
52
+ "email",
53
+ "password",
54
+ "date",
55
+ "time",
56
+ "checkbox",
57
+ "switch",
58
+ "select",
59
+ "textarea",
60
+ "hidden",
61
+ "color"
62
+ ]) },
49
63
  triggers: { onChange: {
50
64
  action: "onChange",
51
65
  title: "On Change",
@@ -61,9 +75,11 @@ var t = {
61
75
  subType: "text",
62
76
  name: "",
63
77
  label: "Label",
78
+ hideLabel: !1,
64
79
  placeholder: "",
65
80
  defaultValue: "",
66
81
  autoComplete: !0,
82
+ autoFocus: !1,
67
83
  disabled: !1,
68
84
  options: [],
69
85
  required: !0,
@@ -120,8 +136,8 @@ var t = {
120
136
  style: {
121
137
  base: {},
122
138
  input: { default: {} },
123
- label: { default: r },
124
- error: { default: i }
139
+ label: { default: i },
140
+ error: { default: a }
125
141
  }
126
142
  },
127
143
  text: {
@@ -129,9 +145,9 @@ var t = {
129
145
  displayMode: "desktop",
130
146
  style: {
131
147
  base: { default: {} },
132
- input: { default: t },
133
- label: { default: r },
134
- error: { default: i }
148
+ input: { default: n },
149
+ label: { default: i },
150
+ error: { default: a }
135
151
  }
136
152
  },
137
153
  password: {
@@ -139,9 +155,9 @@ var t = {
139
155
  displayMode: "desktop",
140
156
  style: {
141
157
  base: { default: {} },
142
- input: { default: t },
143
- label: { default: r },
144
- error: { default: i }
158
+ input: { default: n },
159
+ label: { default: i },
160
+ error: { default: a }
145
161
  }
146
162
  },
147
163
  number: {
@@ -149,9 +165,9 @@ var t = {
149
165
  displayMode: "desktop",
150
166
  style: {
151
167
  base: { default: {} },
152
- input: { default: t },
153
- label: { default: r },
154
- error: { default: i }
168
+ input: { default: n },
169
+ label: { default: i },
170
+ error: { default: a }
155
171
  }
156
172
  },
157
173
  email: {
@@ -159,9 +175,9 @@ var t = {
159
175
  displayMode: "desktop",
160
176
  style: {
161
177
  base: { default: {} },
162
- input: { default: t },
163
- label: { default: r },
164
- error: { default: i }
178
+ input: { default: n },
179
+ label: { default: i },
180
+ error: { default: a }
165
181
  }
166
182
  },
167
183
  textarea: {
@@ -169,9 +185,9 @@ var t = {
169
185
  displayMode: "desktop",
170
186
  style: {
171
187
  base: { default: {} },
172
- input: { default: t },
173
- label: { default: r },
174
- error: { default: i }
188
+ input: { default: n },
189
+ label: { default: i },
190
+ error: { default: a }
175
191
  }
176
192
  },
177
193
  checkbox: {
@@ -185,8 +201,8 @@ var t = {
185
201
  "margin-left": "0px",
186
202
  "margin-right": "4px"
187
203
  } },
188
- label: { default: n },
189
- error: { default: i }
204
+ label: { default: r },
205
+ error: { default: a }
190
206
  }
191
207
  },
192
208
  select: {
@@ -195,11 +211,11 @@ var t = {
195
211
  style: {
196
212
  base: { default: {} },
197
213
  input: { default: {
198
- ...t,
214
+ ...n,
199
215
  cursor: "pointer"
200
216
  } },
201
- label: r,
202
- error: { default: i }
217
+ label: i,
218
+ error: { default: a }
203
219
  }
204
220
  }
205
221
  }
@@ -208,4 +224,4 @@ var t = {
208
224
  }
209
225
  });
210
226
  //#endregion
211
- export { a as default };
227
+ export { o as default };
@@ -1,97 +1,104 @@
1
1
  import { validateField as e } from "../helpers/validateField.mjs";
2
- import { useCallback as t, useEffect as n, useMemo as r } from "react";
3
- import i from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
4
- import { get as a } from "@plitzi/plitzi-ui/helpers";
5
- import { createStoreHook as o } from "@plitzi/nexus/react";
6
- import { getDisplayName as s } from "@plitzi/sdk-shared/helpers/utils";
7
- import { jsx as c } from "react/jsx-runtime";
2
+ import { useCallback as t, useEffect as n, useMemo as r, useState as i } from "react";
3
+ import a from "@plitzi/sdk-shared/hooks/usePlitziServiceContext";
4
+ import { get as o } from "@plitzi/plitzi-ui/helpers";
5
+ import { createStoreHook as s } from "@plitzi/nexus/react";
6
+ import { getDisplayName as c } from "@plitzi/sdk-shared/helpers/utils";
7
+ import { jsx as l } from "react/jsx-runtime";
8
8
  //#region src/elements/form/FormControl/hocs/withFieldValue.tsx
9
- var l = (l) => {
10
- let u = (s) => {
11
- let { ref: u, name: d = "", subType: f = "text", defaultValue: p = "", required: m = !0, requiredMessage: h = "", minLength: g = 0, minLengthMessage: _ = "", maxLength: v = 0, maxLengthMessage: y = "", formatMessage: b = "", pattern: x = "", patternMessage: S = "", matches: C = "", matchesMessage: w = "", previewError: T = !1 } = s, { settings: { previewMode: E } } = i(), { useStore: D } = o(), [O] = D("runtime.sources.form");
12
- if (!O) return /* @__PURE__ */ c(l, { ...s });
13
- let { setFieldValue: k, setFieldError: A, registerValidator: j, unregisterValidator: M, errors: N, values: P } = O, F = r(() => a(P, d, p), [
9
+ var u = (u) => {
10
+ let d = (c) => {
11
+ let { ref: d, name: f = "", subType: p = "text", defaultValue: m = "", required: h = !0, requiredMessage: g = "", minLength: _ = 0, minLengthMessage: v = "", maxLength: y = 0, maxLengthMessage: b = "", formatMessage: x = "", pattern: S = "", patternMessage: C = "", matches: w = "", matchesMessage: T = "", previewError: E = !1 } = c, { settings: { previewMode: D } } = a(), { useStore: O } = s(), [k] = O("runtime.sources.form"), [A, j] = i(m), [M, N] = i(m);
12
+ !k && M !== m && (N(m), j(m));
13
+ let P = k?.values, F = r(() => k ? o(P, f, m) : A, [
14
+ k,
14
15
  P,
15
- d,
16
- p
17
- ]), I = r(() => !E && T ? "This is an error message" : N[d], [
16
+ f,
17
+ m,
18
+ A
19
+ ]), I = r(() => !D && E ? "This is an error message" : k?.errors[f] ?? "", [
20
+ D,
18
21
  E,
19
- T,
20
- N,
21
- d
22
+ k?.errors,
23
+ f
22
24
  ]), L = r(() => ({
23
- required: m,
24
- requiredMessage: h,
25
- minLength: g,
26
- minLengthMessage: _,
27
- maxLength: v,
28
- maxLengthMessage: y,
29
- type: f,
30
- formatMessage: b,
31
- pattern: x,
32
- patternMessage: S,
33
- matches: C,
34
- matchesMessage: w
25
+ required: h,
26
+ requiredMessage: g,
27
+ minLength: _,
28
+ minLengthMessage: v,
29
+ maxLength: y,
30
+ maxLengthMessage: b,
31
+ type: p,
32
+ formatMessage: x,
33
+ pattern: S,
34
+ patternMessage: C,
35
+ matches: w,
36
+ matchesMessage: T
35
37
  }), [
36
- m,
37
38
  h,
38
39
  g,
39
40
  _,
40
41
  v,
41
42
  y,
42
- f,
43
43
  b,
44
+ p,
44
45
  x,
45
46
  S,
46
47
  C,
47
- w
48
- ]);
48
+ w,
49
+ T
50
+ ]), R = k?.registerValidator, z = k?.unregisterValidator, B = k?.setFieldValue, V = k?.setFieldError;
49
51
  n(() => {
50
- if (d) return j(d, (t) => e(a(t, d, p), L, t)), () => M(d);
52
+ if (f && R && z) return R(f, (t) => e(o(t, f, m), L, t)), () => z(f);
51
53
  }, [
52
- d,
53
- p,
54
+ f,
55
+ m,
54
56
  L,
55
- j,
56
- M
57
+ R,
58
+ z
57
59
  ]), n(() => {
58
- p && F && d && k(d, F);
60
+ B && m && F && f && B(f, F);
59
61
  }, [
60
- p,
61
- d,
62
- k,
62
+ m,
63
+ f,
64
+ B,
63
65
  F
64
66
  ]);
65
- let R = t((e) => {
66
- e.target.type === "radio" || e.target.type === "checkbox" || f === "switch" ? k(d, e.target.checked) : k(d, e.target.value);
67
+ let H = t((e) => {
68
+ let t = e.target.type === "radio" || e.target.type === "checkbox" || p === "switch";
69
+ if (!B) {
70
+ j(t ? String(e.target.checked) : e.target.value);
71
+ return;
72
+ }
73
+ B(f, t ? e.target.checked : e.target.value);
67
74
  }, [
68
- k,
69
- d,
70
- f
71
- ]), z = t(() => A(d, e(F, L, P)), [
75
+ B,
76
+ f,
77
+ p
78
+ ]), U = t(() => V?.(f, e(F, L, P ?? {})), [
72
79
  F,
73
80
  L,
74
81
  P,
75
- d,
76
- A
82
+ f,
83
+ V
77
84
  ]);
78
- return r(() => /* @__PURE__ */ c(l, {
79
- ...s,
80
- ref: u,
85
+ return r(() => /* @__PURE__ */ l(u, {
86
+ ...c,
87
+ ref: d,
81
88
  value: F,
82
89
  error: I,
83
- handleChange: R,
84
- handleValidate: z
90
+ handleChange: H,
91
+ handleValidate: U
85
92
  }), [
86
- s,
87
- u,
93
+ c,
94
+ d,
88
95
  I,
89
96
  F,
90
- R,
91
- z
97
+ H,
98
+ U
92
99
  ]);
93
100
  };
94
- return u.displayName = `withFieldValue(${s(l)})`, u;
101
+ return d.displayName = `withFieldValue(${c(u)})`, d;
95
102
  };
96
103
  //#endregion
97
- export { l as default };
104
+ export { u as default };
@@ -16,9 +16,11 @@ declare const FormControl: {
16
16
  readonly subType: "text";
17
17
  readonly name: "";
18
18
  readonly label: "Label";
19
+ readonly hideLabel: false;
19
20
  readonly placeholder: "";
20
21
  readonly defaultValue: "";
21
22
  readonly autoComplete: true;
23
+ readonly autoFocus: false;
22
24
  readonly disabled: false;
23
25
  readonly options: readonly [];
24
26
  readonly required: true;
@@ -495,6 +497,9 @@ declare const FormControl: {
495
497
  settings: {};
496
498
  };
497
499
  type: "formControl";
500
+ attributeValues: {
501
+ readonly subType: readonly string[];
502
+ };
498
503
  triggers: {
499
504
  readonly onChange: {
500
505
  readonly action: "onChange";
@@ -9,6 +9,11 @@ export type CheckboxProps = {
9
9
  disabled?: boolean;
10
10
  onChange?: (e: ChangeEvent<HTMLInputElement>) => void;
11
11
  onValidate?: () => void;
12
+ /**
13
+ * The id of the message saying what is wrong with the value, while something is: the field is then marked invalid
14
+ * and described by it, so a screen reader or a browser agent hears why the form would not send.
15
+ */
16
+ errorId?: string;
12
17
  };
13
- declare const Checkbox: ({ className, id, name, placeholder, value, required, disabled, onChange, onValidate }: CheckboxProps) => import('react').JSX.Element;
18
+ declare const Checkbox: ({ className, id, name, placeholder, value, required, disabled, onChange, onValidate, errorId }: CheckboxProps) => import('react').JSX.Element;
14
19
  export default Checkbox;
@@ -2,11 +2,13 @@ import { useCallback as e } from "react";
2
2
  import { jsx as t } from "react/jsx-runtime";
3
3
  import n from "clsx";
4
4
  //#region src/elements/form/FormControl/inputs/Checkbox.tsx
5
- var r = ({ className: r = "", id: i = "", name: a = "", placeholder: o = "", value: s = "", required: c = !0, disabled: l = !1, onChange: u, onValidate: d }) => {
6
- let f = e(() => d?.(), [d]);
5
+ var r = ({ className: r = "", id: i = "", name: a = "", placeholder: o = "", value: s = "", required: c = !0, disabled: l = !1, onChange: u, onValidate: d, errorId: f }) => {
6
+ let p = e(() => d?.(), [d]);
7
7
  return /* @__PURE__ */ t("input", {
8
8
  className: n("form-control__checkbox-container", r),
9
9
  id: i,
10
+ "aria-invalid": f ? !0 : void 0,
11
+ "aria-describedby": f,
10
12
  name: a,
11
13
  type: "checkbox",
12
14
  placeholder: o,
@@ -14,7 +16,7 @@ var r = ({ className: r = "", id: i = "", name: a = "", placeholder: o = "", val
14
16
  required: c,
15
17
  disabled: l,
16
18
  onChange: u,
17
- onBlur: f
19
+ onBlur: p
18
20
  });
19
21
  };
20
22
  //#endregion
@@ -6,6 +6,8 @@ export type InputProps = {
6
6
  value?: string;
7
7
  type?: string;
8
8
  autoComplete?: boolean;
9
+ /** Takes the focus while true: as it becomes true, whether on mount or as the field is shown again. */
10
+ autoFocus?: boolean;
9
11
  required?: boolean;
10
12
  /** `0` for none. The one rule the browser enforces itself, and by the kindest means: it stops the typing. */
11
13
  maxLength?: number;
@@ -13,6 +15,11 @@ export type InputProps = {
13
15
  readOnly?: boolean;
14
16
  onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;
15
17
  onValidate?: () => void;
18
+ /**
19
+ * The id of the message saying what is wrong with the value, while something is: the field is then marked invalid
20
+ * and described by it, so a screen reader or a browser agent hears why the form would not send.
21
+ */
22
+ errorId?: string;
16
23
  };
17
- declare const Input: ({ className, id, name, placeholder, value, type, autoComplete, required, maxLength, disabled, readOnly, onChange, onValidate }: InputProps) => import('react').JSX.Element;
24
+ declare const Input: ({ className, id, name, placeholder, value, type, autoComplete, autoFocus, required, maxLength, disabled, readOnly, onChange, onValidate, errorId }: InputProps) => import('react').JSX.Element;
18
25
  export default Input;
@@ -1,43 +1,49 @@
1
- import { useCallback as e, useRef as t, useState as n } from "react";
2
- import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
- import a from "clsx";
1
+ import e from "./useFocusWhenShown.mjs";
2
+ import { useCallback as t, useRef as n, useState as r } from "react";
3
+ import { jsx as i, jsxs as a } from "react/jsx-runtime";
4
+ import o from "clsx";
4
5
  //#region src/elements/form/FormControl/inputs/Input.tsx
5
- var o = ({ className: o = "", id: s = "", name: c = "", placeholder: l = "", value: u = "", type: d = "text", autoComplete: f = !1, required: p = !0, maxLength: m = 0, disabled: h = !1, readOnly: g = !1, onChange: _, onValidate: v }) => {
6
- let [y, b] = n(!1), x = t(null), S = e(() => b((e) => !e), [b]), C = e(() => {
7
- x.current?.focus();
8
- }, [x]), w = e(() => v?.(), [v]);
9
- return /* @__PURE__ */ i("div", {
10
- className: a("form-control__input-container", o),
11
- onClick: C,
12
- children: [
13
- /* @__PURE__ */ r("input", {
14
- ref: x,
15
- className: "input-container__input",
16
- id: s,
17
- name: c,
18
- type: d === "password" && y ? "text" : d,
19
- placeholder: l,
20
- value: u,
21
- required: p,
22
- maxLength: m > 0 ? m : void 0,
23
- autoComplete: f ? "on" : "off",
24
- disabled: h,
25
- readOnly: g,
26
- onChange: _,
27
- onBlur: w
28
- }),
29
- d === "password" && !y && /* @__PURE__ */ r("div", {
30
- className: "form-input__icon",
31
- onClick: S,
32
- children: /* @__PURE__ */ r("i", { className: "fa-solid fa-eye" })
33
- }),
34
- d === "password" && y && /* @__PURE__ */ r("div", {
35
- className: "form-input__icon",
36
- onClick: S,
37
- children: /* @__PURE__ */ r("i", { className: "fa-solid fa-eye-slash" })
6
+ var s = ({ className: s = "", id: c = "", name: l = "", placeholder: u = "", value: d = "", type: f = "text", autoComplete: p = !1, autoFocus: m = !1, required: h = !0, maxLength: g = 0, disabled: _ = !1, readOnly: v = !1, onChange: y, onValidate: b, errorId: x }) => {
7
+ let [S, C] = r(!1), w = n(null);
8
+ e(w, m);
9
+ let T = t(() => C((e) => !e), [C]), E = t((e) => {
10
+ let t = w.current;
11
+ if (t?.focus(), f === "color" && t && e.target !== t) try {
12
+ t.showPicker();
13
+ } catch {}
14
+ }, [w, f]), D = t(() => b?.(), [b]);
15
+ return /* @__PURE__ */ a("div", {
16
+ className: o("form-control__input-container", s),
17
+ onClick: E,
18
+ children: [/* @__PURE__ */ i("input", {
19
+ ref: w,
20
+ className: "input-container__input",
21
+ id: c,
22
+ "aria-invalid": x ? !0 : void 0,
23
+ "aria-describedby": x,
24
+ name: l,
25
+ type: f === "password" && S ? "text" : f,
26
+ placeholder: u,
27
+ value: d,
28
+ required: h,
29
+ maxLength: g > 0 ? g : void 0,
30
+ autoComplete: p ? "on" : "off",
31
+ disabled: _,
32
+ readOnly: v,
33
+ onChange: y,
34
+ onBlur: D
35
+ }), f === "password" && /* @__PURE__ */ i("button", {
36
+ type: "button",
37
+ className: "form-input__icon",
38
+ "aria-pressed": S,
39
+ title: "Show password",
40
+ onClick: T,
41
+ children: /* @__PURE__ */ i("i", {
42
+ className: S ? "fa-solid fa-eye-slash" : "fa-solid fa-eye",
43
+ "aria-hidden": "true"
38
44
  })
39
- ]
45
+ })]
40
46
  });
41
47
  };
42
48
  //#endregion
43
- export { o as default };
49
+ export { s as default };
@@ -12,6 +12,11 @@ export type SelectProps = {
12
12
  disabled?: boolean;
13
13
  onChange?: (e: ChangeEvent<HTMLSelectElement>) => void;
14
14
  onValidate?: () => void;
15
+ /**
16
+ * The id of the message saying what is wrong with the value, while something is: the field is then marked invalid
17
+ * and described by it, so a screen reader or a browser agent hears why the form would not send.
18
+ */
19
+ errorId?: string;
15
20
  };
16
- declare const Select: ({ id, name, options, placeholder, value, className, disabled, onChange, onValidate }: SelectProps) => import('react').JSX.Element;
21
+ declare const Select: ({ id, name, options, placeholder, value, className, disabled, onChange, onValidate, errorId }: SelectProps) => import('react').JSX.Element;
17
22
  export default Select;
@@ -2,12 +2,12 @@ import { useCallback as e, useMemo as t, useRef as n } from "react";
2
2
  import { jsx as r, jsxs as i } from "react/jsx-runtime";
3
3
  import a from "clsx";
4
4
  //#region src/elements/form/FormControl/inputs/Select.tsx
5
- var o = ({ id: o = "", name: s, options: c = [], placeholder: l = "", value: u = "", className: d = "", disabled: f = !1, onChange: p, onValidate: m }) => {
6
- let h = n(null), g = e(() => {
7
- h.current?.click();
8
- }, [h]), _ = e((e) => {
5
+ var o = ({ id: o = "", name: s, options: c = [], placeholder: l = "", value: u = "", className: d = "", disabled: f = !1, onChange: p, onValidate: m, errorId: h }) => {
6
+ let g = n(null), _ = e(() => {
7
+ g.current?.click();
8
+ }, [g]), v = e((e) => {
9
9
  e.stopPropagation();
10
- }, []), v = e(() => m?.(), [m]), y = t(() => Array.isArray(c) ? c.map((e) => {
10
+ }, []), y = e(() => m?.(), [m]), b = t(() => Array.isArray(c) ? c.map((e) => {
11
11
  if (typeof e == "string") return {
12
12
  value: e,
13
13
  label: e
@@ -26,21 +26,23 @@ var o = ({ id: o = "", name: s, options: c = [], placeholder: l = "", value: u =
26
26
  }) : [], [c]);
27
27
  return /* @__PURE__ */ r("div", {
28
28
  className: a("form-control__select-container", d),
29
- onClick: g,
29
+ onClick: _,
30
30
  children: /* @__PURE__ */ i("select", {
31
- ref: h,
31
+ ref: g,
32
32
  id: o,
33
+ "aria-invalid": h ? !0 : void 0,
34
+ "aria-describedby": h,
33
35
  name: s,
34
36
  onChange: p,
35
37
  value: u,
36
38
  className: "select-container__select",
37
39
  disabled: f,
38
- onClick: _,
39
- onBlur: v,
40
+ onClick: v,
41
+ onBlur: y,
40
42
  children: [l && /* @__PURE__ */ r("option", {
41
43
  value: "",
42
44
  children: l
43
- }), y.map((e, t) => /* @__PURE__ */ r("option", {
45
+ }), b.map((e, t) => /* @__PURE__ */ r("option", {
44
46
  value: e.value,
45
47
  children: e.label
46
48
  }, t))]
@@ -5,6 +5,8 @@ export type TextareaProps = {
5
5
  name?: string;
6
6
  placeholder?: string;
7
7
  value?: string;
8
+ /** Takes the focus while true: as it becomes true, whether on mount or as the field is shown again. */
9
+ autoFocus?: boolean;
8
10
  required?: boolean;
9
11
  /** `0` for none. */
10
12
  maxLength?: number;
@@ -12,6 +14,11 @@ export type TextareaProps = {
12
14
  readOnly?: boolean;
13
15
  onChange?: (e: ChangeEvent<HTMLTextAreaElement>) => void;
14
16
  onValidate?: () => void;
17
+ /**
18
+ * The id of the message saying what is wrong with the value, while something is: the field is then marked invalid
19
+ * and described by it, so a screen reader or a browser agent hears why the form would not send.
20
+ */
21
+ errorId?: string;
15
22
  };
16
- declare const Textarea: ({ className, id, name, placeholder, value, required, maxLength, disabled, readOnly, onChange, onValidate }: TextareaProps) => import('react').JSX.Element;
23
+ declare const Textarea: ({ className, id, name, placeholder, value, autoFocus, required, maxLength, disabled, readOnly, onChange, onValidate, errorId }: TextareaProps) => import('react').JSX.Element;
17
24
  export default Textarea;
@@ -1,26 +1,31 @@
1
- import { useCallback as e, useRef as t } from "react";
2
- import { jsx as n } from "react/jsx-runtime";
3
- import r from "clsx";
1
+ import e from "./useFocusWhenShown.mjs";
2
+ import { useCallback as t, useRef as n } from "react";
3
+ import { jsx as r } from "react/jsx-runtime";
4
+ import i from "clsx";
4
5
  //#region src/elements/form/FormControl/inputs/Textarea.tsx
5
- var i = ({ className: i = "", id: a = "", name: o = "", placeholder: s = "", value: c = "", required: l = !0, maxLength: u = 0, disabled: d = !1, readOnly: f = !1, onChange: p, onValidate: m }) => {
6
- let h = t(null), g = e((e) => {
6
+ var a = ({ className: a = "", id: o = "", name: s = "", placeholder: c = "", value: l = "", autoFocus: u = !1, required: d = !0, maxLength: f = 0, disabled: p = !1, readOnly: m = !1, onChange: h, onValidate: g, errorId: _ }) => {
7
+ let v = n(null);
8
+ e(v, u);
9
+ let y = t((e) => {
7
10
  e.stopPropagation();
8
- }, []), _ = e(() => m?.(), [m]);
9
- return /* @__PURE__ */ n("textarea", {
10
- ref: h,
11
- className: r("form-control__textarea-container", i),
12
- id: a,
13
- name: o,
14
- placeholder: s,
15
- value: c,
16
- readOnly: f,
17
- required: l,
18
- maxLength: u > 0 ? u : void 0,
19
- disabled: d,
20
- onChange: p,
21
- onBlur: _,
22
- onClick: g
11
+ }, []), b = t(() => g?.(), [g]);
12
+ return /* @__PURE__ */ r("textarea", {
13
+ ref: v,
14
+ className: i("form-control__textarea-container", a),
15
+ id: o,
16
+ "aria-invalid": _ ? !0 : void 0,
17
+ "aria-describedby": _,
18
+ name: s,
19
+ placeholder: c,
20
+ value: l,
21
+ readOnly: m,
22
+ required: d,
23
+ maxLength: f > 0 ? f : void 0,
24
+ disabled: p,
25
+ onChange: h,
26
+ onBlur: b,
27
+ onClick: y
23
28
  });
24
29
  };
25
30
  //#endregion
26
- export { i as default };
31
+ export { a as default };
@@ -0,0 +1,7 @@
1
+ import { RefObject } from 'react';
2
+ /**
3
+ * A field that takes the focus each time it is shown: as it mounts, and again whenever it — or anything it is in — goes
4
+ * from hidden to shown. The native `autofocus` only acts on insertion, and a panel that hides keeps its field mounted.
5
+ */
6
+ declare const useFocusWhenShown: (ref: RefObject<HTMLInputElement | HTMLTextAreaElement | null>, shown: boolean) => void;
7
+ export default useFocusWhenShown;