@a-type/ui 3.0.28 → 3.0.30

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 (51) hide show
  1. package/dist/cjs/components/button/Button.d.ts +3 -0
  2. package/dist/cjs/components/button/Button.js +16 -6
  3. package/dist/cjs/components/button/Button.js.map +1 -1
  4. package/dist/cjs/components/emojiPicker/EmojiPicker.d.ts +2 -1
  5. package/dist/cjs/components/emojiPicker/EmojiPicker.js +4 -3
  6. package/dist/cjs/components/emojiPicker/EmojiPicker.js.map +1 -1
  7. package/dist/cjs/components/emojiPicker/EmojiPicker.stories.d.ts +1 -1
  8. package/dist/cjs/components/forms/EmojiField.d.ts +7 -0
  9. package/dist/cjs/components/forms/EmojiField.js +41 -0
  10. package/dist/cjs/components/forms/EmojiField.js.map +1 -0
  11. package/dist/cjs/components/forms/FormikForm.d.ts +2 -0
  12. package/dist/cjs/components/forms/FormikForm.js +2 -0
  13. package/dist/cjs/components/forms/FormikForm.js.map +1 -1
  14. package/dist/cjs/components/forms/FormikForm.stories.d.ts +2 -0
  15. package/dist/cjs/components/forms/FormikForm.stories.js +3 -1
  16. package/dist/cjs/components/forms/FormikForm.stories.js.map +1 -1
  17. package/dist/cjs/components/slider/Slider.js +4 -4
  18. package/dist/cjs/components/slider/Slider.js.map +1 -1
  19. package/dist/cjs/components/slider/Slider.stories.d.ts +2 -0
  20. package/dist/cjs/components/slider/Slider.stories.js +32 -1
  21. package/dist/cjs/components/slider/Slider.stories.js.map +1 -1
  22. package/dist/css/main.css +4 -4
  23. package/dist/esm/components/button/Button.d.ts +3 -0
  24. package/dist/esm/components/button/Button.js +17 -7
  25. package/dist/esm/components/button/Button.js.map +1 -1
  26. package/dist/esm/components/emojiPicker/EmojiPicker.d.ts +2 -1
  27. package/dist/esm/components/emojiPicker/EmojiPicker.js +4 -3
  28. package/dist/esm/components/emojiPicker/EmojiPicker.js.map +1 -1
  29. package/dist/esm/components/emojiPicker/EmojiPicker.stories.d.ts +1 -1
  30. package/dist/esm/components/forms/EmojiField.d.ts +7 -0
  31. package/dist/esm/components/forms/EmojiField.js +35 -0
  32. package/dist/esm/components/forms/EmojiField.js.map +1 -0
  33. package/dist/esm/components/forms/FormikForm.d.ts +2 -0
  34. package/dist/esm/components/forms/FormikForm.js +2 -0
  35. package/dist/esm/components/forms/FormikForm.js.map +1 -1
  36. package/dist/esm/components/forms/FormikForm.stories.d.ts +2 -0
  37. package/dist/esm/components/forms/FormikForm.stories.js +3 -1
  38. package/dist/esm/components/forms/FormikForm.stories.js.map +1 -1
  39. package/dist/esm/components/slider/Slider.js +4 -4
  40. package/dist/esm/components/slider/Slider.js.map +1 -1
  41. package/dist/esm/components/slider/Slider.stories.d.ts +2 -0
  42. package/dist/esm/components/slider/Slider.stories.js +28 -0
  43. package/dist/esm/components/slider/Slider.stories.js.map +1 -1
  44. package/package.json +1 -1
  45. package/src/components/button/Button.tsx +27 -7
  46. package/src/components/emojiPicker/EmojiPicker.tsx +17 -3
  47. package/src/components/forms/EmojiField.tsx +64 -0
  48. package/src/components/forms/FormikForm.stories.tsx +3 -0
  49. package/src/components/forms/FormikForm.tsx +2 -0
  50. package/src/components/slider/Slider.stories.tsx +40 -0
  51. package/src/components/slider/Slider.tsx +6 -3
