@bspk/ui 1.3.21 → 1.3.23

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 (307) hide show
  1. package/dist/components/Accordion/Accordion.js +1 -1
  2. package/dist/components/Accordion/Accordion.js.map +1 -1
  3. package/dist/components/Accordion/accordion.css +19 -12
  4. package/dist/components/Accordion/accordion.css.js +19 -12
  5. package/dist/components/BottomNavigation/BottomNavigation.d.ts +0 -1
  6. package/dist/components/BottomNavigation/BottomNavigation.js +0 -1
  7. package/dist/components/BottomNavigation/BottomNavigation.js.map +1 -1
  8. package/dist/components/BottomNavigation/bottom-navigation.css +1 -0
  9. package/dist/components/BottomNavigation/bottom-navigation.css.js +1 -0
  10. package/dist/components/Button/button.css +4 -0
  11. package/dist/components/Button/button.css.js +4 -0
  12. package/dist/components/Checkbox/Checkbox.js +3 -3
  13. package/dist/components/Checkbox/Checkbox.js.map +1 -1
  14. package/dist/components/CheckboxGroup/CheckboxGroup.d.ts +4 -5
  15. package/dist/components/CheckboxGroup/CheckboxGroup.js +8 -13
  16. package/dist/components/CheckboxGroup/CheckboxGroup.js.map +1 -1
  17. package/dist/components/CheckboxGroup/CheckboxGroupExample.js +5 -0
  18. package/dist/components/CheckboxGroup/CheckboxGroupExample.js.map +1 -1
  19. package/dist/components/CheckboxGroup/checkbox-group.css +5 -0
  20. package/dist/components/CheckboxGroup/checkbox-group.css.js +5 -0
  21. package/dist/components/CheckboxGroupField/CheckboxGroupField.d.ts +3 -3
  22. package/dist/components/CheckboxGroupField/CheckboxGroupField.js +6 -4
  23. package/dist/components/CheckboxGroupField/CheckboxGroupField.js.map +1 -1
  24. package/dist/components/ChipGroup/ChipGroup.d.ts +0 -1
  25. package/dist/components/ChipGroup/ChipGroup.js +0 -1
  26. package/dist/components/ChipGroup/ChipGroup.js.map +1 -1
  27. package/dist/components/ChipGroup/chip-group.css +3 -0
  28. package/dist/components/ChipGroup/chip-group.css.js +3 -0
  29. package/dist/components/DatePicker/DatePicker.d.ts +4 -8
  30. package/dist/components/DatePicker/DatePicker.js +6 -18
  31. package/dist/components/DatePicker/DatePicker.js.map +1 -1
  32. package/dist/components/DatePicker/DatePickerExample.js +3 -3
  33. package/dist/components/DatePicker/DatePickerExample.js.map +1 -1
  34. package/dist/components/DatePickerField/DatePickerField.d.ts +4 -4
  35. package/dist/components/DatePickerField/DatePickerField.js +6 -4
  36. package/dist/components/DatePickerField/DatePickerField.js.map +1 -1
  37. package/dist/components/Dialog/Dialog.d.ts +2 -3
  38. package/dist/components/Dialog/Dialog.js +2 -3
  39. package/dist/components/Dialog/Dialog.js.map +1 -1
  40. package/dist/components/Fab/Fab.d.ts +8 -5
  41. package/dist/components/Fab/Fab.js +8 -5
  42. package/dist/components/Fab/Fab.js.map +1 -1
  43. package/dist/components/Fab/fab.css +1 -0
  44. package/dist/components/Fab/fab.css.js +1 -0
  45. package/dist/components/Field/Field.d.ts +39 -20
  46. package/dist/components/Field/Field.js +10 -40
  47. package/dist/components/Field/Field.js.map +1 -1
  48. package/dist/components/Field/FieldExample.d.ts +1 -0
  49. package/dist/components/Field/FieldExample.js +10 -3
  50. package/dist/components/Field/FieldExample.js.map +1 -1
  51. package/dist/components/Field/Fieldset.d.ts +40 -0
  52. package/dist/components/Field/Fieldset.js +44 -0
  53. package/dist/components/Field/Fieldset.js.map +1 -0
  54. package/dist/components/Field/field.css +9 -7
  55. package/dist/components/Field/field.css.js +9 -7
  56. package/dist/components/Field/index.d.ts +1 -3
  57. package/dist/components/Field/index.js +1 -3
  58. package/dist/components/Field/index.js.map +1 -1
  59. package/dist/components/Field/utils.d.ts +8 -38
  60. package/dist/components/Field/utils.js +6 -33
  61. package/dist/components/Field/utils.js.map +1 -1
  62. package/dist/components/FileUpload/FileUpload.js +1 -1
  63. package/dist/components/FileUpload/FileUpload.js.map +1 -1
  64. package/dist/components/FileUploadItem/FileUploadItem.js +1 -1
  65. package/dist/components/FileUploadItem/FileUploadItem.js.map +1 -1
  66. package/dist/components/Flex/Flex.d.ts +10 -6
  67. package/dist/components/Flex/Flex.js +10 -6
  68. package/dist/components/Flex/Flex.js.map +1 -1
  69. package/dist/components/InlineAlert/InlineAlert.d.ts +2 -2
  70. package/dist/components/InlineAlert/InlineAlert.js +2 -2
  71. package/dist/components/InlineAlert/InlineAlert.js.map +1 -1
  72. package/dist/components/Input/Input.d.ts +59 -15
  73. package/dist/components/Input/Input.js +40 -25
  74. package/dist/components/Input/Input.js.map +1 -1
  75. package/dist/components/Input/InputExample.js +4 -4
  76. package/dist/components/Input/InputExample.js.map +1 -1
  77. package/dist/components/Input/index.d.ts +0 -1
  78. package/dist/components/Input/index.js +0 -1
  79. package/dist/components/Input/index.js.map +1 -1
  80. package/dist/components/InputField/InputField.d.ts +4 -4
  81. package/dist/components/InputField/InputField.js +6 -4
  82. package/dist/components/InputField/InputField.js.map +1 -1
  83. package/dist/components/InputNumber/InputNumber.d.ts +8 -7
  84. package/dist/components/InputNumber/InputNumber.js +9 -16
  85. package/dist/components/InputNumber/InputNumber.js.map +1 -1
  86. package/dist/components/InputNumber/InputNumberExample.js +3 -3
  87. package/dist/components/InputNumber/InputNumberExample.js.map +1 -1
  88. package/dist/components/InputNumber/input-number.css +1 -0
  89. package/dist/components/InputNumber/input-number.css.js +1 -0
  90. package/dist/components/InputNumberField/InputNumberField.d.ts +4 -4
  91. package/dist/components/InputNumberField/InputNumberField.js +6 -4
  92. package/dist/components/InputNumberField/InputNumberField.js.map +1 -1
  93. package/dist/components/InputPhone/InputPhone.d.ts +8 -8
  94. package/dist/components/InputPhone/InputPhone.js +12 -18
  95. package/dist/components/InputPhone/InputPhone.js.map +1 -1
  96. package/dist/components/InputPhone/InputPhoneExample.js +3 -3
  97. package/dist/components/InputPhone/InputPhoneExample.js.map +1 -1
  98. package/dist/components/InputPhone/input-phone.css +1 -0
  99. package/dist/components/InputPhone/input-phone.css.js +1 -0
  100. package/dist/components/InputPhoneField/InputPhoneField.d.ts +4 -4
  101. package/dist/components/InputPhoneField/InputPhoneField.js +6 -4
  102. package/dist/components/InputPhoneField/InputPhoneField.js.map +1 -1
  103. package/dist/components/Link/Link.d.ts +0 -1
  104. package/dist/components/Link/Link.js +0 -1
  105. package/dist/components/Link/Link.js.map +1 -1
  106. package/dist/components/ListItem/list-item.css +1 -0
  107. package/dist/components/ListItem/list-item.css.js +1 -0
  108. package/dist/components/Modal/Modal.js +22 -26
  109. package/dist/components/Modal/Modal.js.map +1 -1
  110. package/dist/components/Modal/ModalExample.js +4 -1
  111. package/dist/components/Modal/ModalExample.js.map +1 -1
  112. package/dist/components/Modal/modal.css +4 -2
  113. package/dist/components/Modal/modal.css.js +4 -2
  114. package/dist/components/OTPInput/otp-input.css +1 -0
  115. package/dist/components/OTPInput/otp-input.css.js +1 -0
  116. package/dist/components/Pagination/Pagination.js +2 -2
  117. package/dist/components/Pagination/Pagination.js.map +1 -1
  118. package/dist/components/Password/Password.d.ts +9 -7
  119. package/dist/components/Password/Password.js +13 -17
  120. package/dist/components/Password/Password.js.map +1 -1
  121. package/dist/components/Password/PasswordExample.js +3 -3
  122. package/dist/components/Password/PasswordExample.js.map +1 -1
  123. package/dist/components/PasswordField/PasswordField.d.ts +4 -4
  124. package/dist/components/PasswordField/PasswordField.js +6 -4
  125. package/dist/components/PasswordField/PasswordField.js.map +1 -1
  126. package/dist/components/Popover/Popover.d.ts +0 -1
  127. package/dist/components/Popover/Popover.js +0 -1
  128. package/dist/components/Popover/Popover.js.map +1 -1
  129. package/dist/components/RadioGroup/RadioGroup.d.ts +1 -2
  130. package/dist/components/RadioGroup/RadioGroup.js +5 -11
  131. package/dist/components/RadioGroup/RadioGroup.js.map +1 -1
  132. package/dist/components/RadioGroup/radio-group.css +3 -0
  133. package/dist/components/RadioGroup/radio-group.css.js +3 -0
  134. package/dist/components/RadioGroupField/RadioGroupField.d.ts +3 -3
  135. package/dist/components/RadioGroupField/RadioGroupField.js +6 -4
  136. package/dist/components/RadioGroupField/RadioGroupField.js.map +1 -1
  137. package/dist/components/SearchBar/SearchBar.d.ts +0 -1
  138. package/dist/components/SearchBar/SearchBar.js +0 -1
  139. package/dist/components/SearchBar/SearchBar.js.map +1 -1
  140. package/dist/components/SegmentedControl/SegmentedControl.d.ts +0 -1
  141. package/dist/components/SegmentedControl/SegmentedControl.js +0 -1
  142. package/dist/components/SegmentedControl/SegmentedControl.js.map +1 -1
  143. package/dist/components/Select/Select.d.ts +7 -6
  144. package/dist/components/Select/Select.js +10 -15
  145. package/dist/components/Select/Select.js.map +1 -1
  146. package/dist/components/Select/SelectExample.js +3 -3
  147. package/dist/components/Select/SelectExample.js.map +1 -1
  148. package/dist/components/Select/select.css +0 -10
  149. package/dist/components/Select/select.css.js +0 -10
  150. package/dist/components/SelectField/SelectField.d.ts +4 -4
  151. package/dist/components/SelectField/SelectField.js +6 -4
  152. package/dist/components/SelectField/SelectField.js.map +1 -1
  153. package/dist/components/Slider/Slider.d.ts +1 -2
  154. package/dist/components/Slider/Slider.js +1 -2
  155. package/dist/components/Slider/Slider.js.map +1 -1
  156. package/dist/components/Snackbar/Snackbar.d.ts +0 -1
  157. package/dist/components/Snackbar/Snackbar.js +0 -1
  158. package/dist/components/Snackbar/Snackbar.js.map +1 -1
  159. package/dist/components/Switch/Switch.d.ts +0 -1
  160. package/dist/components/Switch/Switch.js +0 -1
  161. package/dist/components/Switch/Switch.js.map +1 -1
  162. package/dist/components/TabGroup/TabGroup.d.ts +0 -1
  163. package/dist/components/TabGroup/TabGroup.js +0 -1
  164. package/dist/components/TabGroup/TabGroup.js.map +1 -1
  165. package/dist/components/TabList/TabList.d.ts +0 -1
  166. package/dist/components/TabList/TabList.js +0 -1
  167. package/dist/components/TabList/TabList.js.map +1 -1
  168. package/dist/components/TabList/tab-list.css +1 -0
  169. package/dist/components/TabList/tab-list.css.js +1 -0
  170. package/dist/components/Table/table.css +2 -1
  171. package/dist/components/Table/table.css.js +2 -1
  172. package/dist/components/Textarea/Textarea.d.ts +4 -7
  173. package/dist/components/Textarea/Textarea.js +5 -16
  174. package/dist/components/Textarea/Textarea.js.map +1 -1
  175. package/dist/components/Textarea/TextareaExample.js +3 -3
  176. package/dist/components/Textarea/TextareaExample.js.map +1 -1
  177. package/dist/components/TextareaField/TextareaField.d.ts +4 -4
  178. package/dist/components/TextareaField/TextareaField.js +6 -4
  179. package/dist/components/TextareaField/TextareaField.js.map +1 -1
  180. package/dist/components/TimePicker/TimePicker.d.ts +8 -6
  181. package/dist/components/TimePicker/TimePicker.js +10 -14
  182. package/dist/components/TimePicker/TimePicker.js.map +1 -1
  183. package/dist/components/TimePicker/TimePickerExample.js +3 -3
  184. package/dist/components/TimePicker/TimePickerExample.js.map +1 -1
  185. package/dist/components/TimePickerField/TimePickerField.d.ts +4 -4
  186. package/dist/components/TimePickerField/TimePickerField.js +6 -4
  187. package/dist/components/TimePickerField/TimePickerField.js.map +1 -1
  188. package/dist/hooks/useFloating.d.ts +0 -6
  189. package/dist/hooks/useFloating.js +0 -6
  190. package/dist/hooks/useFloating.js.map +1 -1
  191. package/dist/styles/base.css +71 -81
  192. package/dist/styles/base.css.js +71 -81
  193. package/dist/types/common.d.ts +3 -0
  194. package/dist/types/common.js.map +1 -1
  195. package/package.json +3 -4
  196. package/src/components/Accordion/Accordion.tsx +2 -2
  197. package/src/components/Accordion/accordion.scss +10 -1
  198. package/src/components/BottomNavigation/BottomNavigation.tsx +0 -1
  199. package/src/components/BottomNavigation/bottom-navigation.scss +1 -0
  200. package/src/components/Button/button.scss +4 -0
  201. package/src/components/Checkbox/Checkbox.tsx +3 -3
  202. package/src/components/CheckboxGroup/CheckboxGroup.tsx +37 -52
  203. package/src/components/CheckboxGroup/CheckboxGroupExample.tsx +6 -0
  204. package/src/components/CheckboxGroup/checkbox-group.scss +6 -0
  205. package/src/components/CheckboxGroupField/CheckboxGroupField.tsx +16 -11
  206. package/src/components/ChipGroup/ChipGroup.tsx +0 -1
  207. package/src/components/ChipGroup/chip-group.scss +4 -0
  208. package/src/components/DatePicker/DatePicker.tsx +9 -20
  209. package/src/components/DatePicker/DatePickerExample.tsx +3 -5
  210. package/src/components/DatePickerField/DatePickerField.rtl.test.tsx +1 -1
  211. package/src/components/DatePickerField/DatePickerField.tsx +11 -6
  212. package/src/components/Dialog/Dialog.tsx +2 -3
  213. package/src/components/Fab/Fab.tsx +8 -5
  214. package/src/components/Fab/fab.scss +1 -0
  215. package/src/components/Field/Field.rtl.test.tsx +8 -6
  216. package/src/components/Field/Field.tsx +71 -63
  217. package/src/components/Field/FieldExample.tsx +27 -5
  218. package/src/components/Field/Fieldset.tsx +82 -0
  219. package/src/components/Field/field.scss +27 -26
  220. package/src/components/Field/index.tsx +1 -3
  221. package/src/components/Field/utils.ts +15 -77
  222. package/src/components/FileUpload/FileUpload.tsx +1 -1
  223. package/src/components/FileUploadItem/FileUploadItem.tsx +1 -1
  224. package/src/components/Flex/Flex.tsx +10 -6
  225. package/src/components/InlineAlert/InlineAlert.rtl.test.tsx +1 -1
  226. package/src/components/InlineAlert/InlineAlert.tsx +3 -3
  227. package/src/components/Input/Input.tsx +135 -48
  228. package/src/components/Input/InputExample.tsx +4 -6
  229. package/src/components/Input/index.tsx +0 -1
  230. package/src/components/InputField/InputField.tsx +11 -6
  231. package/src/components/InputNumber/InputNumber.tsx +11 -16
  232. package/src/components/InputNumber/InputNumberExample.tsx +7 -4
  233. package/src/components/InputNumber/input-number.scss +1 -0
  234. package/src/components/InputNumberField/InputNumberField.tsx +11 -6
  235. package/src/components/InputPhone/InputPhone.tsx +14 -18
  236. package/src/components/InputPhone/InputPhoneExample.tsx +7 -6
  237. package/src/components/InputPhone/input-phone.scss +1 -0
  238. package/src/components/InputPhoneField/InputPhoneField.tsx +11 -6
  239. package/src/components/Link/Link.tsx +0 -1
  240. package/src/components/ListItem/list-item.scss +1 -0
  241. package/src/components/Modal/Modal.tsx +26 -30
  242. package/src/components/Modal/ModalExample.tsx +7 -2
  243. package/src/components/Modal/modal.scss +1 -1
  244. package/src/components/OTPInput/otp-input.scss +1 -0
  245. package/src/components/Pagination/Pagination.tsx +2 -2
  246. package/src/components/Password/Password.tsx +15 -17
  247. package/src/components/Password/PasswordExample.tsx +13 -5
  248. package/src/components/PasswordField/PasswordField.tsx +11 -6
  249. package/src/components/Popover/Popover.tsx +0 -1
  250. package/src/components/RadioGroup/RadioGroup.tsx +14 -20
  251. package/src/components/RadioGroup/radio-group.scss +4 -0
  252. package/src/components/RadioGroupField/RadioGroupField.tsx +16 -11
  253. package/src/components/SearchBar/SearchBar.tsx +0 -1
  254. package/src/components/SegmentedControl/SegmentedControl.tsx +0 -1
  255. package/src/components/Select/Select.tsx +13 -14
  256. package/src/components/Select/SelectExample.tsx +7 -4
  257. package/src/components/Select/select.scss +0 -12
  258. package/src/components/SelectField/SelectField.rtl.test.tsx +7 -18
  259. package/src/components/SelectField/SelectField.tsx +11 -6
  260. package/src/components/Slider/Slider.tsx +1 -2
  261. package/src/components/Snackbar/Snackbar.tsx +0 -1
  262. package/src/components/Switch/Switch.tsx +0 -1
  263. package/src/components/TabGroup/TabGroup.tsx +0 -1
  264. package/src/components/TabList/TabList.tsx +0 -1
  265. package/src/components/TabList/tab-list.scss +1 -0
  266. package/src/components/Table/table.scss +2 -1
  267. package/src/components/Textarea/Textarea.tsx +8 -17
  268. package/src/components/Textarea/TextareaExample.tsx +3 -5
  269. package/src/components/TextareaField/TextareaField.tsx +11 -6
  270. package/src/components/TimePicker/TimePicker.tsx +12 -15
  271. package/src/components/TimePicker/TimePickerExample.tsx +3 -5
  272. package/src/components/TimePickerField/TimePickerField.tsx +11 -6
  273. package/src/hooks/useFloating.ts +0 -6
  274. package/src/styles/base.scss +109 -87
  275. package/src/types/common.ts +9 -0
  276. package/dist/components/Field/FieldDescription.d.ts +0 -9
  277. package/dist/components/Field/FieldDescription.js +0 -13
  278. package/dist/components/Field/FieldDescription.js.map +0 -1
  279. package/dist/components/Field/FieldError.d.ts +0 -11
  280. package/dist/components/Field/FieldError.js +0 -14
  281. package/dist/components/Field/FieldError.js.map +0 -1
  282. package/dist/components/Field/FieldLabel.d.ts +0 -21
  283. package/dist/components/Field/FieldLabel.js +0 -14
  284. package/dist/components/Field/FieldLabel.js.map +0 -1
  285. package/dist/components/FormField/FormField.d.ts +0 -66
  286. package/dist/components/FormField/FormField.js +0 -31
  287. package/dist/components/FormField/FormField.js.map +0 -1
  288. package/dist/components/FormField/FormFieldExample.d.ts +0 -9
  289. package/dist/components/FormField/FormFieldExample.js +0 -99
  290. package/dist/components/FormField/FormFieldExample.js.map +0 -1
  291. package/dist/components/FormField/index.d.ts +0 -1
  292. package/dist/components/FormField/index.js +0 -2
  293. package/dist/components/FormField/index.js.map +0 -1
  294. package/dist/components/Input/InputElement.d.ts +0 -82
  295. package/dist/components/Input/InputElement.js +0 -64
  296. package/dist/components/Input/InputElement.js.map +0 -1
  297. package/dist/components/Link/link.css +0 -18
  298. package/dist/components/Link/link.css.js +0 -23
  299. package/src/components/Field/FieldDescription.tsx +0 -17
  300. package/src/components/Field/FieldError.tsx +0 -25
  301. package/src/components/Field/FieldLabel.tsx +0 -44
  302. package/src/components/FormField/FormField.rtl.test.tsx +0 -20
  303. package/src/components/FormField/FormField.tsx +0 -95
  304. package/src/components/FormField/FormFieldExample.tsx +0 -277
  305. package/src/components/FormField/index.tsx +0 -1
  306. package/src/components/Input/InputElement.tsx +0 -192
  307. package/src/components/Link/link.scss +0 -21
