@westpac/ui 0.4.0 → 0.6.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 (226) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/components/accordion/accordion.component.d.ts +2 -2
  3. package/dist/components/accordion/components/accordion-item/accordion-item.component.js +5 -3
  4. package/dist/components/accordion/components/accordion-item/accordion-item.styles.d.ts +16 -0
  5. package/dist/components/accordion/components/accordion-item/accordion-item.styles.js +17 -9
  6. package/dist/components/alert/alert.component.js +2 -1
  7. package/dist/components/alert/alert.styles.js +2 -2
  8. package/dist/components/autocomplete/autocomplete.styles.js +3 -3
  9. package/dist/components/button/button.component.d.ts +18 -2
  10. package/dist/components/button/button.component.js +6 -6
  11. package/dist/components/button/button.styles.d.ts +16 -0
  12. package/dist/components/button/button.styles.js +8 -0
  13. package/dist/components/button-dropdown/button-dropdown.styles.js +1 -1
  14. package/dist/components/button-dropdown/components/panel/panel.component.js +6 -3
  15. package/dist/components/button-dropdown/components/panel/panel.styles.d.ts +14 -2
  16. package/dist/components/button-dropdown/components/panel/panel.styles.js +8 -2
  17. package/dist/components/checkbox-group/components/checkbox/checkbox.component.js +2 -2
  18. package/dist/components/checkbox-group/components/checkbox/checkbox.styles.d.ts +2 -2
  19. package/dist/components/checkbox-group/components/checkbox/checkbox.styles.js +4 -4
  20. package/dist/components/collapsible/collapsible.styles.js +1 -1
  21. package/dist/components/compacta/compacta.component.js +4 -3
  22. package/dist/components/compacta/compacta.styles.js +1 -1
  23. package/dist/components/flexi-cell/flexi-cell.component.js +6 -3
  24. package/dist/components/flexi-cell/flexi-cell.styles.d.ts +10 -0
  25. package/dist/components/flexi-cell/flexi-cell.styles.js +7 -2
  26. package/dist/components/flexi-cell/flexi-cell.types.d.ts +4 -0
  27. package/dist/components/flexi-cell/index.d.ts +1 -0
  28. package/dist/components/flexi-cell/index.js +1 -0
  29. package/dist/components/icon/index.d.ts +1 -0
  30. package/dist/components/icon/index.js +1 -0
  31. package/dist/components/index.d.ts +3 -1
  32. package/dist/components/index.js +3 -1
  33. package/dist/components/input/input.component.d.ts +7 -1
  34. package/dist/components/input/input.component.js +5 -2
  35. package/dist/components/input/input.styles.d.ts +7 -1
  36. package/dist/components/input/input.styles.js +4 -1
  37. package/dist/components/link/link.component.d.ts +1 -1
  38. package/dist/components/link/link.component.js +5 -3
  39. package/dist/components/link/link.styles.d.ts +16 -0
  40. package/dist/components/link/link.styles.js +11 -3
  41. package/dist/components/list/components/item/item.component.d.ts +1 -1
  42. package/dist/components/list/components/item/item.component.js +6 -3
  43. package/dist/components/list/components/item/item.styles.d.ts +10 -0
  44. package/dist/components/list/components/item/item.styles.js +7 -2
  45. package/dist/components/list/list.component.d.ts +1 -1
  46. package/dist/components/list/list.stories.js +7 -1
  47. package/dist/components/list/list.styles.js +1 -1
  48. package/dist/components/list/list.utils.d.ts +1 -1
  49. package/dist/components/modal/components/backdrop/backdrop.styles.js +2 -2
  50. package/dist/components/modal/components/dialog/dialog.component.js +6 -4
  51. package/dist/components/modal/components/dialog/dialog.styles.d.ts +16 -0
  52. package/dist/components/modal/components/dialog/dialog.styles.js +11 -3
  53. package/dist/components/popover/components/panel/panel.styles.js +1 -1
  54. package/dist/components/popover/popover.component.js +0 -1
  55. package/dist/components/popover/popover.styles.d.ts +0 -2
  56. package/dist/components/popover/popover.styles.js +1 -2
  57. package/dist/components/radio-group/components/radio/radio.component.js +2 -2
  58. package/dist/components/radio-group/components/radio/radio.styles.d.ts +2 -2
  59. package/dist/components/radio-group/components/radio/radio.styles.js +5 -5
  60. package/dist/components/repeater/index.d.ts +2 -0
  61. package/dist/components/repeater/index.js +1 -0
  62. package/dist/components/repeater/repeater.component.d.ts +3 -0
  63. package/dist/components/repeater/repeater.component.js +144 -0
  64. package/dist/components/repeater/repeater.stories.d.ts +13 -0
  65. package/dist/components/repeater/repeater.stories.js +34 -0
  66. package/dist/components/repeater/repeater.styles.d.ts +49 -0
  67. package/dist/components/repeater/repeater.styles.js +36 -0
  68. package/dist/components/repeater/repeater.types.d.ts +19 -0
  69. package/dist/components/repeater/repeater.types.js +1 -0
  70. package/dist/components/repeater/repeater.utils.d.ts +2 -0
  71. package/dist/components/repeater/repeater.utils.js +2 -0
  72. package/dist/components/select/select.component.d.ts +11 -1
  73. package/dist/components/select/select.component.js +5 -2
  74. package/dist/components/select/select.styles.d.ts +11 -1
  75. package/dist/components/select/select.styles.js +6 -1
  76. package/dist/components/selector/components/index.d.ts +2 -0
  77. package/dist/components/selector/components/index.js +2 -0
  78. package/dist/components/selector/components/selector-checkbox-group/components/index.d.ts +1 -0
  79. package/dist/components/selector/components/selector-checkbox-group/components/index.js +1 -0
  80. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/index.d.ts +2 -0
  81. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/index.js +1 -0
  82. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.component.d.ts +12 -0
  83. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.component.js +67 -0
  84. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.styles.d.ts +59 -0
  85. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.styles.js +57 -0
  86. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.types.d.ts +10 -0
  87. package/dist/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.types.js +1 -0
  88. package/dist/components/selector/components/selector-checkbox-group/index.d.ts +2 -0
  89. package/dist/components/selector/components/selector-checkbox-group/index.js +1 -0
  90. package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.component.d.ts +15 -0
  91. package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.component.js +49 -0
  92. package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.styles.d.ts +3 -0
  93. package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.styles.js +13 -0
  94. package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.types.d.ts +20 -0
  95. package/dist/components/selector/components/selector-checkbox-group/selector-checkbox-group.types.js +1 -0
  96. package/dist/components/selector/components/selector-radio-group/components/index.d.ts +1 -0
  97. package/dist/components/selector/components/selector-radio-group/components/index.js +1 -0
  98. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/index.d.ts +2 -0
  99. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/index.js +1 -0
  100. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.component.d.ts +12 -0
  101. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.component.js +67 -0
  102. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.styles.d.ts +59 -0
  103. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.styles.js +57 -0
  104. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.types.d.ts +15 -0
  105. package/dist/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.types.js +1 -0
  106. package/dist/components/selector/components/selector-radio-group/index.d.ts +2 -0
  107. package/dist/components/selector/components/selector-radio-group/index.js +1 -0
  108. package/dist/components/selector/components/selector-radio-group/selector-radio-group.component.d.ts +15 -0
  109. package/dist/components/selector/components/selector-radio-group/selector-radio-group.component.js +58 -0
  110. package/dist/components/selector/components/selector-radio-group/selector-radio-group.styles.d.ts +13 -0
  111. package/dist/components/selector/components/selector-radio-group/selector-radio-group.styles.js +18 -0
  112. package/dist/components/selector/components/selector-radio-group/selector-radio-group.types.d.ts +17 -0
  113. package/dist/components/selector/components/selector-radio-group/selector-radio-group.types.js +1 -0
  114. package/dist/components/selector/index.d.ts +2 -0
  115. package/dist/components/selector/index.js +1 -0
  116. package/dist/components/selector/selector.component.d.ts +30 -0
  117. package/dist/components/selector/selector.component.js +34 -0
  118. package/dist/components/selector/selector.stories.d.ts +57 -0
  119. package/dist/components/selector/selector.stories.js +515 -0
  120. package/dist/components/selector/selector.types.d.ts +20 -0
  121. package/dist/components/selector/selector.types.js +1 -0
  122. package/dist/components/switch/switch.component.d.ts +1 -1
  123. package/dist/components/switch/switch.component.js +11 -7
  124. package/dist/components/switch/switch.stories.js +1 -1
  125. package/dist/components/switch/switch.styles.d.ts +2 -2
  126. package/dist/components/switch/switch.styles.js +2 -2
  127. package/dist/components/switch/switch.types.d.ts +5 -1
  128. package/dist/components/tabs/components/tab/tab.component.js +5 -3
  129. package/dist/components/tabs/components/tab/tab.styles.d.ts +9 -1
  130. package/dist/components/tabs/components/tab/tab.styles.js +12 -8
  131. package/dist/components/tabs/components/tab-panel/tab-panel.component.js +5 -3
  132. package/dist/components/tabs/components/tab-panel/tab-panel.styles.d.ts +7 -1
  133. package/dist/components/tabs/components/tab-panel/tab-panel.styles.js +5 -2
  134. package/dist/components/textarea/textarea.component.d.ts +7 -1
  135. package/dist/components/textarea/textarea.component.js +5 -2
  136. package/dist/components/textarea/textarea.styles.d.ts +7 -1
  137. package/dist/components/textarea/textarea.styles.js +4 -1
  138. package/dist/css/westpac-ui.css +165 -3
  139. package/dist/css/westpac-ui.min.css +165 -3
  140. package/dist/tailwind/constants/colors.d.ts +9 -9
  141. package/dist/tailwind/themes/index.d.ts +11 -11
  142. package/dist/utils/generateId.d.ts +1 -0
  143. package/dist/utils/generateId.js +6 -0
  144. package/dist/utils/index.d.ts +1 -0
  145. package/dist/utils/index.js +1 -0
  146. package/package.json +7 -1
  147. package/src/components/accordion/components/accordion-item/accordion-item.component.tsx +4 -3
  148. package/src/components/accordion/components/accordion-item/accordion-item.styles.ts +17 -9
  149. package/src/components/alert/alert.component.tsx +1 -1
  150. package/src/components/alert/alert.styles.ts +2 -2
  151. package/src/components/autocomplete/autocomplete.styles.ts +3 -3
  152. package/src/components/button/button.component.tsx +9 -10
  153. package/src/components/button/button.styles.ts +4 -0
  154. package/src/components/button-dropdown/button-dropdown.styles.ts +1 -1
  155. package/src/components/button-dropdown/components/panel/panel.component.tsx +4 -3
  156. package/src/components/button-dropdown/components/panel/panel.styles.ts +8 -2
  157. package/src/components/checkbox-group/components/checkbox/checkbox.component.tsx +2 -2
  158. package/src/components/checkbox-group/components/checkbox/checkbox.styles.ts +4 -4
  159. package/src/components/collapsible/collapsible.styles.ts +1 -1
  160. package/src/components/compacta/compacta.component.tsx +4 -3
  161. package/src/components/compacta/compacta.styles.ts +1 -1
  162. package/src/components/flexi-cell/flexi-cell.component.tsx +5 -2
  163. package/src/components/flexi-cell/flexi-cell.styles.ts +5 -2
  164. package/src/components/flexi-cell/flexi-cell.types.ts +4 -0
  165. package/src/components/flexi-cell/index.ts +1 -0
  166. package/src/components/icon/index.ts +1 -0
  167. package/src/components/index.ts +3 -1
  168. package/src/components/input/input.component.tsx +10 -1
  169. package/src/components/input/input.styles.ts +4 -1
  170. package/src/components/link/link.component.tsx +10 -3
  171. package/src/components/link/link.styles.ts +7 -3
  172. package/src/components/list/components/item/item.component.tsx +4 -1
  173. package/src/components/list/components/item/item.styles.ts +5 -2
  174. package/src/components/list/list.stories.tsx +3 -3
  175. package/src/components/list/list.styles.ts +1 -1
  176. package/src/components/modal/components/backdrop/backdrop.styles.ts +2 -2
  177. package/src/components/modal/components/dialog/dialog.component.tsx +4 -3
  178. package/src/components/modal/components/dialog/dialog.styles.ts +7 -3
  179. package/src/components/popover/components/panel/panel.styles.ts +1 -1
  180. package/src/components/popover/popover.component.tsx +0 -1
  181. package/src/components/popover/popover.styles.ts +0 -1
  182. package/src/components/radio-group/components/radio/radio.component.tsx +2 -2
  183. package/src/components/radio-group/components/radio/radio.styles.ts +5 -5
  184. package/src/components/repeater/index.ts +2 -0
  185. package/src/components/repeater/repeater.component.tsx +124 -0
  186. package/src/components/repeater/repeater.stories.tsx +49 -0
  187. package/src/components/repeater/repeater.styles.ts +32 -0
  188. package/src/components/repeater/repeater.types.ts +20 -0
  189. package/src/components/repeater/repeater.utils.tsx +3 -0
  190. package/src/components/select/select.component.tsx +3 -1
  191. package/src/components/select/select.styles.ts +6 -1
  192. package/src/components/selector/components/index.ts +2 -0
  193. package/src/components/selector/components/selector-checkbox-group/components/index.ts +1 -0
  194. package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/index.ts +2 -0
  195. package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.component.tsx +96 -0
  196. package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.styles.ts +53 -0
  197. package/src/components/selector/components/selector-checkbox-group/components/selector-checkbox-group-option/selector-checkbox-group-option.types.ts +15 -0
  198. package/src/components/selector/components/selector-checkbox-group/index.ts +2 -0
  199. package/src/components/selector/components/selector-checkbox-group/selector-checkbox-group.component.tsx +46 -0
  200. package/src/components/selector/components/selector-checkbox-group/selector-checkbox-group.styles.ts +9 -0
  201. package/src/components/selector/components/selector-checkbox-group/selector-checkbox-group.types.ts +25 -0
  202. package/src/components/selector/components/selector-radio-group/components/index.ts +1 -0
  203. package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/index.ts +2 -0
  204. package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.component.tsx +90 -0
  205. package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.styles.ts +53 -0
  206. package/src/components/selector/components/selector-radio-group/components/selector-radio-group-option/selector-radio-group-option.types.ts +21 -0
  207. package/src/components/selector/components/selector-radio-group/index.ts +2 -0
  208. package/src/components/selector/components/selector-radio-group/selector-radio-group.component.tsx +48 -0
  209. package/src/components/selector/components/selector-radio-group/selector-radio-group.styles.ts +14 -0
  210. package/src/components/selector/components/selector-radio-group/selector-radio-group.types.ts +22 -0
  211. package/src/components/selector/index.ts +2 -0
  212. package/src/components/selector/selector.component.tsx +34 -0
  213. package/src/components/selector/selector.stories.tsx +621 -0
  214. package/src/components/selector/selector.types.ts +24 -0
  215. package/src/components/switch/switch.component.tsx +19 -7
  216. package/src/components/switch/switch.stories.tsx +1 -1
  217. package/src/components/switch/switch.styles.ts +2 -2
  218. package/src/components/switch/switch.types.ts +5 -1
  219. package/src/components/tabs/components/tab/tab.component.tsx +4 -3
  220. package/src/components/tabs/components/tab/tab.styles.ts +12 -8
  221. package/src/components/tabs/components/tab-panel/tab-panel.component.tsx +3 -2
  222. package/src/components/tabs/components/tab-panel/tab-panel.styles.ts +5 -2
  223. package/src/components/textarea/textarea.component.tsx +9 -1
  224. package/src/components/textarea/textarea.styles.ts +4 -1
  225. package/src/utils/generateId.ts +6 -0
  226. package/src/utils/index.ts +1 -0
