flowbite-svelte 0.24.6 → 0.24.9
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 +33 -0
- package/accordions/AccordionFlush.svelte +2 -2
- package/accordions/AccordionFlush.svelte.d.ts +2 -2
- package/buttongroups/ButtonGroup.svelte +5 -2
- package/buttons/Button.svelte +28 -10
- package/buttons/Button.svelte.d.ts +2 -0
- package/carousels/CarouselTransition.svelte +2 -2
- package/dropdowns/Dropdown.svelte +2 -0
- package/dropdowns/Dropdown.svelte.d.ts +1 -0
- package/forms/Iconinput.svelte +2 -2
- package/forms/Input.svelte +2 -2
- package/index.d.ts +0 -1
- package/index.js +0 -1
- package/megamenu/MegaMenu.svelte +2 -2
- package/modals/Modal.svelte +14 -14
- package/package.json +17 -18
- package/paginations/TableData.svelte +1 -1
- package/paginations/TableData.svelte.d.ts +2 -5
- package/ratings/Review.svelte +22 -26
- package/ratings/Review.svelte.d.ts +11 -17
- package/tooltips/Tooltip.svelte +10 -8
- package/tooltips/Tooltip.svelte.d.ts +1 -0
- package/types.d.ts +21 -0
- package/utils/clickOutside.d.ts +1 -1
- package/utils/clickOutside.js +2 -2
- package/buttongroups/ButtonGroupItem.svelte +0 -40
- package/buttongroups/ButtonGroupItem.svelte.d.ts +0 -33
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,39 @@
|
|
|
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.24.9](https://github.com/themesberg/flowbite-svelte/compare/v0.24.8...v0.24.9) (2022-08-15)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Features
|
|
9
|
+
|
|
10
|
+
* button group ([bb95b98](https://github.com/themesberg/flowbite-svelte/commit/bb95b98c0e4b70f3958c778ac2dc8367c67df8d7))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
* dropdown open/close api ([d2aa6f7](https://github.com/themesberg/flowbite-svelte/commit/d2aa6f71e7e804d474eb46e58030097d9bd9962f))
|
|
16
|
+
* dropdown open/close api - docs ([f299c28](https://github.com/themesberg/flowbite-svelte/commit/f299c284a4ef3c9539e17677b815f60dd8d1e6f2))
|
|
17
|
+
* no href on <a> buttons ([ab13df8](https://github.com/themesberg/flowbite-svelte/commit/ab13df85aeac5368383bb708c9cb3146e418066f))
|
|
18
|
+
* window is undefined ([b752882](https://github.com/themesberg/flowbite-svelte/commit/b752882ad0f0f6a7c196223649463903453f48d6))
|
|
19
|
+
* window is undefined/2 ([4c0ca77](https://github.com/themesberg/flowbite-svelte/commit/4c0ca77eddfae2a04d10bc1ea3dc53671864b181))
|
|
20
|
+
|
|
21
|
+
### [0.24.8](https://github.com/themesberg/flowbite-svelte/compare/v0.24.7...v0.24.8) (2022-08-12)
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
### Bug Fixes
|
|
25
|
+
|
|
26
|
+
* change function clickOutside to arrow function ([71e71e0](https://github.com/themesberg/flowbite-svelte/commit/71e71e0e482ad9939f9d135b1608b5cc8d31d899))
|
|
27
|
+
* update createprops and update props ([0739b92](https://github.com/themesberg/flowbite-svelte/commit/0739b9296caddcba85f849b222e6548a961dbd34))
|
|
28
|
+
|
|
29
|
+
### [0.24.7](https://github.com/themesberg/flowbite-svelte/compare/v0.24.5...v0.24.7) (2022-08-11)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
### Features
|
|
33
|
+
|
|
34
|
+
* add Review component ([67af517](https://github.com/themesberg/flowbite-svelte/commit/67af517e32dfc19c6079e5d1925a234f0162cc34))
|
|
35
|
+
* add Review component ([d41b11d](https://github.com/themesberg/flowbite-svelte/commit/d41b11d4ef00d1d6d0d824d4fcdc9c964a78a7d2))
|
|
36
|
+
* add Review component, page, and prop ([4446e1e](https://github.com/themesberg/flowbite-svelte/commit/4446e1eba3706e291f0cb3812b4ffb61df48eb46))
|
|
37
|
+
|
|
5
38
|
### [0.24.6](https://github.com/themesberg/flowbite-svelte/compare/v0.24.5...v0.24.6) (2022-08-11)
|
|
6
39
|
|
|
7
40
|
|
|
@@ -5,6 +5,8 @@ import { ChevronDown, ChevronUp } from 'svelte-heros';
|
|
|
5
5
|
export let id = '';
|
|
6
6
|
export let btnClass = 'flex justify-between items-center py-5 w-full font-medium text-left text-gray-500 border-b border-gray-200 dark:border-gray-700 dark:text-gray-400';
|
|
7
7
|
export let slotClass = 'py-5 border-b border-gray-200 dark:border-gray-700';
|
|
8
|
+
export let iconSize = 24;
|
|
9
|
+
export let iconClass = 'text-gray-500 sm:w-6 sm:h-6 dark:text-gray-300';
|
|
8
10
|
export let isOpen = false;
|
|
9
11
|
export let icons = {
|
|
10
12
|
up: ChevronUp,
|
|
@@ -18,8 +20,6 @@ onMount(() => {
|
|
|
18
20
|
const handleToggle = (id) => {
|
|
19
21
|
isOpen = !isOpen;
|
|
20
22
|
};
|
|
21
|
-
export let iconSize = 24;
|
|
22
|
-
export let iconClass = 'text-gray-500 sm:w-6 sm:h-6 dark:text-gray-300';
|
|
23
23
|
</script>
|
|
24
24
|
|
|
25
25
|
<h2 aria-expanded={isOpen}>
|
|
@@ -6,10 +6,10 @@ declare const __propDef: {
|
|
|
6
6
|
id?: string;
|
|
7
7
|
btnClass?: string;
|
|
8
8
|
slotClass?: string;
|
|
9
|
-
isOpen?: boolean;
|
|
10
|
-
icons?: AccordionIconType;
|
|
11
9
|
iconSize?: number;
|
|
12
10
|
iconClass?: string;
|
|
11
|
+
isOpen?: boolean;
|
|
12
|
+
icons?: AccordionIconType;
|
|
13
13
|
};
|
|
14
14
|
events: {
|
|
15
15
|
[evt: string]: CustomEvent<any>;
|
|
@@ -1,5 +1,8 @@
|
|
|
1
|
-
<script>import
|
|
2
|
-
|
|
1
|
+
<script>import { setContext } from 'svelte';
|
|
2
|
+
import classNames from 'classnames';
|
|
3
|
+
export let divClass = 'inline-flex rounded-lg shadow-sm';
|
|
4
|
+
setContext('group', true);
|
|
5
|
+
setContext('background', true);
|
|
3
6
|
</script>
|
|
4
7
|
|
|
5
8
|
<div {...$$restProps} class={classNames(divClass, $$props.class)} role="group">
|
package/buttons/Button.svelte
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
1
|
<script>import classNames from 'classnames';
|
|
2
2
|
import { getContext } from 'svelte';
|
|
3
|
+
const group = getContext('group');
|
|
3
4
|
export let pill = false;
|
|
4
5
|
export let outline = false;
|
|
5
6
|
export let gradient = false;
|
|
6
|
-
export let size = 'md';
|
|
7
|
+
export let size = group ? 'sm' : 'md';
|
|
7
8
|
export let href = undefined;
|
|
8
9
|
export let btnClass = undefined;
|
|
9
|
-
export let
|
|
10
|
+
export let type = 'button';
|
|
11
|
+
export let color = group ? (outline ? 'dark' : 'alternative') : 'blue';
|
|
10
12
|
export let shadow = null;
|
|
11
13
|
const background = getContext('background');
|
|
12
14
|
const colorClasses = {
|
|
13
15
|
blue: 'text-white bg-blue-700 hover:bg-blue-800 focus:ring-blue-300 dark:bg-blue-600 dark:hover:bg-blue-700 dark:focus:ring-blue-800',
|
|
14
|
-
dark: 'text-white bg-gray-800 hover:bg-gray-900 focus:ring-gray-300 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700
|
|
15
|
-
alternative: 'text-gray-900 bg-white border border-gray-200 hover:bg-gray-100 focus:ring-gray-200 dark:bg-gray-800 dark:text-gray-400
|
|
16
|
+
dark: 'text-white bg-gray-800 hover:bg-gray-900 focus:ring-gray-300 dark:bg-gray-800 dark:hover:bg-gray-700 dark:focus:ring-gray-700',
|
|
17
|
+
alternative: 'text-gray-900 bg-white border border-gray-200 dark:border-gray-600 hover:bg-gray-100 focus:ring-gray-200 dark:bg-gray-800 dark:text-gray-400 hover:text-blue-700 dark:hover:text-white dark:hover:bg-gray-700 dark:focus:ring-gray-700',
|
|
16
18
|
light: 'text-gray-900 bg-white border border-gray-300 hover:bg-gray-100 focus:ring-gray-200 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',
|
|
17
19
|
green: 'text-white bg-green-700 hover:bg-green-800 focus:ring-green-300 dark:bg-green-600 dark:hover:bg-green-700 dark:focus:ring-green-800',
|
|
18
20
|
red: 'text-white bg-red-700 hover:bg-red-800 focus:ring-red-300 dark:bg-red-600 dark:hover:bg-red-700 dark:focus:ring-red-900',
|
|
@@ -48,7 +50,7 @@ const coloredShadowClasses = {
|
|
|
48
50
|
};
|
|
49
51
|
const outlineClasses = {
|
|
50
52
|
blue: 'text-blue-700 hover:text-white border border-blue-700 hover:bg-blue-800 focus:ring-blue-300 dark:border-blue-500 dark:text-blue-500 dark:hover:text-white dark:hover:bg-blue-600 dark:focus:ring-blue-800',
|
|
51
|
-
dark: 'text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:ring-gray-300 dark:border-gray-600 dark:
|
|
53
|
+
dark: 'text-gray-900 hover:text-white border border-gray-800 hover:bg-gray-900 focus:ring-gray-300 dark:border-gray-600 dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-gray-800',
|
|
52
54
|
green: 'text-green-700 hover:text-white border border-green-700 hover:bg-green-800 focus:ring-green-300 dark:border-green-500 dark:text-green-500 dark:hover:text-white dark:hover:bg-green-600 dark:focus:ring-green-800',
|
|
53
55
|
red: 'text-red-700 hover:text-white border border-red-700 hover:bg-red-800 focus:ring-red-300 dark:border-red-500 dark:text-red-500 dark:hover:text-white dark:hover:bg-red-600 dark:focus:ring-red-900',
|
|
54
56
|
yellow: 'text-yellow-400 hover:text-white border border-yellow-400 hover:bg-yellow-500 focus:ring-yellow-300 dark:border-yellow-300 dark:text-yellow-300 dark:hover:text-white dark:hover:bg-yellow-400 dark:focus:ring-yellow-900',
|
|
@@ -56,11 +58,22 @@ const outlineClasses = {
|
|
|
56
58
|
};
|
|
57
59
|
const sizeClasses = {
|
|
58
60
|
xs: 'px-3 py-2 text-xs',
|
|
59
|
-
sm: 'px-
|
|
61
|
+
sm: 'px-4 py-2 text-sm',
|
|
60
62
|
md: 'px-5 py-2.5 text-sm',
|
|
61
63
|
lg: 'px-5 py-3 text-base',
|
|
62
64
|
xl: 'px-6 py-3.5 text-base'
|
|
63
65
|
};
|
|
66
|
+
function rounded(gradientOutline = false) {
|
|
67
|
+
if (group) {
|
|
68
|
+
return pill
|
|
69
|
+
? 'first:rounded-l-full last:rounded-r-full'
|
|
70
|
+
: gradientOutline
|
|
71
|
+
? 'first:rounded-l-md last:rounded-r-md'
|
|
72
|
+
: 'first:rounded-l-lg last:rounded-r-lg';
|
|
73
|
+
}
|
|
74
|
+
return pill ? 'rounded-full' : gradientOutline ? 'rounded-md' : 'rounded-lg';
|
|
75
|
+
}
|
|
76
|
+
const hasBorder = () => outline || color === 'alternative' || color === 'light';
|
|
64
77
|
let buttonClass;
|
|
65
78
|
$: buttonClass = btnClass
|
|
66
79
|
? btnClass
|
|
@@ -68,16 +81,21 @@ $: buttonClass = btnClass
|
|
|
68
81
|
? 'p-0.5'
|
|
69
82
|
: 'inline-flex items-center justify-center ' + sizeClasses[size], gradient ? gradientClasses[color] : outline ? outlineClasses[color] : colorClasses[color], color === 'alternative' &&
|
|
70
83
|
(background
|
|
71
|
-
? 'dark:bg-
|
|
72
|
-
: 'dark:bg-transparent dark:border-gray-800 dark:hover:border-gray-700'),
|
|
84
|
+
? 'dark:bg-gray-700 dark:text-white dark:border-gray-700 dark:hover:border-gray-600 dark:hover:bg-gray-600'
|
|
85
|
+
: 'dark:bg-transparent dark:border-gray-800 dark:hover:border-gray-700'), outline &&
|
|
86
|
+
color === 'dark' &&
|
|
87
|
+
(background
|
|
88
|
+
? 'dark:text-white dark:border-white'
|
|
89
|
+
: 'dark:text-gray-400 dark:border-gray-700'), hasBorder() && group && 'border-l-0 first:border-l', rounded(false), shadow && coloredShadowClasses[shadow], $$props.disabled && 'cursor-not-allowed opacity-50', $$props.class);
|
|
73
90
|
let gradientOutlineClass;
|
|
74
|
-
$: gradientOutlineClass = classNames('inline-flex items-center justify-center', sizeClasses[size],
|
|
91
|
+
$: gradientOutlineClass = classNames('inline-flex items-center justify-center', sizeClasses[size], rounded(true), 'bg-white text-gray-900 dark:bg-gray-900 dark:text-white', // this is limitation - no transparency
|
|
75
92
|
'transition-all duration-75 ease-in group-hover:bg-opacity-0 group-hover:text-inherit');
|
|
76
93
|
</script>
|
|
77
94
|
|
|
78
95
|
<svelte:element
|
|
79
96
|
this={href ? 'a' : 'button'}
|
|
80
|
-
type={href ? undefined :
|
|
97
|
+
type={href ? undefined : type}
|
|
98
|
+
{href}
|
|
81
99
|
{...$$restProps}
|
|
82
100
|
class={buttonClass}
|
|
83
101
|
on:click
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { ButtonType } from '../types';
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
4
5
|
[x: string]: any;
|
|
@@ -8,6 +9,7 @@ declare const __propDef: {
|
|
|
8
9
|
size?: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
9
10
|
href?: string;
|
|
10
11
|
btnClass?: string;
|
|
12
|
+
type?: ButtonType;
|
|
11
13
|
color?: 'alternative' | 'blue' | 'cyan' | 'dark' | 'light' | 'lime' | 'green' | 'pink' | 'red' | 'teal' | 'yellow' | 'purple' | 'purpleToBlue' | 'cyanToBlue' | 'greenToBlue' | 'purpleToPink' | 'pinkToOrange' | 'tealToLime' | 'redToYellow';
|
|
12
14
|
shadow?: 'blue' | 'green' | 'cyan' | 'teal' | 'lime' | 'red' | 'pink' | 'purple' | null;
|
|
13
15
|
};
|
|
@@ -28,7 +28,7 @@ export let captionClass = 'h-10 bg-gray-300 dark:bg-gray-700 dark:text-white p-2
|
|
|
28
28
|
// Indicator
|
|
29
29
|
export let indicatorClass = 'w-3 h-3 rounded-full bg-gray-100 hover:bg-gray-300 opacity-60';
|
|
30
30
|
// have a custom transition function that returns the desired transition
|
|
31
|
-
|
|
31
|
+
const multiple = (node, params) => {
|
|
32
32
|
switch (transitionType) {
|
|
33
33
|
case 'slide':
|
|
34
34
|
return slide(node, params);
|
|
@@ -39,7 +39,7 @@ function multiple(node, params) {
|
|
|
39
39
|
case 'fade':
|
|
40
40
|
return fade(node, params);
|
|
41
41
|
}
|
|
42
|
-
}
|
|
42
|
+
};
|
|
43
43
|
// Slide
|
|
44
44
|
// export let slideClass: string = 'hidden';
|
|
45
45
|
let imageShowingIndex = 1;
|
|
@@ -9,6 +9,7 @@ export let tooltipArrow = false;
|
|
|
9
9
|
export let arrowIcon = true;
|
|
10
10
|
export let labelClass = 'flex items-center justify-between w-full py-2 pl-3 pr-4 font-medium text-gray-700 border-b border-gray-100 hover:bg-gray-50 md:hover:bg-transparent md:border-0 md:hover:text-blue-700 md:p-0 md:w-auto dark:text-gray-400 dark:hover:text-white dark:focus:text-white dark:border-gray-700 dark:hover:bg-gray-700 md:dark:hover:bg-transparent';
|
|
11
11
|
export let placement = 'bottom';
|
|
12
|
+
export let open = false;
|
|
12
13
|
setContext('background', true);
|
|
13
14
|
const icons = {
|
|
14
15
|
top: ChevronUp,
|
|
@@ -27,6 +28,7 @@ $: icon = icons[placement.split('-')[0]];
|
|
|
27
28
|
{placement}
|
|
28
29
|
arrow={tooltipArrow}
|
|
29
30
|
trigger="click"
|
|
31
|
+
bind:open
|
|
30
32
|
>
|
|
31
33
|
<slot name="trigger">
|
|
32
34
|
{#if inline}
|
package/forms/Iconinput.svelte
CHANGED
|
@@ -9,9 +9,9 @@ export let spanClass = 'inline-flex items-center px-3 text-sm text-gray-900 bg-g
|
|
|
9
9
|
export let noBorderInputClass = 'bg-gray-50 border border-gray-300 text-gray-900 rounded-lg focus:ring-blue-500 focus:border-blue-500 block w-full pl-10 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';
|
|
10
10
|
export let noBorderDivClass = 'flex absolute inset-y-0 left-0 items-center pl-3 pointer-events-none';
|
|
11
11
|
export let iconClass = 'mr-2';
|
|
12
|
-
|
|
12
|
+
const setType = (node) => {
|
|
13
13
|
node.type = type;
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
17
|
{#if noBorder}
|
package/forms/Input.svelte
CHANGED
|
@@ -13,9 +13,9 @@ const colorClasses = {
|
|
|
13
13
|
// tinted if put in component having its own background
|
|
14
14
|
let background = getContext('background');
|
|
15
15
|
// you need to this to avoid 2-way binding
|
|
16
|
-
|
|
16
|
+
const setType = (node) => {
|
|
17
17
|
node.type = type;
|
|
18
|
-
}
|
|
18
|
+
};
|
|
19
19
|
</script>
|
|
20
20
|
|
|
21
21
|
<input
|
package/index.d.ts
CHANGED
|
@@ -7,7 +7,6 @@ export { default as Breadcrumb } from './breadcrumbs/Breadcrumb.svelte';
|
|
|
7
7
|
export { default as BreadcrumbItem } from './breadcrumbs/BreadcrumbItem.svelte';
|
|
8
8
|
export { default as Button } from './buttons/Button.svelte';
|
|
9
9
|
export { default as ButtonGroup } from './buttongroups/ButtonGroup.svelte';
|
|
10
|
-
export { default as ButtonGroupItem } from './buttongroups/ButtonGroupItem.svelte';
|
|
11
10
|
export { default as Card } from './cards/Card.svelte';
|
|
12
11
|
export { default as Carousel } from './carousels/Carousel.svelte';
|
|
13
12
|
export { default as CarouselTransition } from './carousels/CarouselTransition.svelte';
|
package/index.js
CHANGED
|
@@ -14,7 +14,6 @@ export { default as BreadcrumbItem } from './breadcrumbs/BreadcrumbItem.svelte';
|
|
|
14
14
|
export { default as Button } from './buttons/Button.svelte';
|
|
15
15
|
// Buttongroups
|
|
16
16
|
export { default as ButtonGroup } from './buttongroups/ButtonGroup.svelte';
|
|
17
|
-
export { default as ButtonGroupItem } from './buttongroups/ButtonGroupItem.svelte';
|
|
18
17
|
// Cards
|
|
19
18
|
export { default as Card } from './cards/Card.svelte';
|
|
20
19
|
// Carousels
|
package/megamenu/MegaMenu.svelte
CHANGED
|
@@ -7,11 +7,11 @@ let wrapperClass;
|
|
|
7
7
|
$: wrapperClass = classNames('border-gray-100 shadow-md dark:border-gray-700', full ? 'border-y' : 'rounded-lg border', full ? 'bg-white dark:bg-gray-800' : 'bg-white dark:bg-gray-700', $$props.class);
|
|
8
8
|
let ulClass;
|
|
9
9
|
$: ulClass = classNames('grid grid-flow-row gap-y-4 md:gap-x-0 auto-col-max auto-row-max', full && $$slots.extra ? 'grid-cols-2' : 'grid-cols-2 md:grid-cols-3', 'text-sm font-medium', 'text-gray-500 dark:text-gray-400', full && $$slots.extra && 'md:w-2/3');
|
|
10
|
-
|
|
10
|
+
const init = (node) => {
|
|
11
11
|
if (full) {
|
|
12
12
|
node.parentElement.classList.add('inset-x-0');
|
|
13
13
|
}
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
15
|
</script>
|
|
16
16
|
|
|
17
17
|
<div class={wrapperClass} use:init>
|
package/modals/Modal.svelte
CHANGED
|
@@ -18,7 +18,7 @@ const allPlacementClasses = [
|
|
|
18
18
|
'items-end'
|
|
19
19
|
];
|
|
20
20
|
let backdropEl;
|
|
21
|
-
|
|
21
|
+
const init = (node, _open) => {
|
|
22
22
|
getPlacementClasses().map((c) => node.classList.add(c));
|
|
23
23
|
_open && createBackdrop(node);
|
|
24
24
|
return {
|
|
@@ -31,12 +31,12 @@ function init(node, _open) {
|
|
|
31
31
|
destroyBackdrop(node);
|
|
32
32
|
}
|
|
33
33
|
};
|
|
34
|
-
}
|
|
35
|
-
|
|
34
|
+
};
|
|
35
|
+
const handleEscape = (e) => {
|
|
36
36
|
if (open && e.key === 'Escape')
|
|
37
37
|
open = false;
|
|
38
|
-
}
|
|
39
|
-
|
|
38
|
+
};
|
|
39
|
+
const createBackdrop = (node) => {
|
|
40
40
|
if (!backdropEl) {
|
|
41
41
|
backdropEl = document.createElement('div');
|
|
42
42
|
backdropEl.classList.add(...backdropClasses.split(' '));
|
|
@@ -46,8 +46,8 @@ function createBackdrop(node) {
|
|
|
46
46
|
document.addEventListener('keydown', handleEscape, true);
|
|
47
47
|
}
|
|
48
48
|
dispatch('show', node);
|
|
49
|
-
}
|
|
50
|
-
|
|
49
|
+
};
|
|
50
|
+
const destroyBackdrop = (node) => {
|
|
51
51
|
const body = document.querySelector('body');
|
|
52
52
|
body.style.overflow = 'auto';
|
|
53
53
|
if (backdropEl)
|
|
@@ -55,8 +55,8 @@ function destroyBackdrop(node) {
|
|
|
55
55
|
backdropEl = undefined;
|
|
56
56
|
document.removeEventListener('keydown', handleEscape, true);
|
|
57
57
|
dispatch('hide', node);
|
|
58
|
-
}
|
|
59
|
-
|
|
58
|
+
};
|
|
59
|
+
const getPlacementClasses = () => {
|
|
60
60
|
switch (placement) {
|
|
61
61
|
// top
|
|
62
62
|
case 'top-left':
|
|
@@ -82,7 +82,7 @@ function getPlacementClasses() {
|
|
|
82
82
|
default:
|
|
83
83
|
return ['justify-center', 'items-center'];
|
|
84
84
|
}
|
|
85
|
-
}
|
|
85
|
+
};
|
|
86
86
|
const sizes = {
|
|
87
87
|
xs: 'max-w-md',
|
|
88
88
|
sm: 'max-w-lg',
|
|
@@ -90,13 +90,13 @@ const sizes = {
|
|
|
90
90
|
lg: 'max-w-4xl',
|
|
91
91
|
xl: 'max-w-7xl'
|
|
92
92
|
};
|
|
93
|
-
|
|
93
|
+
const onButtonsClick = ({ target }) => {
|
|
94
94
|
if (autoclose && target.tagName === 'BUTTON')
|
|
95
95
|
open = !open;
|
|
96
|
-
}
|
|
97
|
-
|
|
96
|
+
};
|
|
97
|
+
const hide = () => {
|
|
98
98
|
open = false;
|
|
99
|
-
}
|
|
99
|
+
};
|
|
100
100
|
</script>
|
|
101
101
|
|
|
102
102
|
<!-- Main modal -->
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flowbite-svelte",
|
|
3
|
-
"version": "0.24.
|
|
3
|
+
"version": "0.24.9",
|
|
4
4
|
"description": "Flowbite components for Svelte",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"author": {
|
|
@@ -12,33 +12,33 @@
|
|
|
12
12
|
"homepage": "https://flowbite-svelte.com/",
|
|
13
13
|
"license": "MIT",
|
|
14
14
|
"devDependencies": {
|
|
15
|
-
"@playwright/test": "^1.
|
|
15
|
+
"@playwright/test": "^1.25.0",
|
|
16
16
|
"@sveltejs/adapter-auto": "next",
|
|
17
17
|
"@sveltejs/kit": "next",
|
|
18
|
-
"@typescript-eslint/eslint-plugin": "^5.
|
|
19
|
-
"@typescript-eslint/parser": "^5.
|
|
20
|
-
"autoprefixer": "^10.4.
|
|
21
|
-
"createprops": "^0.4.
|
|
22
|
-
"eslint": "^8.
|
|
18
|
+
"@typescript-eslint/eslint-plugin": "^5.33.0",
|
|
19
|
+
"@typescript-eslint/parser": "^5.33.0",
|
|
20
|
+
"autoprefixer": "^10.4.8",
|
|
21
|
+
"createprops": "^0.4.9",
|
|
22
|
+
"eslint": "^8.21.0",
|
|
23
23
|
"eslint-config-prettier": "^8.5.0",
|
|
24
24
|
"eslint-plugin-svelte3": "^4.0.0",
|
|
25
25
|
"mdsvex": "^0.10.6",
|
|
26
|
-
"postcss": "^8.4.
|
|
26
|
+
"postcss": "^8.4.16",
|
|
27
27
|
"postcss-load-config": "3.1.4",
|
|
28
28
|
"prettier": "^2.7.1",
|
|
29
29
|
"prettier-plugin-svelte": "^2.7.0",
|
|
30
30
|
"prism-themes": "^1.9.0",
|
|
31
|
-
"svelte": "^3.
|
|
31
|
+
"svelte": "^3.49.0",
|
|
32
32
|
"svelte-check": "^2.8.0",
|
|
33
|
-
"svelte-flag-icons": "^0.1.
|
|
33
|
+
"svelte-flag-icons": "^0.1.1",
|
|
34
34
|
"svelte-heros": "^2.3.3",
|
|
35
35
|
"svelte-preprocess": "^4.10.7",
|
|
36
|
-
"svelte-sidebar-menu": "^0.8.
|
|
37
|
-
"svelte2tsx": "^0.5.
|
|
38
|
-
"tailwindcss": "^3.1.
|
|
39
|
-
"tslib": "^2.
|
|
36
|
+
"svelte-sidebar-menu": "^0.8.11",
|
|
37
|
+
"svelte2tsx": "^0.5.13",
|
|
38
|
+
"tailwindcss": "^3.1.8",
|
|
39
|
+
"tslib": "^2.4.0",
|
|
40
40
|
"typescript": "~4.7.4",
|
|
41
|
-
"vite": "^3.0.
|
|
41
|
+
"vite": "^3.0.7"
|
|
42
42
|
},
|
|
43
43
|
"type": "module",
|
|
44
44
|
"keywords": [
|
|
@@ -81,9 +81,9 @@
|
|
|
81
81
|
"url": "https://github.com/themesberg/flowbite-svelte"
|
|
82
82
|
},
|
|
83
83
|
"dependencies": {
|
|
84
|
-
"@floating-ui/dom": "^0.5.
|
|
84
|
+
"@floating-ui/dom": "^0.5.4",
|
|
85
85
|
"classnames": "^2.3.1",
|
|
86
|
-
"flowbite": "^1.
|
|
86
|
+
"flowbite": "^1.5.2"
|
|
87
87
|
},
|
|
88
88
|
"engines": {
|
|
89
89
|
"npm": ">=7.0.0",
|
|
@@ -108,7 +108,6 @@
|
|
|
108
108
|
"./breadcrumbs/Breadcrumb.svelte": "./breadcrumbs/Breadcrumb.svelte",
|
|
109
109
|
"./breadcrumbs/BreadcrumbItem.svelte": "./breadcrumbs/BreadcrumbItem.svelte",
|
|
110
110
|
"./buttongroups/ButtonGroup.svelte": "./buttongroups/ButtonGroup.svelte",
|
|
111
|
-
"./buttongroups/ButtonGroupItem.svelte": "./buttongroups/ButtonGroupItem.svelte",
|
|
112
111
|
"./buttons/Button.svelte": "./buttons/Button.svelte",
|
|
113
112
|
"./cards/Card.svelte": "./cards/Card.svelte",
|
|
114
113
|
"./carousels/Caption.svelte": "./carousels/Caption.svelte",
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<script>import { createEventDispatcher } from 'svelte';
|
|
2
|
-
export let helper = undefined;
|
|
3
2
|
export let btnPreClass = 'py-2 px-4 text-sm font-medium text-white bg-gray-800 rounded-l hover:bg-gray-900 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white';
|
|
4
3
|
export let btnNextClass = 'py-2 px-4 text-sm font-medium text-white bg-gray-800 rounded-r border-0 border-l border-gray-700 hover:bg-gray-900 dark:bg-gray-800 dark:border-gray-700 dark:text-gray-400 dark:hover:bg-gray-700 dark:hover:text-white';
|
|
4
|
+
export let helper = undefined;
|
|
5
5
|
const dispatch = createEventDispatcher();
|
|
6
6
|
const previous = () => {
|
|
7
7
|
dispatch('previous');
|
|
@@ -1,13 +1,10 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
+
import type { TableDataHelperType } from '../types';
|
|
2
3
|
declare const __propDef: {
|
|
3
4
|
props: {
|
|
4
|
-
helper?: {
|
|
5
|
-
start: number;
|
|
6
|
-
end: number;
|
|
7
|
-
total: number;
|
|
8
|
-
} | undefined;
|
|
9
5
|
btnPreClass?: string;
|
|
10
6
|
btnNextClass?: string;
|
|
7
|
+
helper?: TableDataHelperType | undefined;
|
|
11
8
|
};
|
|
12
9
|
events: {
|
|
13
10
|
blur: FocusEvent;
|
package/ratings/Review.svelte
CHANGED
|
@@ -1,47 +1,43 @@
|
|
|
1
1
|
<script>import classNames from 'classnames';
|
|
2
2
|
export let review;
|
|
3
|
+
export let articleClass = 'md:gap-8 md:grid md:grid-cols-3';
|
|
4
|
+
export let divClass = 'flex items-center mb-6 space-x-4';
|
|
5
|
+
export let imgClass = 'w-10 h-10 rounded-full';
|
|
6
|
+
export let ulClass = 'space-y-4 text-sm text-gray-500 dark:text-gray-400';
|
|
7
|
+
export let liClass = 'flex items-center';
|
|
3
8
|
</script>
|
|
4
9
|
|
|
5
|
-
<article class=
|
|
10
|
+
<article class={classNames(articleClass, $$props.classArticle)}>
|
|
6
11
|
<div>
|
|
7
|
-
<div class=
|
|
8
|
-
<img class=
|
|
12
|
+
<div class={classNames(divClass, $$props.classDiv)}>
|
|
13
|
+
<img class={classNames(imgClass, $$props.classImg)} src={review.imgSrc} alt={review.imgAlt} />
|
|
9
14
|
<div class="space-y-1 font-medium dark:text-white">
|
|
10
15
|
<p>{review.name}</p>
|
|
11
16
|
{#if review.address}
|
|
12
17
|
<div class="flex items-center text-sm text-gray-500 dark:text-gray-400">
|
|
13
18
|
{#if review.addressIcon}
|
|
14
|
-
<svelte:component this={review.addressIcon} />
|
|
19
|
+
<svelte:component this={review.addressIcon} size="16" class="mr-2" />
|
|
15
20
|
{/if}
|
|
16
21
|
{review.address}
|
|
17
22
|
</div>
|
|
18
23
|
{/if}
|
|
19
24
|
</div>
|
|
20
25
|
</div>
|
|
21
|
-
{#if
|
|
22
|
-
<ul class=
|
|
23
|
-
{#if
|
|
24
|
-
<li class=
|
|
25
|
-
|
|
26
|
-
<svelte:component this={review.addressIcon} />
|
|
27
|
-
{/if}
|
|
28
|
-
{review.item}
|
|
26
|
+
{#if $$slots.item || $$slots.option1 || $$slots.option2}
|
|
27
|
+
<ul class={classNames(ulClass, $$props.classUl)}>
|
|
28
|
+
{#if $$slots.item}
|
|
29
|
+
<li class={classNames(liClass, $$props.classLi)}>
|
|
30
|
+
<slot name="item" />
|
|
29
31
|
</li>
|
|
30
32
|
{/if}
|
|
31
|
-
{#if
|
|
32
|
-
<li class=
|
|
33
|
-
|
|
34
|
-
<svelte:component this={review.option1Icon} />
|
|
35
|
-
{/if}
|
|
36
|
-
{review.option1}
|
|
33
|
+
{#if $$slots.option1}
|
|
34
|
+
<li class={classNames(liClass, $$props.classLi)}>
|
|
35
|
+
<slot name="option1" />
|
|
37
36
|
</li>
|
|
38
37
|
{/if}
|
|
39
|
-
{#if
|
|
40
|
-
<li class=
|
|
41
|
-
|
|
42
|
-
<svelte:component this={review.option2Icon} />
|
|
43
|
-
{/if}
|
|
44
|
-
{review.option2}
|
|
38
|
+
{#if $$slots.option2}
|
|
39
|
+
<li class={classNames(liClass, $$props.classLi)}>
|
|
40
|
+
<slot name="option2" />
|
|
45
41
|
</li>
|
|
46
42
|
{/if}
|
|
47
43
|
</ul>
|
|
@@ -50,10 +46,10 @@ export let review;
|
|
|
50
46
|
<div class="col-span-2 mt-6 md:mt-0">
|
|
51
47
|
<div class="flex items-start mb-5">
|
|
52
48
|
<div class="pr-4">
|
|
53
|
-
{#if review.
|
|
49
|
+
{#if review.reviewDate}
|
|
54
50
|
<footer>
|
|
55
51
|
<p class="mb-2 text-sm text-gray-500 dark:text-gray-400">
|
|
56
|
-
Reviewed: {review.
|
|
52
|
+
Reviewed: {review.reviewDate}
|
|
57
53
|
</p>
|
|
58
54
|
</footer>
|
|
59
55
|
{/if}
|
|
@@ -1,28 +1,22 @@
|
|
|
1
1
|
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type {
|
|
2
|
+
import type { ReviewType } from '../types';
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
title: string;
|
|
13
|
-
rating: number;
|
|
14
|
-
item: string;
|
|
15
|
-
itemIcon: typeof SvelteComponent;
|
|
16
|
-
option1: string;
|
|
17
|
-
option1Icon: typeof SvelteComponent;
|
|
18
|
-
option2: string;
|
|
19
|
-
option2Icon: typeof SvelteComponent;
|
|
20
|
-
};
|
|
5
|
+
[x: string]: any;
|
|
6
|
+
review: ReviewType;
|
|
7
|
+
articleClass?: string;
|
|
8
|
+
divClass?: string;
|
|
9
|
+
imgClass?: string;
|
|
10
|
+
ulClass?: string;
|
|
11
|
+
liClass?: string;
|
|
21
12
|
};
|
|
22
13
|
events: {
|
|
23
14
|
[evt: string]: CustomEvent<any>;
|
|
24
15
|
};
|
|
25
16
|
slots: {
|
|
17
|
+
item: {};
|
|
18
|
+
option1: {};
|
|
19
|
+
option2: {};
|
|
26
20
|
default: {};
|
|
27
21
|
};
|
|
28
22
|
};
|
package/tooltips/Tooltip.svelte
CHANGED
|
@@ -10,6 +10,7 @@ export let animation = 'duration-300';
|
|
|
10
10
|
export let arrow = true;
|
|
11
11
|
export let tipClass = 'absolute inline-block rounded-lg py-2 px-3 text-sm font-medium shadow-sm';
|
|
12
12
|
export let tipColor = '';
|
|
13
|
+
export let open = false;
|
|
13
14
|
const tipStyleClasses = {
|
|
14
15
|
dark: 'bg-gray-900 text-white dark:bg-gray-700',
|
|
15
16
|
light: 'border border-gray-200 bg-white text-gray-900',
|
|
@@ -24,7 +25,6 @@ const arrowStyleClasses = {
|
|
|
24
25
|
};
|
|
25
26
|
let toolTipClass;
|
|
26
27
|
$: toolTipClass = classNames(tipClass, animation !== false && `transition-opacity ${animation}`, !open && 'invisible opacity-0', tipStyleClasses[style], $$props.class);
|
|
27
|
-
let open = false;
|
|
28
28
|
const floatingPlacement = (placement) => {
|
|
29
29
|
return placement === 'auto' ? undefined : placement;
|
|
30
30
|
};
|
|
@@ -47,13 +47,15 @@ const updatePosition = () => computePosition(triggerRef, tooltipRef, {
|
|
|
47
47
|
let attachedScroll = false;
|
|
48
48
|
$: tooltipRef && open && updatePosition();
|
|
49
49
|
$: {
|
|
50
|
-
if (
|
|
51
|
-
attachedScroll
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
attachedScroll
|
|
56
|
-
|
|
50
|
+
if (tooltipRef && triggerRef) {
|
|
51
|
+
if (open && !attachedScroll) {
|
|
52
|
+
attachedScroll = true;
|
|
53
|
+
window.addEventListener('scroll', updatePosition, true);
|
|
54
|
+
}
|
|
55
|
+
else if (!open && attachedScroll) {
|
|
56
|
+
attachedScroll = false;
|
|
57
|
+
window.removeEventListener('scroll', updatePosition, true);
|
|
58
|
+
}
|
|
57
59
|
}
|
|
58
60
|
}
|
|
59
61
|
onDestroy(() => {
|
package/types.d.ts
CHANGED
|
@@ -148,6 +148,22 @@ export interface PillTabType {
|
|
|
148
148
|
selected: boolean;
|
|
149
149
|
href: string;
|
|
150
150
|
}
|
|
151
|
+
export declare type ReviewType = {
|
|
152
|
+
name: string;
|
|
153
|
+
imgSrc: string;
|
|
154
|
+
imgAlt: string;
|
|
155
|
+
address: string | undefined;
|
|
156
|
+
addressIcon: typeof SvelteComponent | undefined;
|
|
157
|
+
reviewDate: string | undefined;
|
|
158
|
+
title: string;
|
|
159
|
+
rating: number;
|
|
160
|
+
item: string | undefined;
|
|
161
|
+
itemIcon: typeof SvelteComponent | undefined;
|
|
162
|
+
option1: string | undefined;
|
|
163
|
+
option1Icon: typeof SvelteComponent | undefined;
|
|
164
|
+
option2: string | undefined;
|
|
165
|
+
option2Icon: typeof SvelteComponent | undefined;
|
|
166
|
+
};
|
|
151
167
|
export declare type SelectOptionType = {
|
|
152
168
|
name: string;
|
|
153
169
|
value: string;
|
|
@@ -193,6 +209,11 @@ export interface TabType {
|
|
|
193
209
|
href: string;
|
|
194
210
|
rel?: string;
|
|
195
211
|
}
|
|
212
|
+
export interface TableDataHelperType {
|
|
213
|
+
start: number;
|
|
214
|
+
end: number;
|
|
215
|
+
total: number;
|
|
216
|
+
}
|
|
196
217
|
export declare type Textsize = 'text-xs' | 'text-sm' | 'text-base' | 'text-lg' | 'text-xl' | 'text-2xl' | 'text-3xl' | 'text-4xl';
|
|
197
218
|
export interface TimelineItemType {
|
|
198
219
|
date: Date | string;
|
package/utils/clickOutside.d.ts
CHANGED
package/utils/clickOutside.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export
|
|
1
|
+
export const clickOutside = (node, callback) => {
|
|
2
2
|
const handleClick = (event) => {
|
|
3
3
|
if (!event?.target)
|
|
4
4
|
return;
|
|
@@ -12,4 +12,4 @@ export function clickOutside(node, callback) {
|
|
|
12
12
|
document.removeEventListener('click', handleClick, true);
|
|
13
13
|
},
|
|
14
14
|
};
|
|
15
|
-
}
|
|
15
|
+
};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
<script>import classNames from 'classnames';
|
|
2
|
-
export let type = 'button';
|
|
3
|
-
export let btnClass = 'inline-flex items-center py-2 px-4 text-sm font-medium text-gray-900 bg-white first:rounded-l-lg border-t border-b last:rounded-r-md border-l last:border-r border-gray-200 hover:bg-gray-100 hover:text-blue-700 focus:z-10 focus:ring-2 focus:ring-blue-700 focus:text-blue-700 dark:bg-gray-700 dark:border-gray-600 dark:text-white dark:hover:text-white dark:hover:bg-gray-600 dark:focus:ring-blue-500 dark:focus:text-white';
|
|
4
|
-
export let outlineClass = 'inline-flex items-center py-2 px-4 text-sm font-medium text-gray-900 bg-transparent first:rounded-l-lg border-t border-b last:rounded-r-md border-l last:border-r border-gray-900 hover:bg-gray-900 hover:text-white focus:z-10 focus:ring-2 focus:ring-gray-500 focus:bg-gray-900 focus:text-white dark:border-white dark:text-white dark:hover:text-white dark:hover:bg-gray-700 dark:focus:bg-gray-700';
|
|
5
|
-
export let outline = false;
|
|
6
|
-
export let href = '';
|
|
7
|
-
if (outline) {
|
|
8
|
-
btnClass = outlineClass;
|
|
9
|
-
}
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
{#if href}
|
|
13
|
-
<a
|
|
14
|
-
{href}
|
|
15
|
-
{...$$restProps}
|
|
16
|
-
class={classNames(btnClass, $$props.class)}
|
|
17
|
-
on:click
|
|
18
|
-
on:change
|
|
19
|
-
on:keydown
|
|
20
|
-
on:keyup
|
|
21
|
-
on:mouseenter
|
|
22
|
-
on:mouseleave><slot /></a
|
|
23
|
-
>
|
|
24
|
-
{:else}
|
|
25
|
-
<button
|
|
26
|
-
{type}
|
|
27
|
-
{...$$restProps}
|
|
28
|
-
class={classNames(btnClass, $$props.class)}
|
|
29
|
-
on:click
|
|
30
|
-
on:change
|
|
31
|
-
on:keydown
|
|
32
|
-
on:keyup
|
|
33
|
-
on:focus
|
|
34
|
-
on:blur
|
|
35
|
-
on:mouseenter
|
|
36
|
-
on:mouseleave
|
|
37
|
-
>
|
|
38
|
-
<slot />
|
|
39
|
-
</button>
|
|
40
|
-
{/if}
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import { SvelteComponentTyped } from "svelte";
|
|
2
|
-
import type { ButtonType } from '../types';
|
|
3
|
-
declare const __propDef: {
|
|
4
|
-
props: {
|
|
5
|
-
[x: string]: any;
|
|
6
|
-
type?: ButtonType;
|
|
7
|
-
btnClass?: string;
|
|
8
|
-
outlineClass?: string;
|
|
9
|
-
outline?: boolean;
|
|
10
|
-
href?: string;
|
|
11
|
-
};
|
|
12
|
-
events: {
|
|
13
|
-
click: MouseEvent;
|
|
14
|
-
change: Event;
|
|
15
|
-
keydown: KeyboardEvent;
|
|
16
|
-
keyup: KeyboardEvent;
|
|
17
|
-
mouseenter: MouseEvent;
|
|
18
|
-
mouseleave: MouseEvent;
|
|
19
|
-
focus: FocusEvent;
|
|
20
|
-
blur: FocusEvent;
|
|
21
|
-
} & {
|
|
22
|
-
[evt: string]: CustomEvent<any>;
|
|
23
|
-
};
|
|
24
|
-
slots: {
|
|
25
|
-
default: {};
|
|
26
|
-
};
|
|
27
|
-
};
|
|
28
|
-
export declare type ButtonGroupItemProps = typeof __propDef.props;
|
|
29
|
-
export declare type ButtonGroupItemEvents = typeof __propDef.events;
|
|
30
|
-
export declare type ButtonGroupItemSlots = typeof __propDef.slots;
|
|
31
|
-
export default class ButtonGroupItem extends SvelteComponentTyped<ButtonGroupItemProps, ButtonGroupItemEvents, ButtonGroupItemSlots> {
|
|
32
|
-
}
|
|
33
|
-
export {};
|