@a-type/ui 1.3.0 → 1.3.2

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 (233) hide show
  1. package/dist/cjs/components/actions/ActionButton.d.ts +1 -1
  2. package/dist/cjs/components/actions/ActionButton.js +4 -4
  3. package/dist/cjs/components/actions/ActionButton.js.map +1 -1
  4. package/dist/cjs/components/box/Box.d.ts +4 -2
  5. package/dist/cjs/components/box/Box.js +9 -6
  6. package/dist/cjs/components/box/Box.js.map +1 -1
  7. package/dist/cjs/components/box/Box.stories.d.ts +1 -1
  8. package/dist/cjs/components/button/Button.d.ts +3 -2
  9. package/dist/cjs/components/button/Button.js +4 -4
  10. package/dist/cjs/components/button/Button.js.map +1 -1
  11. package/dist/cjs/components/button/Button.stories.d.ts +1 -1
  12. package/dist/cjs/components/camera/Camera.d.ts +7 -5
  13. package/dist/cjs/components/camera/Camera.js +12 -10
  14. package/dist/cjs/components/camera/Camera.js.map +1 -1
  15. package/dist/cjs/components/camera/Camera.stories.d.ts +2 -2
  16. package/dist/cjs/components/card/Card.d.ts +10 -18
  17. package/dist/cjs/components/card/Card.js +11 -10
  18. package/dist/cjs/components/card/Card.js.map +1 -1
  19. package/dist/cjs/components/checkbox/Checkbox.d.ts +2 -1
  20. package/dist/cjs/components/checkbox/Checkbox.js +3 -3
  21. package/dist/cjs/components/checkbox/Checkbox.js.map +1 -1
  22. package/dist/cjs/components/chip/Chip.d.ts +3 -2
  23. package/dist/cjs/components/chip/Chip.js +4 -5
  24. package/dist/cjs/components/chip/Chip.js.map +1 -1
  25. package/dist/cjs/components/collapsible/Collapsible.d.ts +7 -4
  26. package/dist/cjs/components/collapsible/Collapsible.js +5 -5
  27. package/dist/cjs/components/collapsible/Collapsible.js.map +1 -1
  28. package/dist/cjs/components/contextMenu/contextMenu.d.ts +7 -2
  29. package/dist/cjs/components/contextMenu/contextMenu.js +5 -5
  30. package/dist/cjs/components/contextMenu/contextMenu.js.map +1 -1
  31. package/dist/cjs/components/dialog/Dialog.d.ts +37 -19
  32. package/dist/cjs/components/dialog/Dialog.js +20 -15
  33. package/dist/cjs/components/dialog/Dialog.js.map +1 -1
  34. package/dist/cjs/components/dialog/Dialog.stories.d.ts +14 -7
  35. package/dist/cjs/components/divider/Divider.d.ts +3 -1
  36. package/dist/cjs/components/divider/Divider.js +5 -5
  37. package/dist/cjs/components/divider/Divider.js.map +1 -1
  38. package/dist/cjs/components/dropdownMenu/DropdownMenu.d.ts +6 -2
  39. package/dist/cjs/components/dropdownMenu/DropdownMenu.js +3 -4
  40. package/dist/cjs/components/dropdownMenu/DropdownMenu.js.map +1 -1
  41. package/dist/cjs/components/dropdownMenu/DropdownMenu.stories.d.ts +3 -1
  42. package/dist/cjs/components/forms/TextField.d.ts +3 -1
  43. package/dist/cjs/components/forms/TextField.js +6 -5
  44. package/dist/cjs/components/forms/TextField.js.map +1 -1
  45. package/dist/cjs/components/icon/Icon.d.ts +3 -1
  46. package/dist/cjs/components/icon/Icon.js +4 -4
  47. package/dist/cjs/components/icon/Icon.js.map +1 -1
  48. package/dist/cjs/components/infiniteLoadTrigger/InfiniteLoadTrigger.d.ts +3 -1
  49. package/dist/cjs/components/infiniteLoadTrigger/InfiniteLoadTrigger.js +6 -5
  50. package/dist/cjs/components/infiniteLoadTrigger/InfiniteLoadTrigger.js.map +1 -1
  51. package/dist/cjs/components/input/Input.d.ts +3 -1
  52. package/dist/cjs/components/input/Input.js +4 -3
  53. package/dist/cjs/components/input/Input.js.map +1 -1
  54. package/dist/cjs/components/input/Input.stories.d.ts +3 -1
  55. package/dist/cjs/components/liveUpdateTextField/LiveUpdateTextField.d.ts +3 -2
  56. package/dist/cjs/components/liveUpdateTextField/LiveUpdateTextField.js +5 -4
  57. package/dist/cjs/components/liveUpdateTextField/LiveUpdateTextField.js.map +1 -1
  58. package/dist/cjs/components/marquee/marquee.d.ts +1 -1
  59. package/dist/cjs/components/navBar/NavBar.d.ts +10 -5
  60. package/dist/cjs/components/navBar/NavBar.js +8 -7
  61. package/dist/cjs/components/navBar/NavBar.js.map +1 -1
  62. package/dist/cjs/components/popover/Popover.d.ts +13 -8
  63. package/dist/cjs/components/popover/Popover.js +5 -5
  64. package/dist/cjs/components/popover/Popover.js.map +1 -1
  65. package/dist/cjs/components/progress/Progress.d.ts +4 -3
  66. package/dist/cjs/components/progress/Progress.js +3 -4
  67. package/dist/cjs/components/progress/Progress.js.map +1 -1
  68. package/dist/cjs/components/progress/Progress.stories.d.ts +4 -3
  69. package/dist/cjs/components/scrollArea/ScrollArea.d.ts +12 -5
  70. package/dist/cjs/components/scrollArea/ScrollArea.js +12 -9
  71. package/dist/cjs/components/scrollArea/ScrollArea.js.map +1 -1
  72. package/dist/cjs/components/select/Select.d.ts +23 -13
  73. package/dist/cjs/components/select/Select.js +18 -15
  74. package/dist/cjs/components/select/Select.js.map +1 -1
  75. package/dist/cjs/components/select/Select.stories.d.ts +10 -6
  76. package/dist/cjs/components/slider/Slider.d.ts +3 -1
  77. package/dist/cjs/components/slider/Slider.js +3 -4
  78. package/dist/cjs/components/slider/Slider.js.map +1 -1
  79. package/dist/cjs/components/slider/Slider.stories.d.ts +3 -1
  80. package/dist/cjs/components/spinner/Spinner.d.ts +6 -2
  81. package/dist/cjs/components/spinner/Spinner.js +8 -6
  82. package/dist/cjs/components/spinner/Spinner.js.map +1 -1
  83. package/dist/cjs/components/switch/Switch.d.ts +3 -1
  84. package/dist/cjs/components/switch/Switch.js +15 -4
  85. package/dist/cjs/components/switch/Switch.js.map +1 -1
  86. package/dist/cjs/components/textArea/TextArea.d.ts +3 -1
  87. package/dist/cjs/components/textArea/TextArea.js +4 -3
  88. package/dist/cjs/components/textArea/TextArea.js.map +1 -1
  89. package/dist/cjs/components/textArea/TextArea.stories.d.ts +3 -1
  90. package/dist/cjs/components/tooltip/Tooltip.d.ts +3 -1
  91. package/dist/cjs/components/tooltip/Tooltip.js +3 -4
  92. package/dist/cjs/components/tooltip/Tooltip.js.map +1 -1
  93. package/dist/cjs/components/tooltip/Tooltip.stories.d.ts +3 -1
  94. package/dist/cjs/components/utility/HideWhileKeyboardOpen.d.ts +3 -1
  95. package/dist/cjs/components/utility/HideWhileKeyboardOpen.js +5 -5
  96. package/dist/cjs/components/utility/HideWhileKeyboardOpen.js.map +1 -1
  97. package/dist/cjs/components/utility/SlotDiv.d.ts +1 -1
  98. package/dist/cjs/components/utility/SlotDiv.js +4 -4
  99. package/dist/cjs/components/utility/SlotDiv.js.map +1 -1
  100. package/dist/cjs/hooks/useMergedRef.d.ts +1 -1
  101. package/dist/cjs/hooks/useMergedRef.js.map +1 -1
  102. package/dist/esm/components/actions/ActionButton.d.ts +1 -1
  103. package/dist/esm/components/actions/ActionButton.js +4 -4
  104. package/dist/esm/components/actions/ActionButton.js.map +1 -1
  105. package/dist/esm/components/box/Box.d.ts +4 -2
  106. package/dist/esm/components/box/Box.js +9 -6
  107. package/dist/esm/components/box/Box.js.map +1 -1
  108. package/dist/esm/components/box/Box.stories.d.ts +1 -1
  109. package/dist/esm/components/button/Button.d.ts +3 -2
  110. package/dist/esm/components/button/Button.js +4 -4
  111. package/dist/esm/components/button/Button.js.map +1 -1
  112. package/dist/esm/components/button/Button.stories.d.ts +1 -1
  113. package/dist/esm/components/camera/Camera.d.ts +7 -5
  114. package/dist/esm/components/camera/Camera.js +7 -7
  115. package/dist/esm/components/camera/Camera.js.map +1 -1
  116. package/dist/esm/components/camera/Camera.stories.d.ts +2 -2
  117. package/dist/esm/components/card/Card.d.ts +10 -18
  118. package/dist/esm/components/card/Card.js +6 -7
  119. package/dist/esm/components/card/Card.js.map +1 -1
  120. package/dist/esm/components/checkbox/Checkbox.d.ts +2 -1
  121. package/dist/esm/components/checkbox/Checkbox.js +3 -3
  122. package/dist/esm/components/checkbox/Checkbox.js.map +1 -1
  123. package/dist/esm/components/chip/Chip.d.ts +3 -2
  124. package/dist/esm/components/chip/Chip.js +3 -4
  125. package/dist/esm/components/chip/Chip.js.map +1 -1
  126. package/dist/esm/components/collapsible/Collapsible.d.ts +7 -4
  127. package/dist/esm/components/collapsible/Collapsible.js +4 -5
  128. package/dist/esm/components/collapsible/Collapsible.js.map +1 -1
  129. package/dist/esm/components/contextMenu/contextMenu.d.ts +7 -2
  130. package/dist/esm/components/contextMenu/contextMenu.js +4 -5
  131. package/dist/esm/components/contextMenu/contextMenu.js.map +1 -1
  132. package/dist/esm/components/dialog/Dialog.d.ts +37 -19
  133. package/dist/esm/components/dialog/Dialog.js +16 -16
  134. package/dist/esm/components/dialog/Dialog.js.map +1 -1
  135. package/dist/esm/components/dialog/Dialog.stories.d.ts +14 -7
  136. package/dist/esm/components/divider/Divider.d.ts +3 -1
  137. package/dist/esm/components/divider/Divider.js +4 -5
  138. package/dist/esm/components/divider/Divider.js.map +1 -1
  139. package/dist/esm/components/dropdownMenu/DropdownMenu.d.ts +6 -2
  140. package/dist/esm/components/dropdownMenu/DropdownMenu.js +3 -4
  141. package/dist/esm/components/dropdownMenu/DropdownMenu.js.map +1 -1
  142. package/dist/esm/components/dropdownMenu/DropdownMenu.stories.d.ts +3 -1
  143. package/dist/esm/components/forms/TextField.d.ts +3 -1
  144. package/dist/esm/components/forms/TextField.js +6 -6
  145. package/dist/esm/components/forms/TextField.js.map +1 -1
  146. package/dist/esm/components/icon/Icon.d.ts +3 -1
  147. package/dist/esm/components/icon/Icon.js +3 -4
  148. package/dist/esm/components/icon/Icon.js.map +1 -1
  149. package/dist/esm/components/infiniteLoadTrigger/InfiniteLoadTrigger.d.ts +3 -1
  150. package/dist/esm/components/infiniteLoadTrigger/InfiniteLoadTrigger.js +5 -5
  151. package/dist/esm/components/infiniteLoadTrigger/InfiniteLoadTrigger.js.map +1 -1
  152. package/dist/esm/components/input/Input.d.ts +3 -1
  153. package/dist/esm/components/input/Input.js +4 -4
  154. package/dist/esm/components/input/Input.js.map +1 -1
  155. package/dist/esm/components/input/Input.stories.d.ts +3 -1
  156. package/dist/esm/components/liveUpdateTextField/LiveUpdateTextField.d.ts +3 -2
  157. package/dist/esm/components/liveUpdateTextField/LiveUpdateTextField.js +4 -4
  158. package/dist/esm/components/liveUpdateTextField/LiveUpdateTextField.js.map +1 -1
  159. package/dist/esm/components/marquee/marquee.d.ts +1 -1
  160. package/dist/esm/components/navBar/NavBar.d.ts +10 -5
  161. package/dist/esm/components/navBar/NavBar.js +6 -7
  162. package/dist/esm/components/navBar/NavBar.js.map +1 -1
  163. package/dist/esm/components/popover/Popover.d.ts +13 -8
  164. package/dist/esm/components/popover/Popover.js +4 -5
  165. package/dist/esm/components/popover/Popover.js.map +1 -1
  166. package/dist/esm/components/progress/Progress.d.ts +4 -3
  167. package/dist/esm/components/progress/Progress.js +3 -4
  168. package/dist/esm/components/progress/Progress.js.map +1 -1
  169. package/dist/esm/components/progress/Progress.stories.d.ts +4 -3
  170. package/dist/esm/components/scrollArea/ScrollArea.d.ts +12 -5
  171. package/dist/esm/components/scrollArea/ScrollArea.js +10 -9
  172. package/dist/esm/components/scrollArea/ScrollArea.js.map +1 -1
  173. package/dist/esm/components/select/Select.d.ts +23 -13
  174. package/dist/esm/components/select/Select.js +16 -16
  175. package/dist/esm/components/select/Select.js.map +1 -1
  176. package/dist/esm/components/select/Select.stories.d.ts +10 -6
  177. package/dist/esm/components/slider/Slider.d.ts +3 -1
  178. package/dist/esm/components/slider/Slider.js +3 -4
  179. package/dist/esm/components/slider/Slider.js.map +1 -1
  180. package/dist/esm/components/slider/Slider.stories.d.ts +3 -1
  181. package/dist/esm/components/spinner/Spinner.d.ts +6 -2
  182. package/dist/esm/components/spinner/Spinner.js +6 -6
  183. package/dist/esm/components/spinner/Spinner.js.map +1 -1
  184. package/dist/esm/components/switch/Switch.d.ts +3 -1
  185. package/dist/esm/components/switch/Switch.js +15 -4
  186. package/dist/esm/components/switch/Switch.js.map +1 -1
  187. package/dist/esm/components/textArea/TextArea.d.ts +3 -1
  188. package/dist/esm/components/textArea/TextArea.js +4 -4
  189. package/dist/esm/components/textArea/TextArea.js.map +1 -1
  190. package/dist/esm/components/textArea/TextArea.stories.d.ts +3 -1
  191. package/dist/esm/components/tooltip/Tooltip.d.ts +3 -1
  192. package/dist/esm/components/tooltip/Tooltip.js +3 -4
  193. package/dist/esm/components/tooltip/Tooltip.js.map +1 -1
  194. package/dist/esm/components/tooltip/Tooltip.stories.d.ts +3 -1
  195. package/dist/esm/components/utility/HideWhileKeyboardOpen.d.ts +3 -1
  196. package/dist/esm/components/utility/HideWhileKeyboardOpen.js +4 -5
  197. package/dist/esm/components/utility/HideWhileKeyboardOpen.js.map +1 -1
  198. package/dist/esm/components/utility/SlotDiv.d.ts +1 -1
  199. package/dist/esm/components/utility/SlotDiv.js +3 -4
  200. package/dist/esm/components/utility/SlotDiv.js.map +1 -1
  201. package/dist/esm/hooks/useMergedRef.d.ts +1 -1
  202. package/dist/esm/hooks/useMergedRef.js.map +1 -1
  203. package/package.json +1 -1
  204. package/src/components/actions/ActionButton.tsx +45 -45
  205. package/src/components/box/Box.tsx +27 -24
  206. package/src/components/button/Button.tsx +54 -57
  207. package/src/components/camera/Camera.tsx +133 -133
  208. package/src/components/card/Card.tsx +24 -23
  209. package/src/components/checkbox/Checkbox.tsx +9 -10
  210. package/src/components/chip/Chip.tsx +9 -5
  211. package/src/components/collapsible/Collapsible.tsx +56 -54
  212. package/src/components/contextMenu/contextMenu.tsx +60 -56
  213. package/src/components/dialog/Dialog.tsx +328 -312
  214. package/src/components/divider/Divider.tsx +32 -26
  215. package/src/components/dropdownMenu/DropdownMenu.tsx +126 -123
  216. package/src/components/forms/TextField.tsx +137 -140
  217. package/src/components/icon/Icon.tsx +33 -28
  218. package/src/components/infiniteLoadTrigger/InfiniteLoadTrigger.tsx +42 -38
  219. package/src/components/input/Input.tsx +75 -81
  220. package/src/components/liveUpdateTextField/LiveUpdateTextField.tsx +134 -138
  221. package/src/components/navBar/NavBar.tsx +105 -96
  222. package/src/components/popover/Popover.tsx +84 -87
  223. package/src/components/progress/Progress.tsx +40 -34
  224. package/src/components/scrollArea/ScrollArea.tsx +102 -94
  225. package/src/components/select/Select.tsx +294 -283
  226. package/src/components/slider/Slider.tsx +58 -55
  227. package/src/components/spinner/Spinner.tsx +66 -59
  228. package/src/components/switch/Switch.tsx +31 -27
  229. package/src/components/textArea/TextArea.tsx +114 -117
  230. package/src/components/tooltip/Tooltip.tsx +68 -63
  231. package/src/components/utility/HideWhileKeyboardOpen.tsx +30 -26
  232. package/src/components/utility/SlotDiv.tsx +16 -15
  233. package/src/hooks/useMergedRef.ts +3 -1