@@ -0,0 +1,621 @@
1
+ import { type Meta, StoryFn, type StoryObj } from '@storybook/react';
2
+ import { useState } from 'react';
3
+
4
+ import { PersonIcon } from '../icon/index.js';
5
+ import { VisuallyHidden } from '../index.js';
6
+ import { BusPictogram, ChatPictogram, PizzaPictogram } from '../pictogram/index.js';
7
+
8
+ import { Selector } from './selector.component.js';
9
+
10
+ const HERE_IS_A_LABEL_A = 'Here is a label A';
11
+ const HERE_IS_A_LABEL_B = 'Here is a label B';
12
+ const HERE_IS_A_LABEL_C = 'Here is a label C';
13
+
14
+ const meta: Meta<typeof Selector> = {
15
+ title: 'Example/Selector',
16
+ component: Selector,
17
+ tags: ['autodocs'],
18
+ decorators: [(Story: StoryFn) => <Story />],
19
+ parameters: {
20
+ layout: 'padded',
21
+ },
22
+ };
23
+
24
+ export default meta;
25
+ type Story = StoryObj<typeof meta>;
26
+
27
+ /**
28
+ * > Default usage example
29
+ */
30
+ export const DefaultStory = () => {
31
+ return (
32
+ <Selector type="checkbox">
33
+ {[
34
+ { key: 'A', disabled: false },
35
+ { key: 'B', disabled: false },
36
+ { key: 'C', disabled: false },
37
+ { key: 'D', disabled: true },
38
+ ].map(({ key, disabled }) => (
39
+ <Selector.Checkbox key={key} body value={key} isDisabled={disabled}>
40
+ <Selector.Label>Something {key}</Selector.Label>
41
+ </Selector.Checkbox>
42
+ ))}
43
+ </Selector>
44
+ );
45
+ };
46
+
47
+ /**
48
+ * > Radio usage example
49
+ */
50
+ export const RadioStory = () => {
51
+ return (
52
+ <Selector type="radio">
53
+ {[
54
+ { key: 'A', disabled: false },
55
+ { key: 'B', disabled: false },
56
+ { key: 'C', disabled: false },
57
+ { key: 'D', disabled: true },
58
+ ].map(({ key, disabled }) => (
59
+ <Selector.Radio key={key} body value={key} isDisabled={disabled}>
60
+ <Selector.Label>Something {key}</Selector.Label>
61
+ </Selector.Radio>
62
+ ))}
63
+ </Selector>
64
+ );
65
+ };
66
+
67
+ /**
68
+ * > Radio usage example
69
+ */
70
+ export const CheckWithArrowStory = () => {
71
+ return (
72
+ <Selector type="radio">
73
+ {[
74
+ { key: 'A', disabled: false },
75
+ { key: 'B', disabled: false },
76
+ { key: 'C', disabled: false },
77
+ { key: 'D', disabled: true },
78
+ ].map(({ key, disabled }) => (
79
+ <Selector.Radio key={key} body value={key} isDisabled={disabled} checkIcon="arrow">
80
+ <Selector.Label>Something {key}</Selector.Label>
81
+ </Selector.Radio>
82
+ ))}
83
+ </Selector>
84
+ );
85
+ };
86
+
87
+ /**
88
+ * > Radio with state usage example
89
+ */
90
+ export const RadioWithStateStory = () => {
91
+ const [selectedOption, setSelectedOption] = useState<string>();
92
+ return (
93
+ <>
94
+ {selectedOption}
95
+ <Selector
96
+ type="radio"
97
+ value={selectedOption}
98
+ onChange={value => {
99
+ setSelectedOption(value);
100
+ }}
101
+ >
102
+ {[
103
+ { key: 'A', disabled: false },
104
+ { key: 'B', disabled: false },
105
+ { key: 'C', disabled: false },
106
+ { key: 'D', disabled: true },
107
+ ].map(({ key, disabled }) => (
108
+ <Selector.Radio key={key} body value={key} isDisabled={disabled}>
109
+ <Selector.Label>Something {key}</Selector.Label>
110
+ </Selector.Radio>
111
+ ))}
112
+ </Selector>
113
+ </>
114
+ );
115
+ };
116
+
117
+ /**
118
+ * > Check options with state usage example
119
+ */
120
+ export const CheckboxWithStateStory = () => {
121
+ const [selectedOptions, setSelectedOptions] = useState<string[]>();
122
+ return (
123
+ <>
124
+ {selectedOptions?.join(',')}
125
+ <Selector
126
+ type="checkbox"
127
+ value={selectedOptions}
128
+ onChange={value => {
129
+ setSelectedOptions(value);
130
+ }}
131
+ >
132
+ {[
133
+ { key: 'A', disabled: false },
134
+ { key: 'B', disabled: false },
135
+ { key: 'C', disabled: false },
136
+ { key: 'D', disabled: true },
137
+ ].map(({ key, disabled }) => (
138
+ <Selector.Checkbox key={key} body value={key} isDisabled={disabled}>
139
+ <Selector.Label>Something {key}</Selector.Label>
140
+ </Selector.Checkbox>
141
+ ))}
142
+ </Selector>
143
+ </>
144
+ );
145
+ };
146
+
147
+ /**
148
+ * > Default usage example
149
+ */
150
+ export const LongTextStory = () => {
151
+ return (
152
+ <Selector type="checkbox">
153
+ {[
154
+ { key: 'A', disabled: false },
155
+ { key: 'B', disabled: false },
156
+ { key: 'C', disabled: false },
157
+ { key: 'D', disabled: true },
158
+ ].map(({ key, disabled }) => (
159
+ <Selector.Checkbox key={key} body value={key} isDisabled={disabled}>
160
+ <Selector.Label>
161
+ Lorem, ipsum dolor sit amet consectetur adipisicing elit. Maiores architecto eum aperiam consectetur
162
+ quibusdam. Laboriosam saepe, explicabo odio quis doloribus consequuntur quae et necessitatibus quasi
163
+ similique. Debitis non quo recusandae. {key}
164
+ </Selector.Label>
165
+ </Selector.Checkbox>
166
+ ))}
167
+ </Selector>
168
+ );
169
+ };
170
+
171
+ /**
172
+ * > With hint text usage example
173
+ */
174
+ export const WithHintTextStory = () => {
175
+ return (
176
+ <Selector type="checkbox">
177
+ {[
178
+ {
179
+ label: HERE_IS_A_LABEL_A,
180
+ hint: (
181
+ <>
182
+ <VisuallyHidden>Bank Account</VisuallyHidden>
183
+ 123-456 123456
184
+ </>
185
+ ),
186
+ key: 'A',
187
+ disabled: false,
188
+ },
189
+ {
190
+ label: HERE_IS_A_LABEL_B,
191
+ hint: (
192
+ <>
193
+ <VisuallyHidden>Bank Account</VisuallyHidden>
194
+ 123-456 123456
195
+ </>
196
+ ),
197
+ key: 'B',
198
+ disabled: false,
199
+ },
200
+ { label: HERE_IS_A_LABEL_C, hint: '', key: 'C', disabled: false },
201
+ ].map(({ key, disabled, hint, label }) => (
202
+ <Selector.Checkbox key={key} body value={key} isDisabled={disabled}>
203
+ <Selector.Label>{label}</Selector.Label>
204
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
205
+ </Selector.Checkbox>
206
+ ))}
207
+ </Selector>
208
+ );
209
+ };
210
+
211
+ /**
212
+ * > With pictogram usage example
213
+ */
214
+ export const WithPictogramStory = () => {
215
+ return (
216
+ <Selector type="checkbox">
217
+ {[
218
+ {
219
+ before: (
220
+ <Selector.Adornment align="top">
221
+ <PizzaPictogram className="h-5 w-5" />
222
+ </Selector.Adornment>
223
+ ),
224
+ label: HERE_IS_A_LABEL_A,
225
+ hint: (
226
+ <>
227
+ <VisuallyHidden>Bank Account</VisuallyHidden>
228
+ 123-456 123456
229
+ </>
230
+ ),
231
+ key: 'A',
232
+ disabled: false,
233
+ },
234
+ {
235
+ before: (
236
+ <Selector.Adornment align="top">
237
+ <ChatPictogram className="h-5 w-5" />
238
+ </Selector.Adornment>
239
+ ),
240
+ label: HERE_IS_A_LABEL_B,
241
+ hint: (
242
+ <>
243
+ <VisuallyHidden>Bank Account</VisuallyHidden>
244
+ 123-456 123456
245
+ </>
246
+ ),
247
+ key: 'B',
248
+ disabled: false,
249
+ },
250
+ {
251
+ before: (
252
+ <Selector.Adornment align="top">
253
+ <BusPictogram className="h-5 w-5" />
254
+ </Selector.Adornment>
255
+ ),
256
+ label: HERE_IS_A_LABEL_C,
257
+ hint: '',
258
+ key: 'C',
259
+ disabled: false,
260
+ },
261
+ ].map(({ key, disabled, hint, label, before }) => (
262
+ <Selector.Checkbox before={before} key={key} body value={key} isDisabled={disabled}>
263
+ <Selector.Label>{label}</Selector.Label>
264
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
265
+ </Selector.Checkbox>
266
+ ))}
267
+ </Selector>
268
+ );
269
+ };
270
+
271
+ /**
272
+ * > With pictogram with different sizes usage example
273
+ */
274
+ export const WithPictogramDifferentSizesStory = () => {
275
+ return (
276
+ <Selector type="checkbox">
277
+ {[
278
+ {
279
+ before: (
280
+ <Selector.Adornment align="top">
281
+ <PizzaPictogram className="h-15 w-15" />
282
+ </Selector.Adornment>
283
+ ),
284
+ label: HERE_IS_A_LABEL_A,
285
+ hint: (
286
+ <>
287
+ <VisuallyHidden>Bank Account</VisuallyHidden>
288
+ 123-456 123456
289
+ </>
290
+ ),
291
+ key: 'A',
292
+ disabled: false,
293
+ },
294
+ {
295
+ before: (
296
+ <Selector.Adornment align="top">
297
+ <ChatPictogram className="h-10 w-10" />
298
+ </Selector.Adornment>
299
+ ),
300
+ label: HERE_IS_A_LABEL_B,
301
+ hint: (
302
+ <>
303
+ <VisuallyHidden>Bank Account</VisuallyHidden>
304
+ 123-456 123456
305
+ </>
306
+ ),
307
+ key: 'B',
308
+ disabled: false,
309
+ },
310
+ {
311
+ before: (
312
+ <Selector.Adornment align="top">
313
+ <BusPictogram className="h-5 w-5" />
314
+ </Selector.Adornment>
315
+ ),
316
+ label: HERE_IS_A_LABEL_C,
317
+ hint: '',
318
+ key: 'C',
319
+ disabled: false,
320
+ },
321
+ ].map(({ key, disabled, hint, label, before }) => (
322
+ <Selector.Checkbox before={before} key={key} body value={key} isDisabled={disabled}>
323
+ <Selector.Label>{label}</Selector.Label>
324
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
325
+ </Selector.Checkbox>
326
+ ))}
327
+ </Selector>
328
+ );
329
+ };
330
+
331
+ /**
332
+ * > With icon and different size
333
+ */
334
+ export const WithIconsDifferentSizesStory = () => {
335
+ return (
336
+ <Selector type="checkbox">
337
+ {[
338
+ {
339
+ before: (
340
+ <Selector.Adornment align="top">
341
+ <PersonIcon className="h-15 w-15" />
342
+ </Selector.Adornment>
343
+ ),
344
+ label: HERE_IS_A_LABEL_A,
345
+ hint: (
346
+ <>
347
+ <VisuallyHidden>Bank Account</VisuallyHidden>
348
+ 123-456 123456
349
+ </>
350
+ ),
351
+ key: 'A',
352
+ disabled: false,
353
+ },
354
+ {
355
+ before: (
356
+ <Selector.Adornment align="top">
357
+ <PersonIcon className="h-10 w-10" />
358
+ </Selector.Adornment>
359
+ ),
360
+ label: HERE_IS_A_LABEL_B,
361
+ hint: (
362
+ <>
363
+ <VisuallyHidden>Bank Account</VisuallyHidden>
364
+ 123-456 123456
365
+ </>
366
+ ),
367
+ key: 'B',
368
+ disabled: false,
369
+ },
370
+ {
371
+ before: (
372
+ <Selector.Adornment align="top">
373
+ <PersonIcon className="h-5 w-5" />
374
+ </Selector.Adornment>
375
+ ),
376
+ label: HERE_IS_A_LABEL_C,
377
+ hint: '',
378
+ key: 'C',
379
+ disabled: false,
380
+ },
381
+ ].map(({ key, disabled, hint, label, before }) => (
382
+ <Selector.Checkbox before={before} key={key} body value={key} isDisabled={disabled}>
383
+ <Selector.Label>{label}</Selector.Label>
384
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
385
+ </Selector.Checkbox>
386
+ ))}
387
+ </Selector>
388
+ );
389
+ };
390
+
391
+ /**
392
+ * > With icon and secondary label
393
+ */
394
+ export const WithIconsAndSecondaryLabelStory = () => {
395
+ return (
396
+ <Selector type="checkbox">
397
+ {[
398
+ {
399
+ before: (
400
+ <Selector.Adornment align="top">
401
+ <PersonIcon className="h-5 w-5" />
402
+ </Selector.Adornment>
403
+ ),
404
+ label: HERE_IS_A_LABEL_A,
405
+ after: <Selector.Label>$200,000.00</Selector.Label>,
406
+ hint: (
407
+ <>
408
+ <VisuallyHidden>Bank Account</VisuallyHidden>
409
+ 123-456 123456
410
+ </>
411
+ ),
412
+ key: 'A',
413
+ disabled: false,
414
+ },
415
+ {
416
+ before: (
417
+ <Selector.Adornment align="top">
418
+ <PersonIcon className="h-5 w-5" />
419
+ </Selector.Adornment>
420
+ ),
421
+ label: HERE_IS_A_LABEL_B,
422
+ after: <Selector.Label>$200,000.00</Selector.Label>,
423
+ hint: (
424
+ <>
425
+ <VisuallyHidden>Bank Account</VisuallyHidden>
426
+ 123-456 123456
427
+ </>
428
+ ),
429
+ key: 'B',
430
+ disabled: false,
431
+ },
432
+ {
433
+ before: (
434
+ <Selector.Adornment align="top">
435
+ <PersonIcon className="h-5 w-5" />
436
+ </Selector.Adornment>
437
+ ),
438
+ label: HERE_IS_A_LABEL_C,
439
+ after: (
440
+ <Selector.Adornment align="center">
441
+ <span>$200,000.00</span>
442
+ </Selector.Adornment>
443
+ ),
444
+ hint: (
445
+ <>
446
+ <VisuallyHidden>Bank Account</VisuallyHidden>
447
+ 123-456 7643123
448
+ </>
449
+ ),
450
+ key: 'C',
451
+ disabled: false,
452
+ },
453
+ ].map(({ key, disabled, hint, label, before, after }) => (
454
+ <Selector.Checkbox before={before} after={after} key={key} body value={key} isDisabled={disabled}>
455
+ <Selector.Label>{label}</Selector.Label>
456
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
457
+ </Selector.Checkbox>
458
+ ))}
459
+ </Selector>
460
+ );
461
+ };
462
+
463
+ /**
464
+ * > Radio example with icons and secondary text
465
+ */
466
+ export const RadioWithIconsAndSecondaryLabelStory = () => {
467
+ return (
468
+ <Selector type="radio">
469
+ {[
470
+ {
471
+ before: (
472
+ <Selector.Adornment align="top">
473
+ <PersonIcon className="h-5 w-5" />
474
+ </Selector.Adornment>
475
+ ),
476
+ label: HERE_IS_A_LABEL_A,
477
+ after: <Selector.Label>$200,000.00</Selector.Label>,
478
+ hint: (
479
+ <>
480
+ <VisuallyHidden>Bank Account</VisuallyHidden>
481
+ 123-456 123456
482
+ </>
483
+ ),
484
+ key: 'A',
485
+ disabled: false,
486
+ },
487
+ {
488
+ before: (
489
+ <Selector.Adornment align="top">
490
+ <PersonIcon className="h-5 w-5" />
491
+ </Selector.Adornment>
492
+ ),
493
+ label: HERE_IS_A_LABEL_B,
494
+ after: <Selector.Label>$200,000.00</Selector.Label>,
495
+ hint: (
496
+ <>
497
+ <VisuallyHidden>Bank Account</VisuallyHidden>
498
+ 123-456 123456
499
+ </>
500
+ ),
501
+ key: 'B',
502
+ disabled: false,
503
+ },
504
+ {
505
+ before: (
506
+ <Selector.Adornment align="top">
507
+ <PersonIcon className="h-5 w-5" />
508
+ </Selector.Adornment>
509
+ ),
510
+ label: HERE_IS_A_LABEL_C,
511
+ after: (
512
+ <Selector.Adornment align="center">
513
+ <span>$200,000.00</span>
514
+ </Selector.Adornment>
515
+ ),
516
+ hint: (
517
+ <>
518
+ <VisuallyHidden>Bank Account</VisuallyHidden>
519
+ 123-456 7643123
520
+ </>
521
+ ),
522
+ key: 'C',
523
+ disabled: false,
524
+ },
525
+ ].map(({ key, disabled, hint, label, before, after }) => (
526
+ <Selector.Radio
527
+ before={before}
528
+ after={after}
529
+ key={key}
530
+ body
531
+ value={key}
532
+ checkIcon="arrow"
533
+ isDisabled={disabled}
534
+ >
535
+ <Selector.Label>{label}</Selector.Label>
536
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
537
+ </Selector.Radio>
538
+ ))}
539
+ </Selector>
540
+ );
541
+ };
542
+
543
+ /**
544
+ * > Disable state style example
545
+ */
546
+ export const DisableStateStory = () => {
547
+ return (
548
+ <Selector type="radio" value="A">
549
+ {[
550
+ {
551
+ before: (
552
+ <Selector.Adornment align="top">
553
+ <PersonIcon className="h-5 w-5" />
554
+ </Selector.Adornment>
555
+ ),
556
+ label: HERE_IS_A_LABEL_A,
557
+ after: <Selector.Label>$200,000.00</Selector.Label>,
558
+ hint: (
559
+ <>
560
+ <VisuallyHidden>Bank Account</VisuallyHidden>
561
+ 123-456 123456
562
+ </>
563
+ ),
564
+ key: 'A',
565
+ disabled: true,
566
+ },
567
+ {
568
+ before: (
569
+ <Selector.Adornment align="top">
570
+ <PersonIcon className="h-5 w-5" />
571
+ </Selector.Adornment>
572
+ ),
573
+ label: HERE_IS_A_LABEL_B,
574
+ after: <Selector.Label>$200,000.00</Selector.Label>,
575
+ hint: (
576
+ <>
577
+ <VisuallyHidden>Bank Account</VisuallyHidden>
578
+ 123-456 123456
579
+ </>
580
+ ),
581
+ key: 'B',
582
+ disabled: true,
583
+ },
584
+ {
585
+ before: (
586
+ <Selector.Adornment align="top">
587
+ <PersonIcon className="h-5 w-5" />
588
+ </Selector.Adornment>
589
+ ),
590
+ label: HERE_IS_A_LABEL_C,
591
+ after: (
592
+ <Selector.Adornment align="center">
593
+ <span>$200,000.00</span>
594
+ </Selector.Adornment>
595
+ ),
596
+ hint: (
597
+ <>
598
+ <VisuallyHidden>Bank Account</VisuallyHidden>
599
+ 123-456 7643123
600
+ </>
601
+ ),
602
+ key: 'C',
603
+ disabled: true,
604
+ },
605
+ ].map(({ key, disabled, hint, label, before, after }) => (
606
+ <Selector.Radio
607
+ before={before}
608
+ after={after}
609
+ key={key}
610
+ body
611
+ value={key}
612
+ checkIcon="arrow"
613
+ isDisabled={disabled}
614
+ >
615
+ <Selector.Label>{label}</Selector.Label>
616
+ {hint && <Selector.Hint>{hint}</Selector.Hint>}
617
+ </Selector.Radio>
618
+ ))}
619
+ </Selector>
620
+ );
621
+ };
@@ -0,0 +1,24 @@
1
+ import { ReactNode } from 'react';
2
+
3
+ import { type SelectorCheckboxGroupProps, type SelectorRadioGroupProps } from './components/index.js';
4
+
5
+ export type SelectorPropsPerType = {
6
+ checkbox: {
7
+ children: ReactNode;
8
+ /**
9
+ * Type checkbox
10
+ */
11
+ type: 'checkbox';
12
+ } & SelectorCheckboxGroupProps;
13
+ radio: {
14
+ children: ReactNode;
15
+ /**
16
+ * Type Radio
17
+ */
18
+ type: 'radio';
19
+ } & SelectorRadioGroupProps;
20
+ };
21
+
22
+ export type SelectorPropsType = keyof SelectorPropsPerType;
23
+
24
+ export type SelectorProps<K extends SelectorPropsType = SelectorPropsType> = SelectorPropsPerType[K];
@@ -1,18 +1,30 @@
1
1
  import React, { useId, useRef } from 'react';
