@flightlesslabs/dodo-ui 0.1.5 → 0.3.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.
Files changed (90) hide show
  1. package/dist/index.d.ts +6 -0
  2. package/dist/index.js +4 -0
  3. package/dist/stories/Home.mdx +57 -7
  4. package/dist/stories/assets/dark-theme-toggle.png +0 -0
  5. package/dist/stories/components/Form/Button/Button.stories.svelte +10 -5
  6. package/dist/stories/components/Form/Button/Button.svelte +213 -211
  7. package/dist/stories/components/Form/Button/Button.svelte.d.ts +4 -1
  8. package/dist/stories/components/Form/Button/Events/Events.stories.svelte +40 -0
  9. package/dist/stories/components/Form/Button/Events/Events.stories.svelte.d.ts +18 -0
  10. package/dist/stories/components/Form/Button/Roundness/Roundness.stories.svelte +14 -11
  11. package/dist/stories/components/Form/Button/utils/scss/mixins.scss +21 -21
  12. package/dist/stories/components/Form/PasswordInput/Events/Events.stories.svelte +168 -0
  13. package/dist/stories/components/Form/PasswordInput/Events/Events.stories.svelte.d.ts +18 -0
  14. package/dist/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +37 -0
  15. package/dist/stories/components/Form/PasswordInput/PasswordInput.stories.svelte.d.ts +21 -0
  16. package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte +219 -0
  17. package/dist/stories/components/Form/PasswordInput/PasswordInput.svelte.d.ts +59 -0
  18. package/dist/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +20 -0
  19. package/dist/stories/components/Form/{ExampleButton/ExampleButton.stories.svelte.d.ts → PasswordInput/Roundness/Roundness.stories.svelte.d.ts} +3 -4
  20. package/dist/stories/components/Form/PasswordInput/Size/Size.stories.svelte +16 -0
  21. package/dist/stories/components/Form/PasswordInput/Size/Size.stories.svelte.d.ts +26 -0
  22. package/dist/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +31 -0
  23. package/dist/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte.d.ts +26 -0
  24. package/dist/stories/components/Form/TextInput/Events/Events.stories.svelte +148 -0
  25. package/dist/stories/components/Form/TextInput/Events/Events.stories.svelte.d.ts +18 -0
  26. package/dist/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +21 -0
  27. package/dist/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte.d.ts +26 -0
  28. package/dist/stories/components/Form/TextInput/Size/Size.stories.svelte +17 -0
  29. package/dist/stories/components/Form/TextInput/Size/Size.stories.svelte.d.ts +26 -0
  30. package/dist/stories/components/Form/TextInput/TextInput.stories.svelte +35 -0
  31. package/dist/stories/components/Form/TextInput/TextInput.stories.svelte.d.ts +21 -0
  32. package/dist/stories/components/Form/TextInput/TextInput.svelte +166 -0
  33. package/dist/stories/components/Form/TextInput/TextInput.svelte.d.ts +56 -0
  34. package/dist/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +47 -0
  35. package/dist/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte.d.ts +26 -0
  36. package/dist/stories/philosophy/Colors/Colors.mdx +43 -0
  37. package/dist/stories/philosophy/Colors/Colors.stories.svelte +20 -0
  38. package/dist/stories/philosophy/Colors/Colors.stories.svelte.d.ts +19 -0
  39. package/dist/stories/philosophy/Colors/Colors.svelte +33 -0
  40. package/dist/stories/philosophy/Colors/Colors.svelte.d.ts +6 -0
  41. package/dist/stories/philosophy/Colors/Opacity.stories.svelte +9 -0
  42. package/dist/stories/philosophy/Colors/Opacity.stories.svelte.d.ts +19 -0
  43. package/dist/stories/philosophy/Colors/Opacity.svelte +20 -0
  44. package/dist/stories/philosophy/Colors/Opacity.svelte.d.ts +18 -0
  45. package/dist/stories/philosophy/Colors/Swatches/Palette.svelte +15 -0
  46. package/dist/stories/philosophy/Colors/Swatches/Palette.svelte.d.ts +6 -0
  47. package/dist/stories/philosophy/Colors/Swatches/Swatch.svelte +18 -0
  48. package/dist/stories/philosophy/Colors/Swatches/Swatch.svelte.d.ts +8 -0
  49. package/dist/stories/philosophy/Colors/Swatches/Swatches.svelte +39 -0
  50. package/dist/stories/philosophy/Colors/Swatches/Swatches.svelte.d.ts +8 -0
  51. package/dist/stories/philosophy/Colors/utils/color.d.ts +4 -0
  52. package/dist/stories/philosophy/Colors/utils/color.js +38 -0
  53. package/dist/stories/philosophy/Themes.mdx +23 -0
  54. package/dist/styles/_colors.css +2 -2
  55. package/dist/styles/_components.css +7 -6
  56. package/dist/styles/_minimal-reset.css +3 -0
  57. package/dist/styles/global.css +1 -0
  58. package/dist/types.d.ts +1 -1
  59. package/package.json +3 -2
  60. package/src/lib/index.ts +13 -0
  61. package/src/lib/stories/components/Form/Button/Button.stories.svelte +10 -5
  62. package/src/lib/stories/components/Form/Button/Button.svelte +36 -30
  63. package/src/lib/stories/components/Form/Button/Events/Events.stories.svelte +42 -0
  64. package/src/lib/stories/components/Form/Button/Roundness/Roundness.stories.svelte +14 -11
  65. package/src/lib/stories/components/Form/Button/utils/scss/mixins.scss +21 -21
  66. package/src/lib/stories/components/Form/PasswordInput/Events/Events.stories.svelte +174 -0
  67. package/src/lib/stories/components/Form/PasswordInput/PasswordInput.stories.svelte +41 -0
  68. package/src/lib/stories/components/Form/PasswordInput/PasswordInput.svelte +361 -0
  69. package/src/lib/stories/components/Form/PasswordInput/Roundness/Roundness.stories.svelte +20 -0
  70. package/src/lib/stories/components/Form/PasswordInput/Size/Size.stories.svelte +16 -0
  71. package/src/lib/stories/components/Form/PasswordInput/WithIcon/WithIcon.stories.svelte +31 -0
  72. package/src/lib/stories/components/Form/TextInput/Events/Events.stories.svelte +153 -0
  73. package/src/lib/stories/components/Form/TextInput/Roundness/Roundness.stories.svelte +21 -0
  74. package/src/lib/stories/components/Form/TextInput/Size/Size.stories.svelte +17 -0
  75. package/src/lib/stories/components/Form/TextInput/TextInput.stories.svelte +39 -0
  76. package/src/lib/stories/components/Form/TextInput/TextInput.svelte +293 -0
  77. package/src/lib/stories/components/Form/TextInput/WithIcon/WithIcon.stories.svelte +47 -0
  78. package/src/lib/styles/_colors.css +2 -2
  79. package/src/lib/styles/_components.css +7 -6
  80. package/src/lib/styles/_minimal-reset.css +3 -0
  81. package/src/lib/styles/global.css +1 -0
  82. package/src/lib/types.ts +1 -1
  83. package/dist/stories/Getting Started.mdx +0 -13
  84. package/dist/stories/components/Form/ExampleButton/ExampleButton.stories.svelte +0 -30
  85. package/dist/stories/components/Form/ExampleButton/ExampleButton.svelte +0 -14
  86. package/dist/stories/components/Form/ExampleButton/ExampleButton.svelte.d.ts +0 -16
  87. package/dist/stories/components/Form/ExampleButton/button.css +0 -30
  88. package/src/lib/stories/components/Form/ExampleButton/ExampleButton.stories.svelte +0 -30
  89. package/src/lib/stories/components/Form/ExampleButton/ExampleButton.svelte +0 -29
  90. package/src/lib/stories/components/Form/ExampleButton/button.css +0 -30
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const Events: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type Events = InstanceType<typeof Events>;
18
+ export default Events;
@@ -15,23 +15,26 @@
15
15
  });
