@canonical/react-ds-core-form 0.9.0-experimental.5 → 0.9.0

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 (278) hide show
  1. package/README.md +3 -0
  2. package/dist/esm/ui/Field/Field.js +14 -6
  3. package/dist/esm/ui/Field/Field.js.map +1 -1
  4. package/dist/esm/ui/Field/common/Description/Description.js +2 -2
  5. package/dist/esm/ui/Field/common/Description/Description.js.map +1 -1
  6. package/dist/esm/ui/Field/common/Description/styles.css +1 -1
  7. package/dist/esm/ui/Field/common/Error/Error.js +12 -0
  8. package/dist/esm/ui/Field/common/Error/Error.js.map +1 -0
  9. package/dist/esm/ui/Field/common/Error/index.js +4 -0
  10. package/dist/esm/ui/Field/common/Error/index.js.map +1 -0
  11. package/dist/esm/ui/Field/common/Error/styles.css +5 -0
  12. package/dist/esm/ui/Field/common/Error/types.js +2 -0
  13. package/dist/esm/ui/Field/common/Error/types.js.map +1 -0
  14. package/dist/esm/ui/Field/common/Label/Label.js +8 -4
  15. package/dist/esm/ui/Field/common/Label/Label.js.map +1 -1
  16. package/dist/esm/ui/Field/common/Label/styles.css +2 -4
  17. package/dist/esm/ui/Field/common/Wrapper/InvisibleWrapper.js +26 -0
  18. package/dist/esm/ui/Field/common/Wrapper/InvisibleWrapper.js.map +1 -0
  19. package/dist/esm/ui/Field/common/Wrapper/Wrapper.js +24 -4
  20. package/dist/esm/ui/Field/common/Wrapper/Wrapper.js.map +1 -1
  21. package/dist/esm/ui/Field/common/Wrapper/hooks/index.js +2 -0
  22. package/dist/esm/ui/Field/common/Wrapper/hooks/index.js.map +1 -0
  23. package/dist/esm/ui/Field/common/Wrapper/hooks/useFieldWrapper.js +42 -0
  24. package/dist/esm/ui/Field/common/Wrapper/hooks/useFieldWrapper.js.map +1 -0
  25. package/dist/esm/ui/Field/common/Wrapper/index.js +2 -0
  26. package/dist/esm/ui/Field/common/Wrapper/index.js.map +1 -1
  27. package/dist/esm/ui/Field/common/Wrapper/messages.js +4 -0
  28. package/dist/esm/ui/Field/common/Wrapper/messages.js.map +1 -0
  29. package/dist/esm/ui/Field/common/Wrapper/styles.css +11 -3
  30. package/dist/esm/ui/Field/common/Wrapper/withConditionalDisplay.js +20 -0
  31. package/dist/esm/ui/Field/common/Wrapper/withConditionalDisplay.js.map +1 -0
  32. package/dist/esm/ui/Field/common/Wrapper/withWrapper.js +28 -1
  33. package/dist/esm/ui/Field/common/Wrapper/withWrapper.js.map +1 -1
  34. package/dist/esm/ui/Field/common/index.js +1 -0
  35. package/dist/esm/ui/Field/common/index.js.map +1 -1
  36. package/dist/esm/ui/Field/constants.js +2 -0
  37. package/dist/esm/ui/Field/constants.js.map +1 -0
  38. package/dist/esm/ui/Field/hooks/index.js +4 -0
  39. package/dist/esm/ui/Field/hooks/index.js.map +1 -0
  40. package/dist/esm/ui/Field/hooks/useFieldAriaProperties.js +37 -0
  41. package/dist/esm/ui/Field/hooks/useFieldAriaProperties.js.map +1 -0
  42. package/dist/esm/ui/Field/hooks/useFieldError.js +28 -0
  43. package/dist/esm/ui/Field/hooks/useFieldError.js.map +1 -0
  44. package/dist/esm/ui/Field/hooks/useOptionAriaProperties.js +30 -0
  45. package/dist/esm/ui/Field/hooks/useOptionAriaProperties.js.map +1 -0
  46. package/dist/esm/ui/Field/inputs/Checkbox/Checkbox.js +7 -4
  47. package/dist/esm/ui/Field/inputs/Checkbox/Checkbox.js.map +1 -1
  48. package/dist/esm/ui/Field/inputs/Checkbox/styles.css +1 -1
  49. package/dist/esm/ui/Field/inputs/Combobox/Combobox.js +21 -0
  50. package/dist/esm/ui/Field/inputs/Combobox/Combobox.js.map +1 -0
  51. package/dist/esm/ui/Field/inputs/Combobox/MultipleCombobox.js +82 -0
  52. package/dist/esm/ui/Field/inputs/Combobox/MultipleCombobox.js.map +1 -0
  53. package/dist/esm/ui/Field/inputs/Combobox/SingleCombobox.js +81 -0
  54. package/dist/esm/ui/Field/inputs/Combobox/SingleCombobox.js.map +1 -0
  55. package/dist/esm/ui/Field/inputs/Combobox/common/List/List.js +35 -0
  56. package/dist/esm/ui/Field/inputs/Combobox/common/List/List.js.map +1 -0
  57. package/dist/esm/ui/Field/inputs/Combobox/common/List/index.js +4 -0
  58. package/dist/esm/ui/Field/inputs/Combobox/common/List/index.js.map +1 -0
  59. package/dist/esm/ui/Field/inputs/Combobox/common/List/styles.css +7 -0
  60. package/dist/esm/ui/Field/inputs/Combobox/common/List/types.js +2 -0
  61. package/dist/esm/ui/Field/inputs/Combobox/common/List/types.js.map +1 -0
  62. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/ResetButton.js +14 -0
  63. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/ResetButton.js.map +1 -0
  64. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/index.js +4 -0
  65. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/index.js.map +1 -0
  66. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/styles.css +7 -0
  67. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/types.js +2 -0
  68. package/dist/esm/ui/Field/inputs/Combobox/common/ResetButton/types.js.map +1 -0
  69. package/dist/esm/ui/Field/inputs/Combobox/common/index.js +3 -0
  70. package/dist/esm/ui/Field/inputs/Combobox/common/index.js.map +1 -0
  71. package/dist/esm/ui/Field/inputs/Combobox/constants.js +2 -0
  72. package/dist/esm/ui/Field/inputs/Combobox/constants.js.map +1 -0
  73. package/dist/esm/ui/Field/inputs/Combobox/index.js +4 -0
  74. package/dist/esm/ui/Field/inputs/Combobox/index.js.map +1 -0
  75. package/dist/esm/ui/Field/inputs/Combobox/messages.js +5 -0
  76. package/dist/esm/ui/Field/inputs/Combobox/messages.js.map +1 -0
  77. package/dist/esm/ui/Field/inputs/Combobox/styles.css +7 -0
  78. package/dist/esm/ui/Field/inputs/Combobox/types.js +2 -0
  79. package/dist/esm/ui/Field/inputs/Combobox/types.js.map +1 -0
  80. package/dist/esm/ui/Field/inputs/Combobox/utils/convertItemToString.js +5 -0
  81. package/dist/esm/ui/Field/inputs/Combobox/utils/convertItemToString.js.map +1 -0
  82. package/dist/esm/ui/Field/inputs/Combobox/utils/convertValueToItem.js +6 -0
  83. package/dist/esm/ui/Field/inputs/Combobox/utils/convertValueToItem.js.map +1 -0
  84. package/dist/esm/ui/Field/inputs/Combobox/utils/filterItems.js +6 -0
  85. package/dist/esm/ui/Field/inputs/Combobox/utils/filterItems.js.map +1 -0
  86. package/dist/esm/ui/Field/inputs/Combobox/utils/index.js +5 -0
  87. package/dist/esm/ui/Field/inputs/Combobox/utils/index.js.map +1 -0
  88. package/dist/esm/ui/Field/inputs/Combobox/utils/mergeRefs.js +12 -0
  89. package/dist/esm/ui/Field/inputs/Combobox/utils/mergeRefs.js.map +1 -0
  90. package/dist/esm/ui/Field/inputs/Hidden/Hidden.js +14 -0
  91. package/dist/esm/ui/Field/inputs/Hidden/Hidden.js.map +1 -0
  92. package/dist/esm/ui/Field/inputs/Hidden/index.js +4 -0
  93. package/dist/esm/ui/Field/inputs/Hidden/index.js.map +1 -0
  94. package/dist/esm/ui/Field/inputs/Hidden/types.js +2 -0
  95. package/dist/esm/ui/Field/inputs/Hidden/types.js.map +1 -0
  96. package/dist/esm/ui/Field/inputs/Range/Range.js +16 -0
  97. package/dist/esm/ui/Field/inputs/Range/Range.js.map +1 -0
  98. package/dist/esm/ui/Field/inputs/Range/index.js +4 -0
  99. package/dist/esm/ui/Field/inputs/Range/index.js.map +1 -0
  100. package/dist/esm/ui/Field/inputs/Range/styles.css +7 -0
  101. package/dist/esm/ui/Field/inputs/Range/types.js +2 -0
  102. package/dist/esm/ui/Field/inputs/Range/types.js.map +1 -0
  103. package/dist/esm/ui/Field/inputs/Select/Select.js +18 -0
  104. package/dist/esm/ui/Field/inputs/Select/Select.js.map +1 -0
  105. package/dist/esm/ui/Field/inputs/Select/index.js +4 -0
  106. package/dist/esm/ui/Field/inputs/Select/index.js.map +1 -0
  107. package/dist/esm/ui/Field/inputs/Select/styles.css +4 -0
  108. package/dist/esm/ui/Field/inputs/Select/types.js +2 -0
  109. package/dist/esm/ui/Field/inputs/Select/types.js.map +1 -0
  110. package/dist/esm/ui/Field/inputs/SimpleChoices/SimpleChoices.js +28 -0
  111. package/dist/esm/ui/Field/inputs/SimpleChoices/SimpleChoices.js.map +1 -0
  112. package/dist/esm/ui/Field/inputs/SimpleChoices/index.js +4 -0
  113. package/dist/esm/ui/Field/inputs/SimpleChoices/index.js.map +1 -0
  114. package/dist/esm/ui/Field/inputs/SimpleChoices/styles.css +10 -0
  115. package/dist/esm/ui/Field/inputs/SimpleChoices/types.js +2 -0
  116. package/dist/esm/ui/Field/inputs/SimpleChoices/types.js.map +1 -0
  117. package/dist/esm/ui/Field/inputs/Text/Text.js +8 -5
  118. package/dist/esm/ui/Field/inputs/Text/Text.js.map +1 -1
  119. package/dist/esm/ui/Field/inputs/Text/styles.css +6 -3
  120. package/dist/esm/ui/Field/inputs/Textarea/Textarea.js +9 -4
  121. package/dist/esm/ui/Field/inputs/Textarea/Textarea.js.map +1 -1
  122. package/dist/esm/ui/Field/inputs/Textarea/styles.css +2 -5
  123. package/dist/esm/ui/Field/inputs/index.js +5 -0
  124. package/dist/esm/ui/Field/inputs/index.js.map +1 -1
  125. package/dist/esm/ui/Field/types.js +1 -18
  126. package/dist/esm/ui/Field/types.js.map +1 -1
  127. package/dist/esm/ui/Form/index.js +4 -0
  128. package/dist/esm/ui/Form/index.js.map +1 -0
  129. package/dist/esm/ui/Form/types.js +2 -0
  130. package/dist/esm/ui/Form/types.js.map +1 -0
  131. package/dist/esm/ui/constants.js +12 -0
  132. package/dist/esm/ui/constants.js.map +1 -0
  133. package/dist/esm/ui/index.js +2 -27
  134. package/dist/esm/ui/index.js.map +1 -1
  135. package/dist/esm/ui/middleware/addRESTOptions.js +44 -0
  136. package/dist/esm/ui/middleware/addRESTOptions.js.map +1 -0
  137. package/dist/esm/ui/middleware/addRESTValidation.js +38 -0
  138. package/dist/esm/ui/middleware/addRESTValidation.js.map +1 -0
  139. package/dist/esm/ui/middleware/index.js +3 -0
  140. package/dist/esm/ui/middleware/index.js.map +1 -0
  141. package/dist/types/ui/Field/Field.d.ts +1 -5
  142. package/dist/types/ui/Field/Field.d.ts.map +1 -1
  143. package/dist/types/ui/Field/common/Description/Description.d.ts.map +1 -1
  144. package/dist/types/ui/Field/common/Error/Error.d.ts +10 -0
  145. package/dist/types/ui/Field/common/Error/Error.d.ts.map +1 -0
  146. package/dist/types/ui/Field/common/Error/index.d.ts +3 -0
  147. package/dist/types/ui/Field/common/Error/index.d.ts.map +1 -0
  148. package/dist/types/ui/Field/common/Error/types.d.ts +8 -0
  149. package/dist/types/ui/Field/common/Error/types.d.ts.map +1 -0
  150. package/dist/types/ui/Field/common/Label/Label.d.ts +1 -1
  151. package/dist/types/ui/Field/common/Label/Label.d.ts.map +1 -1
  152. package/dist/types/ui/Field/common/Label/types.d.ts +9 -0
  153. package/dist/types/ui/Field/common/Label/types.d.ts.map +1 -1
  154. package/dist/types/ui/Field/common/Wrapper/InvisibleWrapper.d.ts +13 -0
  155. package/dist/types/ui/Field/common/Wrapper/InvisibleWrapper.d.ts.map +1 -0
  156. package/dist/types/ui/Field/common/Wrapper/Wrapper.d.ts +2 -2
  157. package/dist/types/ui/Field/common/Wrapper/Wrapper.d.ts.map +1 -1
  158. package/dist/types/ui/Field/common/Wrapper/hooks/index.d.ts +2 -0
  159. package/dist/types/ui/Field/common/Wrapper/hooks/index.d.ts.map +1 -0
  160. package/dist/types/ui/Field/common/Wrapper/hooks/useFieldWrapper.d.ts +498 -0
  161. package/dist/types/ui/Field/common/Wrapper/hooks/useFieldWrapper.d.ts.map +1 -0
  162. package/dist/types/ui/Field/common/Wrapper/index.d.ts +2 -0
  163. package/dist/types/ui/Field/common/Wrapper/index.d.ts.map +1 -1
  164. package/dist/types/ui/Field/common/Wrapper/messages.d.ts +5 -0
  165. package/dist/types/ui/Field/common/Wrapper/messages.d.ts.map +1 -0
  166. package/dist/types/ui/Field/common/Wrapper/types.d.ts +1 -7
  167. package/dist/types/ui/Field/common/Wrapper/types.d.ts.map +1 -1
  168. package/dist/types/ui/Field/common/Wrapper/withConditionalDisplay.d.ts +6 -0
  169. package/dist/types/ui/Field/common/Wrapper/withConditionalDisplay.d.ts.map +1 -0
  170. package/dist/types/ui/Field/common/Wrapper/withWrapper.d.ts +7 -1
  171. package/dist/types/ui/Field/common/Wrapper/withWrapper.d.ts.map +1 -1
  172. package/dist/types/ui/Field/common/index.d.ts +1 -0
  173. package/dist/types/ui/Field/common/index.d.ts.map +1 -1
  174. package/dist/types/ui/Field/constants.d.ts +2 -0
  175. package/dist/types/ui/Field/constants.d.ts.map +1 -0
  176. package/dist/types/ui/Field/hooks/index.d.ts +4 -0
  177. package/dist/types/ui/Field/hooks/index.d.ts.map +1 -0
  178. package/dist/types/ui/Field/hooks/useFieldAriaProperties.d.ts +27 -0
  179. package/dist/types/ui/Field/hooks/useFieldAriaProperties.d.ts.map +1 -0
  180. package/dist/types/ui/Field/hooks/useFieldError.d.ts +4 -0
  181. package/dist/types/ui/Field/hooks/useFieldError.d.ts.map +1 -0
  182. package/dist/types/ui/Field/hooks/useOptionAriaProperties.d.ts +19 -0
  183. package/dist/types/ui/Field/hooks/useOptionAriaProperties.d.ts.map +1 -0
  184. package/dist/types/ui/Field/inputs/Checkbox/Checkbox.d.ts +329 -6
  185. package/dist/types/ui/Field/inputs/Checkbox/Checkbox.d.ts.map +1 -1
  186. package/dist/types/ui/Field/inputs/Checkbox/types.d.ts +4 -3
  187. package/dist/types/ui/Field/inputs/Checkbox/types.d.ts.map +1 -1
  188. package/dist/types/ui/Field/inputs/Combobox/Combobox.d.ts +43 -0
  189. package/dist/types/ui/Field/inputs/Combobox/Combobox.d.ts.map +1 -0
  190. package/dist/types/ui/Field/inputs/Combobox/MultipleCombobox.d.ts +13 -0
  191. package/dist/types/ui/Field/inputs/Combobox/MultipleCombobox.d.ts.map +1 -0
  192. package/dist/types/ui/Field/inputs/Combobox/SingleCombobox.d.ts +12 -0
  193. package/dist/types/ui/Field/inputs/Combobox/SingleCombobox.d.ts.map +1 -0
  194. package/dist/types/ui/Field/inputs/Combobox/common/List/List.d.ts +10 -0
  195. package/dist/types/ui/Field/inputs/Combobox/common/List/List.d.ts.map +1 -0
  196. package/dist/types/ui/Field/inputs/Combobox/common/List/index.d.ts +3 -0
  197. package/dist/types/ui/Field/inputs/Combobox/common/List/index.d.ts.map +1 -0
  198. package/dist/types/ui/Field/inputs/Combobox/common/List/types.d.ts +18 -0
  199. package/dist/types/ui/Field/inputs/Combobox/common/List/types.d.ts.map +1 -0
  200. package/dist/types/ui/Field/inputs/Combobox/common/ResetButton/ResetButton.d.ts +10 -0
  201. package/dist/types/ui/Field/inputs/Combobox/common/ResetButton/ResetButton.d.ts.map +1 -0
  202. package/dist/types/ui/Field/inputs/Combobox/common/ResetButton/index.d.ts +3 -0
  203. package/dist/types/ui/Field/inputs/Combobox/common/ResetButton/index.d.ts.map +1 -0
  204. package/dist/types/ui/Field/inputs/Combobox/common/ResetButton/types.d.ts +12 -0
  205. package/dist/types/ui/Field/inputs/Combobox/common/ResetButton/types.d.ts.map +1 -0
  206. package/dist/types/ui/Field/inputs/Combobox/common/index.d.ts +3 -0
  207. package/dist/types/ui/Field/inputs/Combobox/common/index.d.ts.map +1 -0
  208. package/dist/types/ui/Field/inputs/Combobox/constants.d.ts +2 -0
  209. package/dist/types/ui/Field/inputs/Combobox/constants.d.ts.map +1 -0
  210. package/dist/types/ui/Field/inputs/Combobox/index.d.ts +3 -0
  211. package/dist/types/ui/Field/inputs/Combobox/index.d.ts.map +1 -0
  212. package/dist/types/ui/Field/inputs/Combobox/messages.d.ts +6 -0
  213. package/dist/types/ui/Field/inputs/Combobox/messages.d.ts.map +1 -0
  214. package/dist/types/ui/Field/inputs/Combobox/types.d.ts +23 -0
  215. package/dist/types/ui/Field/inputs/Combobox/types.d.ts.map +1 -0
  216. package/dist/types/ui/Field/inputs/Combobox/utils/convertItemToString.d.ts +4 -0
  217. package/dist/types/ui/Field/inputs/Combobox/utils/convertItemToString.d.ts.map +1 -0
  218. package/dist/types/ui/Field/inputs/Combobox/utils/convertValueToItem.d.ts +4 -0
  219. package/dist/types/ui/Field/inputs/Combobox/utils/convertValueToItem.d.ts.map +1 -0
  220. package/dist/types/ui/Field/inputs/Combobox/utils/filterItems.d.ts +4 -0
  221. package/dist/types/ui/Field/inputs/Combobox/utils/filterItems.d.ts.map +1 -0
  222. package/dist/types/ui/Field/inputs/Combobox/utils/index.d.ts +5 -0
  223. package/dist/types/ui/Field/inputs/Combobox/utils/index.d.ts.map +1 -0
  224. package/dist/types/ui/Field/inputs/Combobox/utils/mergeRefs.d.ts +3 -0
  225. package/dist/types/ui/Field/inputs/Combobox/utils/mergeRefs.d.ts.map +1 -0
  226. package/dist/types/ui/Field/inputs/Hidden/Hidden.d.ts +332 -0
  227. package/dist/types/ui/Field/inputs/Hidden/Hidden.d.ts.map +1 -0
  228. package/dist/types/ui/Field/inputs/Hidden/index.d.ts +3 -0
  229. package/dist/types/ui/Field/inputs/Hidden/index.d.ts.map +1 -0
  230. package/dist/types/ui/Field/inputs/Hidden/types.d.ts +5 -0
  231. package/dist/types/ui/Field/inputs/Hidden/types.d.ts.map +1 -0
  232. package/dist/types/ui/Field/inputs/Range/Range.d.ts +333 -0
  233. package/dist/types/ui/Field/inputs/Range/Range.d.ts.map +1 -0
  234. package/dist/types/ui/Field/inputs/Range/index.d.ts +3 -0
  235. package/dist/types/ui/Field/inputs/Range/index.d.ts.map +1 -0
  236. package/dist/types/ui/Field/inputs/Range/types.d.ts +8 -0
  237. package/dist/types/ui/Field/inputs/Range/types.d.ts.map +1 -0
  238. package/dist/types/ui/Field/inputs/Select/Select.d.ts +312 -0
  239. package/dist/types/ui/Field/inputs/Select/Select.d.ts.map +1 -0
  240. package/dist/types/ui/Field/inputs/Select/index.d.ts +3 -0
  241. package/dist/types/ui/Field/inputs/Select/index.d.ts.map +1 -0
  242. package/dist/types/ui/Field/inputs/Select/types.d.ts +5 -0
  243. package/dist/types/ui/Field/inputs/Select/types.d.ts.map +1 -0
  244. package/dist/types/ui/Field/inputs/SimpleChoices/SimpleChoices.d.ts +35 -0
  245. package/dist/types/ui/Field/inputs/SimpleChoices/SimpleChoices.d.ts.map +1 -0
  246. package/dist/types/ui/Field/inputs/SimpleChoices/index.d.ts +3 -0
  247. package/dist/types/ui/Field/inputs/SimpleChoices/index.d.ts.map +1 -0
  248. package/dist/types/ui/Field/inputs/SimpleChoices/types.d.ts +20 -0
  249. package/dist/types/ui/Field/inputs/SimpleChoices/types.d.ts.map +1 -0
  250. package/dist/types/ui/Field/inputs/Text/Text.d.ts +333 -2
  251. package/dist/types/ui/Field/inputs/Text/Text.d.ts.map +1 -1
  252. package/dist/types/ui/Field/inputs/Text/types.d.ts +10 -4
  253. package/dist/types/ui/Field/inputs/Text/types.d.ts.map +1 -1
  254. package/dist/types/ui/Field/inputs/Textarea/Textarea.d.ts +313 -6
  255. package/dist/types/ui/Field/inputs/Textarea/Textarea.d.ts.map +1 -1
  256. package/dist/types/ui/Field/inputs/Textarea/types.d.ts +4 -3
  257. package/dist/types/ui/Field/inputs/Textarea/types.d.ts.map +1 -1
  258. package/dist/types/ui/Field/inputs/index.d.ts +6 -0
  259. package/dist/types/ui/Field/inputs/index.d.ts.map +1 -1
  260. package/dist/types/ui/Field/inputs/types.d.ts +1 -8
  261. package/dist/types/ui/Field/inputs/types.d.ts.map +1 -1
  262. package/dist/types/ui/Field/types.d.ts +68 -21
  263. package/dist/types/ui/Field/types.d.ts.map +1 -1
  264. package/dist/types/ui/Form/index.d.ts +2 -0
  265. package/dist/types/ui/Form/index.d.ts.map +1 -0
  266. package/dist/types/ui/Form/types.d.ts +8 -0
  267. package/dist/types/ui/Form/types.d.ts.map +1 -0
  268. package/dist/types/ui/constants.d.ts +10 -0
  269. package/dist/types/ui/constants.d.ts.map +1 -0
  270. package/dist/types/ui/index.d.ts +2 -0
  271. package/dist/types/ui/index.d.ts.map +1 -1
  272. package/dist/types/ui/middleware/addRESTOptions.d.ts +9 -0
  273. package/dist/types/ui/middleware/addRESTOptions.d.ts.map +1 -0
  274. package/dist/types/ui/middleware/addRESTValidation.d.ts +12 -0
  275. package/dist/types/ui/middleware/addRESTValidation.d.ts.map +1 -0
  276. package/dist/types/ui/middleware/index.d.ts +3 -0
  277. package/dist/types/ui/middleware/index.d.ts.map +1 -0
  278. package/package.json +33 -25