@@ -0,0 +1,64 @@
1
+ import clsx from 'clsx';
2
+ import { useField } from 'formik';
3
+ import { useIdOrGenerated } from '../../hooks/useIdOrGenerated.js';
4
+ import { Box } from '../box/Box.js';
5
+ import { Button, ButtonProps } from '../button/Button.js';
6
+ import { EmojiPicker } from '../emojiPicker/EmojiPicker.js';
7
+ import { Icon } from '../icon/Icon.js';
8
+ import { Popover } from '../popover/Popover.js';
9
+ import { HorizontalFieldLabel } from './FieldLabel.js';
10
+
11
+ export interface EmojiFieldProps extends ButtonProps {
12
+ name: string;
13
+ label?: string;
14
+ required?: string;
15
+ }
16
+
17
+ export function EmojiField({
18
+ name,
19
+ label,
20
+ className,
21
+ required,
22
+ id: providedId,
23
+ ...rest
24
+ }: EmojiFieldProps) {
25
+ const [props, _, tools] = useField({ name });
26
+ const id = useIdOrGenerated(providedId);
27
+ return (
28
+ <Box gap="sm" className={className}>
29
+ <Popover>
30
+ <Popover.Trigger asChild>
31
+ <Button
32
+ id={id}
33
+ aria-label="Select emoji"
34
+ size="small"
35
+ className={clsx('p-0 transition-color', className)}
36
+ {...rest}
37
+ >
38
+ <Button.Icon className="text-[19px] w-touch h-touch flex items-center justify-center">
39
+ {props.value || <Icon name="smile" />}
40
+ </Button.Icon>
41
+ </Button>
42
+ </Popover.Trigger>
43
+ <Popover.Content>
44
+ <EmojiPicker
45
+ onValueChange={(v) => {
46
+ tools.setValue(v);
47
+ }}
48
+ onClear={
49
+ required
50
+ ? undefined
51
+ : () => {
52
+ tools.setValue('');
53
+ }
54
+ }
55
+ id={id}
56
+ />
57
+ </Popover.Content>
58
+ </Popover>
59
+ {label && (
60
+ <HorizontalFieldLabel htmlFor={id}>{label}</HorizontalFieldLabel>
61
+ )}
62
+ </Box>
63
+ );
64
+ }
@@ -1,5 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
2
  import { CheckboxField } from './CheckboxField.js';
3
+ import { EmojiField } from './EmojiField.js';
3
4
  import { FormikForm } from './FormikForm.js';
4
5
  import { NumberStepperField } from './NumberStepperField.js';
5
6
  import { SubmitButton } from './SubmitButton.js';
@@ -36,6 +37,7 @@ export const Default: Story = {
36
37
  tos: false,
37
38
  newsletter: false,
38
39
  plan: 'basic',
40
+ emoji: '',
39
41
  }}
40
42
  {...args}
41
43
  >
@@ -56,6 +58,7 @@ export const Default: Story = {
56
58
  Enterprise
57
59
  </ToggleGroupField.Item>
58
60
  </ToggleGroupField>
61
+ <EmojiField name="emoji" label="Favorite Emoji" />
59
62
  <SubmitButton>Sign up</SubmitButton>
60
63
  </FormikForm>
61
64
  );
@@ -1,6 +1,7 @@
1
1
  import { Formik, FormikConfig, FormikHelpers, FormikValues } from 'formik';
2
2
  import { useCallback } from 'react';
3
3
  import { CheckboxField } from './CheckboxField.js';
4
+ import { EmojiField } from './EmojiField.js';
4
5
  import { Form } from './Form.js';
5
6
  import { NumberStepperField } from './NumberStepperField.js';
6
7
  import { SubmitButton } from './SubmitButton.js';