16
16
  </script>
17
17
 
18
- <Story
19
- name="Roundness1"
20
- args={{ outline: false, disabled: false, compact: false, roundness: 'full' }}
21
- >
22
- <Button roundness="full">Click me!</Button>
18
+ <Story name="Roundness 1x" args={{ outline: false, disabled: false, compact: false }}>
19
+ <Button>Click me!</Button>
23
20
  </Story>
24
21
 
25
- <Story name="Roundness2" args={{ outline: false, disabled: false, compact: false, roundness: 2 }}>
26
- <Button roundness={2}>Click me!</Button>
22
+ <Story
23
+ name="Roundness 2x"
24
+ args={{ outline: false, disabled: false, compact: false, roundness: '2x' }}
25
+ >
26
+ <Button roundness="2x">Click me!</Button>
27
27
  </Story>
28
28
 
29
- <Story name="Roundness3" args={{ outline: false, disabled: false, compact: false, roundness: 3 }}>
30
- <Button roundness={3}>Click me!</Button>
29
+ <Story
30
+ name="Roundness 3x"
31
+ args={{ outline: false, disabled: false, compact: false, roundness: '3x' }}
32
+ >
33
+ <Button roundness="3x">Click me!</Button>
31
34
  </Story>
32
35
 
33
36
  <Story