package/README.md CHANGED
@@ -6,3 +6,6 @@ The collection of Form Components in the DS25.
6
6
 
7
7
  This package uses the same build as `ds-core` in the same folder. All comments made on the README.md file apply here.
8
8
 
9
+ ## Notes
10
+
11
+ + This package uses MSW to mock back-end requests - in particular related to field-level middleware. For that purpose, this package exposes a unique command, `init:msw` which populates the public folder with the service worker necessary to intercept requests with our mock API. This script only has to be run once, but is nevertheless kept on the package.json for reference.
@@ -1,17 +1,26 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
- import { Checkbox, Text, Textarea } from "./inputs/index.js";
3
- import { InputType } from "./types.js";
2
+ import { Checkbox, Combobox, Hidden, Range, Select, SimpleChoices, Text, Textarea, } from "./inputs/index.js";
4
3
  /**
5
4
  * description of the Field component
6
5
  * @returns {React.ReactElement} - Rendered Field
7
6
  */
8
7
  const Field = ({ inputType, CustomComponent, ...props }) => {
9
8
  switch (inputType) {
10
- case InputType.Textarea:
9
+ case "textarea":
11
10
  return _jsx(Textarea, { ...props });
12
- case InputType.Checkbox:
11
+ case "checkbox":
13
12
  return _jsx(Checkbox, { ...props });
14
- case InputType.Custom:
13
+ case "range":
14
+ return _jsx(Range, { ...props });
15
+ case "select":
16
+ return _jsx(Select, { ...props });
17
+ case "simple-choices":
18
+ return _jsx(SimpleChoices, { ...props });
19
+ case "combobox":
20
+ return _jsx(Combobox, { ...props });
21
+ case "hidden":
22
+ return _jsx(Hidden, { ...props });
23
+ case "custom":
15
24
  // @ts-ignore // TODO Add special type for both or none
16
25
  return _jsx(CustomComponent, { ...props });
17
26
  default:
@@ -19,5 +28,4 @@ const Field = ({ inputType, CustomComponent, ...props }) => {
19
28
  }
20
29
  };
21
30
  export default Field;
22
- Field.types = InputType;
23
31
  //# sourceMappingURL=Field.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../../src/ui/Field/Field.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGvC;;;GAGG;AACH,MAAM,KAAK,GAAG,CAAC,EACb,SAAS,EACT,eAAe,EACf,GAAG,KAAK,EACG,EAAsB,EAAE;IACnC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,SAAS,CAAC,QAAQ;YACrB,OAAO,KAAC,QAAQ,OAAK,KAAK,GAAI,CAAC;QACjC,KAAK,SAAS,CAAC,QAAQ;YACrB,OAAO,KAAC,QAAQ,OAAK,KAAK,GAAI,CAAC;QACjC,KAAK,SAAS,CAAC,MAAM;YACnB,uDAAuD;YACvD,OAAO,KAAC,eAAe,OAAK,KAAK,GAAI,CAAC;QACxC;YACE,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,KAAM,KAAK,GAAI,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC;AACrB,KAAK,CAAC,KAAK,GAAG,SAAS,CAAC"}
1
+ {"version":3,"file":"Field.js","sourceRoot":"","sources":["../../../../src/ui/Field/Field.tsx"],"names":[],"mappings":";AAEA,OAAO,EACL,QAAQ,EACR,QAAQ,EACR,MAAM,EACN,KAAK,EACL,MAAM,EACN,aAAa,EACb,IAAI,EACJ,QAAQ,GACT,MAAM,mBAAmB,CAAC;AAG3B;;;GAGG;AACH,MAAM,KAAK,GAAG,CAAC,EACb,SAAS,EACT,eAAe,EACf,GAAG,KAAK,EACG,EAAsB,EAAE;IACnC,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,UAAU;YACb,OAAO,KAAC,QAAQ,OAAK,KAAK,GAAI,CAAC;QACjC,KAAK,UAAU;YACb,OAAO,KAAC,QAAQ,OAAK,KAAK,GAAI,CAAC;QACjC,KAAK,OAAO;YACV,OAAO,KAAC,KAAK,OAAK,KAAK,GAAI,CAAC;QAC9B,KAAK,QAAQ;YACX,OAAO,KAAC,MAAM,OAAK,KAAK,GAAI,CAAC;QAC/B,KAAK,gBAAgB;YACnB,OAAO,KAAC,aAAa,OAAK,KAAK,GAAI,CAAC;QACtC,KAAK,UAAU;YACb,OAAO,KAAC,QAAQ,OAAK,KAAK,GAAI,CAAC;QACjC,KAAK,QAAQ;YACX,OAAO,KAAC,MAAM,OAAK,KAAK,GAAI,CAAC;QAC/B,KAAK,QAAQ;YACX,uDAAuD;YACvD,OAAO,KAAC,eAAe,OAAK,KAAK,GAAI,CAAC;QACxC;YACE,OAAO,KAAC,IAAI,IAAC,SAAS,EAAE,SAAS,KAAM,KAAK,GAAI,CAAC;IACrD,CAAC;AACH,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import "./styles.css";
3
- const componentCssClassName = "ds description";
3
+ const componentCssClassName = "ds form-field-description";
4
4
  /**
5
5
  * description of the Description component
6
6
  * @returns {React.ReactElement} - Rendered Description
7
7
  */
8
8
  const Description = ({ id, children, className, style, }) => {
9
- return (_jsx("div", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), children: children }));
9
+ return (_jsx("p", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), children: children }));
10
10
  };
