flowbite-svelte 0.18.1 → 0.18.4

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/CHANGELOG.md CHANGED
@@ -2,6 +2,35 @@
2
2
 
3
3
  All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
4
4
 
5
+ ### [0.18.4](https://github.com/themesberg/flowbite-svelte/compare/v0.18.3...v0.18.4) (2022-06-23)
6
+
7
+
8
+ ### Features
9
+
10
+ * add button colored shadows ([96e20c5](https://github.com/themesberg/flowbite-svelte/commit/96e20c568f2fcc7d51e9a430fcb0007f02290bd2))
11
+ * add outline button ([aa14b26](https://github.com/themesberg/flowbite-svelte/commit/aa14b267ec1bf283ca3684fa956776b6ce4e6932))
12
+ * add outlineStyle white for loader ([7769c19](https://github.com/themesberg/flowbite-svelte/commit/7769c19df48cac833fa08ce659ebfa651160bbf5))
13
+
14
+ ### [0.18.3](https://github.com/themesberg/flowbite-svelte/compare/v0.18.2...v0.18.3) (2022-06-22)
15
+
16
+
17
+ ### Bug Fixes
18
+
19
+ * update Input component ([94df473](https://github.com/themesberg/flowbite-svelte/commit/94df473935baaa4f22124ceb0d6501a1359bd4b4))
20
+
21
+ ### [0.18.2](https://github.com/themesberg/flowbite-svelte/compare/v0.18.1...v0.18.2) (2022-06-22)
22
+
23
+
24
+ ### Features
25
+
26
+ * make button styles reactive ([d74dd9b](https://github.com/themesberg/flowbite-svelte/commit/d74dd9b37c58716e33ca72ce5058b557a6b43ced))
27
+
28
+
29
+ ### Bug Fixes
30
+
31
+ * make disabled button unclickable ([df1c66d](https://github.com/themesberg/flowbite-svelte/commit/df1c66d08e6090a66cff12d2d41f6b72a93324dc))
32
+ * update checkbox, add Label and Helper components, update checkbox page ([07de620](https://github.com/themesberg/flowbite-svelte/commit/07de6208e256cb364d9ae1ed02b321168119514d))
33
+
5
34
  ### [0.18.1](https://github.com/themesberg/flowbite-svelte/compare/v0.18.0...v0.18.1) (2022-06-18)
6
35
 
7
36
 
@@ -1,92 +1,135 @@
1
- <script>export let rounded = false;
2
- export let textSize = 'text-sm';
3
- export let btnColor = 'blue';
4
- export let type = 'button';
5
- export let disabled = false;
6
- let paddings;
7
- if (textSize === 'text-xs') {
8
- paddings = 'py-2 px-3';
9
- }
10
- else if (textSize === 'text-sm') {
11
- paddings = 'py-2.5 px-5';
12
- }
13
- else if (textSize === 'text-base') {
14
- paddings = 'py-3 px-6';
15
- }
16
- else {
17
- paddings = 'py-2.5 px-5';
18
- }
19
- let buttonClass;
20
- let round = rounded ? 'rounded-full' : 'rounded-lg';
21
- switch (btnColor) {
22
- default:
23
- case 'blue':
24
- buttonClass = `text-white text-center font-medium ${round} ${textSize} ${paddings}`;
25
- if (disabled)
26
- buttonClass += ' bg-blue-400 dark:bg-blue-500 cursor-not-allowed';
27
- else
28
- buttonClass += ' bg-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800';
29
- break;
30
- case 'blue-outline':
31
- buttonClass = `text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 font-medium rounded-lg ${textSize} ${paddings} text-center dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-600 dark:focus:ring-blue-800`;
32
- break;
33
- case 'dark':
34
- buttonClass = `text-white text-center font-medium ${round} ${textSize} ${paddings}`;
35
- if (disabled)
36
- buttonClass += ' bg-gray-400 dark:bg-gray-500 cursor-not-allowed';
37
- else
38
- buttonClass += ' bg-gray-800 hover:bg-gray-900 focus:ring-4 focus:ring-gray-300 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-800 dark:border-gray-700';
39
- break;
40
- case 'dark-outline':
41
- buttonClass = `text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:ring-4 focus:ring-gray-300 font-medium rounded-lg ${textSize} ${paddings} text-center dark:border-gray-600 dark:text-gray-400 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-800`;
42
- break;
43
- case 'light':
44
- buttonClass = `text-gray-900 bg-white border border-gray-300 focus:outline-none hover:bg-gray-100 focus:ring-4 focus:ring-gray-200 font-medium ${round} ${textSize} ${paddings} text-center dark:bg-gray-800 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-600 dark:focus:ring-gray-700`;
45
- break;
46
- case 'green':
47
- buttonClass = `text-white text-center font-medium ${round} ${textSize} ${paddings}`;
48
- if (disabled)
49
- buttonClass += ' bg-green-400 dark:bg-green-500 cursor-not-allowed';
50
- else
51
- buttonClass += ' bg-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800';
52
- break;
53
- case 'green-outline':
54
- buttonClass = `text-green-700 hover:text-white border border-green-700 hover:bg-green-800 focus:ring-4 focus:ring-green-300 font-medium rounded-lg ${textSize} ${paddings} text-center dark:border-green-500 dark:text-green-500 dark:hover:text-white dark:hover:bg-green-600 dark:focus:ring-green-800`;
55
- break;
56
- case 'red':
57
- buttonClass = `text-white text-center font-medium ${round} ${textSize} ${paddings}`;
58
- if (disabled)
59
- buttonClass += ' bg-red-400 dark:bg-red-500 cursor-not-allowed';
60
- else
61
- buttonClass += ' bg-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900';
62
- break;
63
- case 'red-outline':
64
- buttonClass = `text-red-700 hover:text-white border border-red-700 hover:bg-red-800 focus:ring-4 focus:ring-red-300 font-medium rounded-lg ${textSize} ${paddings} text-center dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-600 dark:focus:ring-red-900`;
65
- break;
66
- case 'yellow':
67
- buttonClass = `text-white text-center font-medium ${round} ${textSize} ${paddings}`;
68
- if (disabled)
69
- buttonClass += ' bg-yellow-400 dark:bg-yellow-500 cursor-not-allowed';
70
- else
71
- buttonClass += ' bg-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 dark:focus:ring-yellow-900';
72
- break;
73
- case 'yellow-outline':
74
- buttonClass = `text-yellow-400 hover:text-white border border-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 font-medium rounded-lg ${textSize} ${paddings} text-center dark:border-yellow-300 dark:text-yellow-300 dark:hover:text-white dark:hover:bg-yellow-400 dark:focus:ring-yellow-900`;
75
- break;
76
- case 'purple':
77
- buttonClass = `text-white text-center font-medium ${round} ${textSize} ${paddings}`;
78
- if (disabled)
79
- buttonClass += ' bg-purple-400 dark:bg-purple-500 cursor-not-allowed';
80
- else
81
- buttonClass += ' bg-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300 dark:bg-purple-600 dark:hover:bg-purple-700 dark:focus:ring-purple-900';
82
- break;
83
- case 'purple-outline':
84
- buttonClass = `text-purple-700 hover:text-white border border-purple-700 hover:bg-purple-800 focus:ring-4 focus:ring-purple-300 font-medium rounded-lg ${textSize} ${paddings} text-center dark:border-purple-400 dark:text-purple-400 dark:hover:text-white dark:hover:bg-purple-500 dark:focus:ring-purple-900`;
85
- break;
86
- }
87
- buttonClass += ' items-center inline-flex';
1
+ <script>import classNames from 'classnames';
2
+ export let label = '';
3
+ export let pill = false;
4
+ export let outline = false;
5
+ export let color = 'blue';
6
+ export let size = 'md';
7
+ export let icon = undefined;
8
+ export let gradientMonochrome = null;
9
+ export let gradientDuoTone = null;
10
+ export let coloredShadow = null;
11
+ export let positionInGroup = null;
12
+ export let outlineStyle = null;
13
+ const colorClasses = {
14
+ blue: 'text-white bg-blue-700 border border-transparent hover:bg-blue-800 focus:ring-4 focus:ring-blue-300 disabled:hover:bg-blue-700 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800 dark:disabled:hover:bg-blue-600',
15
+ alternative: 'text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 hover:text-blue-700 disabled:hover:bg-white focus:ring-blue-700 focus:text-blue-700 dark:bg-transparent dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700 focus:ring-2 dark:disabled:hover:bg-gray-800',
16
+ dark: 'text-white bg-gray-800 border border-transparent hover:bg-gray-900 focus:ring-4 focus:ring-gray-300 disabled:hover:bg-gray-800 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-800 dark:border-gray-700 dark:disabled:hover:bg-gray-800',
17
+ light: 'text-gray-900 bg-white border border-gray-300 hover:bg-gray-100 focus:ring-4 focus:ring-blue-300 disabled:hover:bg-white dark:bg-gray-600 dark:text-white dark:border-gray-600 dark:hover:bg-gray-700 dark:hover:border-gray-700 dark:focus:ring-gray-700',
18
+ green: 'text-white bg-green-700 border border-transparent hover:bg-green-800 focus:ring-4 focus:ring-green-300 disabled:hover:bg-green-700 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800 dark:disabled:hover:bg-green-600',
19
+ red: 'text-white bg-red-700 border border-transparent hover:bg-red-800 focus:ring-4 focus:ring-red-300 disabled:hover:bg-red-800 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900 dark:disabled:hover:bg-red-600',
20
+ yellow: 'text-white bg-yellow-400 border border-transparent hover:bg-yellow-500 focus:ring-4 focus:ring-yellow-300 disabled:hover:bg-yellow-400 dark:focus:ring-yellow-900 dark:disabled:hover:bg-yellow-400',
21
+ purple: 'text-white bg-purple-700 border border-transparent hover:bg-purple-800 focus:ring-4 focus:ring-purple-300 disabled:hover:bg-purple-700 dark:bg-purple-600 dark:hover:bg-purple-700 dark:focus:ring-purple-900 dark:disabled:hover:bg-purple-600',
22
+ none: ''
23
+ };
24
+ const gradientMonochromeClasses = {
25
+ blue: 'text-white bg-gradient-to-r from-blue-500 via-blue-600 to-blue-700 hover:bg-gradient-to-br focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800 ',
26
+ green: 'text-white bg-gradient-to-r from-green-400 via-green-500 to-green-600 hover:bg-gradient-to-br focus:ring-4 focus:ring-green-300 dark:focus:ring-green-800',
27
+ cyan: 'text-white bg-gradient-to-r from-cyan-400 via-cyan-500 to-cyan-600 hover:bg-gradient-to-br focus:ring-4 focus:ring-cyan-300 dark:focus:ring-cyan-800',
28
+ teal: 'text-white bg-gradient-to-r from-teal-400 via-teal-500 to-teal-600 hover:bg-gradient-to-br focus:ring-4 focus:ring-teal-300 dark:focus:ring-teal-800',
29
+ lime: 'text-gray-900 bg-gradient-to-r from-lime-200 via-lime-400 to-lime-500 hover:bg-gradient-to-br focus:ring-4 focus:ring-lime-300 dark:focus:ring-lime-800',
30
+ red: 'text-white bg-gradient-to-r from-red-400 via-red-500 to-red-600 hover:bg-gradient-to-br focus:ring-4 focus:ring-red-300 dark:focus:ring-red-800',
31
+ pink: 'text-white bg-gradient-to-r from-pink-400 via-pink-500 to-pink-600 hover:bg-gradient-to-br focus:ring-4 focus:ring-pink-300 dark:focus:ring-pink-800',
32
+ purple: 'text-white bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 hover:bg-gradient-to-br focus:ring-4 focus:ring-purple-300 dark:focus:ring-purple-800'
33
+ };
34
+ const gradientDuoToneClasses = {
35
+ purpleToBlue: 'text-white bg-gradient-to-br from-purple-600 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:ring-blue-300 dark:focus:ring-blue-800',
36
+ cyanToBlue: 'text-white bg-gradient-to-r from-cyan-500 to-blue-500 hover:bg-gradient-to-bl focus:ring-4 focus:ring-cyan-300 dark:focus:ring-cyan-800',
37
+ greenToBlue: 'text-white bg-gradient-to-br from-green-400 to-blue-600 hover:bg-gradient-to-bl focus:ring-4 focus:ring-green-200 dark:focus:ring-green-800',
38
+ purpleToPink: 'text-white bg-gradient-to-r from-purple-500 to-pink-500 hover:bg-gradient-to-l focus:ring-4 focus:ring-purple-200 dark:focus:ring-purple-800',
39
+ pinkToOrange: 'text-white bg-gradient-to-br from-pink-500 to-orange-400 hover:bg-gradient-to-bl focus:ring-4 focus:ring-pink-200 dark:focus:ring-pink-800',
40
+ tealToLime: 'text-gray-900 bg-gradient-to-r from-teal-200 to-lime-200 hover:bg-gradient-to-l hover:from-teal-200 hover:to-lime-200 hover:!text-gray-900 focus:ring-4 focus:ring-lime-200 dark:focus:ring-teal-700',
41
+ redToYellow: 'text-gray-900 bg-gradient-to-r from-red-200 via-red-300 to-yellow-200 hover:bg-gradient-to-bl focus:ring-4 focus:ring-red-100 dark:focus:ring-red-400'
42
+ };
43
+ const coloredShadowClasses = {
44
+ blue: 'text-white bg-gradient-to-r from-blue-500 via-blue-600 to-blue-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-blue-300 dark:focus:ring-blue-800 shadow-lg shadow-blue-500/50 dark:shadow-lg dark:shadow-blue-800/80',
45
+ green: 'text-white bg-gradient-to-r from-green-400 via-green-500 to-green-600 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-green-300 dark:focus:ring-green-800 shadow-lg shadow-green-500/50 dark:shadow-lg dark:shadow-green-800/80',
46
+ cyan: 'text-white bg-gradient-to-r from-cyan-400 via-cyan-500 to-cyan-600 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-cyan-300 dark:focus:ring-cyan-800 shadow-lg shadow-cyan-500/50 dark:shadow-lg dark:shadow-cyan-800/80',
47
+ teal: 'text-white bg-gradient-to-r from-teal-400 via-teal-500 to-teal-600 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-teal-300 dark:focus:ring-teal-800 shadow-lg shadow-teal-500/50 dark:shadow-lg dark:shadow-teal-800/80 ',
48
+ lime: 'text-gray-900 bg-gradient-to-r from-lime-200 via-lime-400 to-lime-500 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-lime-300 dark:focus:ring-lime-800 shadow-lg shadow-lime-500/50 dark:shadow-lg dark:shadow-lime-800/80',
49
+ red: 'text-white bg-gradient-to-r from-red-400 via-red-500 to-red-600 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-red-300 dark:focus:ring-red-800 shadow-lg shadow-red-500/50 dark:shadow-lg dark:shadow-red-800/80 ',
50
+ pink: 'text-white bg-gradient-to-r from-pink-400 via-pink-500 to-pink-600 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-pink-300 dark:focus:ring-pink-800 shadow-lg shadow-pink-500/50 dark:shadow-lg dark:shadow-pink-800/80',
51
+ purple: 'text-white bg-gradient-to-r from-purple-500 via-purple-600 to-purple-700 hover:bg-gradient-to-br focus:ring-4 focus:outline-none focus:ring-purple-300 dark:focus:ring-purple-800 shadow-lg shadow-purple-500/50 dark:shadow-lg dark:shadow-purple-800/80'
52
+ };
53
+ const outlineClasses = {
54
+ default: 'text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 focus:ring-4 focus:outline-none focus:ring-blue-300',
55
+ dark: 'text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:ring-4 focus:outline-none focus:ring-gray-300',
56
+ green: 'text-green-700 hover:text-white border border-green-700 hover:bg-green-800 focus:ring-4 focus:outline-none focus:ring-green-300 ',
57
+ red: 'text-red-700 hover:text-white border border-red-700 hover:bg-red-800 focus:ring-4 focus:outline-none focus:ring-red-300',
58
+ yellow: 'text-yellow-400 hover:text-white border border-yellow-400 hover:bg-yellow-500 focus:ring-4 focus:outline-none focus:ring-yellow-300',
59
+ purple: 'text-purple-700 hover:text-white border border-purple-700 hover:bg-purple-800 focus:ring-4 focus:outline-none focus:ring-purple-300',
60
+ white: 'text-gray-900 bg-white rounded-lg border border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-4 focus:outline-none focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-800 dark:text-gray-400 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-700'
61
+ };
62
+ const sizeClasses = {
63
+ xs: 'text-xs px-2 py-1',
64
+ sm: 'text-sm px-3 py-1.5',
65
+ md: 'text-sm px-4 py-2',
66
+ lg: 'text-base px-5 py-2.5',
67
+ xl: 'text-base px-6 py-3'
68
+ };
69
+ const iconSizeClasses = {
70
+ xs: '!px-1',
71
+ sm: '!px-1.5',
72
+ md: '!px-2',
73
+ lg: '!p-2.5',
74
+ xl: '!p-3'
75
+ };
88
76
  </script>
89
77
 
90
- <button {type} class="{buttonClass} {$$props.class ? $$props.class : ''}" on:click>
91
- <slot>Read more</slot>
78
+ <button
79
+ on:click
80
+ data-testid="button-element"
81
+ type="button"
82
+ {...$$props}
83
+ class={classNames(
84
+ 'group flex h-min w-fit items-center justify-center p-0.5 text-center font-medium focus:z-10',
85
+ pill ? 'rounded-full' : 'rounded-lg',
86
+ !gradientMonochrome &&
87
+ !gradientDuoTone &&
88
+ !coloredShadow &&
89
+ !outlineStyle &&
90
+ colorClasses[color],
91
+ !gradientDuoTone && gradientMonochrome && gradientMonochromeClasses[gradientMonochrome],
92
+ gradientDuoTone && gradientDuoToneClasses[gradientDuoTone],
93
+ coloredShadow && coloredShadowClasses[coloredShadow],
94
+ outlineStyle && outlineClasses[outlineStyle],
95
+ {
96
+ 'border border-gray-900 dark:border-white': color === 'alternative' && outline,
97
+ 'cursor-not-allowed opacity-50': $$props.disabled,
98
+ 'focus:!ring-2': !!positionInGroup,
99
+ 'rounded-r-none': positionInGroup === 'start',
100
+ '!rounded-none border-l-0 pl-0': positionInGroup === 'middle',
101
+ 'rounded-l-none border-l-0 pl-0': positionInGroup === 'end'
102
+ },
103
+ $$props.class
104
+ )}
105
+ >
106
+ <span
107
+ class={classNames(
108
+ 'flex items-center',
109
+ sizeClasses[size],
110
+ outline && pill ? 'rounded-full' : 'rounded-md',
111
+ {
112
+ 'bg-white text-gray-900 transition-all duration-75 ease-in group-hover:bg-opacity-0 group-hover:text-inherit dark:bg-gray-900 dark:text-white':
113
+ outline,
114
+ 'rounded-r-none': positionInGroup === 'start',
115
+ '!rounded-none': positionInGroup === 'middle',
116
+ 'rounded-l-none': positionInGroup === 'end',
117
+
118
+ [iconSizeClasses[size]]: !!icon
119
+ }
120
+ )}
121
+ >
122
+ {#if icon}
123
+ <svelte:component this={icon} class="h-5 w-5" />
124
+ {:else}
125
+ <slot />
126
+ {#if label}
127
+ <span
128
+ class="ml-2 inline-flex h-4 w-4 items-center justify-center rounded-full bg-blue-200 text-xs font-semibold text-blue-800"
129
+ >
130
+ {label}
131
+ </span>
132
+ {/if}
133
+ {/if}
134
+ </span>
92
135
  </button>
@@ -1,13 +1,19 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { Buttontypes, ButtonType, Textsize } from '../types';
2
+ import type { SvelteComponent } from 'svelte';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  [x: string]: any;
6
- rounded?: boolean;
7
- textSize?: Textsize;
8
- btnColor?: Buttontypes;
9
- type?: ButtonType;
10
- disabled?: boolean;
6
+ label?: string;
7
+ pill?: boolean;
8
+ outline?: boolean;
9
+ color?: 'blue' | 'alternative' | 'dark' | 'light' | 'green' | 'red' | 'yellow' | 'purple' | 'none';
10
+ size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
11
+ icon?: typeof SvelteComponent | undefined;
12
+ gradientMonochrome?: 'blue' | 'green' | 'cyan' | 'teal' | 'lime' | 'red' | 'pink' | 'purple' | null;
13
+ gradientDuoTone?: 'purpleToBlue' | 'cyanToBlue' | 'greenToBlue' | 'purpleToPink' | 'pinkToOrange' | 'tealToLime' | 'redToYellow' | null;
14
+ coloredShadow?: 'blue' | 'green' | 'cyan' | 'teal' | 'lime' | 'red' | 'pink' | 'purple' | null;
15
+ positionInGroup?: 'start' | 'middle' | 'end' | null;
16
+ outlineStyle?: 'default' | 'dark' | 'green' | 'red' | 'yellow' | 'purple' | 'white' | null;
11
17
  };
12
18
  events: {
13
19
  click: MouseEvent;
@@ -1,82 +1,21 @@
1
- <script>export let divClass = 'flex items-center mr-4';
1
+ <script>import classNames from 'classnames';
2
2
  export let inputClass = 'w-4 h-4 bg-gray-100 rounded border-gray-300 dark:ring-offset-gray-800 focus:ring-2 dark:bg-gray-700 dark:border-gray-600 ';
3
- export let labelClass = 'ml-2 text-sm font-medium text-gray-900 dark:text-gray-300';
4
- export let disabled = false;
5
- export let name = '';
6
- export let divHelperClass = 'flex items-center h-5';
7
- export let labelHelperClass = 'font-medium text-gray-900 dark:text-gray-300';
8
- export let helperClass = 'text-xs font-normal text-gray-500 dark:text-gray-300';
9
- export let color = 'blue';
10
- export let helper = '';
11
- export let id = '';
12
- export let value = '';
13
- export let label = '';
14
3
  export let checked = false;
15
- if (disabled) {
16
- labelClass = 'ml-2 text-sm font-medium text-gray-400 dark:text-gray-500';
17
- }
18
- if (color === 'red') {
19
- inputClass += 'text-red-600 focus:ring-red-500 dark:focus:ring-red-600';
20
- }
21
- else if (color === 'green') {
22
- inputClass += 'text-green-600 focus:ring-green-500 dark:focus:ring-green-600';
23
- }
24
- else if (color === 'purple') {
25
- inputClass += 'text-purple-600 focus:ring-purple-500 dark:focus:ring-purple-600';
26
- }
27
- else if (color === 'teal') {
28
- inputClass += 'text-teal-600 focus:ring-teal-500 dark:focus:ring-teal-600';
29
- }
30
- else if (color === 'yellow') {
31
- inputClass += 'text-yellow-400 focus:ring-yellow-500 dark:focus:ring-yellow-600';
32
- }
33
- else if (color === 'orange') {
34
- inputClass += 'text-orange-500 focus:ring-orange-500 dark:focus:ring-orange-600';
35
- }
36
- else {
37
- inputClass += 'text-blue-600 focus:ring-blue-500 dark:focus:ring-blue-600';
38
- }
4
+ export let color = 'blue';
5
+ const colorClasses = {
6
+ red: 'text-red-600 focus:ring-red-500 dark:focus:ring-red-600',
7
+ green: 'text-green-600 focus:ring-green-500 dark:focus:ring-green-600',
8
+ purple: 'text-purple-600 focus:ring-purple-500 dark:focus:ring-purple-600',
9
+ teal: 'text-teal-600 focus:ring-teal-500 dark:focus:ring-teal-600',
10
+ yellow: 'text-yellow-400 focus:ring-yellow-500 dark:focus:ring-yellow-600',
11
+ orange: 'text-orange-500 focus:ring-orange-500 dark:focus:ring-orange-600',
12
+ blue: 'text-blue-600 focus:ring-blue-500 dark:focus:ring-blue-600'
13
+ };
39
14
  </script>
40
15
 
41
- {#if helper}
42
- <div class="flex">
43
- <div class={divHelperClass}>
44
- <input
45
- {id}
46
- type="checkbox"
47
- bind:checked
48
- {name}
49
- {value}
50
- class={inputClass}
51
- aria-labelledby={id}
52
- aria-describedby={id}
53
- {disabled}
54
- {...$$restProps}
55
- />
56
- </div>
57
- <div class="ml-2 text-sm">
58
- <label for={id} class={labelHelperClass}>
59
- {@html label}
60
- </label>
61
- <p id="{id}-helper-radio-text" class={helperClass}>{helper}</p>
62
- </div>
63
- </div>
64
- {:else}
65
- <div class={divClass}>
66
- <input
67
- {id}
68
- type="checkbox"
69
- bind:checked
70
- {name}
71
- {value}
72
- class={inputClass}
73
- aria-labelledby={id}
74
- aria-describedby={id}
75
- {disabled}
76
- {...$$restProps}
77
- />
78
- <label for={id} class={labelClass}>
79
- {@html label}
80
- </label>
81
- </div>
82
- {/if}
16
+ <input
17
+ {...$$restProps}
18
+ type="checkbox"
19
+ bind:checked
20
+ class={classNames(inputClass, colorClasses[color], $$props.class)}
21
+ />
@@ -3,20 +3,9 @@ import type { FormColorType } from '../types';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  [x: string]: any;
6
- divClass?: string;
7
6
  inputClass?: string;
8
- labelClass?: string;
9
- disabled?: boolean;
10
- name?: string;
11
- divHelperClass?: string;
12
- labelHelperClass?: string;
13
- helperClass?: string;
14
- color?: FormColorType;
15
- helper?: string;
16
- id?: string;
17
- value?: string;
18
- label?: string;
19
7
  checked?: boolean;
8
+ color?: FormColorType;
20
9
  };
21
10
  events: {
22
11
  [evt: string]: CustomEvent<any>;
@@ -0,0 +1,14 @@
1
+ <script>import classNames from 'classnames';
2
+ export let helperClass = 'text-xs font-normal text-gray-500 dark:text-gray-300';
3
+ export let color = 'gray';
4
+ const colorClasses = {
5
+ gray: 'text-gray-900 dark:text-gray-300',
6
+ green: 'text-green-700 dark:text-green-500',
7
+ red: 'text-red-700 dark:text-red-500',
8
+ disabled: 'text-gray-400 dark:text-gray-500'
9
+ };
10
+ </script>
11
+
12
+ <p {...$$restProps} class={classNames(helperClass, colorClasses[color], $$props.class)}>
13
+ <slot />
14
+ </p>
@@ -0,0 +1,20 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ helperClass?: string;
6
+ color?: 'gray' | 'green' | 'red' | 'disabled';
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {
12
+ default: {};
13
+ };
14
+ };
15
+ export declare type HelperProps = typeof __propDef.props;
16
+ export declare type HelperEvents = typeof __propDef.events;
17
+ export declare type HelperSlots = typeof __propDef.slots;
18
+ export default class Helper extends SvelteComponentTyped<HelperProps, HelperEvents, HelperSlots> {
19
+ }
20
+ export {};
@@ -1,16 +1,10 @@
1
- <script>import generateId from '../utils/generateId.js';
2
- export let label;
3
- export let id = generateId();
4
- export let type;
1
+ <script>import classNames from 'classnames';
2
+ export let type = 'text';
5
3
  export let value = '';
6
4
  export let icon;
7
- export let helper = '';
8
- export let placeholder = '';
9
5
  export let noBorder = false;
10
- export let labelClass = 'block mb-2 text-sm font-medium text-gray-900 dark:text-gray-300';
11
6
  export let inputClass = 'rounded-none rounded-r-lg bg-gray-50 border border-gray-300 text-gray-900 focus:ring-blue-500 focus:border-blue-500 block flex-1 min-w-0 w-full text-sm border-gray-300 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500';
12
7
  export let spanClass = 'inline-flex items-center px-3 text-sm text-gray-900 bg-gray-200 rounded-l-md border border-r-0 border-gray-300 dark:bg-gray-600 dark:text-gray-400 dark:border-gray-600';
13
- export let helperClass = 'mt-2 text-sm text-gray-500 dark:text-gray-400';
14
8
  export let noBorderInputClass = 'bg-gray-50 border border-gray-300 text-gray-900 text-sm rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 p-2.5 dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500';
15
9
  export let noBorderDivClass = 'flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none';
16
10
  export let iconClass = 'h-4 w-4 mr-2';
@@ -20,24 +14,23 @@ function setType(node) {
20
14
  }
21
15
  </script>
22
16
 
23
- <div class={$$props.class ? $$props.class : ''}>
24
- <label for={id} class={labelClass}>{label}</label>
25
- {#if noBorder}
26
- <div class="relative">
27
- <div class={noBorderDivClass}>
28
- <svelte:component this={icon} size={iconSize} class={iconClass} />
29
- </div>
30
- <input bind:value use:setType {id} class={noBorderInputClass} {placeholder} {...$$restProps} />
17
+ {#if noBorder}
18
+ <div class="relative">
19
+ <div class={noBorderDivClass}>
20
+ <svelte:component this={icon} size={iconSize} class={iconClass} />
31
21
  </div>
32
- {:else}
33
- <div class="flex">
34
- <span class={spanClass}>
35
- <svelte:component this={icon} size={iconSize} class={iconClass} />
36
- </span>
37
- <input {type} {id} class={inputClass} {placeholder} {...$$restProps} />
38
- </div>
39
- {/if}
40
- {#if helper}
41
- <p class={helperClass}>{@html helper}</p>
42
- {/if}
43
- </div>
22
+ <input
23
+ {...$$restProps}
24
+ bind:value
25
+ use:setType
26
+ class={classNames(noBorderInputClass, $$props.class)}
27
+ />
28
+ </div>
29
+ {:else}
30
+ <div class="flex">
31
+ <span class={spanClass}>
32
+ <svelte:component this={icon} size={iconSize} class={iconClass} />
33
+ </span>
34
+ <input {...$$restProps} {type} class={classNames(inputClass, $$props.class)} />
35
+ </div>
36
+ {/if}
@@ -4,18 +4,12 @@ import type { SvelteComponent } from 'svelte';
4
4
  declare const __propDef: {
5
5
  props: {
6
6
  [x: string]: any;
7
- label: string;
8
- id?: string;
9
- type: InputType;
7
+ type?: InputType;
10
8
  value?: string;
11
9
  icon: typeof SvelteComponent;
12
- helper?: string;
13
- placeholder?: string;
14
10
  noBorder?: boolean;
15
- labelClass?: string;
16
11
  inputClass?: string;
17
12
  spanClass?: string;
18
- helperClass?: string;
19
13
  noBorderInputClass?: string;
20
14
  noBorderDivClass?: string;
21
15
  iconClass?: string;
@@ -1,52 +1,38 @@
1
- <script>import generateId from '../utils/generateId.js';
1
+ <script>import classNames from 'classnames';
2
2
  export let type = 'text';
3
3
  export let value = '';
4
- export let name = '';
5
- export let id = generateId();
6
- export let label = '';
7
- export let required = false;
8
- export let placeholder = '';
9
- export let size = 'text-sm';
10
- let padding = '';
11
- export let inputClass = `bg-gray-50 border border-gray-300 text-gray-900 ${size} rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full ${padding} dark:bg-gray-700 dark:border-gray-600 dark:placeholder-gray-400 dark:text-white dark:focus:ring-blue-500 dark:focus:border-blue-500`;
12
- export let labelClass = 'block mb-4 text-sm font-medium text-gray-900 dark:text-gray-300';
13
- export let disabled = false;
14
- export let readonly = false;
15
- export let helper = '';
16
- export let helperClass = 'text-sm text-gray-500 dark:text-gray-400';
4
+ export let size = 'md';
5
+ export let inputClass = 'block w-full border disabled:cursor-not-allowed disabled:opacity-50 rounded-lg';
6
+ export let color = 'base';
7
+ const colorClasses = {
8
+ base: 'bg-gray-50 border-gray-300 text-gray-900 focus:border-blue-500 focus:ring-blue-500 dark:border-gray-600 dark:bg-gray-700 dark:text-white dark:placeholder-gray-400 dark:focus:border-blue-500 dark:focus:ring-blue-500',
9
+ green: 'border-green-500 bg-green-50 text-green-900 placeholder-green-700 focus:border-green-500 focus:ring-green-500 dark:border-green-400 dark:bg-green-100 dark:focus:border-green-500 dark:focus:ring-green-500',
10
+ red: 'border-red-500 bg-red-50 text-red-900 placeholder-red-700 focus:border-red-500 focus:ring-red-500 dark:border-red-400 dark:bg-red-100 dark:focus:border-red-500 dark:focus:ring-red-500'
11
+ };
17
12
  export let ref = null;
18
- if (size === 'sm:text-md') {
19
- padding = 'p-4';
20
- }
21
- else if (size === 'text-sm') {
22
- padding = 'p-2.5';
23
- }
24
- else {
25
- padding = 'p-2';
26
- }
27
13
  // you need to this to avoid 2-way binding
28
14
  function setType(node) {
29
15
  node.type = type;
30
16
  }
31
17
  </script>
32
18
 
33
- <div class={$$props.class ? $$props.class : ''}>
34
- {#if label}
35
- <label for={id} class={labelClass}>{label}</label>
36
- {/if}
37
- <input
38
- bind:value
39
- bind:this={ref}
40
- {name}
41
- use:setType
42
- {id}
43
- class={inputClass}
44
- {placeholder}
45
- {required}
46
- {disabled}
47
- {readonly}
48
- />
49
- {#if helper}
50
- <p class={helperClass}>{@html helper}</p>
51
- {/if}
52
- </div>
19
+ <input
20
+ {...$$restProps}
21
+ bind:value
22
+ bind:this={ref}
23
+ use:setType
24
+ class={classNames(
25
+ inputClass,
26
+ colorClasses[color],
27
+ {
28
+ // 'pl-10': icon !== null,
29
+ // 'rounded-lg': !($$slots.addon || addon),
30
+ // 'rounded-r-lg': $$slots.addon || addon,
31
+ // 'shadow-sm dark:shadow-sm-light': shadow,
32
+ 'p-2 sm:text-xs': size === 'sm',
33
+ 'p-2.5 text-sm': size === 'md',
34
+ 'sm:text-md p-4': size === 'lg'
35
+ },
36
+ $$props.class
37
+ )}
38
+ />
@@ -5,18 +5,9 @@ declare const __propDef: {
5
5
  [x: string]: any;
6
6
  type?: InputType;
7
7
  value?: string;
8
- name?: string;
9
- id?: string;
10
- label?: string;
11
- required?: boolean;
12
- placeholder?: string;
13
- size?: 'sm:text-md' | 'text-sm' | 'sm:text-xs';
8
+ size?: 'sm' | 'md' | 'lg';
14
9
  inputClass?: string;
15
- labelClass?: string;
16
- disabled?: boolean;
17
- readonly?: boolean;
18
- helper?: string;
19
- helperClass?: string;
10
+ color?: 'base' | 'green' | 'red';
20
11
  ref?: HTMLElement;
21
12
  };
22
13
  events: {
@@ -0,0 +1,15 @@
1
+ <script>import classNames from 'classnames';
2
+ export let color = 'gray';
3
+ export let labelClass = 'text-sm font-medium';
4
+ const colorClasses = {
5
+ gray: 'text-gray-900 dark:text-gray-300',
6
+ green: 'text-green-700 dark:text-green-500',
7
+ red: 'text-red-700 dark:text-red-500',
8
+ disabled: 'text-gray-400 dark:text-gray-500'
9
+ };
10
+ </script>
11
+
12
+ <!-- svelte-ignore a11y-label-has-associated-control -->
13
+ <label {...$$restProps} class={classNames(labelClass, colorClasses[color], $$props.class)}>
14
+ <slot />
15
+ </label>
@@ -0,0 +1,20 @@
1
+ import { SvelteComponentTyped } from "svelte";
2
+ declare const __propDef: {
3
+ props: {
4
+ [x: string]: any;
5
+ color?: 'gray' | 'green' | 'red' | 'disabled';
6
+ labelClass?: string;
7
+ };
8
+ events: {
9
+ [evt: string]: CustomEvent<any>;
10
+ };
11
+ slots: {
12
+ default: {};
13
+ };
14
+ };
15
+ export declare type LabelProps = typeof __propDef.props;
16
+ export declare type LabelEvents = typeof __propDef.events;
17
+ export declare type LabelSlots = typeof __propDef.slots;
18
+ export default class Label extends SvelteComponentTyped<LabelProps, LabelEvents, LabelSlots> {
19
+ }
20
+ export {};
package/index.d.ts CHANGED
@@ -31,11 +31,12 @@ export { default as LogoFooter } from './footer/LogoFooter.svelte';
31
31
  export { default as SocialMediaFooter } from './footer/SocialMediaFooter.svelte';
32
32
  export { default as SitemapFooter } from './footer/SitemapFooter.svelte';
33
33
  export { default as Checkbox } from './forms/Checkbox.svelte';
34
- export { default as CheckboxInline } from './forms/CheckboxInline.svelte';
35
34
  export { default as Fileupload } from './forms/Fileupload.svelte';
36
35
  export { default as FloatingLabelInput } from './forms/FloatingLabelInput.svelte';
36
+ export { default as Helper } from './forms/Helper.svelte';
37
37
  export { default as Iconinput } from './forms/Iconinput.svelte';
38
38
  export { default as Input } from './forms/Input.svelte';
39
+ export { default as Label } from './forms/Label.svelte';
39
40
  export { default as RadioInline } from './forms/RadioInline.svelte';
40
41
  export { default as Radio } from './forms/Radio.svelte';
41
42
  export { default as Range } from './forms/Range.svelte';
package/index.js CHANGED
@@ -44,11 +44,12 @@ export { default as SocialMediaFooter } from './footer/SocialMediaFooter.svelte'
44
44
  export { default as SitemapFooter } from './footer/SitemapFooter.svelte';
45
45
  // Forms
46
46
  export { default as Checkbox } from './forms/Checkbox.svelte';
47
- export { default as CheckboxInline } from './forms/CheckboxInline.svelte';
48
47
  export { default as Fileupload } from './forms/Fileupload.svelte';
49
48
  export { default as FloatingLabelInput } from './forms/FloatingLabelInput.svelte';
49
+ export { default as Helper } from './forms/Helper.svelte';
50
50
  export { default as Iconinput } from './forms/Iconinput.svelte';
51
51
  export { default as Input } from './forms/Input.svelte';
52
+ export { default as Label } from './forms/Label.svelte';
52
53
  export { default as RadioInline } from './forms/RadioInline.svelte';
53
54
  export { default as Radio } from './forms/Radio.svelte';
54
55
  export { default as Range } from './forms/Range.svelte';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowbite-svelte",
3
- "version": "0.18.1",
3
+ "version": "0.18.4",
4
4
  "description": "Flowbite components for Svelte",
5
5
  "main": "index.js",
6
6
  "author": {
@@ -130,11 +130,12 @@
130
130
  "./footer/SitemapFooter.svelte": "./footer/SitemapFooter.svelte",
131
131
  "./footer/SocialMediaFooter.svelte": "./footer/SocialMediaFooter.svelte",
132
132
  "./forms/Checkbox.svelte": "./forms/Checkbox.svelte",
133
- "./forms/CheckboxInline.svelte": "./forms/CheckboxInline.svelte",
134
133
  "./forms/Fileupload.svelte": "./forms/Fileupload.svelte",
135
134
  "./forms/FloatingLabelInput.svelte": "./forms/FloatingLabelInput.svelte",
135
+ "./forms/Helper.svelte": "./forms/Helper.svelte",
136
136
  "./forms/Iconinput.svelte": "./forms/Iconinput.svelte",
137
137
  "./forms/Input.svelte": "./forms/Input.svelte",
138
+ "./forms/Label.svelte": "./forms/Label.svelte",
138
139
  "./forms/Radio.svelte": "./forms/Radio.svelte",
139
140
  "./forms/RadioInline.svelte": "./forms/RadioInline.svelte",
140
141
  "./forms/Range.svelte": "./forms/Range.svelte",
@@ -1,3 +0,0 @@
1
- <div class="flex">
2
- <slot />
3
- </div>
@@ -1,23 +0,0 @@
1
- /** @typedef {typeof __propDef.props} CheckboxInlineProps */
2
- /** @typedef {typeof __propDef.events} CheckboxInlineEvents */
3
- /** @typedef {typeof __propDef.slots} CheckboxInlineSlots */
4
- export default class CheckboxInline extends SvelteComponentTyped<{}, {
5
- [evt: string]: CustomEvent<any>;
6
- }, {
7
- default: {};
8
- }> {
9
- }
10
- export type CheckboxInlineProps = typeof __propDef.props;
11
- export type CheckboxInlineEvents = typeof __propDef.events;
12
- export type CheckboxInlineSlots = typeof __propDef.slots;
13
- import { SvelteComponentTyped } from "svelte";
14
- declare const __propDef: {
15
- props: {};
16
- events: {
17
- [evt: string]: CustomEvent<any>;
18
- };
19
- slots: {
20
- default: {};
21
- };
22
- };
23
- export {};