34
- name="RoundnessFalse"
37
+ name="Roundness False"
35
38
  args={{ outline: false, disabled: false, compact: false, roundness: false }}
36
39
  >
37
40
  <Button roundness={false}>Click me!</Button>
@@ -39,7 +42,7 @@
39
42
 
40
43
  <!-- Button with 50% roundness usefull for icon (Compact) buttons -->
41
44
  <Story
42
- name="RoundnessFull"
45
+ name="Roundness Full"
43
46
  args={{ outline: false, disabled: false, compact: false, roundness: 'full' }}
44
47
  >
45
48
  <Button roundness="full">C</Button>
@@ -3,15 +3,15 @@
3
3
  /// across different interaction states (default, hover, active).
4
4
  /// @param {String} $color-name - The theme color name (e.g., "primary", "safe", etc.)
5
5
  @mixin generate-dodo-ui-button-colors($color-name) {
6
- --dodo-ui-button-outline-#{$color-name}: var(--dodo-color-#{$color-name}-400);
6
+ --dodo-ui-Button-outline-#{$color-name}: var(--dodo-color-#{$color-name}-400);
7
7
 
8
- --dodo-ui-button-text-#{$color-name}-bg: var(--dodo-color-#{$color-name}-100);
9
- --dodo-ui-button-text-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-200);
10
- --dodo-ui-button-text-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-300);
8
+ --dodo-ui-Button-text-#{$color-name}-bg: var(--dodo-color-#{$color-name}-100);
9
+ --dodo-ui-Button-text-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-200);
10
+ --dodo-ui-Button-text-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-300);
11
11
 
12
- --dodo-ui-button-solid-#{$color-name}-bg: var(--dodo-color-#{$color-name}-500);
13
- --dodo-ui-button-solid-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-600);
14
- --dodo-ui-button-solid-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-700);
12
+ --dodo-ui-Button-solid-#{$color-name}-bg: var(--dodo-color-#{$color-name}-500);
13
+ --dodo-ui-Button-solid-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-600);
14
+ --dodo-ui-Button-solid-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-700);
15
15
  }
16
16
 
17
17
  /// Mixin: generate-dodo-ui-button-colors
@@ -19,15 +19,15 @@
19
19
  /// across different interaction states (default, hover, active).
20
20
  /// @param {String} $color-name - The theme color name (e.g., "primary", "safe", etc.)
21
21
  @mixin generate-dodo-ui-button-colors-dark($color-name) {
22
- --dodo-ui-button-outline-#{$color-name}: var(--dodo-color-#{$color-name}-300);
22
+ --dodo-ui-Button-outline-#{$color-name}: var(--dodo-color-#{$color-name}-300);
23
23
 
24
- --dodo-ui-button-text-#{$color-name}-bg: var(--dodo-color-#{$color-name}-50);
25
- --dodo-ui-button-text-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-100);
26
- --dodo-ui-button-text-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-200);
24
+ --dodo-ui-Button-text-#{$color-name}-bg: var(--dodo-color-#{$color-name}-50);
25
+ --dodo-ui-Button-text-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-100);
26
+ --dodo-ui-Button-text-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-200);
27
27
 
28
- --dodo-ui-button-solid-#{$color-name}-bg: var(--dodo-color-#{$color-name}-300);
29
- --dodo-ui-button-solid-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-200);
30
- --dodo-ui-button-solid-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-100);
28
+ --dodo-ui-Button-solid-#{$color-name}-bg: var(--dodo-color-#{$color-name}-300);
29
+ --dodo-ui-Button-solid-#{$color-name}-hover-bg: var(--dodo-color-#{$color-name}-200);
30
+ --dodo-ui-Button-solid-#{$color-name}-active-bg: var(--dodo-color-#{$color-name}-100);
31
31
  }
32
32
 
33
33
  /// Mixin: generate-dodo-ui-button-color