11
11
  export default Description;
12
12
  //# sourceMappingURL=Description.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Description.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Description/Description.tsx"],"names":[],"mappings":";AAGA,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,gBAAgB,CAAC;AAE/C;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,EACnB,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACY,EAAsB,EAAE;IACzC,OAAO,CACL,cACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAEtE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
1
+ {"version":3,"file":"Description.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Description/Description.tsx"],"names":[],"mappings":";AAGA,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,2BAA2B,CAAC;AAE1D;;;GAGG;AACH,MAAM,WAAW,GAAG,CAAC,EACnB,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACY,EAAsB,EAAE;IACzC,OAAO,CACL,YACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAEtE,QAAQ,GACP,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /* @canonical/generator-ds 0.9.0-experimental.4 */
2
2
 
3
3
  /*
4
- .ds.description {
4
+ .ds.form-field-description {
5
5
 
6
6
  }
7
7
  */
@@ -0,0 +1,12 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import "./styles.css";
3
+ const componentCssClassName = "ds form-field-error";
4
+ /**
5
+ * description of the Error component
6
+ * @returns {React.ReactElement} - Rendered Error
7
+ */
8
+ const FieldError = ({ id, children, className, style, }) => {
9
+ return (_jsx("p", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), role: "alert", children: children }));
10
+ };
11
+ export default FieldError;
12
+ //# sourceMappingURL=Error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Error.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Error/Error.tsx"],"names":[],"mappings":";AAGA,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,qBAAqB,CAAC;AAEpD;;;GAGG;AACH,MAAM,UAAU,GAAG,CAAC,EAClB,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACM,EAAsB,EAAE;IACnC,OAAO,CACL,YACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EACvE,IAAI,EAAC,OAAO,YAEX,QAAQ,GACP,CACL,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,UAAU,CAAC"}
@@ -0,0 +1,4 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.9 */
2
+ export { default as Error } from "./Error.js";
3
+ export * from "./types.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Error/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,KAAK,EAAE,MAAM,YAAY,CAAC;AAC9C,cAAc,YAAY,CAAC"}
@@ -0,0 +1,5 @@
1
+ /* @canonical/generator-ds 0.9.0-experimental.9 */
2
+
3
+ .ds.form-field-error {
4
+ color: var(--state-danger-color-default);
5
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Error/types.ts"],"names":[],"mappings":""}
@@ -1,12 +1,16 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import "./styles.css";
3
- const componentCssClassName = "ds label";
3
+ const componentCssClassName = "ds form-label";
4
+ /** Placeholder for internationalized messages */
5
+ const defaultMessages = {
6
+ optional: () => "optional",
7
+ };
4
8
  /**
5
9
  * description of the Label component
6
10
  * @returns {React.ReactElement} - Rendered Label
7
11
  */
8
- const Label = ({ id, children, className, style, }) => {
9
- return (_jsx("div", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), children: children }));
12
+ const Label = ({ id, children, className, style, name, isOptional, messages = defaultMessages, htmlFor, tag: Element = "label", }) => {
13
+ return (_jsxs(Element, { id: id, style: style, htmlFor: Element === "label" ? htmlFor : undefined, className: [componentCssClassName, className].filter(Boolean).join(" "), children: [children || name, isOptional && _jsxs("span", { children: [" (", messages.optional(), ")"] })] }));
10
14
  };
