@flightlesslabs/dodo-ui 0.4.0 → 0.5.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.
- package/dist/index.d.ts +6 -1
- package/dist/index.js +4 -0
- package/dist/stories/components/Form/FormControl/FormControl.svelte +1 -1
- package/dist/stories/components/Form/Message/Color/Color.stories.svelte +36 -0
- package/dist/stories/components/Form/Message/Color/Color.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Form/Message/Message.stories.svelte +11 -26
- package/dist/stories/components/Form/Message/Message.stories.svelte.d.ts +2 -0
- package/dist/stories/components/Form/Message/Message.svelte +14 -3
- package/dist/stories/components/Form/Message/Message.svelte.d.ts +3 -0
- package/dist/stories/components/Form/Message/Size/Size.stories.svelte +24 -0
- package/dist/stories/components/Form/Message/Size/Size.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte +32 -130
- package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte.d.ts +2 -3
- package/dist/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +74 -0
- package/dist/stories/components/Form/SimpleSelect/Events/Events.stories.svelte.d.ts +18 -0
- package/dist/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +24 -0
- package/dist/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +59 -0
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte.d.ts +23 -0
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte +69 -0
- package/dist/stories/components/Form/SimpleSelect/SimpleSelect.svelte.d.ts +50 -0
- package/dist/stories/components/Form/SimpleSelect/Size/Size.stories.svelte +20 -0
- package/dist/stories/components/Form/SimpleSelect/Size/Size.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +36 -0
- package/dist/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte.d.ts +26 -0
- package/dist/stories/components/Form/TextInput/TextInput.svelte +22 -120
- package/dist/stories/components/Form/TextInput/TextInput.svelte.d.ts +1 -2
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +34 -0
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte.d.ts +21 -0
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +120 -0
- package/dist/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte.d.ts +29 -0
- package/dist/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +20 -0
- package/dist/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte.d.ts +26 -0
- package/dist/stories/developer tools/components/InputEnclosure/Size/Size.stories.svelte +16 -0
- package/dist/stories/developer tools/components/InputEnclosure/Size/Size.stories.svelte.d.ts +26 -0
- package/dist/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +47 -0
- package/dist/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte.d.ts +26 -0
- package/package.json +1 -1
- package/src/lib/index.ts +10 -1
- package/src/lib/stories/components/Form/FormControl/FormControl.svelte +1 -1
- package/src/lib/stories/components/Form/Message/Color/Color.stories.svelte +36 -0
- package/src/lib/stories/components/Form/Message/Message.stories.svelte +13 -26
- package/src/lib/stories/components/Form/Message/Message.svelte +23 -2
- package/src/lib/stories/components/Form/Message/Size/Size.stories.svelte +24 -0
- package/src/lib/stories/components/Form/PasswordInput/PasswordInput.svelte +35 -157
- package/src/lib/stories/components/Form/SimpleSelect/Events/Events.stories.svelte +79 -0
- package/src/lib/stories/components/Form/SimpleSelect/Roundness/Roundness.stories.svelte +24 -0
- package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.stories.svelte +64 -0
- package/src/lib/stories/components/Form/SimpleSelect/SimpleSelect.svelte +159 -0
- package/src/lib/stories/components/Form/SimpleSelect/Size/Size.stories.svelte +20 -0
- package/src/lib/stories/components/Form/SimpleSelect/WithIcon/WithIcon.stories.svelte +36 -0
- package/src/lib/stories/components/Form/TextInput/TextInput.svelte +22 -143
- package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte +38 -0
- package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte +198 -0
- package/src/lib/stories/developer tools/components/InputEnclosure/Roundness/Roundness.stories.svelte +20 -0
- package/src/lib/stories/developer tools/components/InputEnclosure/Size/Size.stories.svelte +16 -0
- package/src/lib/stories/developer tools/components/InputEnclosure/WithIcon/WithIcon.stories.svelte +47 -0
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import { type SimpleSelectFocusEvent } from '../SimpleSelect.svelte';
|
|
4
|
+
import SimpleSelect from '../SimpleSelect.svelte';
|
|
5
|
+
import {
|
|
6
|
+
storySimpleSelectArgTypes,
|
|
7
|
+
storySimpleSelectOptions,
|
|
8
|
+
} from '../SimpleSelect.stories.svelte';
|
|
9
|
+
|
|
10
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
11
|
+
const { Story } = defineMeta({
|
|
12
|
+
component: SimpleSelect,
|
|
13
|
+
tags: ['autodocs'],
|
|
14
|
+
argTypes: storySimpleSelectArgTypes,
|
|
15
|
+
args: { options: storySimpleSelectOptions },
|
|
16
|
+
});
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<Story
|
|
20
|
+
name="Change"
|
|
21
|
+
args={{
|
|
22
|
+
onchange: (e: Event) => {
|
|
23
|
+
const target = e.target as HTMLSelectElement;
|
|
24
|
+
|
|
25
|
+
console.log('onChange Event', target.value);
|
|
26
|
+
},
|
|
27
|
+
}}
|
|
28
|
+
>
|
|
29
|
+
<SimpleSelect
|
|
30
|
+
onchange={(e: Event) => {
|
|
31
|
+
const target = e.target as HTMLSelectElement;
|
|
32
|
+
|
|
33
|
+
console.log('onchange Event', target.value);
|
|
34
|
+
}}
|
|
35
|
+
options={storySimpleSelectOptions}
|
|
36
|
+
/>
|
|
37
|
+
</Story>
|
|
38
|
+
|
|
39
|
+
<!-- `e: SimpleSelectFocusEvent` -->
|
|
40
|
+
<Story
|
|
41
|
+
name="Focus"
|
|
42
|
+
args={{
|
|
43
|
+
onfocus: (e: SimpleSelectFocusEvent) => {
|
|
44
|
+
const target = e.target as HTMLSelectElement;
|
|
45
|
+
|
|
46
|
+
console.log('onfocus Event', target);
|
|
47
|
+
},
|
|
48
|
+
}}
|
|
49
|
+
>
|
|
50
|
+
<SimpleSelect
|
|
51
|
+
onfocus={(e: SimpleSelectFocusEvent) => {
|
|
52
|
+
const target = e.target as HTMLSelectElement;
|
|
53
|
+
|
|
54
|
+
console.log('onfocus Event', target);
|
|
55
|
+
}}
|
|
56
|
+
options={storySimpleSelectOptions}
|
|
57
|
+
/>
|
|
58
|
+
</Story>
|
|
59
|
+
|
|
60
|
+
<!-- `e: SimpleSelectFocusEvent` -->
|
|
61
|
+
<Story
|
|
62
|
+
name="Blur"
|
|
63
|
+
args={{
|
|
64
|
+
onblur: (e: SimpleSelectFocusEvent) => {
|
|
65
|
+
const target = e.target as HTMLSelectElement;
|
|
66
|
+
|
|
67
|
+
console.log('onblur Event', target);
|
|
68
|
+
},
|
|
69
|
+
}}
|
|
70
|
+
>
|
|
71
|
+
<SimpleSelect
|
|
72
|
+
onblur={(e: SimpleSelectFocusEvent) => {
|
|
73
|
+
const target = e.target as HTMLSelectElement;
|
|
74
|
+
|
|
75
|
+
console.log('onblur Event', target);
|
|
76
|
+
}}
|
|
77
|
+
options={storySimpleSelectOptions}
|
|
78
|
+
/>
|
|
79
|
+
</Story>
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import SimpleSelect from '../SimpleSelect.svelte';
|
|
4
|
+
import {
|
|
5
|
+
storySimpleSelectArgTypes,
|
|
6
|
+
storySimpleSelectOptions,
|
|
7
|
+
} from '../SimpleSelect.stories.svelte';
|
|
8
|
+
|
|
9
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
10
|
+
const { Story } = defineMeta({
|
|
11
|
+
component: SimpleSelect,
|
|
12
|
+
tags: ['autodocs'],
|
|
13
|
+
argTypes: storySimpleSelectArgTypes,
|
|
14
|
+
args: { options: storySimpleSelectOptions },
|
|
15
|
+
});
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<Story name="Roundness 1x" />
|
|
19
|
+
|
|
20
|
+
<Story name="Roundness 2x" args={{ roundness: '2x' }} />
|
|
21
|
+
|
|
22
|
+
<Story name="Roundness 3x" args={{ roundness: '3x' }} />
|
|
23
|
+
|
|
24
|
+
<Story name="Roundness False" args={{ roundness: false }} />
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import { type SimpleSelectOption } from './SimpleSelect.svelte';
|
|
4
|
+
import type { StoryBookArgTypes } from '$lib/storybook-types.js';
|
|
5
|
+
import SimpleSelect from './SimpleSelect.svelte';
|
|
6
|
+
|
|
7
|
+
export const storySimpleSelectArgTypes: StoryBookArgTypes = {
|
|
8
|
+
type: {
|
|
9
|
+
control: { type: 'select' },
|
|
10
|
+
options: ['text', 'tel', 'email', 'password', 'url', 'number'],
|
|
11
|
+
},
|
|
12
|
+
roundness: {
|
|
13
|
+
control: { type: 'select' },
|
|
14
|
+
options: [false, '1x', '2x', '3x'],
|
|
15
|
+
},
|
|
16
|
+
size: {
|
|
17
|
+
control: { type: 'select' },
|
|
18
|
+
options: ['normal', 'small', 'large'],
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
export const storySimpleSelectOptions: SimpleSelectOption[] = [
|
|
23
|
+
{
|
|
24
|
+
value: 'volvo',
|
|
25
|
+
label: 'Volvo',
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
value: 'saab',
|
|
29
|
+
label: 'Saab',
|
|
30
|
+
},
|
|
31
|
+
{
|
|
32
|
+
value: 'mercedes',
|
|
33
|
+
label: 'Mercedes',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
value: 'audi',
|
|
37
|
+
label: 'Audi',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
value: 'opel',
|
|
41
|
+
label: 'Opel',
|
|
42
|
+
disabled: true,
|
|
43
|
+
},
|
|
44
|
+
];
|
|
45
|
+
|
|
46
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
47
|
+
const { Story } = defineMeta({
|
|
48
|
+
component: SimpleSelect,
|
|
49
|
+
tags: ['autodocs'],
|
|
50
|
+
argTypes: storySimpleSelectArgTypes,
|
|
51
|
+
args: { options: storySimpleSelectOptions },
|
|
52
|
+
});
|
|
53
|
+
</script>
|
|
54
|
+
|
|
55
|
+
<!-- SimpleSelect with default style -->
|
|
56
|
+
<Story name="Default" />
|
|
57
|
+
|
|
58
|
+
<Story name="Placeholder" args={{ value: '', placeholder: 'Type something...' }} />
|
|
59
|
+
|
|
60
|
+
<Story name="No Outline" args={{ outline: false }} />
|
|
61
|
+
|
|
62
|
+
<Story name="Error" args={{ error: true }} />
|
|
63
|
+
|
|
64
|
+
<Story name="Disabled" args={{ disabled: true }} />
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<script lang="ts" module>
|
|
2
|
+
export type SimpleSelectFocusEvent = FocusEvent & {
|
|
3
|
+
currentTarget: EventTarget & HTMLSelectElement;
|
|
4
|
+
};
|
|
5
|
+
|
|
6
|
+
export type SimpleSelectOption = {
|
|
7
|
+
value: string;
|
|
8
|
+
label: string;
|
|
9
|
+
disabled?: boolean;
|
|
10
|
+
};
|
|
11
|
+
</script>
|
|
12
|
+
|
|
13
|
+
<script lang="ts">
|
|
14
|
+
import InputEnclosure from '$lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte';
|
|
15
|
+
|
|
16
|
+
import type { ComponentRoundness, ComponentSize } from '$lib/types.js';
|
|
17
|
+
import type { Snippet } from 'svelte';
|
|
18
|
+
import type { ChangeEventHandler, FocusEventHandler } from 'svelte/elements';
|
|
19
|
+
|
|
20
|
+
interface SimpleSelectProps {
|
|
21
|
+
/** Select ref */
|
|
22
|
+
ref?: HTMLSelectElement;
|
|
23
|
+
/** How large should the button be? */
|
|
24
|
+
size?: ComponentSize;
|
|
25
|
+
/** How round should the border radius be? */
|
|
26
|
+
roundness?: ComponentRoundness | false;
|
|
27
|
+
/** How round should the border radius be? */
|
|
28
|
+
options: SimpleSelectOption[];
|
|
29
|
+
/** Add a border around the button. Default True */
|
|
30
|
+
outline?: boolean;
|
|
31
|
+
/** Select value */
|
|
32
|
+
value?: string;
|
|
33
|
+
/** How round should the border radius be? */
|
|
34
|
+
placeholder?: string;
|
|
35
|
+
/** disabled state */
|
|
36
|
+
disabled?: boolean;
|
|
37
|
+
/** is there any associated Error ? */
|
|
38
|
+
error?: boolean;
|
|
39
|
+
/** Name */
|
|
40
|
+
name?: string;
|
|
41
|
+
/** Id */
|
|
42
|
+
id?: string;
|
|
43
|
+
/** Icon before button content */
|
|
44
|
+
before?: Snippet;
|
|
45
|
+
/** Icon after button content */
|
|
46
|
+
after?: Snippet;
|
|
47
|
+
/** Custom css class*/
|
|
48
|
+
class?: string;
|
|
49
|
+
/** onchange event handler */
|
|
50
|
+
onchange?: ChangeEventHandler<HTMLSelectElement>;
|
|
51
|
+
/** onblur event handler */
|
|
52
|
+
onblur?: FocusEventHandler<HTMLSelectElement>;
|
|
53
|
+
/** onfocus event handler */
|
|
54
|
+
onfocus?: FocusEventHandler<HTMLSelectElement>;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
let {
|
|
58
|
+
size = 'normal',
|
|
59
|
+
roundness = '1x',
|
|
60
|
+
outline = true,
|
|
61
|
+
name,
|
|
62
|
+
id,
|
|
63
|
+
class: className = '',
|
|
64
|
+
disabled = false,
|
|
65
|
+
onchange,
|
|
66
|
+
onblur,
|
|
67
|
+
onfocus,
|
|
68
|
+
before,
|
|
69
|
+
after,
|
|
70
|
+
error = false,
|
|
71
|
+
value,
|
|
72
|
+
placeholder,
|
|
73
|
+
ref = $bindable<HTMLSelectElement>(),
|
|
74
|
+
options,
|
|
75
|
+
}: SimpleSelectProps = $props();
|
|
76
|
+
|
|
77
|
+
let focused: boolean = $state(false);
|
|
78
|
+
|
|
79
|
+
function onfocusMod(e: SimpleSelectFocusEvent) {
|
|
80
|
+
focused = true;
|
|
81
|
+
|
|
82
|
+
if (onfocus) {
|
|
83
|
+
onfocus(e);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
function onblurMod(e: SimpleSelectFocusEvent) {
|
|
88
|
+
focused = false;
|
|
89
|
+
|
|
90
|
+
if (onblur) {
|
|
91
|
+
onblur(e);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
</script>
|
|
95
|
+
|
|
96
|
+
<div
|
|
97
|
+
class:outline
|
|
98
|
+
class:disabled
|
|
99
|
+
class:error
|
|
100
|
+
class:focused
|
|
101
|
+
class={['dodo-ui-SimpleSelect', `size--${size}`, `roundness--${roundness}`, className].join(' ')}
|
|
102
|
+
>
|
|
103
|
+
<InputEnclosure {outline} {disabled} {error} {focused} {size} {roundness} {before} {after}>
|
|
104
|
+
<select
|
|
105
|
+
{name}
|
|
106
|
+
{id}
|
|
107
|
+
{disabled}
|
|
108
|
+
{onchange}
|
|
109
|
+
onfocus={onfocusMod}
|
|
110
|
+
onblur={onblurMod}
|
|
111
|
+
{placeholder}
|
|
112
|
+
bind:this={ref}
|
|
113
|
+
>
|
|
114
|
+
{#each options as option (option.value)}
|
|
115
|
+
<option value={option.value} disabled={option.disabled} selected={value === option.value}>
|
|
116
|
+
{option.label}
|
|
117
|
+
</option>
|
|
118
|
+
{/each}
|
|
119
|
+
</select>
|
|
120
|
+
</InputEnclosure>
|
|
121
|
+
</div>
|
|
122
|
+
|
|
123
|
+
<style lang="scss">
|
|
124
|
+
.dodo-ui-SimpleSelect {
|
|
125
|
+
select {
|
|
126
|
+
flex: 1;
|
|
127
|
+
border: 0;
|
|
128
|
+
outline: 0;
|
|
129
|
+
height: 100%;
|
|
130
|
+
background-color: transparent;
|
|
131
|
+
font-family: inherit;
|
|
132
|
+
color: inherit;
|
|
133
|
+
letter-spacing: 0.3px;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&.size {
|
|
137
|
+
&--normal {
|
|
138
|
+
select {
|
|
139
|
+
font-size: 1rem;
|
|
140
|
+
padding: 0 12px;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
&--small {
|
|
145
|
+
select {
|
|
146
|
+
padding: 0 8px;
|
|
147
|
+
font-size: 0.9rem;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
&--large {
|
|
152
|
+
select {
|
|
153
|
+
font-size: 1.1rem;
|
|
154
|
+
padding: 0 14px;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
</style>
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import SimpleSelect from '../SimpleSelect.svelte';
|
|
4
|
+
import {
|
|
5
|
+
storySimpleSelectArgTypes,
|
|
6
|
+
storySimpleSelectOptions,
|
|
7
|
+
} from '../SimpleSelect.stories.svelte';
|
|
8
|
+
|
|
9
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
10
|
+
const { Story } = defineMeta({
|
|
11
|
+
component: SimpleSelect,
|
|
12
|
+
tags: ['autodocs'],
|
|
13
|
+
argTypes: storySimpleSelectArgTypes,
|
|
14
|
+
args: { options: storySimpleSelectOptions },
|
|
15
|
+
});
|
|
16
|
+
</script>
|
|
17
|
+
|
|
18
|
+
<Story name="Normal" />
|
|
19
|
+
<Story name="Small" args={{ size: 'small' }} />
|
|
20
|
+
<Story name="Large" args={{ size: 'large' }} />
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script module>
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import Icon from '@iconify/svelte';
|
|
4
|
+
|
|
5
|
+
import SimpleSelect from '../SimpleSelect.svelte';
|
|
6
|
+
import {
|
|
7
|
+
storySimpleSelectArgTypes,
|
|
8
|
+
storySimpleSelectOptions,
|
|
9
|
+
} from '../SimpleSelect.stories.svelte';
|
|
10
|
+
|
|
11
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
12
|
+
const { Story } = defineMeta({
|
|
13
|
+
component: SimpleSelect,
|
|
14
|
+
tags: ['autodocs'],
|
|
15
|
+
argTypes: storySimpleSelectArgTypes,
|
|
16
|
+
args: { options: storySimpleSelectOptions },
|
|
17
|
+
});
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
<!-- SimpleSelect icon in front. -->
|
|
21
|
+
<Story name="Icon Before">
|
|
22
|
+
<SimpleSelect options={storySimpleSelectOptions}>
|
|
23
|
+
{#snippet before()}
|
|
24
|
+
<Icon icon="material-symbols:content-copy" />
|
|
25
|
+
{/snippet}
|
|
26
|
+
</SimpleSelect>
|
|
27
|
+
</Story>
|
|
28
|
+
|
|
29
|
+
<!-- SimpleSelect icon in front. -->
|
|
30
|
+
<Story name="Icon After">
|
|
31
|
+
<SimpleSelect options={storySimpleSelectOptions}>
|
|
32
|
+
{#snippet after()}
|
|
33
|
+
<Icon icon="material-symbols:download-2" />
|
|
34
|
+
{/snippet}
|
|
35
|
+
</SimpleSelect>
|
|
36
|
+
</Story>
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
<script lang="ts" module>
|
|
2
|
-
export type TextInputRoundness = ComponentRoundness | false;
|
|
3
2
|
export type TextInputType = 'text' | 'tel' | 'email' | 'password' | 'url' | 'number';
|
|
4
3
|
|
|
5
4
|
export type TextInputFocusEvent = FocusEvent & {
|
|
@@ -12,6 +11,8 @@
|
|
|
12
11
|
</script>
|
|
13
12
|
|
|
14
13
|
<script lang="ts">
|
|
14
|
+
import InputEnclosure from '$lib/stories/developer tools/components/InputEnclosure/InputEnclosure.svelte';
|
|
15
|
+
|
|
15
16
|
import type { ComponentRoundness, ComponentSize } from '$lib/types.js';
|
|
16
17
|
import type { Snippet } from 'svelte';
|
|
17
18
|
import type {
|
|
@@ -29,7 +30,7 @@
|
|
|
29
30
|
/** How large should the button be? */
|
|
30
31
|
size?: ComponentSize;
|
|
31
32
|
/** How round should the border radius be? */
|
|
32
|
-
roundness?:
|
|
33
|
+
roundness?: ComponentRoundness | false;
|
|
33
34
|
/** Add a border around the button. Default True */
|
|
34
35
|
outline?: boolean;
|
|
35
36
|
/** Input value */
|
|
@@ -119,61 +120,29 @@
|
|
|
119
120
|
class:focused
|
|
120
121
|
class={['dodo-ui-TextInput', `size--${size}`, `roundness--${roundness}`, className].join(' ')}
|
|
121
122
|
>
|
|
122
|
-
{
|
|
123
|
-
<
|
|
124
|
-
{
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
bind:value
|
|
142
|
-
bind:this={ref}
|
|
143
|
-
/>
|
|
144
|
-
{#if after}
|
|
145
|
-
<span class="content--after">
|
|
146
|
-
{@render after()}
|
|
147
|
-
</span>
|
|
148
|
-
{/if}
|
|
123
|
+
<InputEnclosure {outline} {disabled} {error} {focused} {size} {roundness} {before} {after}>
|
|
124
|
+
<input
|
|
125
|
+
{type}
|
|
126
|
+
{name}
|
|
127
|
+
{id}
|
|
128
|
+
{disabled}
|
|
129
|
+
{oninput}
|
|
130
|
+
{onchange}
|
|
131
|
+
onfocus={onfocusMod}
|
|
132
|
+
onblur={onblurMod}
|
|
133
|
+
{onpaste}
|
|
134
|
+
{oncopy}
|
|
135
|
+
{oncut}
|
|
136
|
+
{placeholder}
|
|
137
|
+
{readonly}
|
|
138
|
+
bind:value
|
|
139
|
+
bind:this={ref}
|
|
140
|
+
/>
|
|
141
|
+
</InputEnclosure>
|
|
149
142
|
</div>
|
|
150
143
|
|
|
151
144
|
<style lang="scss">
|
|
152
|
-
:global(:root) {
|
|
153
|
-
--dodo-ui-TextInput-border-color: var(--dodo-color-default-500);
|
|
154
|
-
--dodo-ui-TextInput-focus-border-color: var(--dodo-color-primary-500);
|
|
155
|
-
--dodo-ui-TextInput-error-border-color: var(--dodo-color-danger-500);
|
|
156
|
-
|
|
157
|
-
--dodo-ui-TextInput-disabled-color: var(--dodo-color-default-400);
|
|
158
|
-
--dodo-ui-TextInput-disabled-bg: var(--dodo-color-default-200);
|
|
159
|
-
}
|
|
160
|
-
|
|
161
|
-
:global(.dodo-theme--dark) {
|
|
162
|
-
--dodo-ui-TextInput-border-color: var(--dodo-color-default-600);
|
|
163
|
-
--dodo-ui-TextInput-focus-border-color: var(--dodo-color-primary-600);
|
|
164
|
-
--dodo-ui-TextInput-error-border-color: var(--dodo-color-danger-600);
|
|
165
|
-
|
|
166
|
-
--dodo-ui-TextInput-disabled-bg: var(--dodo-color-default-100);
|
|
167
|
-
--dodo-ui-TextInput-disabled-color: var(--dodo-color-default-500);
|
|
168
|
-
}
|
|
169
|
-
|
|
170
145
|
.dodo-ui-TextInput {
|
|
171
|
-
display: flex;
|
|
172
|
-
overflow: hidden;
|
|
173
|
-
color: var(--dodo-color-default-800);
|
|
174
|
-
transition: all 150ms;
|
|
175
|
-
border: 0;
|
|
176
|
-
|
|
177
146
|
input {
|
|
178
147
|
flex: 1;
|
|
179
148
|
border: 0;
|
|
@@ -185,116 +154,26 @@
|
|
|
185
154
|
letter-spacing: 0.3px;
|
|
186
155
|
}
|
|
187
156
|
|
|
188
|
-
&.outline {
|
|
189
|
-
border-style: solid;
|
|
190
|
-
border-width: var(--dodo-ui-element-border-width);
|
|
191
|
-
border-color: var(--dodo-ui-TextInput-border-color);
|
|
192
|
-
}
|
|
193
|
-
|
|
194
|
-
&.focused {
|
|
195
|
-
border-color: var(--dodo-ui-TextInput-focus-border-color);
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
&.error {
|
|
199
|
-
border-color: var(--dodo-ui-TextInput-error-border-color);
|
|
200
|
-
}
|
|
201
|
-
|
|
202
|
-
&.disabled {
|
|
203
|
-
cursor: initial;
|
|
204
|
-
background-color: var(--dodo-ui-TextInput-disabled-bg);
|
|
205
|
-
color: var(--dodo-ui-TextInput-disabled-color);
|
|
206
|
-
border-color: var(--dodo-ui-TextInput-disabled-bg);
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
.content {
|
|
210
|
-
&--after,
|
|
211
|
-
&--before {
|
|
212
|
-
&:empty {
|
|
213
|
-
display: none;
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
|
|
217
|
-
&--after,
|
|
218
|
-
&--before {
|
|
219
|
-
display: inline-flex;
|
|
220
|
-
height: 100%;
|
|
221
|
-
align-items: center;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
|
|
225
157
|
&.size {
|
|
226
158
|
&--normal {
|
|
227
|
-
height: var(--dodo-ui-element-height-normal);
|
|
228
159
|
input {
|
|
229
160
|
font-size: 1rem;
|
|
230
161
|
padding: 0 12px;
|
|
231
162
|
}
|
|
232
|
-
|
|
233
|
-
.content {
|
|
234
|
-
&--before {
|
|
235
|
-
margin-left: 12px;
|
|
236
|
-
margin-right: -4px;
|
|
237
|
-
}
|
|
238
|
-
|
|
239
|
-
&--after {
|
|
240
|
-
margin-right: 12px;
|
|
241
|
-
margin-left: -4px;
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
163
|
}
|
|
245
164
|
|
|
246
165
|
&--small {
|
|
247
|
-
height: var(--dodo-ui-element-height-small);
|
|
248
166
|
input {
|
|
249
167
|
padding: 0 8px;
|
|
250
168
|
font-size: 0.9rem;
|
|
251
169
|
}
|
|
252
|
-
|
|
253
|
-
.content {
|
|
254
|
-
&--before {
|
|
255
|
-
margin-left: 8px;
|
|
256
|
-
margin-right: -2px;
|
|
257
|
-
}
|
|
258
|
-
|
|
259
|
-
&--after {
|
|
260
|
-
margin-right: 8px;
|
|
261
|
-
margin-left: -2px;
|
|
262
|
-
}
|
|
263
|
-
}
|
|
264
170
|
}
|
|
265
171
|
|
|
266
172
|
&--large {
|
|
267
|
-
height: var(--dodo-ui-element-height-large);
|
|
268
173
|
input {
|
|
269
174
|
font-size: 1.1rem;
|
|
270
175
|
padding: 0 14px;
|
|
271
176
|
}
|
|
272
|
-
|
|
273
|
-
.content {
|
|
274
|
-
&--before {
|
|
275
|
-
margin-left: 14px;
|
|
276
|
-
margin-right: -4px;
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
&--after {
|
|
280
|
-
margin-right: 14px;
|
|
281
|
-
margin-left: -4px;
|
|
282
|
-
}
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
|
|
287
|
-
&.roundness {
|
|
288
|
-
&--1x {
|
|
289
|
-
border-radius: var(--dodo-ui-element-roundness-1x);
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
&--2x {
|
|
293
|
-
border-radius: var(--dodo-ui-element-roundness-2x);
|
|
294
|
-
}
|
|
295
|
-
|
|
296
|
-
&--3x {
|
|
297
|
-
border-radius: var(--dodo-ui-element-roundness-3x);
|
|
298
177
|
}
|
|
299
178
|
}
|
|
300
179
|
}
|
package/src/lib/stories/developer tools/components/InputEnclosure/InputEnclosure.stories.svelte
ADDED
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import InputEnclosure from './InputEnclosure.svelte';
|
|
4
|
+
import type { StoryBookArgTypes } from '$lib/storybook-types.js';
|
|
5
|
+
|
|
6
|
+
export const storyInputEnclosureArgTypes: StoryBookArgTypes = {
|
|
7
|
+
roundness: {
|
|
8
|
+
control: { type: 'select' },
|
|
9
|
+
options: [false, '1x', '2x', '3x'],
|
|
10
|
+
},
|
|
11
|
+
size: {
|
|
12
|
+
control: { type: 'select' },
|
|
13
|
+
options: ['normal', 'small', 'large'],
|
|
14
|
+
},
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
// More on how to set up stories at: https://storybook.js.org/docs/writing-stories
|
|
18
|
+
const { Story } = defineMeta({
|
|
19
|
+
component: InputEnclosure,
|
|
20
|
+
tags: ['autodocs'],
|
|
21
|
+
argTypes: storyInputEnclosureArgTypes,
|
|
22
|
+
});
|
|
23
|
+
</script>
|
|
24
|
+
|
|
25
|
+
<!-- An ensloure for Form Inputs [TextInput](?path=/docs/components-form-textinput--docs) -->
|
|
26
|
+
<Story name="Default" />
|
|
27
|
+
|
|
28
|
+
<Story name="Focused" args={{ focused: true }} />
|
|
29
|
+
|
|
30
|
+
<Story name="Error" args={{ error: true }} />
|
|
31
|
+
|
|
32
|
+
<Story name="Disabled" args={{ disabled: true }} />
|
|
33
|
+
|
|
34
|
+
<Story name="Input example">
|
|
35
|
+
<InputEnclosure>
|
|
36
|
+
<input type="text" style="flex: 1; border: 0;" placeholder="Enter name" />
|
|
37
|
+
</InputEnclosure>
|
|
38
|
+
</Story>
|