@@ -56,4 +57,5 @@ export const FormikForm = Object.assign(FormikFormRoot, {
56
57
  CheckboxField,
57
58
  SwitchField,
58
59
  ToggleGroupField,
60
+ EmojiField,
59
61
  });
@@ -1,4 +1,6 @@
1
1
  import type { Meta, StoryObj } from '@storybook/react';
2
+ import clsx from 'clsx';
3
+ import { useState } from 'react';
2
4
  import { Slider } from './Slider.js';
3
5
 
4
6
  const meta = {
@@ -15,3 +17,41 @@ export default meta;
15
17
  type Story = StoryObj<typeof Slider>;
16
18
 
17
19
  export const Default: Story = {};
20
+
21
+ export const Vertical: Story = {
22
+ args: {
23
+ orientation: 'vertical',
24
+ style: { height: '200px' },
25
+ },
26
+ };
27
+
28
+ export const CustomStyles: Story = {
29
+ args: {
30
+ orientation: 'vertical',
31
+ style: { height: '200px' },
32
+ min: -2,
33
+ max: 2,
34
+ defaultValue: [0],
35
+ },
36
+ render: (args) => {
37
+ const [value, setValue] = useState([0]);
38
+ return (
39
+ <Slider.Root value={value} onValueChange={setValue} {...args}>
40
+ <Slider.Track
41
+ className={clsx({
42
+ 'bg-attention': value[0] === -2,
43
+ 'bg-attention-light': value[0] === -1,
44
+ 'bg-main': value[0] === 0,
45
+ 'bg-success-light': value[0] === 1,
46
+ 'bg-success': value[0] === 2,
47
+ })}
48
+ />
49
+ <Slider.Thumb className="w-24px h-24px">
50
+ <div className="text-lg">
51
+ {['😭', '😔', '😐', '😊', '😃'][value[0] + 2]}
52
+ </div>
53
+ </Slider.Thumb>
54
+ </Slider.Root>
55
+ );
56
+ },
57
+ };
@@ -6,18 +6,21 @@ import { PaletteName } from '../../uno/index.js';
6
6
  export const SliderRoot = withClassName(
7
7
  SliderPrimitive.Root,
8
8
  'layer-components:(relative flex items-center select-none touch-none w-full h-30px translate-z-0)',
9
+ 'layer-variants:[&[data-orientation=vertical]]:(flex-col h-full w-30px)',
9
10
  );
10
11
  export const SliderTrack = withClassName(
11
12
  SliderPrimitive.Track,
12
- 'layer-components:(bg-transparent relative grow rounded-lg h-9px border border-1 border-solid border-black)',
13
+ 'layer-components:(bg-transparent relative grow rounded-lg h-9px border border-1 border-solid border-black transition-colors)',
14
+ 'layer-variants:[&[data-orientation=vertical]]:(w-9px h-full flex-1)',
13
15
  );
14
16
  export const SliderRange = withClassName(
15
17
  SliderPrimitive.Range,
16
- 'layer-components:(absolute bg-main rounded-lg h-full)',
18
+ 'layer-components:(absolute bg-main rounded-lg h-full transition-colors)',
19
+ 'layer-variants:[&[data-orientation=vertical]]:(w-full h-auto)',
17
20
  );
18
21
  export const SliderThumb = withClassName(
19
22
  SliderPrimitive.Thumb,
20
- 'layer-components:(block cursor-pointer w-5 h-5 bg-white shadow-sm rounded-lg ring-2 ring-black touch-none transition-all)',
23
+ 'layer-components:(flex items-center justify-center leading-none cursor-pointer w-5 h-5 bg-white shadow-sm rounded-lg ring-2 ring-black touch-none transition-all)',
21
24
  'layer-components:hover:(shadow-md)',
22
25
  'layer-components:active:(shadow-lg ring-4 ring-main-dark ring-opacity-50 bg-main-light)',
23
26
  'layer-components:focus-visible:(shadow-lg ring-4 ring-accent ring-opacity-50 outline-none bg-main-light)',