11
15
  export default Label;
12
16
  //# sourceMappingURL=Label.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Label/Label.tsx"],"names":[],"mappings":";AAGA,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,UAAU,CAAC;AAEzC;;;GAGG;AACH,MAAM,KAAK,GAAG,CAAC,EACb,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACM,EAAsB,EAAE;IACnC,OAAO,CACL,cACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAEtE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
1
+ {"version":3,"file":"Label.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Label/Label.tsx"],"names":[],"mappings":";AAGA,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,eAAe,CAAC;AAE9C,iDAAiD;AACjD,MAAM,eAAe,GAAG;IACtB,QAAQ,EAAE,GAAG,EAAE,CAAC,UAAU;CAC3B,CAAC;AAEF;;;GAGG;AACH,MAAM,KAAK,GAAG,CAAC,EACb,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,EACL,IAAI,EACJ,UAAU,EACV,QAAQ,GAAG,eAAe,EAC1B,OAAO,EACP,GAAG,EAAE,OAAO,GAAG,OAAO,GACX,EAAsB,EAAE;IACnC,OAAO,CACL,MAAC,OAAO,IACN,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAClD,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,aAEtE,QAAQ,IAAI,IAAI,EAChB,UAAU,IAAI,iCAAS,QAAQ,CAAC,QAAQ,EAAE,SAAS,IAC5C,CACX,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,KAAK,CAAC"}
@@ -1,7 +1,5 @@
1
1
  /* @canonical/generator-ds 0.9.0-experimental.4 */
