@a-type/ui 4.0.2 → 4.0.5

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 (44) hide show
  1. package/dist/cjs/components/dialog/Dialog.d.ts +4 -3
  2. package/dist/cjs/components/dialog/Dialog.js +4 -2
  3. package/dist/cjs/components/dialog/Dialog.js.map +1 -1
  4. package/dist/cjs/components/dialog/Dialog.stories.d.ts +1 -1
  5. package/dist/cjs/components/dialog/Dialog.stories.js +2 -1
  6. package/dist/cjs/components/dialog/Dialog.stories.js.map +1 -1
  7. package/dist/cjs/components/icon/Icon.stories.d.ts +1 -1
  8. package/dist/cjs/components/icon/generated/IconSpritesheet.js +1 -1
  9. package/dist/cjs/components/icon/generated/IconSpritesheet.js.map +1 -1
  10. package/dist/cjs/components/icon/generated/iconNames.d.ts +1 -1
  11. package/dist/cjs/components/icon/generated/iconNames.js +2 -0
  12. package/dist/cjs/components/icon/generated/iconNames.js.map +1 -1
  13. package/dist/cjs/components/scrollArea/ScrollArea.d.ts +10 -4
  14. package/dist/cjs/components/scrollArea/ScrollArea.js +15 -7
  15. package/dist/cjs/components/scrollArea/ScrollArea.js.map +1 -1
  16. package/dist/cjs/components/scrollArea/ScrollArea.stories.d.ts +1 -0
  17. package/dist/cjs/components/scrollArea/ScrollArea.stories.js +13 -2
  18. package/dist/cjs/components/scrollArea/ScrollArea.stories.js.map +1 -1
  19. package/dist/css/main.css +2 -2
  20. package/dist/esm/components/dialog/Dialog.d.ts +4 -3
  21. package/dist/esm/components/dialog/Dialog.js +4 -2
  22. package/dist/esm/components/dialog/Dialog.js.map +1 -1
  23. package/dist/esm/components/dialog/Dialog.stories.d.ts +1 -1
  24. package/dist/esm/components/dialog/Dialog.stories.js +2 -1
  25. package/dist/esm/components/dialog/Dialog.stories.js.map +1 -1
  26. package/dist/esm/components/icon/Icon.stories.d.ts +1 -1
  27. package/dist/esm/components/icon/generated/IconSpritesheet.js +1 -1
  28. package/dist/esm/components/icon/generated/IconSpritesheet.js.map +1 -1
  29. package/dist/esm/components/icon/generated/iconNames.d.ts +1 -1
  30. package/dist/esm/components/icon/generated/iconNames.js +2 -0
  31. package/dist/esm/components/icon/generated/iconNames.js.map +1 -1
  32. package/dist/esm/components/scrollArea/ScrollArea.d.ts +10 -4
  33. package/dist/esm/components/scrollArea/ScrollArea.js +15 -7
  34. package/dist/esm/components/scrollArea/ScrollArea.js.map +1 -1
  35. package/dist/esm/components/scrollArea/ScrollArea.stories.d.ts +1 -0
  36. package/dist/esm/components/scrollArea/ScrollArea.stories.js +13 -2
  37. package/dist/esm/components/scrollArea/ScrollArea.stories.js.map +1 -1
  38. package/package.json +1 -1
  39. package/src/components/dialog/Dialog.stories.tsx +5 -0
  40. package/src/components/dialog/Dialog.tsx +17 -2
  41. package/src/components/icon/generated/IconSpritesheet.tsx +17 -1
  42. package/src/components/icon/generated/iconNames.ts +2 -0
  43. package/src/components/scrollArea/ScrollArea.stories.tsx +96 -71
  44. package/src/components/scrollArea/ScrollArea.tsx +37 -10
@@ -1,5 +1,8 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import clsx from 'clsx';
3
+ import { Box } from '../box/Box.js';
4
+ import { Button } from '../button/Button.js';
5
+ import { Input } from '../input/Input.js';
3
6
  import { ScrollArea } from './ScrollArea.js';
4
7
 