@@ -38,31 +38,31 @@
38
38
  &.variant {
39
39
  &--text {
40
40
  color: var(--dodo-color-#{$theme}-800);
41
- background-color: var(--dodo-ui-button-text-#{$theme}-bg);
41
+ background-color: var(--dodo-ui-Button-text-#{$theme}-bg);
42
42
 
43
43
  &:hover {
44
- background-color: var(--dodo-ui-button-text-#{$theme}-hover-bg);
44
+ background-color: var(--dodo-ui-Button-text-#{$theme}-hover-bg);
45
45
  }
46
46
 
47
47
  &:active {
48
- background-color: var(--dodo-ui-button-text-#{$theme}-active-bg);
48
+ background-color: var(--dodo-ui-Button-text-#{$theme}-active-bg);
49
49
  }
50
50
 
51
51
  &.outline {
52
- border-color: var(--dodo-ui-button-outline-#{$theme});
52
+ border-color: var(--dodo-ui-Button-outline-#{$theme});
53
53
  }
54
54
  }
55
55
 
56
56
  &--solid {
57
57
  color: var(--dodo-color-constant-white);
58
- background-color: var(--dodo-ui-button-solid-#{$theme}-bg);
58
+ background-color: var(--dodo-ui-Button-solid-#{$theme}-bg);
59
59
 
60
60
  &:hover {
61
- background-color: var(--dodo-ui-button-solid-#{$theme}-hover-bg);
61
+ background-color: var(--dodo-ui-Button-solid-#{$theme}-hover-bg);
62
62
  }
63
63
 
64
64
  &:active {
65
- background-color: var(--dodo-ui-button-solid-#{$theme}-active-bg);
65
+ background-color: var(--dodo-ui-Button-solid-#{$theme}-active-bg);
66
66
  }
67
67
  }
68
68
  }
@@ -0,0 +1,168 @@
1
+ <script module lang="ts">import { defineMeta } from '@storybook/addon-svelte-csf';
2
+ import { storyPasswordInputArgTypes } from '../PasswordInput.stories.svelte';
3
+ import PasswordInput, {} from '../PasswordInput.svelte';
4
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
5
+ const { Story } = defineMeta({
6
+ component: PasswordInput,
7
+ tags: ['autodocs'],
8
+ argTypes: storyPasswordInputArgTypes,
9
+ });
10
+ </script>
11
+
12
+ <Story
13
+ name="Input"
14
+ args={{
15
+ oninput: (e: Event) => {
16
+ const target = e.target as HTMLInputElement;
17
+
18
+ console.log('Input Event', target.value);
19
+ },
20
+ }}
21
+ >
22
+ <PasswordInput
23
+ oninput={(e: Event) => {
24
+ const target = e.target as HTMLInputElement;
25
+
26
+ console.log('Input Event', target.value);
27
+ }}
28
+ />
29
+ </Story>
30
+
31
+ <Story
32
+ name="Change"
33
+ args={{
34
+ onchange: (e: Event) => {
35
+ const target = e.target as HTMLInputElement;
36
+
37
+ console.log('onChange Event', target.value);
38
+ },
39
+ }}
40
+ >
41
+ <PasswordInput
42
+ onchange={(e: Event) => {
43
+ const target = e.target as HTMLInputElement;
44
+
45
+ console.log('onchange Event', target.value);
46
+ }}
47
+ />
48
+ </Story>
49
+
50
+ <!-- `e: PasswordInputToggleEvent` -->
51
+ <Story
52
+ name="Toggle"
53
+ args={{
54
+ ontoggle: (e: PasswordInputToggleEvent) => {
55
+ const target = e.event.target as HTMLButtonElement;
56
+
57
+ console.log('ontoggle Event', e, target);
58
+ },
59
+ }}
60
+ >
61
+ <PasswordInput
62
+ ontoggle={(e: PasswordInputToggleEvent) => {
63
+ const target = e.event.target as HTMLButtonElement;
64
+
65
+ console.log('ontoggle Event', e, target);
66
+ }}
67
+ />
68
+ </Story>
69
+
70
+ <!-- `e: TextInputFocusEvent` -->
71
+ <Story
72
+ name="Focus"
73
+ args={{
74
+ onfocus: (e: TextInputFocusEvent) => {
75
+ const target = e.target as HTMLInputElement;
76
+
77
+ console.log('onfocus Event', target);
78
+ },
79
+ }}
80
+ >
81
+ <PasswordInput
82
+ onfocus={(e: TextInputFocusEvent) => {
83
+ const target = e.target as HTMLInputElement;
84
+
85
+ console.log('onfocus Event', target);
86
+ }}
87
+ />
88
+ </Story>
89
+
90
+ <!-- `e: TextInputFocusEvent` -->
91
+ <Story
92
+ name="Blur"
93
+ args={{
94
+ onblur: (e: TextInputFocusEvent) => {
95
+ const target = e.target as HTMLInputElement;
96
+
97
+ console.log('onblur Event', target);
98
+ },
99
+ }}
100
+ >
101
+ <PasswordInput
102
+ onblur={(e: TextInputFocusEvent) => {
103
+ const target = e.target as HTMLInputElement;
104
+
105
+ console.log('onblur Event', target);
106
+ }}
107
+ />
108
+ </Story>
109
+
110
+ <!-- `e: TextInputClipboardEvent` -->
111
+ <Story
112
+ name="Copy"
113
+ args={{
114
+ oncopy: (e: TextInputClipboardEvent) => {
115
+ const target = e.target as HTMLInputElement;
116
+
117
+ console.log('oncopy Event', target);
118
+ },
119
+ }}
120
+ >
121
+ <PasswordInput
122
+ oncopy={(e: TextInputClipboardEvent) => {
123
+ const target = e.target as HTMLInputElement;
124
+
125
+ console.log('oncopy Event', target);
126
+ }}
127
+ />
128
+ </Story>
129
+
130
+ <!-- `e: TextInputClipboardEvent` -->
131
+ <Story
132
+ name="Cut"
133
+ args={{
134
+ oncut: (e: TextInputClipboardEvent) => {
135
+ const target = e.target as HTMLInputElement;
136
+
137
+ console.log('oncut Event', target);
138
+ },
139
+ }}
140
+ >
141
+ <PasswordInput
142
+ oncut={(e: TextInputClipboardEvent) => {
143
+ const target = e.target as HTMLInputElement;
144
+
145
+ console.log('oncut Event', target);
146
+ }}
147
+ />
148
+ </Story>
149
+
150
+ <!-- `e: TextInputClipboardEvent` -->
151
+ <Story
152
+ name="Paste"
153
+ args={{
154
+ onpaste: (e: TextInputClipboardEvent) => {
155
+ const target = e.target as HTMLInputElement;
156
+
157
+ console.log('onpaste Event', target);
158
+ },
159
+ }}
160
+ >
161
+ <PasswordInput
162
+ onpaste={(e: TextInputClipboardEvent) => {
163
+ const target = e.target as HTMLInputElement;
164
+
165
+ console.log('onpaste Event', target);
166
+ }}
167
+ />
168
+ </Story>
@@ -0,0 +1,18 @@
1
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
+ $$bindings?: Bindings;
4
+ } & Exports;
5
+ (internal: unknown, props: {
6
+ $$events?: Events;
7
+ $$slots?: Slots;
8
+ }): Exports & {
9
+ $set?: any;
10
+ $on?: any;
11
+ };
12
+ z_$$bindings?: Bindings;
13
+ }
14
+ declare const Events: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
15
+ [evt: string]: CustomEvent<any>;
16
+ }, {}, {}, string>;
17
+ type Events = InstanceType<typeof Events>;
18
+ export default Events;
@@ -0,0 +1,37 @@
1
+ <script module lang="ts">import { defineMeta } from '@storybook/addon-svelte-csf';
2
+ import PasswordInput from './PasswordInput.svelte';
3
+ export const storyPasswordInputArgTypes = {
4
+ roundness: {
5
+ control: { type: 'select' },
6
+ options: [false, '1x', '2x', '3x'],
7
+ },
8
+ size: {
9
+ control: { type: 'select' },
10
+ options: ['normal', 'small', 'large'],
11
+ },
12
+ };
13
+ // More on how to set up stories at: https://storybook.js.org/docs/writing-stories
14
+ const { Story } = defineMeta({
15
+ component: PasswordInput,
16
+ tags: ['autodocs'],
17
+ argTypes: storyPasswordInputArgTypes,
18
+ args: { value: 'Hello world!' },
19
+ });
20
+ </script>
21
+
22
+ <!-- PasswordInput with default style -->
23
+ <Story name="Default" />
24
+
25
+ <Story name="Placeholder" args={{ value: '', placeholder: 'Type something...' }} />
26
+
27
+ <Story name="No Outline" args={{ outline: false }} />
28
+
29
+ <Story name="Error" args={{ error: true }} />
30
+
31
+ <Story name="Disabled" args={{ disabled: true }} />
32
+
33
+ <!-- Disable password toggle -->
34
+ <Story name="No toggle" args={{ passwordToggle: false }} />
35
+
36
+ <!-- Show Password by default -->
37
+ <Story name="Show Password" args={{ defaultPasswordToggleState: true }} />
@@ -0,0 +1,21 @@
1
+ import PasswordInput from './PasswordInput.svelte';
2
+ import type { StoryBookArgTypes } from '../../../../storybook-types.js';
3
+ export declare const storyPasswordInputArgTypes: StoryBookArgTypes;
4
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
5
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
6
+ $$bindings?: Bindings;
7
+ } & Exports;
8
+ (internal: unknown, props: {
9
+ $$events?: Events;
10
+ $$slots?: Slots;
11
+ }): Exports & {
12
+ $set?: any;
13
+ $on?: any;
14
+ };
15
+ z_$$bindings?: Bindings;
16
+ }
17
+ declare const PasswordInput: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
18
+ [evt: string]: CustomEvent<any>;
19
+ }, {}, {}, string>;
20
+ type PasswordInput = InstanceType<typeof PasswordInput>;
21
+ export default PasswordInput;
@@ -0,0 +1,219 @@
1
+ <script lang="ts" module>export {};
2
+ </script>
3
+
4
+ <script lang="ts">import Icon from '@iconify/svelte';
5
+ let { size = 'normal', roundness = '1x', outline = true, name, id, class: className = '', disabled = false, oninput, onchange, onblur, onfocus, onpaste, oncopy, oncut, before, after, passwordToggleIcon, error = false, passwordToggle = true, defaultPasswordToggleState = false, value = $bindable(), placeholder, ontoggle, } = $props();
6
+ let focused = $state(false);
7
+ let toggle = $state(defaultPasswordToggleState);
8
+ function onfocusMod(e) {
9
+ focused = true;
10
+ if (onfocus) {
11
+ onfocus(e);
12
+ }
13
+ }
14
+ function onblurMod(e) {
15
+ focused = false;
16
+ if (onblur) {
17
+ onblur(e);
18
+ }
19
+ }
20
+ function ontoggleMod(e) {
21
+ toggle = !toggle;
22
+ const customEvent = {
23
+ event: e,
24
+ toggle,
25
+ };
26
+ if (ontoggle) {
27
+ ontoggle(customEvent);
28
+ }
29
+ }
30
+ </script>
31
+
32
+ <div
33
+ class:outline
34
+ class:disabled
35
+ class:error
36
+ class:focused
37
+ class:toggle
38
+ class={['dodo-ui-PasswordInput', `size--${size}`, `roundness--${roundness}`, className].join(' ')}
39
+ >
40
+ {#if before}
41
+ <span class="content--before">
42
+ {@render before()}
43
+ </span>
44
+ {/if}
45
+ <input
46
+ type={passwordToggle && toggle ? 'text' : 'password'}
47
+ {name}
48
+ {id}
49
+ {disabled}
50
+ {oninput}
51
+ {onchange}
52
+ onfocus={onfocusMod}
53
+ onblur={onblurMod}
54
+ {onpaste}
55
+ {oncopy}
56
+ {oncut}
57
+ {placeholder}
58
+ bind:value
59
+ />
60
+
61
+ {#if passwordToggle && !disabled}
62
+ <button class="passwordToggle" title="Toggle password" onclick={ontoggleMod} class:toggle>
63
+ {#if passwordToggleIcon}
64
+ {@render passwordToggleIcon()}
65
+ {:else if toggle}
66
+ <Icon icon="mdi:eye-off" width="24" height="24" />
67
+ {:else}
68
+ <Icon icon="mdi:eye" width="24" height="24" />
69
+ {/if}
70
+ </button>
71
+ {/if}
72
+
73
+ {#if after}
74
+ <span class="content--after">
75
+ {@render after()}
76
+ </span>
77
+ {/if}
78
+ </div>
79
+
80
+ <style>:global(:root) {
81
+ --dodo-ui-PasswordInput-border-color: var(--dodo-color-default-500);
82
+ --dodo-ui-PasswordInput-focus-border-color: var(--dodo-color-primary-500);
83
+ --dodo-ui-PasswordInput-error-border-color: var(--dodo-color-danger-500);
84
+ --dodo-ui-PasswordInput-disabled-color: var(--dodo-color-default-400);
85
+ --dodo-ui-PasswordInput-disabled-bg: var(--dodo-color-default-200);
86
+ --dodo-ui-PasswordInput-ToggleButton-hover: var(--dodo-color-primary-700);
87
+ }
88
+
89
+ :global(.dodo-theme--dark) {
90
+ --dodo-ui-PasswordInput-border-color: var(--dodo-color-default-600);
91
+ --dodo-ui-PasswordInput-focus-border-color: var(--dodo-color-primary-600);
92
+ --dodo-ui-PasswordInput-error-border-color: var(--dodo-color-danger-600);
93
+ --dodo-ui-PasswordInput-disabled-bg: var(--dodo-color-default-100);
94
+ --dodo-ui-PasswordInput-disabled-color: var(--dodo-color-default-500);
95
+ --dodo-ui-PasswordInput-ToggleButton-hover: var(--dodo-color-primary-600);
96
+ }
97
+
98
+ .dodo-ui-PasswordInput {
99
+ display: flex;
100
+ overflow: hidden;
101
+ color: var(--dodo-color-default-800);
102
+ transition: all 150ms;
103
+ border: 0;
104
+ }
105
+ .dodo-ui-PasswordInput input {
106
+ flex: 1;
107
+ border: 0;
108
+ outline: 0;
109
+ height: 100%;
110
+ background-color: transparent;
111
+ font-family: inherit;
112
+ color: inherit;
113
+ letter-spacing: 0.3px;
114
+ }
115
+ .dodo-ui-PasswordInput.outline {
116
+ border-style: solid;
117
+ border-width: var(--dodo-ui-element-border-width);
118
+ border-color: var(--dodo-ui-PasswordInput-border-color);
119
+ }
120
+ .dodo-ui-PasswordInput.focused {
121
+ border-color: var(--dodo-ui-PasswordInput-focus-border-color);
122
+ }
123
+ .dodo-ui-PasswordInput.error {
124
+ border-color: var(--dodo-ui-PasswordInput-error-border-color);
125
+ }
126
+ .dodo-ui-PasswordInput.disabled {
127
+ cursor: initial;
128
+ background-color: var(--dodo-ui-PasswordInput-disabled-bg);
129
+ color: var(--dodo-ui-PasswordInput-disabled-color);
130
+ border-color: var(--dodo-ui-PasswordInput-disabled-bg);
131
+ }
132
+ .dodo-ui-PasswordInput .content--after:empty, .dodo-ui-PasswordInput .content--before:empty {
133
+ display: none;
134
+ }
135
+ .dodo-ui-PasswordInput .content--after, .dodo-ui-PasswordInput .content--before {
136
+ display: inline-flex;
137
+ height: 100%;
138
+ align-items: center;
139
+ }
140
+ .dodo-ui-PasswordInput.size--normal {
141
+ height: var(--dodo-ui-element-height-normal);
142
+ }
143
+ .dodo-ui-PasswordInput.size--normal input {
144
+ font-size: 1rem;
145
+ padding: 0 12px;
146
+ }
147
+ .dodo-ui-PasswordInput.size--normal .content--before {
148
+ margin-left: 12px;
149
+ margin-right: -4px;
150
+ }
151
+ .dodo-ui-PasswordInput.size--normal .content--after {
152
+ margin-right: 12px;
153
+ margin-left: -4px;
154
+ }
155
+ .dodo-ui-PasswordInput.size--normal .passwordToggle {
156
+ width: var(--dodo-ui-element-height-normal);
157
+ }
158
+ .dodo-ui-PasswordInput.size--small {
159
+ height: var(--dodo-ui-element-height-small);
160
+ }
161
+ .dodo-ui-PasswordInput.size--small input {
162
+ padding: 0 8px;
163
+ font-size: 0.9rem;
164
+ }
165
+ .dodo-ui-PasswordInput.size--small .content--before {
166
+ margin-left: 8px;
167
+ margin-right: -2px;
168
+ }
169
+ .dodo-ui-PasswordInput.size--small .content--after {
170
+ margin-right: 8px;
171
+ margin-left: -2px;
172
+ }
173
+ .dodo-ui-PasswordInput.size--small .passwordToggle {
174
+ width: var(--dodo-ui-element-height-small);
175
+ }
176
+ .dodo-ui-PasswordInput.size--large {
177
+ height: var(--dodo-ui-element-height-large);
178
+ }
179
+ .dodo-ui-PasswordInput.size--large input {
180
+ font-size: 1.1rem;
181
+ padding: 0 14px;
182
+ }
183
+ .dodo-ui-PasswordInput.size--large .content--before {
184
+ margin-left: 14px;
185
+ margin-right: -4px;
186
+ }
187
+ .dodo-ui-PasswordInput.size--large .content--after {
188
+ margin-right: 14px;
189
+ margin-left: -4px;
190
+ }
191
+ .dodo-ui-PasswordInput.size--large .passwordToggle {
192
+ width: var(--dodo-ui-element-height-large);
193
+ }
194
+ .dodo-ui-PasswordInput.roundness--1x {
195
+ border-radius: var(--dodo-ui-element-roundness-1x);
196
+ }
197
+ .dodo-ui-PasswordInput.roundness--2x {
198
+ border-radius: var(--dodo-ui-element-roundness-2x);
199
+ }
200
+ .dodo-ui-PasswordInput.roundness--3x {
201
+ border-radius: var(--dodo-ui-element-roundness-3x);
202
+ }
203
+ .dodo-ui-PasswordInput .passwordToggle {
204
+ background-color: transparent;
205
+ outline: 0;
206
+ border: 0;
207
+ display: inline-flex;
208
+ justify-content: center;
209
+ align-items: center;
210
+ height: 100%;
211
+ cursor: pointer;
212
+ padding: 0;
213
+ margin-right: 4px;
214
+ color: var(--dodo-color-default-700);
215
+ transition: all 150ms;
216
+ }
217
+ .dodo-ui-PasswordInput .passwordToggle:hover {
218
+ color: var(--dodo-ui-PasswordInput-ToggleButton-hover);
219
+ }</style>
@@ -0,0 +1,59 @@
1
+ export type PasswordInputToggleEvent = {
2
+ event: Event;
3
+ toggle: boolean;
4
+ };
5
+ import type { ComponentSize } from '../../../../types.js';
6
+ import type { Snippet } from 'svelte';
7
+ import type { ChangeEventHandler, ClipboardEventHandler, FocusEventHandler, FormEventHandler } from 'svelte/elements';
8
+ import type { TextInputRoundness } from '../TextInput/TextInput.svelte';
9
+ interface PasswordInputProps {
10
+ /** How large should the button be? */
11
+ size?: ComponentSize;
12
+ /** Toggle Password */
13
+ passwordToggle?: boolean;
14
+ /** Default Password Toggle State */
15
+ defaultPasswordToggleState?: boolean;
16
+ /** Toggle Password Icon */
17
+ passwordToggleIcon?: Snippet;
18
+ /** How round should the border radius be? */
19
+ roundness?: TextInputRoundness;
20
+ /** Add a border around the button. Default True */
21
+ outline?: boolean;
22
+ /** Input value */
23
+ value?: string;
24
+ /** How round should the border radius be? */
25
+ placeholder?: string;
26
+ /** Button disabled state */
27
+ disabled?: boolean;
28
+ /** is there any associated Error ? */
29
+ error?: boolean;
30
+ /** Name */
31
+ name?: string;
32
+ /** Id */
33
+ id?: string;
34
+ /** Icon before button content */
35
+ before?: Snippet;
36
+ /** Icon after button content */
37
+ after?: Snippet;
38
+ /** Custom css class*/
39
+ class?: string;
40
+ /** oninput event handler */
41
+ oninput?: FormEventHandler<HTMLInputElement>;
42
+ /** onchange event handler */
43
+ onchange?: ChangeEventHandler<HTMLInputElement>;
44
+ /** onblur event handler */
45
+ onblur?: FocusEventHandler<HTMLInputElement>;
46
+ /** onfocus event handler */
47
+ onfocus?: FocusEventHandler<HTMLInputElement>;
48
+ /** onpaste event handler */
49
+ onpaste?: ClipboardEventHandler<HTMLInputElement>;
50
+ /** oncopy event handler */
51
+ oncopy?: ClipboardEventHandler<HTMLInputElement>;
52
+ /** oncut event handler */
53
+ oncut?: ClipboardEventHandler<HTMLInputElement>;
54
+ /** ontoggle event handler */
55
+ ontoggle?: (e: PasswordInputToggleEvent) => void;
56
+ }
57
+ declare const PasswordInput: import("svelte").Component<PasswordInputProps, {}, "value">;
58
+ type PasswordInput = ReturnType<typeof PasswordInput>;
59
+ export default PasswordInput;