2
2
 
3
- /*
4
- .ds.label {
5
-
3
+ .ds.form-label {
4
+ font-weight: bold;
6
5
  }
7
- */
@@ -0,0 +1,26 @@
1
+ import { jsx as _jsx } from "react/jsx-runtime";
2
+ import { useFieldWrapper } from "./hooks/index.js";
3
+ /**
4
+ * InvisibleWrapper component for hidden form inputs.
5
+ * It wraps the specified input component and handles form registration
6
+ * without rendering visible elements like labels or error messages.
7
+ *
8
+ * @param {WrapperProps<ComponentProps>} props - Component props including the Component to wrap and form-related props.
9
+ * @returns {React.ReactElement} - Rendered wrapped component.
10
+ */
11
+ const InvisibleWrapper = ({ name, Component, registerProps: userRegisterProps, nestedRegisterProps, unregisterOnUnmount, ...otherProps }) => {
12
+ const { registerProps, ariaProps } = useFieldWrapper(name, {
13
+ userRegisterProps,
14
+ nestedRegisterProps,
15
+ unregisterOnUnmount,
16
+ });
17
+ const componentProps = {
18
+ name,
19
+ registerProps,
20
+ ...ariaProps.input,
21
+ ...otherProps,
22
+ };
23
+ return _jsx(Component, { ...componentProps });
24
+ };
25
+ export default InvisibleWrapper;
26
+ //# sourceMappingURL=InvisibleWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InvisibleWrapper.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/InvisibleWrapper.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD;;;;;;;GAOG;AACH,MAAM,gBAAgB,GAAG,CAAwC,EAC/D,IAAI,EACJ,SAAS,EACT,aAAa,EAAE,iBAAiB,EAChC,mBAAmB,EACnB,mBAAmB,EACnB,GAAG,UAAU,EACgB,EAAsB,EAAE;IACrD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,eAAe,CAAC,IAAI,EAAE;QACzD,iBAAiB;QACjB,mBAAmB;QACnB,mBAAmB;KACpB,CAAC,CAAC;IAEH,MAAM,cAAc,GAAG;QACrB,IAAI;QACJ,aAAa;QACb,GAAG,SAAS,CAAC,KAAK;QAClB,GAAG,UAAU;KACI,CAAC;IAEpB,OAAO,KAAC,SAAS,OAAK,cAAc,GAAI,CAAC;AAC3C,CAAC,CAAC;AAEF,eAAe,gBAAgB,CAAC"}
@@ -1,12 +1,32 @@
1
- import { jsx as _jsx } from "react/jsx-runtime";
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { useMemo } from "react";
2
3
  import "./styles.css";
3
- const componentCssClassName = "ds wrapper";
4
+ import { states } from "../../../constants.js";
5
+ import { Description, Error as FieldError, Label } from "../index.js";
6
+ import { useFieldWrapper } from "./hooks/index.js";
7
+ const componentCssClassName = "ds form-wrapper";
4
8
  /**
5
9
  * description of the Wrapper component
6
10
  * @returns {React.ReactElement} - Rendered Wrapper
7
11
  */
