@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
@@ -5,7 +5,7 @@ export const styles = tv(
5
5
  slots: {
6
6
  base: 'mb-1 inline-flex items-center hover:cursor-pointer',
7
7
  switchDiv:
8
- 'relative box-content overflow-hidden border border-borderDark transition duration-[.3s] after:absolute after:left-0 after:top-0 after:block after:rounded-[50%] after:bg-white after:shadow-switch after:transition-all after:duration-[.3s]',
8
+ 'border-borderDark after:shadow-switch relative box-content overflow-hidden border transition duration-[.3s] after:absolute after:left-0 after:top-0 after:block after:rounded-[50%] after:bg-white after:transition-all after:duration-[.3s]',
9
9
  label: 'pr-1',
10
10
  },
11
11
  variants: {
@@ -23,7 +23,7 @@ export const styles = tv(
23
23
  switchDiv: 'h-[2.875rem] w-14 rounded-[2.875rem] after:h-[2.875rem] after:w-[2.875rem]',
24
24
  },
25
25
  },
26
- isFocusVisible: {
26
+ isFocused: {
27
27
  true: {
28
28
  switchDiv: 'focus-outline',
29
29
  },
@@ -8,6 +8,10 @@ export type SwitchProps = {
8
8
  * Whether to display switch as block
9
9
  */
10
10
  block?: boolean;
11
+ /**
12
+ * Default checked
13
+ */
14
+ checked?: boolean;
11
15
  /**
12
16
  * Classname for overriding base style
13
17
  */
@@ -16,5 +20,5 @@ export type SwitchProps = {
16
20
  * Label for the switch
17
21
  */
18
22
  label: string;
19
- } & Omit<AriaCheckboxProps, 'children'> &
23
+ } & Omit<AriaCheckboxProps, 'children' | 'isSelected'> &
20
24
  Pick<VariantProps<typeof styles>, 'size'>;
@@ -1,5 +1,5 @@
1
1
  import React, { useRef } from 'react';
2
- import { useTab } from 'react-aria';
2
+ import { mergeProps, useFocusRing, useTab } from 'react-aria';
3
3
 
4
4
  import { styles } from './tab.styles.js';
5
5
  import { type TabProps } from './tab.types.js';
@@ -7,10 +7,11 @@ import { type TabProps } from './tab.types.js';
7
7
  export function Tab({ item: { key, rendered }, state, orientation, justify, color, look }: TabProps) {
8
8
  const ref = useRef(null);
9
9
  const { tabProps } = useTab({ key }, state, ref);
10
+ const { isFocusVisible, focusProps } = useFocusRing();
10
11
  return (
11
12
  <div
12
- {...tabProps}
13
- className={styles({ selected: key === state.selectedKey, orientation, justify, color, look })}
13
+ {...mergeProps(tabProps, focusProps)}
14
+ className={styles({ selected: key === state.selectedKey, orientation, justify, color, look, isFocusVisible })}
14
15
  ref={ref}
15
16
  >
16
17
  {rendered}
@@ -2,10 +2,10 @@ import { tv } from 'tailwind-variants';
2
2
 
3
3
  export const styles = tv(
4
4
  {
5
- base: 'typography-body-9 flex cursor-pointer px-3 py-2 text-text transition-colors hover:bg-white focus:focus-outline',
5
+ base: 'typography-body-9 text-text flex cursor-pointer px-3 py-2 transition-colors hover:bg-white',
6
6
  variants: {
7
7
  look: {
8
- default: 'border border-border bg-white',
8
+ default: 'border-border border bg-white',
9
9
  material: '',
10
10
  },
11
11
  selected: {
@@ -23,6 +23,10 @@ export const styles = tv(
23
23
  primary: '',
24
24
  hero: '',
25
25
  },
26
+ isFocusVisible: {
27
+ true: 'focus-outline',
28
+ false: 'outline-none',
29
+ },
26
30
  },
27
31
  compoundVariants: [
28
32
  {
@@ -54,36 +58,36 @@ export const styles = tv(
54
58
  color: 'primary',
55
59
  look: 'default',
56
60
  selected: false,
57
- className: 'border-primary-90 bg-primary text-white hover:bg-primary-70',
61
+ className: 'border-primary-90 bg-primary hover:bg-primary-70 text-white',
58
62
  },
59
63
  {
60
64
  color: 'hero',
61
65
  selected: false,
62
66
  look: 'default',
63
- className: 'border-hero-90 bg-hero text-white hover:bg-hero-70',
67
+ className: 'border-hero-90 bg-hero hover:bg-hero-70 text-white',
64
68
  },
65
69
  // Material look design
66
70
  {
67
71
  look: 'material',
68
72
  orientation: 'horizontal',
69
- className: 'border-b-4 border-r border-b-white border-r-border last:border-r-0',
73
+ className: 'border-r-border border-b-4 border-r border-b-white last:border-r-0',
70
74
  },
71
75
  {
72
76
  look: 'material',
73
77
  orientation: 'vertical',
74
- className: 'border-b border-l-4 border-b-border border-l-white last:border-b-0',
78
+ className: 'border-b-border border-b border-l-4 border-l-white last:border-b-0',
75
79
  },
76
80
  {
77
81
  look: 'material',
78
82
  selected: true,
79
83
  orientation: 'horizontal',
80
- className: 'border-bottom border-b-white text-text',
84
+ className: 'border-bottom text-text border-b-white',
81
85
  },
82
86
  {
83
87
  look: 'material',
84
88
  selected: true,
85
89
  orientation: 'vertical',
86
- className: 'border-left border-l-transparent text-text',
90
+ className: 'border-left text-text border-l-transparent',
87
91
  },
88
92
  {
89
93
  color: 'primary',
@@ -1,14 +1,15 @@
1
1
  import React, { useRef } from 'react';
2
- import { useTabPanel } from 'react-aria';
2
+ import { mergeProps, useFocusRing, useTabPanel } from 'react-aria';
3
3
 
4
4
  import { styles } from './tab-panel.styles.js';
5
5
  import { type TabPanelProps } from './tab-panel.types.js';
6
6
 
7
7
  export function TabPanel({ className, state, look, ...props }: TabPanelProps) {
8
8
  const ref = useRef(null);
9
+ const { isFocused, focusProps } = useFocusRing();
9
10
  const { tabPanelProps } = useTabPanel({ ...props }, state, ref);
10
11
  return (
11
- <div {...tabPanelProps} ref={ref} className={styles({ className, look })}>
12
+ <div {...mergeProps(tabPanelProps, focusProps)} ref={ref} className={styles({ className, look, isFocused })}>
12
13
  {state.selectedItem?.props.children}
13
14
  </div>
14
15
  );
@@ -2,12 +2,15 @@ import { tv } from 'tailwind-variants';
2
2
 
3
3
  export const styles = tv(
4
4
  {
5
- base: 'flex-1 bg-white p-4 focus:focus-outline',
5
+ base: 'flex-1 bg-white p-4',
6
6
  variants: {
7
7
  look: {
8
- default: 'border border-border',
8
+ default: 'border-border border',
9
9
  material: '',
10
10
  },
11
+ isFocused: {
12
+ true: 'outline-none',
13
+ },
11
14
  },
12
15
  },
13
16
  { responsiveVariants: ['xsl', 'sm', 'md', 'lg', 'xl'] },
@@ -1,4 +1,5 @@
1
1
  import React, { ForwardedRef, forwardRef } from 'react';
2
+ import { mergeProps, useFocusRing } from 'react-aria';
2
3
 
3
4
  import { styles } from './textarea.styles.js';
4
5
  import { type TextareaProps } from './textarea.types.js';
@@ -7,7 +8,14 @@ function BaseTextarea(
7
8
  { className, size = 'medium', invalid = false, ...props }: TextareaProps,
8
9
  ref: ForwardedRef<HTMLTextAreaElement>,
9
10
  ) {
10
- return <textarea ref={ref} className={styles({ className, size, invalid })} {...props} />;
11
+ const { isFocused, focusProps } = useFocusRing();
12
+ return (
13
+ <textarea
14
+ ref={ref}
15
+ className={styles({ className, size, invalid, isFocused })}
16
+ {...mergeProps(props, focusProps)}
17
+ />
18
+ );
11
19
  }
12
20
 
13
21
  export const Textarea = forwardRef<HTMLTextAreaElement, TextareaProps>(BaseTextarea);
@@ -2,7 +2,7 @@ import { tv } from 'tailwind-variants';
2
2
 
3
3
  export const styles = tv(
4
4
  {
5
- base: 'form-control w-full read-only:form-control-disabled disabled:form-control-disabled focus:focus-outline',
5
+ base: 'form-control read-only:form-control-disabled disabled:form-control-disabled w-full',
6
6
  variants: {
7
7
  size: {
8
8
  small: 'form-control-small min-h-[3.375rem]',
@@ -14,6 +14,9 @@ export const styles = tv(
14
14
  true: 'border-danger',
15
15
  false: 'border-borderDark',
16
16
  },
17
+ isFocused: {
18
+ true: 'focus-outline',
19
+ },
17
20
  },
18
21
  },
19
22
  { responsiveVariants: ['xsl', 'sm', 'md', 'lg', 'xl'] },
@@ -0,0 +1,6 @@
1
+ export const generateID = () => {
2
+ const url = URL.createObjectURL(new Blob());
3
+ const [id] = url.toString().split('/').reverse();
4
+ URL.revokeObjectURL(url);
5
+ return id.replace('blob:nodedata:', '');
6
+ };
@@ -0,0 +1 @@
1
+ export { generateID } from './generateId.js';