@@ -1,55 +1,58 @@
1
- import * as SliderPrimitive from '@radix-ui/react-slider';
2
- import { forwardRef } from 'react';
3
- import { withClassName } from '../../hooks.js';
4
-
5
- export const SliderRoot = withClassName(
6
- SliderPrimitive.Root,
7
- 'layer-components:(relative flex items-center select-none touch-none w-full h-30px translate-z-0)',
8
- );
9
- export const SliderTrack = withClassName(
10
- SliderPrimitive.Track,
11
- 'layer-components:(bg-transparent relative grow rounded-full h-9px border border-1px border-solid border-black)',
12
- );
13
- export const SliderRange = withClassName(
14
- SliderPrimitive.Range,
15
- 'layer-components:(absolute bg-accent rounded-full h-full)',
16
- 'layer-variants:[&[data-color=primary]]:bg-primary',
17
- );
18
- export const SliderThumb = withClassName(
19
- SliderPrimitive.Thumb,
20
- 'layer-components:(block w-5 h-5 bg-white shadow-sm rounded-full ring-2 ring-black touch-none transition-all)',
21
- 'layer-components:hover:(shadow-md)',
22
- 'layer-components:active:(shadow-lg ring-4 ring-accent-dark ring-opacity-50 bg-accent-light)',
23
- 'layer-components:focus-visible:(shadow-lg ring-4 ring-accent-dark ring-opacity-50 outline-none bg-accent-light)',
24
- 'layer-components:focus:(outline-none)',
25
- 'layer-components:disabled:(opacity-50)',
26
- 'layer-variants:[&[data-color=primary]]:active:(bg-primary-light ring-primary-dark)',
27
- 'layer-variants:[&[data-color=primary]]:focus-visible:(bg-primary-light ring-primary-dark)',
28
- );
29
-
30
- export interface SliderProps extends SliderPrimitive.SliderProps {
31
- label?: string;
32
- color?: 'default' | 'primary';
33
- }
34
-
35
- export const Slider = Object.assign(
36
- forwardRef<HTMLDivElement, SliderProps>(function Slider(
37
- { label, color, ...props },
38
- ref,
39
- ) {
40
- return (
41
- <SliderRoot ref={ref} {...props}>
42
- <SliderTrack>
43
- <SliderRange data-color={color} />
44
- </SliderTrack>
45
- <SliderThumb aria-label={label} data-color={color} />
46
- </SliderRoot>
47
- );
48
- }),
49
- {
50
- Root: SliderRoot,
51
- Track: SliderTrack,
52
- Range: SliderRange,
53
- Thumb: SliderThumb,
54
- },
55
- );
1
+ import * as SliderPrimitive from '@radix-ui/react-slider';
2
+ import { withClassName } from '../../hooks.js';
3
+
4
+ export const SliderRoot = withClassName(
5
+ SliderPrimitive.Root,
6
+ 'layer-components:(relative flex items-center select-none touch-none w-full h-30px translate-z-0)',
7
+ );
8
+ export const SliderTrack = withClassName(
9
+ SliderPrimitive.Track,
10
+ 'layer-components:(bg-transparent relative grow rounded-full h-9px border border-1px border-solid border-black)',
11
+ );
12
+ export const SliderRange = withClassName(
13
+ SliderPrimitive.Range,
14
+ 'layer-components:(absolute bg-accent rounded-full h-full)',
15
+ 'layer-variants:[&[data-color=primary]]:bg-primary',
16
+ );
17
+ export const SliderThumb = withClassName(
18
+ SliderPrimitive.Thumb,
19
+ 'layer-components:(block w-5 h-5 bg-white shadow-sm rounded-full ring-2 ring-black touch-none transition-all)',
20
+ 'layer-components:hover:(shadow-md)',
21
+ 'layer-components:active:(shadow-lg ring-4 ring-accent-dark ring-opacity-50 bg-accent-light)',
22
+ 'layer-components:focus-visible:(shadow-lg ring-4 ring-accent-dark ring-opacity-50 outline-none bg-accent-light)',
23
+ 'layer-components:focus:(outline-none)',
24
+ 'layer-components:disabled:(opacity-50)',
25
+ 'layer-variants:[&[data-color=primary]]:active:(bg-primary-light ring-primary-dark)',
26
+ 'layer-variants:[&[data-color=primary]]:focus-visible:(bg-primary-light ring-primary-dark)',
27
+ );
28
+
29
+ export interface SliderProps extends SliderPrimitive.SliderProps {
30
+ label?: string;
31
+ color?: 'default' | 'primary';
32
+ }
33
+
34
+ export const Slider = Object.assign(
35
+ function Slider({
36
+ ref,
37
+ label,
38
+ color,
39
+ ...props
40
+ }: SliderProps & {
41
+ ref?: React.Ref<HTMLDivElement>;
42
+ }) {
43
+ return (
44
+ <SliderRoot ref={ref} {...props}>
45
+ <SliderTrack>
46
+ <SliderRange data-color={color} />
47
+ </SliderTrack>
48
+ <SliderThumb aria-label={label} data-color={color} />
49
+ </SliderRoot>
50
+ );
51
+ },
52
+ {
53
+ Root: SliderRoot,
54
+ Track: SliderTrack,
55
+ Range: SliderRange,
56
+ Thumb: SliderThumb,
57
+ },
58
+ );
@@ -1,59 +1,66 @@
1
- import { HTMLAttributes, forwardRef } from 'react';
2
- import classNames from 'clsx';
3
-
4
- const CIRCLE_SIZE = 44;
5
-
6
- export interface SpinnerProps
7
- extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
8
- size?: number;
9
- thickness?: number;
10
- }
11
-
12
- export const Spinner = forwardRef<HTMLDivElement, SpinnerProps>(
13
- function Spinner(
14
- { size = 40, thickness = 7.2, className, style, ...props },
15
- ref,
16
- ) {
17
- return (
18
- <div
19
- ref={ref}
20
- role="progressbar"
21
- {...props}
22
- className={classNames(
23
- 'inline-block animate-spin animate-ease-linear animate-iteration-infinite color-inherit animate-duration-1400 transform-origin-[50%_50%]',
24
- className,
25
- )}
26
- style={{ width: size, height: size, ...style }}
27
- >
28
- <svg
29
- className="block"
30
- viewBox={`${CIRCLE_SIZE / 2} ${
31
- CIRCLE_SIZE / 2
32
- } ${CIRCLE_SIZE} ${CIRCLE_SIZE}`}
33
- >
34
- <circle
35
- className="stroke-current animate-spinner-stroke animate-ease-in-out animate-iteration-infinite animate-duration-1400 [stroke-dasharray:80_200] [stroke-dashoffset:0]"
36
- cx={CIRCLE_SIZE}
37
- cy={CIRCLE_SIZE}
38
- r={(CIRCLE_SIZE - thickness) / 2}
39
- fill="none"
40
- strokeWidth={thickness}
41
- />
42
- </svg>
43
- </div>
44
- );
45
- },
46
- );
47
-
48
- export const FullScreenSpinner = forwardRef<HTMLDivElement, SpinnerProps>(
49
- function FullScreenSpinner(props, ref) {
50
- return (
51
- <div
52
- ref={ref}
53
- className="flex flex-row gap-4 w-full flex-1 justify-center items-center self-stretch"
54
- >
55
- <Spinner {...props} />
56
- </div>
57
- );
58
- },
59
- );
1
+ import classNames from 'clsx';
2
+ import { HTMLAttributes } from 'react';
3
+
4
+ const CIRCLE_SIZE = 44;
5
+
6
+ export interface SpinnerProps
7
+ extends Omit<HTMLAttributes<HTMLDivElement>, 'children'> {
8
+ size?: number;
9
+ thickness?: number;
10
+ }
11
+
12
+ export const Spinner = function Spinner({
13
+ ref,
14
+ size = 40,
15
+ thickness = 7.2,
16
+ className,
17
+ style,
18
+ ...props
19
+ }: SpinnerProps & {
20
+ ref?: React.Ref<HTMLDivElement>;
21
+ }) {
22
+ return (
23
+ <div
24
+ ref={ref}
25
+ role="progressbar"
26
+ {...props}
27
+ className={classNames(
28
+ 'inline-block animate-spin animate-ease-linear animate-iteration-infinite color-inherit animate-duration-1400 transform-origin-[50%_50%]',
29
+ className,
30
+ )}
31
+ style={{ width: size, height: size, ...style }}
32
+ >
33
+ <svg
34
+ className="block"
35
+ viewBox={`${CIRCLE_SIZE / 2} ${
36
+ CIRCLE_SIZE / 2
37
+ } ${CIRCLE_SIZE} ${CIRCLE_SIZE}`}
38
+ >
39
+ <circle
40
+ className="stroke-current animate-spinner-stroke animate-ease-in-out animate-iteration-infinite animate-duration-1400 [stroke-dasharray:80_200] [stroke-dashoffset:0]"
41
+ cx={CIRCLE_SIZE}
42
+ cy={CIRCLE_SIZE}
43
+ r={(CIRCLE_SIZE - thickness) / 2}
44
+ fill="none"
45
+ strokeWidth={thickness}
46
+ />
47
+ </svg>
48
+ </div>
49
+ );
50
+ };
51
+
52
+ export const FullScreenSpinner = function FullScreenSpinner({
53
+ ref,
54
+ ...props
55
+ }: SpinnerProps & {
56
+ ref?: React.Ref<HTMLDivElement>;
57
+ }) {
58
+ return (
59
+ <div
60
+ ref={ref}
61
+ className="flex flex-row gap-4 w-full flex-1 justify-center items-center self-stretch"
62
+ >
63
+ <Spinner {...props} />
64
+ </div>
65
+ );
66
+ };
@@ -1,27 +1,31 @@
1
- import { withClassName } from '../../hooks/withClassName.js';
2
- import { Root, SwitchProps, Thumb } from '@radix-ui/react-switch';
3
- import { forwardRef } from 'react';
4
-
5
- const SwitchRoot = withClassName(
6
- Root,
7
- 'unset w-42px h-25px bg-white rounded-full relative transition-color border-default flex-shrink-0 focus-visible:shadow-focus [&[data-state=checked]]:bg-accent',
8
- );
9
-
10
- const SwitchThumb = withClassName(
11
- Thumb,
12
- 'block w-21px h-21px bg-white rounded-full border-default transition-transform will-change-transform [&[data-state=checked]]:translate-x-19px',
13
- );
14
-
15
- export const Switch = Object.assign(
16
- forwardRef<HTMLButtonElement, SwitchProps>(function Switch(props, ref) {
17
- return (
18
- <SwitchRoot {...props} ref={ref}>
19
- <SwitchThumb />
20
- </SwitchRoot>
21
- );
22
- }),
23
- {
24
- Root: SwitchRoot,
25
- Thumb: SwitchThumb,
26
- },
27
- );
1
+ import { Root, SwitchProps, Thumb } from '@radix-ui/react-switch';
2
+ import { withClassName } from '../../hooks/withClassName.js';
3
+
4
+ const SwitchRoot = withClassName(
5
+ Root,
6
+ 'unset w-42px h-25px bg-white rounded-full relative transition-color border-default flex-shrink-0 focus-visible:shadow-focus [&[data-state=checked]]:bg-accent',
7
+ );
8
+
9
+ const SwitchThumb = withClassName(
10
+ Thumb,
11
+ 'block w-21px h-21px bg-white rounded-full border-default transition-transform will-change-transform [&[data-state=checked]]:translate-x-19px',
12
+ );
13
+
14
+ export const Switch = Object.assign(
15
+ function Switch({
16
+ ref,
17
+ ...props
18
+ }: SwitchProps & {
19
+ ref?: React.Ref<HTMLButtonElement>;
20
+ }) {
21
+ return (
22
+ <SwitchRoot {...props} ref={ref}>
23
+ <SwitchThumb />
24
+ </SwitchRoot>
25
+ );
26
+ },
27
+ {
28
+ Root: SwitchRoot,
29
+ Thumb: SwitchThumb,
30
+ },
31
+ );
@@ -1,117 +1,114 @@
1
- 'use client';
2
-
3
- import classNames from 'clsx';
4
- import {
5
- ChangeEvent,
6
- forwardRef,
7
- HTMLProps,
8
- useCallback,
9
- useLayoutEffect,
10
- useRef,
11
- useState,
12
- } from 'react';
13
- import useMergedRef from '../../hooks/useMergedRef.js';
14
- import { useRotatingShuffledValue } from '../../hooks/useRotatingShuffledValue.js';
15
- import { inputClassName } from '../input/index.js';
16
-
17
- export interface TextAreaProps
18
- extends Omit<HTMLProps<HTMLTextAreaElement>, 'ref'> {
19
- className?: string;
20
- autoSize?: boolean;
21
- autoSelect?: boolean;
22
- // if auto-size, pad the height by this many px
23
- padBottomPixels?: number;
24
- placeholders?: string[];
25
- placeholdersIntervalMs?: number;
26
- onValueChange?: (value: string) => void;
27
- }
28
-
29
- export const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(
30
- function TextArea(
31
- {
32
- autoSize,
33
- autoSelect,
34
- onFocus,
35
- className,
36
- rows,
37
- padBottomPixels = 0,
38
- onChange,
39
- placeholder,
40
- placeholders,
41
- placeholdersIntervalMs = 5000,
42
- onValueChange,
43
- ...rest
44
- },
45
- ref,
46
- ) {
47
- const innerRef = useRef<HTMLTextAreaElement>(null);
48
- const finalRef = useMergedRef(innerRef, ref);
49
-
50
- const [innerValue, setInnerValue] = useState('');
51
- const finalValue = rest.value ?? innerValue;
52
-
53
- // TODO: can layout effect be avoided? useEffect shows a flash of the wrong size
54
- useLayoutEffect(() => {
55
- if (!autoSize) return;
56
- const element = innerRef.current;
57
- if (element) {
58
- if (element.value !== '' || padBottomPixels) {
59
- element!.style.height = 'auto';
60
- const baseHeight = element.scrollHeight;
61
- element.style.height = baseHeight + padBottomPixels + 'px';
62
- }
63
- }
64
- }, [autoSize, padBottomPixels, finalValue]);
65
-
66
- const handleChange = useCallback(
67
- (e: ChangeEvent<HTMLTextAreaElement>) => {
68
- setInnerValue((e.target as HTMLTextAreaElement).value);
69
- if (onChange) {
70
- onChange(e);
71
- }
72
- if (onValueChange) {
73
- onValueChange(e.target.value);
74
- }
75
- },
76
- [onChange, onValueChange],
77
- );
78
-
79
- const handleFocus = useCallback(
80
- (e: React.FocusEvent<HTMLTextAreaElement>) => {
81
- if (autoSelect) {
82
- e.target.select();
83
- }
84
- if (onFocus) {
85
- onFocus(e);
86
- }
87
- },
88
- [autoSelect, onFocus],
89
- );
90
-
91
- const randomPlaceholder = useRotatingShuffledValue(
92
- placeholders ?? [],
93
- placeholdersIntervalMs,
94
- );
95
-
96
- return (
97
- <textarea
98
- ref={finalRef}
99
- className={classNames(
100
- inputClassName,
101
- 'layer-components:([font-family:inherit] text-inherit overflow-hidden resize-none)',
102
- 'layer-variants:(rounded-20px px-4 py-4)',
103
- {
104
- 'layer-components:[resize:vertical]': !autoSize,
105
- 'layer-components:[resize:none]': autoSize,
106
- },
107
- className,
108
- )}
109
- rows={autoSize ? 1 : rows}
110
- onChange={handleChange}
111
- onFocus={handleFocus}
112
- placeholder={placeholder ?? randomPlaceholder}
113
- {...rest}
114
- />
115
- );
116
- },
117
- );
1
+ 'use client';
2
+
3
+ import classNames from 'clsx';
4
+ import {
5
+ ChangeEvent,
6
+ HTMLProps,
7
+ useCallback,
8
+ useLayoutEffect,
9
+ useRef,
10
+ useState,
11
+ } from 'react';
12
+ import useMergedRef from '../../hooks/useMergedRef.js';
13
+ import { useRotatingShuffledValue } from '../../hooks/useRotatingShuffledValue.js';
14
+ import { inputClassName } from '../input/index.js';
15
+
16
+ export interface TextAreaProps
17
+ extends Omit<HTMLProps<HTMLTextAreaElement>, 'ref'> {
18
+ className?: string;
19
+ autoSize?: boolean;
20
+ autoSelect?: boolean;
21
+ // if auto-size, pad the height by this many px
22
+ padBottomPixels?: number;
23
+ placeholders?: string[];
24
+ placeholdersIntervalMs?: number;
25
+ onValueChange?: (value: string) => void;
26
+ }
27
+
28
+ export const TextArea = function TextArea({
29
+ ref,
30
+ autoSize,
31
+ autoSelect,
32
+ onFocus,
33
+ className,
34
+ rows,
35
+ padBottomPixels = 0,
36
+ onChange,
37
+ placeholder,
38
+ placeholders,
39
+ placeholdersIntervalMs = 5000,
40
+ onValueChange,
41
+ ...rest
42
+ }: TextAreaProps & {
43
+ ref?: React.Ref<HTMLTextAreaElement>;
44
+ }) {
45
+ const innerRef = useRef<HTMLTextAreaElement>(null);
46
+ const finalRef = useMergedRef(innerRef, ref);
47
+
48
+ const [innerValue, setInnerValue] = useState('');
49
+ const finalValue = rest.value ?? innerValue;
50
+
51
+ // TODO: can layout effect be avoided? useEffect shows a flash of the wrong size
52
+ useLayoutEffect(() => {
53
+ if (!autoSize) return;
54
+ const element = innerRef.current;
55
+ if (element) {
56
+ if (element.value !== '' || padBottomPixels) {
57
+ element!.style.height = 'auto';
58
+ const baseHeight = element.scrollHeight;
59
+ element.style.height = baseHeight + padBottomPixels + 'px';
60
+ }
61
+ }
62
+ }, [autoSize, padBottomPixels, finalValue]);
63
+
64
+ const handleChange = useCallback(
65
+ (e: ChangeEvent<HTMLTextAreaElement>) => {
66
+ setInnerValue((e.target as HTMLTextAreaElement).value);
67
+ if (onChange) {
68
+ onChange(e);
69
+ }
70
+ if (onValueChange) {
71
+ onValueChange(e.target.value);
72
+ }
73
+ },
74
+ [onChange, onValueChange],
75
+ );
76
+
77
+ const handleFocus = useCallback(
78
+ (e: React.FocusEvent<HTMLTextAreaElement>) => {
79
+ if (autoSelect) {
80
+ e.target.select();
81
+ }
82
+ if (onFocus) {
83
+ onFocus(e);
84
+ }
85
+ },
86
+ [autoSelect, onFocus],
87
+ );
88
+
89
+ const randomPlaceholder = useRotatingShuffledValue(
90
+ placeholders ?? [],
91
+ placeholdersIntervalMs,
92
+ );
93
+
94
+ return (
95
+ <textarea
96
+ ref={finalRef}
97
+ className={classNames(
98
+ inputClassName,
99
+ 'layer-components:([font-family:inherit] text-inherit overflow-hidden resize-none)',
100
+ 'layer-variants:(rounded-20px px-4 py-4)',
101
+ {
102
+ 'layer-components:[resize:vertical]': !autoSize,
103
+ 'layer-components:[resize:none]': autoSize,
104
+ },
105
+ className,
106
+ )}
107
+ rows={autoSize ? 1 : rows}
108
+ onChange={handleChange}
109
+ onFocus={handleFocus}
110
+ placeholder={placeholder ?? randomPlaceholder}
111
+ {...rest}
112
+ />
113
+ );
114
+ };