5
8
  const meta = {
@@ -25,80 +28,102 @@ type Story = StoryObj<{ direction: 'vertical' | 'horizontal' | 'both' }>;
25
28
  export const Default: Story = {
26
29
  render({ direction }) {
27
30
  return (
28
- <ScrollArea style={{ height: '200px', width: '400px' }}>
31
+ <ScrollArea
32
+ direction={direction}
33
+ style={{ height: '200px', width: '400px' }}
34
+ >
35
+ <ScrollArea.Content
36
+ className={clsx(
37
+ direction === 'horizontal' && 'w-10000px',
38
+ direction === 'both' && 'w-800px',
39
+ )}
40
+ >
41
+ <Content />
42
+ </ScrollArea.Content>
43
+ </ScrollArea>
44
+ );
45
+ },
46
+ };
47
+
48
+ export const ConstraintTest: Story = {
49
+ render({ direction }) {
50
+ return (
51
+ <ScrollArea direction={direction} className="w-300px h-300px">
29
52
  <ScrollArea.Content>
30
- <div
31
- className={clsx(
32
- direction === 'horizontal' && 'w-10000px',
33
- direction === 'both' && 'w-800px',
34
- )}
35
- >
36
- <p>
37
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
38
- risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing
39
- nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas
40
- ligula massa, varius a, semper congue, euismod non, mi. Proin
41
- porttitor, orci nec nonummy molestie, enim est eleifend mi, non
42
- fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa,
43
- scelerisque vitae, consequat in, pretium a, enim. Pellentesque
44
- congue. Ut in risus volutpat libero pharetra tempor. Cras
45
- vestibulum bibendum augue. Praesent egestas leo in pede. Praesent
46
- blandit odio eu enim. Pellentesque sed dui ut augue blandit
47
- sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
48
- ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed
49
- pede pellentesque fermentum. Maecenas adipiscing ante non diam
50
- sollicitudin ornare. Morbi in sem quis dui placerat ornare.
51
- Pellentesque odio nisi, euismod in, pharetra a, ultricies in,
52
- diam. Sed arcu. Cras consectetur. Vivamus fermentum nibh in augue.
53
- Praesent a lacus at urna consequat rhoncus. Morbi dapibus sapien
54
- vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget
55
- metus. Vestibulum commodo. Ut rhoncus gravida arcu.
56
- </p>
57
- <p>
58
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
59
- risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing
60
- nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas
61
- ligula massa, varius a, semper congue, euismod non, mi. Proin
62
- porttitor, orci nec nonummy molestie, enim est eleifend mi, non
63
- fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa,
64
- scelerisque vitae, consequat in, pretium a, enim. Pellentesque
65
- congue. Ut in risus volutpat libero pharetra tempor. Cras
66
- vestibulum bibendum augue. Praesent egestas leo in pede. Praesent
67
- blandit odio eu enim. Pellentesque sed dui ut augue blandit
68
- sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
69
- ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed
70
- pede pellentesque fermentum. Maecenas adipiscing ante non diam
71
- sollicitudin ornare. Morbi in sem quis dui placerat ornare.
72
- Pellentesque odio nisi, euismod in, pharetra a, ultricies in,
73
- diam. Sed arcu. Cras consectetur. Vivamus fermentum nibh in augue.
74
- Praesent a lacus at urna consequat rhoncus. Morbi dapibus sapien
75
- vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget
76
- metus. Vestibulum commodo. Ut rhoncus gravida arcu.
77
- </p>
78
- <p>
79
- Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
80
- risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing
81
- nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas
82
- ligula massa, varius a, semper congue, euismod non, mi. Proin
83
- porttitor, orci nec nonummy molestie, enim est eleifend mi, non
84
- fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa,
85
- scelerisque vitae, consequat in, pretium a, enim. Pellentesque
86
- congue. Ut in risus volutpat libero pharetra tempor. Cras
87
- vestibulum bibendum augue. Praesent egestas leo in pede. Praesent
88
- blandit odio eu enim. Pellentesque sed dui ut augue blandit
89
- sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
90
- ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed
91
- pede pellentesque fermentum. Maecenas adipiscing ante non diam
92
- sollicitudin ornare. Morbi in sem quis dui placerat ornare.
93
- Pellentesque odio nisi, euismod in, pharetra a, ultricies in,
94
- diam. Sed arcu. Cras consectetur. Vivamus fermentum nibh in augue.
95
- Praesent a lacus at urna consequat rhoncus. Morbi dapibus sapien
96
- vel ante. Aliquam erat volutpat. Pellentesque sagittis ligula eget
97
- metus. Vestibulum commodo. Ut rhoncus gravida arcu.
98
- </p>
99
- </div>
53
+ <Box gap>
54
+ <Input placeholder="Test input" />
55
+ <Button>Submit</Button>
56
+ </Box>
57
+ <Content />
100
58
  </ScrollArea.Content>
101
59
  </ScrollArea>
102
60
  );
103
61
  },
104
62
  };
63
+
64
+ function Content() {
65
+ return (
66
+ <>
67
+ <p>
68
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus.
69
+ Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies
70
+ sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius
71
+ a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy
72
+ molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.
73
+ Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium
74
+ a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra
75
+ tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede.
76
+ Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit
77
+ sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
78
+ ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede
79
+ pellentesque fermentum. Maecenas adipiscing ante non diam sollicitudin
80
+ ornare. Morbi in sem quis dui placerat ornare. Pellentesque odio nisi,
81
+ euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consectetur.
82
+ Vivamus fermentum nibh in augue. Praesent a lacus at urna consequat
83
+ rhoncus. Morbi dapibus sapien vel ante. Aliquam erat volutpat.
84
+ Pellentesque sagittis ligula eget metus. Vestibulum commodo. Ut rhoncus
85
+ gravida arcu.
86
+ </p>
87
+ <p>
88
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus.
89
+ Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies
90
+ sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius
91
+ a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy
92
+ molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.
93
+ Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium
94
+ a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra
95
+ tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede.
96
+ Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit
97
+ sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
98
+ ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede
99
+ pellentesque fermentum. Maecenas adipiscing ante non diam sollicitudin
100
+ ornare. Morbi in sem quis dui placerat ornare. Pellentesque odio nisi,
101
+ euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consectetur.
102
+ Vivamus fermentum nibh in augue. Praesent a lacus at urna consequat
103
+ rhoncus. Morbi dapibus sapien vel ante. Aliquam erat volutpat.
104
+ Pellentesque sagittis ligula eget metus. Vestibulum commodo. Ut rhoncus
105
+ gravida arcu.
106
+ </p>
107
+ <p>
108
+ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus.
109
+ Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies
110
+ sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius
111
+ a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy
112
+ molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.
113
+ Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium
114
+ a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra
115
+ tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede.
116
+ Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit
117
+ sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
118
+ ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede
119
+ pellentesque fermentum. Maecenas adipiscing ante non diam sollicitudin
120
+ ornare. Morbi in sem quis dui placerat ornare. Pellentesque odio nisi,
121
+ euismod in, pharetra a, ultricies in, diam. Sed arcu. Cras consectetur.
122
+ Vivamus fermentum nibh in augue. Praesent a lacus at urna consequat
123
+ rhoncus. Morbi dapibus sapien vel ante. Aliquam erat volutpat.
124
+ Pellentesque sagittis ligula eget metus. Vestibulum commodo. Ut rhoncus
125
+ gravida arcu.
126
+ </p>
127
+ </>
128
+ );
129
+ }
@@ -1,35 +1,37 @@
1
1
  import {
2
2
  ScrollArea as BaseScrollArea,
3
+ ScrollAreaContentProps,
3
4
  ScrollAreaRootProps,
4
5
  ScrollAreaScrollbarProps,
5
6
  } from '@base-ui/react/scroll-area';
7
+ import { Ref } from 'react';
6
8
  import { withClassName } from '../../hooks.js';
7
9
 
8
10
  export type * from '@base-ui/react/scroll-area';
9
11
 
10
12
  export const ScrollAreaRoot = withClassName(
11
13
  BaseScrollArea.Root,
12
- 'layer-components:(min-w-0 min-h-0 flex flex-col)',
14
+ 'layer-components:(min-w-0 min-h-0 flex flex-col box-border)',
13
15
  );
14
16
 
15
17
  export const ScrollAreaViewport = withClassName(
16
18
  BaseScrollArea.Viewport,
17
- 'layer-components:(h-full outline-none overscroll-contain min-h-0)',
19
+ 'layer-components:(h-full outline-none min-h-0)',
18
20
  'layer-components:focus-visible:(outline-none ring-2 ring-accent)',
19
21
  );
20
22
 
21
23
  export const ScrollAreaVerticalFades = withClassName(
22
24
  'div',
23
25
  'layer-components:(pointer-events-none absolute inset-0 [--scroll-area-overflow-y-start:inherit] [--scroll-area-overflow-y-end:inherit])',
24
- 'layer-components:before:(content-empty [--scroll-area-overflow-y-start:inherit] top-0 block left-0 w-full absolute transition-height h-[min(40px,var(--scroll-area-overflow-y-start,,40px))] bg-gradient-to-b bg-gradient-from-bg bg-gradient-via-bg bg-gradient-to-transparent)',
25
- 'layer-components:after:(content-empty [--scroll-area-overflow-y-end:inherit] bottom-0 block left-0 w-full absolute transition-height h-[min(40px,var(--scroll-area-overflow-y-end,,40px))] bg-gradient-to-t bg-gradient-from-bg bg-gradient-via-bg bg-gradient-to-transparent)',
26
+ 'layer-components:before:(content-empty [--scroll-area-overflow-y-start:inherit] top-0 block left-0 w-full absolute transition-height h-[min(40px,var(--scroll-area-overflow-y-start,40px))] bg-gradient-to-b bg-gradient-from-bg bg-gradient-to-transparent)',
27
+ 'layer-components:after:(content-empty [--scroll-area-overflow-y-end:inherit] bottom-0 block left-0 w-full absolute transition-height h-[min(40px,var(--scroll-area-overflow-y-end,40px))] bg-gradient-to-t bg-gradient-from-bg bg-gradient-to-transparent)',
26
28
  );
27
29
 
28
30
  export const ScrollAreaHorizontalFades = withClassName(
29
31
  'div',
30
32
  'layer-components:(pointer-events-none absolute inset-0 [--scroll-area-overflow-x-start:inherit] [--scroll-area-overflow-x-end:inherit])',
31
- 'layer-components:before:(content-empty [--scroll-area-overflow-x-start:inherit] left-0 block top-0 h-full absolute transition-width w-[min(40px,var(--scroll-area-overflow-x-start,,40px))] bg-gradient-to-r bg-gradient-from-bg bg-gradient-to-transparent)',
32
- 'layer-components:after:(content-empty [--scroll-area-overflow-x-end:inherit] right-0 block top-0 h-full absolute transition-width w-[min(40px,var(--scroll-area-overflow-x-end,,40px))] bg-gradient-to-l bg-gradient-from-bg bg-gradient-to-transparent)',
33
+ 'layer-components:before:(content-empty [--scroll-area-overflow-x-start:inherit] left-0 block top-0 h-full absolute transition-width w-[min(40px,var(--scroll-area-overflow-x-start,40px))] bg-gradient-to-r bg-gradient-from-bg bg-gradient-to-transparent)',
34
+ 'layer-components:after:(content-empty [--scroll-area-overflow-x-end:inherit] right-0 block top-0 h-full absolute transition-width w-[min(40px,var(--scroll-area-overflow-x-end,40px))] bg-gradient-to-l bg-gradient-from-bg bg-gradient-to-transparent)',
33
35
  );
34
36
 
35
37
  export const ScrollAreaViewportFades = () => (
@@ -39,9 +41,20 @@ export const ScrollAreaViewportFades = () => (
39
41
  </>
40
42
  );
41
43
 
44
+ const BaseScrollContentWithoutMinWidth = (
45
+ props: ScrollAreaContentProps & { ref?: Ref<HTMLDivElement> },
46
+ ) => (
47
+ <BaseScrollArea.Content
48
+ {...props}
49
+ style={{ ...props.style, minWidth: undefined }}
50
+ />
51
+ );
52
+ BaseScrollContentWithoutMinWidth.displayName = 'ScrollAreaContent';
53
+
42
54
  export const ScrollAreaContent = withClassName(
43
- BaseScrollArea.Content,
55
+ BaseScrollContentWithoutMinWidth,
44
56
  'layer-components:(flex flex-col)',
57
+ 'layer-components:[[data-scroll-direction=horizontal]>&,[data-scroll-direction=both]>&]:min-w-min-content',
45
58
  );
46
59
 
47
60
  export const ScrollAreaThumb = withClassName(
@@ -80,17 +93,31 @@ export const ScrollAreaCorner = withClassName(
80
93
 
81
94
  const ScrollAreaDefault = ({
82
95
  disableFades,
96
+ direction,
83
97
  ...props
84
98
  }: ScrollAreaRootProps & {
85
99
  disableFades?: boolean;
100
+ direction?: 'vertical' | 'horizontal' | 'both';
86
101
  }) => (
87
102
  <ScrollAreaRoot {...props}>
88
- <ScrollAreaViewport>
103
+ <ScrollAreaViewport
104
+ style={{
105
+ overflow:
106
+ direction === 'vertical'
107
+ ? 'clip scroll'
108
+ : direction === 'horizontal'
109
+ ? 'scroll clip'
110
+ : 'scroll scroll',
111
+ }}
112
+ data-scroll-direction={direction}
113
+ >
89
114
  {props.children}
90
115
  {!disableFades && <ScrollAreaViewportFades />}
91
116
  </ScrollAreaViewport>
92
- <ScrollAreaScrollbar />
93
- <ScrollAreaScrollbar orientation="horizontal" />
117
+ {direction !== 'horizontal' && <ScrollAreaScrollbar />}
118
+ {direction !== 'vertical' && (
119
+ <ScrollAreaScrollbar orientation="horizontal" />
120
+ )}
94
121
  <ScrollAreaCorner />
95
122
  </ScrollAreaRoot>
96
123
  );