2
- import { VisuallyHidden, useCheckbox, useFocusRing } from 'react-aria';
2
+ import { VisuallyHidden, mergeProps, useCheckbox, useFocusRing } from 'react-aria';
3
3
  import { useToggleState } from 'react-stately';
4
4
 
5
5
  import { styles as switchStyles } from './switch.styles.js';
6
6
  import { type SwitchProps } from './switch.types.js';
7
7
 
8
- export function Switch({ className, label, size = 'medium', block = false, isDisabled, ...props }: SwitchProps) {
9
- const state = useToggleState(props);
8
+ export function Switch({
9
+ className,
10
+ label,
11
+ size = 'medium',
12
+ block = false,
13
+ checked = false,
14
+ isDisabled,
15
+ ...props
16
+ }: SwitchProps) {
17
+ const state = useToggleState({ ...props, defaultSelected: checked });
10
18
  const labelId = useId();
11
19
  const ref = useRef(null);
12
- const { inputProps } = useCheckbox({ isDisabled, 'aria-labelledby': labelId, ...props }, state, ref);
13
20
  const { isSelected } = state;
14
- const { isFocusVisible, focusProps } = useFocusRing();
15
- const styles = switchStyles({ block, isFocusVisible, isSelected, isDisabled, size });
21
+ const { inputProps } = useCheckbox(
22
+ { isDisabled, 'aria-labelledby': labelId, defaultSelected: checked, ...props },
23
+ state,
24
+ ref,
25
+ );
26
+ const { isFocused, focusProps } = useFocusRing();
27
+ const styles = switchStyles({ block, isFocused, isSelected, isDisabled, size });
16
28
 
17
29
  return (
18
30
  <label className={styles.base({ className })}>
@@ -20,7 +32,7 @@ export function Switch({ className, label, size = 'medium', block = false, isDis
20
32
  {label}
21
33
  </span>
22
34
  <VisuallyHidden>
23
- <input {...inputProps} {...focusProps} ref={ref} />
35
+ <input {...mergeProps(inputProps, focusProps)} ref={ref} />
24
36
  </VisuallyHidden>
25
37
  <div className={styles.switchDiv()} />
26
38
  </label>
@@ -39,7 +39,7 @@ export const DefaultStory: Story = {
39
39
  export const SelectedSwitch: Story = {
40
40
  args: {
41
41
  label: 'eStatements',
42
- isSelected: true,
42
+ checked: true,
43
43
  },
44
44
  };
45
45