@@ -142,87 +142,6 @@ body[data-bspk] {
142
142
  color: var(--foreground-neutral-on-surface);
143
143
  min-width: 343px;
144
144
  }
145
- body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]),
146
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]) {
147
- color: var(--foreground-link-text-default);
148
- }
149
- body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]):not([disabled]):hover, body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]):not([disabled])[data-pseudo=hover],
150
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]):not([disabled]):hover,
151
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]):not([disabled])[data-pseudo=hover] {
152
- color: var(--foreground-link-text-default-hovered);
153
- }
154
- body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]):not([disabled]):active, body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]):not([disabled])[data-pseudo=active],
155
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]):not([disabled]):active,
156
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]):not([disabled])[data-pseudo=active] {
157
- color: var(--foreground-link-text-default);
158
- filter: brightness(80%);
159
- }
160
- body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]):not([disabled]):visited, body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item]):not([disabled])[data-pseudo=visited],
161
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]):not([disabled]):visited,
162
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item]):not([disabled])[data-pseudo=visited] {
163
- color: var(--foreground-link-text-default-visited);
164
- }
165
- body[data-bspk] a:not([data-bspk=button], [data-bspk=list-item])[disabled],
166
- body[data-bspk] [data-bspk=link]:not([data-bspk=button], [data-bspk=list-item])[disabled] {
167
- pointer-events: none;
168
- cursor: text;
169
- color: var(--foreground-link-text-default-disabled);
170
- }
171
- body[data-bspk] a[data-subtle],
172
- body[data-bspk] [data-bspk=link][data-subtle] {
173
- text-decoration: none;
174
- color: var(--foreground-neutral-on-surface);
175
- }
176
- body[data-bspk] a[data-subtle]:not([disabled]):hover, body[data-bspk] a[data-subtle]:not([disabled])[data-pseudo=hover],
177
- body[data-bspk] [data-bspk=link][data-subtle]:not([disabled]):hover,
178
- body[data-bspk] [data-bspk=link][data-subtle]:not([disabled])[data-pseudo=hover] {
179
- text-decoration: underline;
180
- color: var(--foreground-link-text-subtle-hovered);
181
- }
182
- body[data-bspk] a[data-subtle]:not([disabled]):active, body[data-bspk] a[data-subtle]:not([disabled])[data-pseudo=active],
183
- body[data-bspk] [data-bspk=link][data-subtle]:not([disabled]):active,
184
- body[data-bspk] [data-bspk=link][data-subtle]:not([disabled])[data-pseudo=active] {
185
- text-decoration: underline;
186
- color: var(--foreground-link-text-subtle-pressed);
187
- }
188
- body[data-bspk] a[data-subtle]:not([disabled]):visited, body[data-bspk] a[data-subtle]:not([disabled])[data-pseudo=visited],
189
- body[data-bspk] [data-bspk=link][data-subtle]:not([disabled]):visited,
190
- body[data-bspk] [data-bspk=link][data-subtle]:not([disabled])[data-pseudo=visited] {
191
- color: var(--foreground-neutral-on-surface);
192
- }
193
- body[data-bspk] a[data-subtle][disabled],
194
- body[data-bspk] [data-bspk=link][data-subtle][disabled] {
195
- pointer-events: none;
196
- color: var(--foreground-link-text-subtle-disabled);
197
- }
198
- body[data-bspk] a[data-subtle-inverse],
199
- body[data-bspk] [data-bspk=link][data-subtle-inverse] {
200
- text-decoration: none;
201
- color: var(--foreground-neutral-inverse-on-surface);
202
- }
203
- body[data-bspk] a[data-subtle-inverse]:not([disabled]):hover, body[data-bspk] a[data-subtle-inverse]:not([disabled])[data-pseudo=hover],
204
- body[data-bspk] [data-bspk=link][data-subtle-inverse]:not([disabled]):hover,
205
- body[data-bspk] [data-bspk=link][data-subtle-inverse]:not([disabled])[data-pseudo=hover] {
206
- text-decoration: underline;
207
- color: var(--foreground-link-text-subtle-inverse-hovered);
208
- }
209
- body[data-bspk] a[data-subtle-inverse]:not([disabled]):active, body[data-bspk] a[data-subtle-inverse]:not([disabled])[data-pseudo=active],
210
- body[data-bspk] [data-bspk=link][data-subtle-inverse]:not([disabled]):active,
211
- body[data-bspk] [data-bspk=link][data-subtle-inverse]:not([disabled])[data-pseudo=active] {
212
- text-decoration: underline;
213
- color: var(--foreground-link-text-subtle-inverse-pressed);
214
- }
215
- body[data-bspk] a[data-subtle-inverse]:not([disabled]):visited, body[data-bspk] a[data-subtle-inverse]:not([disabled])[data-pseudo=visited],
216
- body[data-bspk] [data-bspk=link][data-subtle-inverse]:not([disabled]):visited,
217
- body[data-bspk] [data-bspk=link][data-subtle-inverse]:not([disabled])[data-pseudo=visited] {
218
- color: var(--foreground-neutral-on-inverse-surface);
219
- }
220
- body[data-bspk] a[data-subtle-inverse][disabled],
221
- body[data-bspk] [data-bspk=link][data-subtle-inverse][disabled] {
222
- pointer-events: none;
223
- color: var(--foreground-link-text-subtle-inversed-disabled);
224
- }
225
-
226
145
  [data-touch-target-parent] {
227
146
  display: flex;
228
147
  justify-content: center;
@@ -361,6 +280,77 @@ body[data-bspk] [data-bspk=link][data-subtle-inverse][disabled] {
361
280
  display: none !important;
362
281
  }
363
282
 
283
+ body[data-bspk] a:not([data-bspk]), [data-bspk=link] {
284
+ color: var(--foreground-link-text-default);
285
+ display: inline-flex;
286
+ flex-direction: row;
287
+ align-items: center;
288
+ gap: var(--spacing-sizing-01);
289
+ font: var(--labels-base);
290
+ }
291
+ body[data-bspk] a:not([disabled]):hover:not([data-bspk]), [data-bspk=link]:not([disabled]):hover, body[data-bspk] a:not([disabled])[data-pseudo=hover]:not([data-bspk]), [data-bspk=link]:not([disabled])[data-pseudo=hover] {
292
+ color: var(--foreground-link-text-default-hovered);
293
+ }
294
+ body[data-bspk] a:not([disabled]):active:not([data-bspk]), [data-bspk=link]:not([disabled]):active, body[data-bspk] a:not([disabled])[data-pseudo=active]:not([data-bspk]), [data-bspk=link]:not([disabled])[data-pseudo=active] {
295
+ color: var(--foreground-link-text-default);
296
+ filter: brightness(80%);
297
+ }
298
+ body[data-bspk] a:not([disabled]):visited:not([data-bspk]), [data-bspk=link]:not([disabled]):visited, body[data-bspk] a:not([disabled])[data-pseudo=visited]:not([data-bspk]), [data-bspk=link]:not([disabled])[data-pseudo=visited] {
299
+ color: var(--foreground-link-text-default-visited);
300
+ }
301
+ body[data-bspk] a[disabled]:not([data-bspk]), [disabled][data-bspk=link] {
302
+ pointer-events: none;
303
+ cursor: text;
304
+ color: var(--foreground-link-text-default-disabled);
305
+ }
306
+ body[data-bspk] a[data-subtle]:not([data-bspk]), [data-subtle][data-bspk=link] {
307
+ text-decoration: none;
308
+ color: var(--foreground-neutral-on-surface);
309
+ }
310
+ body[data-bspk] a[data-subtle]:not([disabled]):hover:not([data-bspk]), [data-subtle][data-bspk=link]:not([disabled]):hover, body[data-bspk] a[data-subtle]:not([disabled])[data-pseudo=hover]:not([data-bspk]), [data-subtle][data-bspk=link]:not([disabled])[data-pseudo=hover] {
311
+ text-decoration: underline;
312
+ color: var(--foreground-link-text-subtle-hovered);
313
+ }
314
+ body[data-bspk] a[data-subtle]:not([disabled]):active:not([data-bspk]), [data-subtle][data-bspk=link]:not([disabled]):active, body[data-bspk] a[data-subtle]:not([disabled])[data-pseudo=active]:not([data-bspk]), [data-subtle][data-bspk=link]:not([disabled])[data-pseudo=active] {
315
+ text-decoration: underline;
316
+ color: var(--foreground-link-text-subtle-pressed);
317
+ }
318
+ body[data-bspk] a[data-subtle]:not([disabled]):visited:not([data-bspk]), [data-subtle][data-bspk=link]:not([disabled]):visited, body[data-bspk] a[data-subtle]:not([disabled])[data-pseudo=visited]:not([data-bspk]), [data-subtle][data-bspk=link]:not([disabled])[data-pseudo=visited] {
319
+ color: var(--foreground-neutral-on-surface);
320
+ }
321
+ body[data-bspk] a[data-subtle][disabled]:not([data-bspk]), [data-subtle][disabled][data-bspk=link] {
322
+ pointer-events: none;
323
+ color: var(--foreground-link-text-subtle-disabled);
324
+ }
325
+ body[data-bspk] a[data-subtle-inverse]:not([data-bspk]), [data-subtle-inverse][data-bspk=link] {
326
+ text-decoration: none;
327
+ color: var(--foreground-neutral-inverse-on-surface);
328
+ }
329
+ body[data-bspk] a[data-subtle-inverse]:not([disabled]):hover:not([data-bspk]), [data-subtle-inverse][data-bspk=link]:not([disabled]):hover, body[data-bspk] a[data-subtle-inverse]:not([disabled])[data-pseudo=hover]:not([data-bspk]), [data-subtle-inverse][data-bspk=link]:not([disabled])[data-pseudo=hover] {
330
+ text-decoration: underline;
331
+ color: var(--foreground-link-text-subtle-inverse-hovered);
332
+ }
333
+ body[data-bspk] a[data-subtle-inverse]:not([disabled]):active:not([data-bspk]), [data-subtle-inverse][data-bspk=link]:not([disabled]):active, body[data-bspk] a[data-subtle-inverse]:not([disabled])[data-pseudo=active]:not([data-bspk]), [data-subtle-inverse][data-bspk=link]:not([disabled])[data-pseudo=active] {
334
+ text-decoration: underline;
335
+ color: var(--foreground-link-text-subtle-inverse-pressed);
336
+ }
337
+ body[data-bspk] a[data-subtle-inverse]:not([disabled]):visited:not([data-bspk]), [data-subtle-inverse][data-bspk=link]:not([disabled]):visited, body[data-bspk] a[data-subtle-inverse]:not([disabled])[data-pseudo=visited]:not([data-bspk]), [data-subtle-inverse][data-bspk=link]:not([disabled])[data-pseudo=visited] {
338
+ color: var(--foreground-neutral-on-inverse-surface);
339
+ }
340
+ body[data-bspk] a[data-subtle-inverse][disabled]:not([data-bspk]), [data-subtle-inverse][disabled][data-bspk=link] {
341
+ pointer-events: none;
342
+ color: var(--foreground-link-text-subtle-inversed-disabled);
343
+ }
344
+ body[data-bspk] a[data-size=large]:not([data-bspk]), [data-size=large][data-bspk=link] {
345
+ font: var(--labels-large);
346
+ }
347
+ body[data-bspk] a[data-size=small]:not([data-bspk]), [data-size=small][data-bspk=link] {
348
+ font: var(--labels-small);
349
+ }
350
+ body[data-bspk] a:not([data-bspk]) svg, [data-bspk=link] svg {
351
+ width: var(--spacing-sizing-05);
352
+ }
353
+
364
354
  /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
365
355
  `));
366
356
  document.head.appendChild(style);
@@ -120,6 +120,7 @@ export type CommonPropsLibrary = {
120
120
  };
121
121
  export type CommonProps<K extends keyof CommonPropsLibrary> = Pick<CommonPropsLibrary, K>;
122
122
  export type RequiredCommonProps<K extends keyof CommonPropsLibrary> = Required<Pick<CommonPropsLibrary, K>>;
123
+ /** The common properties for all input control components such as Input, TextArea, Select, etc. */
123
124
  export type FieldControlProps<ValueType = string, ChangeContext = ChangeEvent<HTMLElement> | KeyboardEvent | undefined> = CommonProps<'aria-label' | 'disabled' | 'id' | 'invalid' | 'name' | 'readOnly' | 'required'> & {
124
125
  /**
125
126
  * The value of the field control.
@@ -133,6 +134,8 @@ export type FieldControlProps<ValueType = string, ChangeContext = ChangeEvent<HT
133
134
  * @required
134
135
  */
135
136
  onChange: (next: ValueType | undefined, event?: ChangeContext) => void;
137
+ 'aria-describedby'?: string;
138
+ 'aria-errormessage'?: string;
136
139
  };
137
140
  export type Brand = 'anywhere' | 'better-homes-gardens' | 'cartus' | 'century-21' | 'coldwell-banker' | 'corcoran' | 'denali-boss' | 'era' | 'sothebys';
138
141
  /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -1 +1 @@
1
- {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;AA6KH,sDAAsD"}
1
+ {"version":3,"file":"common.js","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;;AAsLH,sDAAsD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bspk/ui",
3
- "version": "1.3.21",
3
+ "version": "1.3.23",
4
4
  "license": "CC-BY-4.0",
5
5
  "type": "module",
6
6
  "files": [
@@ -40,7 +40,8 @@
40
40
  "newc": "tsx .scripts/tasks/new-component.ts",
41
41
  "create:tests": "tsx .scripts/tasks/create-tests.ts",
42
42
  "clean": "tsx .scripts/clean.ts",
43
- "pr-check": "npx tsx .scripts/tasks/lint-components.ts && npm run lint && npm run lint:css && npx tsx .scripts/check-css-vars.ts && npm run build && npm run test"
43
+ "pr-check": "npx tsx .scripts/tasks/lint-components.ts && npm run lint && npm run lint:css && npx tsx .scripts/check-css-vars.ts && npm run build && npm run test",
44
+ "pr": "npm run pr-check && git push --set-upstream origin origin $(git symbolic-ref --short HEAD) && open \"https://github.com/Anywhererealestate/bspk-ui/compare/dev...$(git symbolic-ref --short HEAD)\""
44
45
  },
45
46
  "static-exports": {
46
47
  "./*": "./dist/*.js"
@@ -107,8 +108,6 @@
107
108
  "./FileUploadItem/*": "./dist/components/FileUploadItem/*.js",
108
109
  "./Flex": "./dist/components/Flex/index.js",
109
110
  "./Flex/*": "./dist/components/Flex/*.js",
110
- "./FormField": "./dist/components/FormField/index.js",
111
- "./FormField/*": "./dist/components/FormField/*.js",
112
111
  "./Grid": "./dist/components/Grid/index.js",
113
112
  "./Grid/*": "./dist/components/Grid/*.js",
114
113
  "./Img": "./dist/components/Img/index.js",
@@ -130,7 +130,7 @@ export function Accordion({ items: itemsProp, singleOpen = true }: AccordionProp
130
130
  {items.map(({ children, title, subtitle: subtitle, leading, trailing, disabled, id }, index) => {
131
131
  const isOpen = openSections.includes(id);
132
132
  return (
133
- <section data-disabled={disabled || undefined} id={id} key={id || index}>
133
+ <section data-bspk="accordion-item" data-disabled={disabled || undefined} id={id} key={id || index}>
134
134
  <button
135
135
  aria-controls={`${id}-content`}
136
136
  aria-expanded={isOpen}
@@ -147,7 +147,7 @@ export function Accordion({ items: itemsProp, singleOpen = true }: AccordionProp
147
147
  <span data-arrow>{isOpen ? <SvgKeyboardArrowUp /> : <SvgKeyboardArrowDown />}</span>
148
148
  </button>
149
149
  {isOpen && (
150
- <div data-content data-hidden={!isOpen || undefined} id={`${id}-content`}>
150
+ <div data-content id={`${id}-content`}>
151
151
  {children}
152
152
  </div>
153
153
  )}
@@ -1,8 +1,13 @@
1
1
  [data-bspk='accordion'] {
2
+ display: block;
2
3
  width: 100%;
3
4
  padding: var(--spacing-sizing-02);
4
5
 
5
- > section {
6
+ &:empty {
7
+ display: none;
8
+ }
9
+
10
+ > [data-bspk='accordion-item'] {
6
11
  --border-bottom-color: var(--stroke-neutral-base);
7
12
 
8
13
  display: flex;
@@ -54,6 +59,10 @@
54
59
  align-items: center;
55
60
  justify-content: center;
56
61
  margin-left: var(--spacing-sizing-02);
62
+
63
+ svg {
64
+ width: var(--spacing-sizing-06);
65
+ }
57
66
  }
58
67
 
59
68
  &:not(:disabled) {
@@ -21,7 +21,6 @@ export type BottomNavigationProps = Pick<TabListProps, 'label' | 'onChange' | 'o
21
21
  *
22
22
  * @example
23
23
  * import { BottomNavigation } from '@bspk/ui/BottomNavigation';
24
- * import { useState } from 'react';
25
24
  *
26
25
  * () => {
27
26
  * const [value, setValue] = useState<string>('1');
@@ -27,6 +27,7 @@ ul[data-bspk-utility='tab-list'][data-bspk='bottom-navigation'] {
27
27
  &[data-pseudo='focus'] > &,
28
28
  &:focus-visible {
29
29
  outline: solid 2px var(--stroke-neutral-focus);
30
+ isolation: isolate;
30
31
  }
31
32
 
32
33
  &[aria-selected='true'] {
@@ -1,4 +1,5 @@
1
1
  [data-bspk='button'] {
2
+ display: flex;
2
3
  flex-direction: row;
3
4
  gap: var(--spacing-sizing-02);
4
5
  border: none;
@@ -137,6 +138,7 @@
137
138
  [data-pseudo='focus'] > &,
138
139
  &:focus-visible {
139
140
  outline: solid 2px var(--stroke-neutral-focus);
141
+ isolation: isolate;
140
142
  }
141
143
  }
142
144
 
@@ -173,6 +175,7 @@
173
175
  [data-pseudo='focus'] > &,
174
176
  &:focus-visible {
175
177
  outline: solid 2px var(--stroke-neutral-focus);
178
+ isolation: isolate;
176
179
  }
177
180
  }
178
181
 
@@ -207,6 +210,7 @@
207
210
  [data-pseudo='focus'] > &,
208
211
  &:focus-visible {
209
212
  outline: solid 2px var(--stroke-neutral-focus);
213
+ isolation: isolate;
210
214
  }
211
215
  }
212
216
 
@@ -64,14 +64,14 @@ export type CheckboxProps = Omit<FieldControlProps, 'onChange' | 'readOnly' | 'v
64
64
  */
65
65
  export function Checkbox({
66
66
  checked: checkedProp = false,
67
- indeterminate: indeterminateProp,
67
+ indeterminate: indeterminateProp = false,
68
68
  invalid,
69
69
  disabled,
70
70
  required,
71
71
  ...props
72
72
  }: ElementProps<CheckboxProps, 'input'>) {
73
+ const checked = !!checkedProp;
73
74
  const indeterminate = !!indeterminateProp;
74
- const checked = !!checkedProp && !indeterminate;
75
75
 
76
76
  const inputRef = useRef<HTMLInputElement>();
77
77
 
@@ -100,7 +100,7 @@ export function Checkbox({
100
100
  type="checkbox"
101
101
  />
102
102
  <span aria-hidden>
103
- {checked && (
103
+ {checked && !indeterminate && (
104
104
  <svg data-checked fill="none" viewBox="0 0 14 11" xmlns="http://www.w3.org/2000/svg">
105
105
  <path
106
106
  d="M5.485 10.182a1 1 0 0 1-1.414 0l-3.03-3.03a1 1 0 0 1 0-1.415l.14-.141a1 1 0 0 1 1.415 0l2.182 2.182 6.626-6.627a1 1 0 0 1 1.414 0l.142.142a1 1 0 0 1 0 1.414l-7.475 7.475Z"
@@ -1,13 +1,11 @@
1
1
  import './checkbox-group.scss';
2
- import { Checkbox, CheckboxProps } from '-/components/Checkbox';
3
- import { useFieldInit } from '-/components/Field';
4
- import { ToggleOptionProps, ToggleOption } from '-/components/ToggleOption';
2
+ import { CheckboxOption, CheckboxOptionProps } from '-/components/CheckboxOption';
3
+ import { useId } from '-/hooks/useId';
5
4
  import { ElementProps, FieldControlProps } from '-/types/common';
6
5
 
7
6
  const ALL_LABEL = 'All';
8
7
 
9
- export type CheckboxGroupOption = Pick<CheckboxProps, 'value'> &
10
- Pick<ToggleOptionProps, 'description' | 'disabled' | 'label'>;
8
+ export type CheckboxGroupOption = Omit<CheckboxOptionProps, 'name' | 'onChange'>;
11
9
 
12
10
  export type CheckboxGroupProps = Omit<FieldControlProps<string[]>, 'readOnly'> & {
13
11
  /**
@@ -31,7 +29,7 @@ export type CheckboxGroupProps = Omit<FieldControlProps<string[]>, 'readOnly'> &
31
29
  */
32
30
  selectAll?: boolean;
33
31
  /** The props for the select all checkbox. */
34
- selectAllProps?: CheckboxGroupOption;
32
+ selectAllProps?: Pick<CheckboxOptionProps, 'aria-label' | 'description' | 'label'>;
35
33
  };
36
34
 
37
35
  /**
@@ -73,64 +71,51 @@ export function CheckboxGroup({
73
71
  selectAll,
74
72
  selectAllProps,
75
73
  disabled = false,
76
- invalid: invalidProp,
77
- required,
74
+ invalid = false,
78
75
  id: idProp,
79
- 'aria-describedby': ariaDescribedByProp,
80
- 'aria-errormessage': ariaErrorMessageProp,
76
+ 'aria-describedby': ariaDescribedBy,
77
+ 'aria-errormessage': ariaErrorMessage,
78
+ required,
81
79
  ...props
82
80
  }: ElementProps<CheckboxGroupProps, 'div'>) {
83
- const { id, ariaDescribedBy, ariaErrorMessage, invalid } = useFieldInit({
84
- idProp,
85
- required,
86
- disabled,
87
- invalidProp,
88
- });
81
+ const id = useId(idProp);
82
+ const availableOptions = options.filter((o) => !o.disabled);
89
83
 
90
84
  return (
91
- <div
92
- {...props}
93
- aria-describedby={ariaDescribedByProp || ariaDescribedBy || undefined}
94
- data-bspk="checkbox-group"
95
- id={id}
96
- role="group"
97
- >
85
+ <div {...props} aria-describedby={ariaDescribedBy || undefined} data-bspk="checkbox-group" id={id} role="group">
98
86
  {selectAll && (
99
- <ToggleOption label={selectAllProps?.label || ALL_LABEL}>
100
- <Checkbox
101
- aria-errormessage={ariaErrorMessageProp || ariaErrorMessage || undefined}
102
- aria-label={selectAllProps?.label || ALL_LABEL}
103
- checked={!!value.length && value.length === options.length}
104
- data-testid="selectAll-Checkbox"
105
- disabled={disabled}
106
- indeterminate={!!value.length && value.length < options.length}
107
- invalid={invalid || undefined}
108
- name={name}
109
- onChange={(checked) => onChange(checked ? options.map((o) => o.value) : [])}
110
- value="all"
111
- />
112
- </ToggleOption>
87
+ <CheckboxOption
88
+ aria-label={ALL_LABEL}
89
+ label={ALL_LABEL}
90
+ {...selectAllProps}
91
+ aria-errormessage={ariaErrorMessage || undefined}
92
+ checked={!!value.length && value.length === availableOptions.length}
93
+ data-testid="selectAll-Checkbox"
94
+ disabled={disabled}
95
+ indeterminate={!!value.length && value.length < availableOptions.length}
96
+ invalid={invalid || undefined}
97
+ name={name}
98
+ onChange={(checked) => onChange(checked ? availableOptions.map((o) => o.value) : [])}
99
+ value="all"
100
+ />
113
101
  )}
114
102
  {options.map(({ label, description, value: optionValue, disabled: optionDisabled }) => (
115
- <ToggleOption
103
+ <CheckboxOption
104
+ aria-errormessage={ariaErrorMessage || undefined}
105
+ aria-label={label}
106
+ checked={value.includes(optionValue)}
116
107
  description={description}
117
108
  disabled={disabled || optionDisabled}
109
+ invalid={invalid || undefined}
118
110
  key={optionValue}
119
111
  label={label}
120
- >
121
- <Checkbox
122
- aria-errormessage={ariaErrorMessageProp || ariaErrorMessage || undefined}
123
- aria-label={label}
124
- checked={value.includes(optionValue)}
125
- disabled={disabled || optionDisabled}
126
- invalid={invalid || undefined}
127
- name={name}
128
- onChange={(checked) => {
129
- onChange(checked ? [...value, optionValue] : value.filter((v) => v !== optionValue));
130
- }}
131
- value={optionValue}
132
- />
133
- </ToggleOption>
112
+ name={name}
113
+ onChange={(checked) => {
114
+ onChange(checked ? [...value, optionValue] : value.filter((v) => v !== optionValue));
115
+ }}
116
+ required={required}
117
+ value={optionValue}
118
+ />
134
119
  ))}
135
120
  </div>
136
121
  );
@@ -68,6 +68,12 @@ export const CheckboxGroupExample: ComponentExample<CheckboxGroupProps> = {
68
68
  disabled: true,
69
69
  },
70
70
  { label: 'Option 3', value: 'option3', description: 'Description for option 3' },
71
+ {
72
+ label: 'Option 4',
73
+ value: 'option4',
74
+ description:
75
+ 'This is a very long label for option 4 that never seems to end and just goes on and on without stopping',
76
+ },
71
77
  ],
72
78
  },
73
79
  };
@@ -5,4 +5,10 @@
5
5
  max-width: 100%;
6
6
 
7
7
  --list-item-height: 'auto';
8
+
9
+ [data-bspk='list-item'] {
10
+ background: transparent;
11
+ }
8
12
  }
13
+
14
+ /** Copyright 2025 Anywhere Real Estate - CC BY 4.0 */
@@ -1,8 +1,8 @@
1
1
  import { CheckboxGroup, CheckboxGroupProps } from '-/components/CheckboxGroup';
2
- import { Field, FieldDescription, FieldError, FieldLabel } from '-/components/Field';
3
- import { FormFieldControlProps } from '-/components/FormField';
2
+ import { Fieldset, propsWithAria, ComposedFieldProps } from '-/components/Field';
3
+ import { useId } from '-/hooks/useId';
4
4
 
5
- export type CheckboxGroupFieldProps = FormFieldControlProps<CheckboxGroupProps>;
5
+ export type CheckboxGroupFieldProps = ComposedFieldProps<CheckboxGroupProps>;
6
6
 
7
7
  /**
8
8
  * A field wrapper for the CheckboxGroup component.
@@ -20,17 +20,22 @@ export function CheckboxGroupField({
20
20
  labelTrailing,
21
21
  errorMessage,
22
22
  style,
23
+ id: idProp,
23
24
  ...controlProps
24
25
  }: CheckboxGroupFieldProps) {
26
+ const id = useId(idProp);
25
27
  return (
26
- <Field as="fieldset" style={style}>
27
- <FieldLabel as="legend" labelTrailing={labelTrailing} style={style}>
28
- {label}
29
- </FieldLabel>
30
- <CheckboxGroup {...controlProps} />
31
- {!errorMessage && helperText && <FieldDescription>{helperText}</FieldDescription>}
32
- {errorMessage && <FieldError>{errorMessage}</FieldError>}
33
- </Field>
28
+ <Fieldset
29
+ controlId={id}
30
+ errorMessage={errorMessage}
31
+ helperText={helperText}
32
+ label={label}
33
+ labelTrailing={labelTrailing}
34
+ required={controlProps.required}
35
+ style={style}
36
+ >
37
+ <CheckboxGroup {...propsWithAria({ controlProps, id, errorMessage, helperText })} />
38
+ </Fieldset>
34
39
  );
35
40
  }
36
41
 
@@ -17,7 +17,6 @@ export type ChipGroupProps = {
17
17
  * A component that manages the layout of a group of chips.
18
18
  *
19
19
  * @example
20
- * import { Chip } from '@bspk/ui/Chip';
21
20
  * import { ChipGroup } from '@bspk/ui/ChipGroup';
22
21
  *
23
22
  * <ChipGroup
@@ -5,6 +5,10 @@
5
5
  flex-flow: row wrap;
6
6
  padding-bottom: var(--spacing-sizing-01);
7
7
 
8
+ &:empty {
9
+ display: none;
10
+ }
11
+
8
12
  &[data-scroll] {
9
13
  overflow: auto;
10
14
  flex-wrap: nowrap;
@@ -4,8 +4,7 @@ import { format, startOfToday } from 'date-fns';
4
4
  import { useMemo, useState } from 'react';
5
5
  import { Button } from '-/components/Button';
6
6
  import { Calendar, parseDate } from '-/components/Calendar';
7
- import { useFieldInit } from '-/components/Field';
8
- import { InputElement, InputProps } from '-/components/Input';
7
+ import { Input, InputProps } from '-/components/Input';
9
8
  import { useFloating } from '-/hooks/useFloating';
10
9
  import { useOutsideClick } from '-/hooks/useOutsideClick';
11
10
  import { FieldControlProps } from '-/types/common';
@@ -49,19 +48,15 @@ export type DatePickerProps = Omit<FieldControlProps, 'aria-label' | 'onChange'
49
48
  * For a more complete example with field usage, see the DatePickerField component.
50
49
  *
51
50
  * @example
52
- * import { DatePicker } from '@bspk/ui/DatePicker';
53
- * import { Field, FieldLabel } from '@bspk/ui/Field';
54
- * import { useState } from 'react';
51
+ * import { DatePicker } from '-/components/DatePicker';
55
52
  *
56
53
  * () => {
57
54
  * const [fieldDate, setFieldDate] = useState<string>();
58
55
  *
59
56
  * return (
60
57
  * <div style={{ width: 320 }}>
61
- * <Field>
62
- * <FieldLabel>Date</FieldLabel>
63
- * <DatePicker name="date1" onChange={setFieldDate} required value={fieldDate} />
64
- * <FieldDescription>The date picker allows you to select a date.</FieldDescription>
58
+ * <Field controlId="date1" helperText="The date picker allows you to select a date." label="Date">
59
+ * <DatePicker id="date1" name="date1" onChange={setFieldDate} required value={fieldDate} />
65
60
  * </Field>
66
61
  * </div>
67
62
  * );
@@ -78,20 +73,14 @@ export function DatePicker({
78
73
  closeCalendarOnChange = true,
79
74
  name,
80
75
  placeholder,
81
- invalid: invalidProp,
76
+ invalid,
82
77
  required = false,
83
78
  size,
84
- id: idProp,
79
+ id,
85
80
  'aria-label': ariaLabel = 'Enter or choose date',
81
+ 'aria-describedby': ariaDescribedBy,
82
+ 'aria-errormessage': ariaErrorMessage,
86
83
  }: DatePickerProps) {
87
- const { id, ariaDescribedBy, ariaErrorMessage, invalid } = useFieldInit({
88
- idProp,
89
- required,
90
- disabled,
91
- readOnly,
92
- invalidProp,
93
- });
94
-
95
84
  const [calendarVisible, setCalendarVisible] = useState(false);
96
85
 
97
86
  const { elements, floatingStyles } = useFloating({
@@ -118,7 +107,7 @@ export function DatePicker({
118
107
  elements.setReference(node);
119
108
  }}
120
109
  >
121
- <InputElement
110
+ <Input
122
111
  aria-describedby={ariaDescribedBy || undefined}
123
112
  aria-errormessage={ariaErrorMessage || undefined}
124
113
  aria-label={ariaLabel}
@@ -1,6 +1,6 @@
1
1
  import { useState } from 'react';
2
2
  import { DatePicker, DatePickerProps } from '.';
3
- import { Field, FieldLabel, FieldDescription } from '-/components/Field';
3
+ import { Field } from '-/components/Field';
4
4
  import { ComponentExample } from '-/utils/demo';
5
5
 
6
6
  export const DatePickerExample: ComponentExample<DatePickerProps> = {
@@ -19,10 +19,8 @@ export const Usage = () => {
19
19
 
20
20
  return (
21
21
  <div style={{ width: 320 }}>
22
- <Field>
23
- <FieldLabel>Date</FieldLabel>
24
- <DatePicker name="date1" onChange={setFieldDate} required value={fieldDate} />
25
- <FieldDescription>The date picker allows you to select a date.</FieldDescription>
22
+ <Field controlId="date1" helperText="The date picker allows you to select a date." label="Date">
23
+ <DatePicker id="date1" name="date1" onChange={setFieldDate} required value={fieldDate} />
26
24
  </Field>
27
25
  </div>
28
26
  );
@@ -3,7 +3,7 @@ import { hasNoBasicA11yIssues } from '-/rtl/hasNoBasicA11yIssues';
3
3
  import { render } from '-/rtl/util';
4
4
 
5
5
  const TestBed = () => (
6
- <DatePickerField label="Example field label" name="example-field-name" onChange={() => {}} value={undefined} />
6
+ <DatePickerField label="Example field label" name="example-field-name" onChange={() => {}} value="" />
7
7
  );
8
8
 
9
9
  describe('DatePickerField (RTL)', () => {