8
- const Wrapper = ({ id, children, className, style, }) => {
9
- return (_jsx("div", { id: id, style: style, className: [componentCssClassName, className].filter(Boolean).join(" "), children: children }));
12
+ const Wrapper = ({ id, className, style, name, Component, description, label, isOptional, registerProps: userRegisterProps, nestedRegisterProps, unregisterOnUnmount, mockLabel = false, ...otherProps }) => {
13
+ const { fieldError, isError, ariaProps, registerProps } = useFieldWrapper(name, {
14
+ label,
15
+ isOptional,
16
+ userRegisterProps,
17
+ nestedRegisterProps,
18
+ unregisterOnUnmount,
19
+ });
20
+ // biome-ignore lint/correctness/useExhaustiveDependencies: -
21
+ const componentProps = useMemo(() => ({
22
+ name,
23
+ registerProps,
24
+ ...ariaProps.input,
25
+ ...otherProps,
26
+ }), [name, registerProps, ariaProps.input]);
27
+ return (_jsxs("div", { id: id, style: style, className: [componentCssClassName, className, isError && states.Danger]
28
+ .filter(Boolean)
29
+ .join(" "), children: [_jsx(Label, { name: name, isOptional: isOptional, tag: mockLabel ? "legend" : undefined, ...ariaProps.label, children: label }), _jsxs("div", { className: "payload", children: [_jsx(Description, { ...ariaProps.description, children: description }), _jsx(Component, { ...componentProps }), isError && (_jsx(FieldError, { ...ariaProps.error, children: fieldError?.message?.toString() }))] })] }));
10
30
  };
11
31
  export default Wrapper;
12
32
  //# sourceMappingURL=Wrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/Wrapper.tsx"],"names":[],"mappings":";AAGA,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,YAAY,CAAC;AAE3C;;;GAGG;AACH,MAAM,OAAO,GAAG,CAAC,EACf,EAAE,EACF,QAAQ,EACR,SAAS,EACT,KAAK,GACQ,EAAsB,EAAE;IACrC,OAAO,CACL,cACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAEtE,QAAQ,GACL,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
1
+ {"version":3,"file":"Wrapper.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/Wrapper.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEhC,OAAO,cAAc,CAAC;AACtB,OAAO,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAC/C,OAAO,EAAE,WAAW,EAAE,KAAK,IAAI,UAAU,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAEnD,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAEhD;;;GAGG;AACH,MAAM,OAAO,GAAG,CAAwC,EACtD,EAAE,EACF,SAAS,EACT,KAAK,EAEL,IAAI,EACJ,SAAS,EACT,WAAW,EACX,KAAK,EACL,UAAU,EACV,aAAa,EAAE,iBAAiB,EAChC,mBAAmB,EACnB,mBAAmB,EAEnB,SAAS,GAAG,KAAK,EACjB,GAAG,UAAU,EACgB,EAAsB,EAAE;IACrD,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,eAAe,CACvE,IAAI,EACJ;QACE,KAAK;QACL,UAAU;QACV,iBAAiB;QACjB,mBAAmB;QACnB,mBAAmB;KACpB,CACF,CAAC;IAEF,6DAA6D;IAC7D,MAAM,cAAc,GAAG,OAAO,CAC5B,GAAG,EAAE,CAAC,CAAC;QACL,IAAI;QACJ,aAAa;QACb,GAAG,SAAS,CAAC,KAAK;QAClB,GAAG,UAAU;KACd,CAAC,EACF,CAAC,IAAI,EAAE,aAAa,EAAE,SAAS,CAAC,KAAK,CAAC,CACV,CAAC;IAE/B,OAAO,CACL,eACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,EAAE,OAAO,IAAI,MAAM,CAAC,MAAM,CAAC;aACpE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,GAAG,CAAC,aAEZ,KAAC,KAAK,IACJ,IAAI,EAAE,IAAI,EACV,UAAU,EAAE,UAAU,EACtB,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,KACjC,SAAS,CAAC,KAAK,YAElB,KAAK,GACA,EACR,eAAK,SAAS,EAAC,SAAS,aACtB,KAAC,WAAW,OAAK,SAAS,CAAC,WAAW,YAAG,WAAW,GAAe,EACnE,KAAC,SAAS,OAAK,cAAc,GAAI,EAChC,OAAO,IAAI,CACV,KAAC,UAAU,OAAK,SAAS,CAAC,KAAK,YAC5B,UAAU,EAAE,OAAO,EAAE,QAAQ,EAAE,GACrB,CACd,IACG,IACF,CACP,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,OAAO,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as useFieldWrapper } from "./useFieldWrapper.js";
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../../src/ui/Field/common/Wrapper/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,eAAe,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1,42 @@
1
+ import { useEffect, useMemo } from "react";
2
+ import { useFormContext } from "react-hook-form";
3
+ import { useFieldAriaProperties, useFieldError } from "../../../hooks/index.js";
4
+ import messages from "../messages.js";
5
+ /**
6
+ * Hook to provide field wrapper utilities
7
+ * @param name - The name of the field
8
+ * @param options - Additional options
9
+ */
10
+ const useFieldWrapper = (name, options = {}) => {
11
+ const { label, isOptional = false, userRegisterProps = {}, nestedRegisterProps = {}, unregisterOnUnmount = true, } = options;
12
+ const fieldError = useFieldError(name);
13
+ const isError = !!fieldError;
14
+ const ariaProps = useFieldAriaProperties(name, isError);
15
+ // biome-ignore lint/correctness/useExhaustiveDependencies: Comparing the `name` suffices
16
+ const registerProps = useMemo(() => {
17
+ const props = {};
18
+ // We take advantage of the declaration of optionality to map to the required prop
19
+ if (!isOptional) {
20
+ props.required = {
21
+ value: true,
22
+ message: messages.required(label || name),
23
+ };
24
+ }
25
+ return {
26
+ ...nestedRegisterProps,
27
+ ...props,
28
+ ...userRegisterProps,
29
+ };
30
+ }, [name]);
31
+ const { unregister } = useFormContext();
32
+ // biome-ignore lint/correctness/useExhaustiveDependencies: Comparing the `name` suffices
33
+ useEffect(() => () => (unregisterOnUnmount ? unregister(name) : undefined), [name]);
34
+ return {
35
+ fieldError,
36
+ isError,
37
+ ariaProps,
38
+ registerProps,
39
+ };
40
+ };
41
+ export default useFieldWrapper;
42
+ //# sourceMappingURL=useFieldWrapper.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFieldWrapper.js","sourceRoot":"","sources":["../../../../../../../src/ui/Field/common/Wrapper/hooks/useFieldWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAC3C,OAAO,EAAwB,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,sBAAsB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAChF,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AAUtC;;;;GAIG;AACH,MAAM,eAAe,GAAG,CACtB,IAAY,EACZ,UAAkC,EAAE,EACpC,EAAE;IACF,MAAM,EACJ,KAAK,EACL,UAAU,GAAG,KAAK,EAClB,iBAAiB,GAAG,EAAE,EACtB,mBAAmB,GAAG,EAAE,EACxB,mBAAmB,GAAG,IAAI,GAC3B,GAAG,OAAO,CAAC;IAEZ,MAAM,UAAU,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;IAEvC,MAAM,OAAO,GAAG,CAAC,CAAC,UAAU,CAAC;IAE7B,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAExD,yFAAyF;IACzF,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE;QACjC,MAAM,KAAK,GAAoB,EAAE,CAAC;QAClC,kFAAkF;QAClF,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,KAAK,CAAC,QAAQ,GAAG;gBACf,KAAK,EAAE,IAAI;gBACX,OAAO,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI,CAAC;aAC1C,CAAC;QACJ,CAAC;QACD,OAAO;YACL,GAAG,mBAAmB;YACtB,GAAG,KAAK;YACR,GAAG,iBAAiB;SACrB,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC;IAEX,MAAM,EAAE,UAAU,EAAE,GAAG,cAAc,EAAE,CAAC;IAExC,yFAAyF;IACzF,SAAS,CACP,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,EAChE,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,OAAO;QACL,UAAU;QACV,OAAO;QACP,SAAS;QACT,aAAa;KACd,CAAC;AACJ,CAAC,CAAC;AACF,eAAe,eAAe,CAAC"}
@@ -1,4 +1,6 @@
1
1
  /* @canonical/generator-ds 0.9.0-experimental.4 */
2
2
  export { default as Wrapper } from "./Wrapper.js";
3
+ export { default as InvisibleWrapper } from "./InvisibleWrapper.js";
4
+ export { default as withWrapper } from "./withWrapper.js";
3
5
  export * from "./types.js";
4
6
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,cAAc,YAAY,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/index.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAClD,OAAO,EAAE,OAAO,IAAI,OAAO,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EAAE,OAAO,IAAI,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AACpE,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC1D,cAAc,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ export default {
2
+ required: (name) => `${name} is required`,
3
+ };
4
+ //# sourceMappingURL=messages.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/messages.ts"],"names":[],"mappings":"AAAA,eAAe;IACb,QAAQ,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,GAAG,IAAI,cAAc;CAClD,CAAC"}
@@ -1,7 +1,15 @@
1
1
  /* @canonical/generator-ds 0.9.0-experimental.4 */
2
2
 
3
- /*
4
- .ds.wrapper {
3
+ .ds.form-wrapper {
4
+ display: grid;
5
+ grid-template-columns: subgrid;
6
+ grid-column: var(--wrapper-columns, 1 / -1);
5
7
 
8
+ .ds.form-label {
9
+ grid-column: var(--form-label-columns, 1 / -1);
10
+ }
11
+
12
+ > .payload {
13
+ grid-column: var(--form-payload-columns, 1 / -1);
14
+ }
6
15
  }
7
- */
@@ -0,0 +1,20 @@
1
+ import React from "react";
2
+ import { useFormContext } from "react-hook-form";
3
+ // TODO improve typing of P
4
+ const withConditionalDisplay = (WrappedComponent) => {
5
+ const ConditionalComponent = (props) => {
6
+ const { condition, ...otherProps } = props;
7
+ if (!condition)
8
+ return React.createElement(WrappedComponent, props);
9
+ const [dependencies, conditionFunction] = condition;
10
+ const { watch } = useFormContext();
11
+ const depValues = watch(dependencies);
12
+ const shouldRender = conditionFunction(depValues);
13
+ if (!shouldRender)
14
+ return null;
15
+ return React.createElement(WrappedComponent, otherProps);
16
+ };
17
+ return ConditionalComponent;
18
+ };
19
+ export default withConditionalDisplay;
20
+ //# sourceMappingURL=withConditionalDisplay.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"withConditionalDisplay.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/withConditionalDisplay.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAMjD,2BAA2B;AAC3B,MAAM,sBAAsB,GAAG,CAC7B,gBAAqD,EACrD,EAAE;IACF,MAAM,oBAAoB,GAAG,CAC3B,KAAoD,EACpD,EAAE;QACF,MAAM,EAAE,SAAS,EAAE,GAAG,UAAU,EAAE,GAAG,KAAK,CAAC;QAC3C,IAAI,CAAC,SAAS;YACZ,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAuB,CAAC,CAAC;QACxE,MAAM,CAAC,YAAY,EAAE,iBAAiB,CAAC,GAAG,SAAS,CAAC;QAEpD,MAAM,EAAE,KAAK,EAAE,GAAG,cAAc,EAAE,CAAC;QACnC,MAAM,SAAS,GAAG,KAAK,CAAC,YAAY,CAAC,CAAC;QACtC,MAAM,YAAY,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC/B,OAAO,KAAK,CAAC,aAAa,CAAC,gBAAgB,EAAE,UAA4B,CAAC,CAAC;IAC7E,CAAC,CAAC;IACF,OAAO,oBAAoB,CAAC;AAC9B,CAAC,CAAC;AAEF,eAAe,sBAAsB,CAAC"}
@@ -1,2 +1,29 @@
1
- export {};
1
+ import * as React from "react";
2
+ import { useMemo } from "react";
3
+ import DefaultWrapper from "./Wrapper.js";
4
+ import withConditionalDisplay from "./withConditionalDisplay.js";
5
+ const withWrapper = (Component, options, Wrapper = DefaultWrapper) => {
6
+ const MemoizedComponent = React.memo(Component);
7
+ function WrappedComponent({ middleware = [], WrapperComponent = Wrapper, ...props }) {
8
+ // We apply the middleware to the component in reverse orderso
9
+ // so that the first middleware in the array is the first to be applied to the component
10
+ const ExtendedComponent = useMemo(() =>
11
+ // The middleware happens between the Wrapper and the Component,
12
+ // hence the return type of P
13
+ middleware
14
+ .reverse()
15
+ .reduce((AccumulatedComponent, hoc) => hoc(AccumulatedComponent), MemoizedComponent), [middleware]);
16
+ // Type casting to avoid hard to read overloads.
17
+ const finalProps = {
18
+ // Component: MemoizedComponent,
19
+ Component: ExtendedComponent,
20
+ ...props,
21
+ ...options,
22
+ };
23
+ // } as WrapperProps<ComponentProps>; // The typing should be ComponentWrapperProps, but it would require an overload
24
+ return React.createElement(WrapperComponent, finalProps);
25
+ }
26
+ return withConditionalDisplay(WrappedComponent);
27
+ };
28
+ export default withWrapper;
2
29
  //# sourceMappingURL=withWrapper.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"withWrapper.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/withWrapper.ts"],"names":[],"mappings":""}
1
+ {"version":3,"file":"withWrapper.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/common/Wrapper/withWrapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAQhC,OAAO,cAAc,MAAM,cAAc,CAAC;AAC1C,OAAO,sBAAsB,MAAM,6BAA6B,CAAC;AAOjE,MAAM,WAAW,GAAG,CAKlB,SAA8C,EAC9C,OAAwC,EACxC,UAA6D,cAAc,EAG3E,EAAE;IACF,MAAM,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAEhD,SAAS,gBAAgB,CAAC,EACxB,UAAU,GAAG,EAAE,EACf,gBAAgB,GAAG,OAAO,EAC1B,GAAG,KAAK,EACsC;QAC9C,8DAA8D;QAC9D,wFAAwF;QAExF,MAAM,iBAAiB,GAAG,OAAO,CAC/B,GAAG,EAAE;QACH,gEAAgE;QAChE,6BAA6B;QAC7B,UAAU;aACP,OAAO,EAAE;aACT,MAAM,CACL,CAAC,oBAAoB,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,oBAAoB,CAAC,EACxD,iBAAiB,CAClB,EACL,CAAC,UAAU,CAAC,CACb,CAAC;QAEF,gDAAgD;QAChD,MAAM,UAAU,GAAG;YACjB,gCAAgC;YAChC,SAAS,EAAE,iBAAiB;YAC5B,GAAG,KAAK;YACR,GAAG,OAAO;SACX,CAAC;QACF,qHAAqH;QAErH,OAAO,KAAK,CAAC,aAAa,CACxB,gBAAgB,EAChB,UAA0C,CAC3C,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;AAClD,CAAC,CAAC;AAEF,eAAe,WAAW,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export * from "./Label/index.js";
2
2
  export * from "./Description/index.js";
3
3
  export * from "./Wrapper/index.js";
4
+ export * from "./Error/index.js";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ui/Field/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AAEjC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ui/Field/common/index.ts"],"names":[],"mappings":"AAAA,cAAc,kBAAkB,CAAC;AAEjC,cAAc,wBAAwB,CAAC;AAEvC,cAAc,oBAAoB,CAAC;AAEnC,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const ID_PREFIX = "form-";
2
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../../src/ui/Field/constants.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG,OAAO,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { default as useFieldError } from "./useFieldError.js";
2
+ export { default as useFieldAriaProperties } from "./useFieldAriaProperties.js";
3
+ export { default as useOptionAriaProperties } from "./useOptionAriaProperties.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../src/ui/Field/hooks/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,OAAO,IAAI,uBAAuB,EAAE,MAAM,8BAA8B,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { useId, useMemo } from "react";
2
+ /**
3
+ * Generates common ARIA properties for form field elements including input, label, description, and error state.
4
+ * @param {string} name - The name of the field.
5
+ * @param {boolean} isError - Indicates if the field is in an error state.
6
+ * @returns An object containing ARIA attributes for input, label, description, and error state.
7
+ */
8
+ const useFieldAriaProps = (name, isError) => {
9
+ const uniqueId = useId();
10
+ const props = useMemo(() => {
11
+ const baseId = `${uniqueId}-${name}`;
12
+ const labelId = `${baseId}-label`;
13
+ const descriptionId = `${baseId}-description`;
14
+ const errorId = `${baseId}-error`;
15
+ return {
16
+ input: {
17
+ id: baseId,
18
+ "aria-labelledby": labelId,
19
+ "aria-describedby": `${descriptionId}${isError}` ? ` ${labelId}` : "",
20
+ "aria-errormessage": isError ? errorId : undefined,
21
+ "aria-invalid": isError,
22
+ },
23
+ label: {
24
+ id: labelId,
25
+ htmlFor: baseId,
26
+ },
27
+ description: { id: descriptionId },
28
+ error: {
29
+ id: errorId,
30
+ // role: "alert",
31
+ },
32
+ };
33
+ }, [name, isError, uniqueId]);
34
+ return props;
35
+ };
36
+ export default useFieldAriaProps;
37
+ //# sourceMappingURL=useFieldAriaProperties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFieldAriaProperties.js","sourceRoot":"","sources":["../../../../../src/ui/Field/hooks/useFieldAriaProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAEvC;;;;;GAKG;AACH,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,OAAgB,EAAE,EAAE;IAC3D,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,OAAO,GAAG,GAAG,MAAM,QAAQ,CAAC;QAClC,MAAM,aAAa,GAAG,GAAG,MAAM,cAAc,CAAC;QAC9C,MAAM,OAAO,GAAG,GAAG,MAAM,QAAQ,CAAC;QAElC,OAAO;YACL,KAAK,EAAE;gBACL,EAAE,EAAE,MAAM;gBACV,iBAAiB,EAAE,OAAO;gBAC1B,kBAAkB,EAAE,GAAG,aAAa,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;gBACrE,mBAAmB,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;gBAClD,cAAc,EAAE,OAAO;aACxB;YACD,KAAK,EAAE;gBACL,EAAE,EAAE,OAAO;gBACX,OAAO,EAAE,MAAM;aAChB;YACD,WAAW,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE;YAClC,KAAK,EAAE;gBACL,EAAE,EAAE,OAAO;gBACX,iBAAiB;aAClB;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC;IAC9B,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,iBAAiB,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { useMemo } from "react";
2
+ import { useFormState, } from "react-hook-form";
3
+ function useFieldError(name) {
4
+ const { errors } = useFormState({ name });
5
+ const fieldTree = name.split(".");
6
+ // biome-ignore lint/correctness/useExhaustiveDependencies: using a proxy
7
+ const fieldError = useMemo(() =>
8
+ // @ts-ignore TODO
9
+ fieldTree.reduce((acc, key) => {
10
+ if (acc) {
11
+ return acc[key];
12
+ }
13
+ return undefined;
14
+ }, errors), [
15
+ name, //proxy for errors
16
+ // Below, those dependencies are lazily referenced, hence the need to explicitly evaluate them
17
+ // We assume that three levels of nesting is enough for most use cases
18
+ // @ts-ignore TODO
19
+ errors[fieldTree[0]],
20
+ // @ts-ignore TODO
21
+ errors[fieldTree[0]]?.[fieldTree[1]],
22
+ // @ts-ignore TODO
23
+ errors[fieldTree[0]]?.[fieldTree[1]]?.[fieldTree[2]],
24
+ ]);
25
+ return fieldError;
26
+ }
27
+ export default useFieldError;
28
+ //# sourceMappingURL=useFieldError.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFieldError.js","sourceRoot":"","sources":["../../../../../src/ui/Field/hooks/useFieldError.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAML,YAAY,GACb,MAAM,iBAAiB,CAAC;AAEzB,SAAS,aAAa,CACpB,IAAY;IAIZ,MAAM,EAAE,MAAM,EAAE,GAAG,YAAY,CAAC,EAAE,IAAI,EAAE,CAAkC,CAAC;IAE3E,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAElC,yEAAyE;IACzE,MAAM,UAAU,GAAG,OAAO,CACxB,GAA2B,EAAE;IAC3B,kBAAkB;IAClB,SAAS,CAAC,MAAM,CAAY,CAAC,GAA8B,EAAE,GAAG,EAAE,EAAE;QAClE,IAAI,GAAG,EAAE,CAAC;YACR,OAAO,GAAG,CAAC,GAAG,CAAC,CAAC;QAClB,CAAC;QACD,OAAO,SAAS,CAAC;IACnB,CAAC,EAAE,MAAM,CAAC,EACZ;QACE,IAAI,EAAE,kBAAkB;QACxB,8FAA8F;QAC9F,sEAAsE;QACtE,kBAAkB;QAClB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACpB,kBAAkB;QAClB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QACpC,kBAAkB;QAClB,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;KACrD,CACF,CAAC;IACF,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,30 @@
1
+ import { useId, useMemo } from "react";
2
+ /**
3
+ * Generates ARIA properties for a specific option in a field.
4
+ * @param {string} name - The base name of the input field.
5
+ * @param {string} optionValue - The value of the specific option.
6
+ * @returns An object containing ARIA attributes for the option.
7
+ */
8
+ const useOptionAriaProps = (name, optionValue) => {
9
+ const uniqueId = useId();
10
+ const props = useMemo(() => {
11
+ const baseId = `${uniqueId}-${name}`;
12
+ const descriptionId = `${baseId}-description`;
13
+ const optionBaseId = `${baseId}-${optionValue}`;
14
+ const optionLabelId = `${optionBaseId}-label`;
15
+ return {
16
+ input: {
17
+ id: optionBaseId,
18
+ "aria-labelledby": optionLabelId,
19
+ "aria-describedby": descriptionId,
20
+ },
21
+ label: {
22
+ id: optionLabelId,
23
+ htmlFor: optionBaseId,
24
+ },
25
+ };
26
+ }, [name, optionValue, uniqueId]);
27
+ return props;
28
+ };
29
+ export default useOptionAriaProps;
30
+ //# sourceMappingURL=useOptionAriaProperties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useOptionAriaProperties.js","sourceRoot":"","sources":["../../../../../src/ui/Field/hooks/useOptionAriaProperties.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAGvC;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,KAAK,EAAE,CAAC;IACzB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,EAAE;QACzB,MAAM,MAAM,GAAG,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrC,MAAM,aAAa,GAAG,GAAG,MAAM,cAAc,CAAC;QAE9C,MAAM,YAAY,GAAG,GAAG,MAAM,IAAI,WAAW,EAAE,CAAC;QAChD,MAAM,aAAa,GAAG,GAAG,YAAY,QAAQ,CAAC;QAE9C,OAAO;YACL,KAAK,EAAE;gBACL,EAAE,EAAE,YAAY;gBAChB,iBAAiB,EAAE,aAAa;gBAChC,kBAAkB,EAAE,aAAa;aAClC;YACD,KAAK,EAAE;gBACL,EAAE,EAAE,aAAa;gBACjB,OAAO,EAAE,YAAY;aACtB;SACF,CAAC;IACJ,CAAC,EAAE,CAAC,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC"}
@@ -1,14 +1,17 @@
1
1
  import { jsx as _jsx } from "react/jsx-runtime";
2
2
  import { useFormContext } from "react-hook-form";
3
3
  import "./styles.css";
4
- const componentCssClassName = "ds checkbox";
4
+ import withWrapper from "../../common/Wrapper/withWrapper.js";
5
+ const componentCssClassName = "ds form-checkbox";
5
6
  /**
6
7
  * description of the Checkbox component
7
8
  * @returns {React.ReactElement} - Rendered Checkbox
8
9
  */
9
- const Checkbox = ({ id, className, style, name, registerProps, }) => {
10
+ const Checkbox = ({ id, className, style, name, registerProps, ...otherProps // Should only be native input props
11
+ }) => {
10
12
  const { register } = useFormContext();
11
- return (_jsx("input", { id: id, style: style, type: "checkbox", className: [componentCssClassName, className].filter(Boolean).join(" "), ...register(name, registerProps) }));
13
+ return (_jsx("input", { id: id, style: style, type: "checkbox", className: [componentCssClassName, className].filter(Boolean).join(" "), ...otherProps, ...register(name, registerProps) }));
12
14
  };
13
- export default Checkbox;
15
+ // export default Checkbox;
16
+ export default withWrapper(Checkbox);
14
17
  //# sourceMappingURL=Checkbox.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/inputs/Checkbox/Checkbox.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,cAAc,CAAC;AAEtB,MAAM,qBAAqB,GAAG,aAAa,CAAC;AAE5C;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,EAChB,EAAE,EACF,SAAS,EACT,KAAK,EACL,IAAI,EACJ,aAAa,GACC,EAAsB,EAAE;IACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IACtC,OAAO,CACL,gBACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,UAAU,EACf,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KACnE,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,GACjC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,QAAQ,CAAC"}
1
+ {"version":3,"file":"Checkbox.js","sourceRoot":"","sources":["../../../../../../src/ui/Field/inputs/Checkbox/Checkbox.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEjD,OAAO,cAAc,CAAC;AACtB,OAAO,WAAW,MAAM,qCAAqC,CAAC;AAE9D,MAAM,qBAAqB,GAAG,kBAAkB,CAAC;AAEjD;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,EAChB,EAAE,EACF,SAAS,EACT,KAAK,EACL,IAAI,EACJ,aAAa,EACb,GAAG,UAAU,CAAC,oCAAoC;EACpC,EAAsB,EAAE;IACtC,MAAM,EAAE,QAAQ,EAAE,GAAG,cAAc,EAAE,CAAC;IACtC,OAAO,CACL,gBACE,EAAE,EAAE,EAAE,EACN,KAAK,EAAE,KAAK,EACZ,IAAI,EAAC,UAAU,EACf,SAAS,EAAE,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,KACnE,UAAU,KACV,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC,GACjC,CACH,CAAC;AACJ,CAAC,CAAC;AAEF,2BAA2B;AAC3B,eAAe,WAAW,CAAC,QAAQ,CAAC,CAAC"}
@@ -1,7 +1,7 @@
1
1
  /* @canonical/generator-ds 0.9.0-experimental.4 */
2
2
 
3
3
  /*
4
- .ds.checkbox {
4
+ .ds.form-checkbox {
5
5
 
6
6
  }
7
7
  */