@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.
- package/dist/cjs/components/button/Button.d.ts +3 -0
- package/dist/cjs/components/button/Button.js +16 -6
- package/dist/cjs/components/button/Button.js.map +1 -1
- package/dist/cjs/components/emojiPicker/EmojiPicker.d.ts +2 -1
- package/dist/cjs/components/emojiPicker/EmojiPicker.js +4 -3
- package/dist/cjs/components/emojiPicker/EmojiPicker.js.map +1 -1
- package/dist/cjs/components/emojiPicker/EmojiPicker.stories.d.ts +1 -1
- package/dist/cjs/components/forms/EmojiField.d.ts +7 -0
- package/dist/cjs/components/forms/EmojiField.js +41 -0
- package/dist/cjs/components/forms/EmojiField.js.map +1 -0
- package/dist/cjs/components/forms/FormikForm.d.ts +2 -0
- package/dist/cjs/components/forms/FormikForm.js +2 -0
- package/dist/cjs/components/forms/FormikForm.js.map +1 -1
- package/dist/cjs/components/forms/FormikForm.stories.d.ts +2 -0
- package/dist/cjs/components/forms/FormikForm.stories.js +3 -1
- package/dist/cjs/components/forms/FormikForm.stories.js.map +1 -1
- package/dist/cjs/components/slider/Slider.js +4 -4
- package/dist/cjs/components/slider/Slider.js.map +1 -1
- package/dist/cjs/components/slider/Slider.stories.d.ts +2 -0
- package/dist/cjs/components/slider/Slider.stories.js +32 -1
- package/dist/cjs/components/slider/Slider.stories.js.map +1 -1
- package/dist/css/main.css +4 -4
- package/dist/esm/components/button/Button.d.ts +3 -0
- package/dist/esm/components/button/Button.js +17 -7
- package/dist/esm/components/button/Button.js.map +1 -1
- package/dist/esm/components/emojiPicker/EmojiPicker.d.ts +2 -1
- package/dist/esm/components/emojiPicker/EmojiPicker.js +4 -3
- package/dist/esm/components/emojiPicker/EmojiPicker.js.map +1 -1
- package/dist/esm/components/emojiPicker/EmojiPicker.stories.d.ts +1 -1
- package/dist/esm/components/forms/EmojiField.d.ts +7 -0
- package/dist/esm/components/forms/EmojiField.js +35 -0
- package/dist/esm/components/forms/EmojiField.js.map +1 -0
- package/dist/esm/components/forms/FormikForm.d.ts +2 -0
- package/dist/esm/components/forms/FormikForm.js +2 -0
- package/dist/esm/components/forms/FormikForm.js.map +1 -1
- package/dist/esm/components/forms/FormikForm.stories.d.ts +2 -0
- package/dist/esm/components/forms/FormikForm.stories.js +3 -1
- package/dist/esm/components/forms/FormikForm.stories.js.map +1 -1
- package/dist/esm/components/slider/Slider.js +4 -4
- package/dist/esm/components/slider/Slider.js.map +1 -1
- package/dist/esm/components/slider/Slider.stories.d.ts +2 -0
- package/dist/esm/components/slider/Slider.stories.js +28 -0
- package/dist/esm/components/slider/Slider.stories.js.map +1 -1
- package/package.json +1 -1
- package/src/components/button/Button.tsx +27 -7
- package/src/components/emojiPicker/EmojiPicker.tsx +17 -3
- package/src/components/forms/EmojiField.tsx +64 -0
- package/src/components/forms/FormikForm.stories.tsx +3 -0
- package/src/components/forms/FormikForm.tsx +2 -0
- package/src/components/slider/Slider.stories.tsx +40 -0
- 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:(
|
|
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)',
|