flowbite-svelte 0.25.21 → 0.25.24
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 +30 -0
- package/alerts/Alert.svelte +3 -5
- package/alerts/Alert.svelte.d.ts +2 -4
- package/avatar/Avatar.svelte +4 -4
- package/dropdowns/Dropdown.svelte +25 -18
- package/dropdowns/Dropdown.svelte.d.ts +2 -3
- package/dropdowns/DropdownItem.svelte +1 -0
- package/index.d.ts +4 -0
- package/index.js +4 -0
- package/navbar/Menu.svelte +36 -0
- package/navbar/Menu.svelte.d.ts +22 -0
- package/navbar/NavHamburger.svelte +2 -3
- package/package.json +7 -1
- package/popover/Popover.svelte +3 -3
- package/popover/Popover.svelte.d.ts +1 -0
- package/ratings/Rating.svelte +1 -1
- package/ratings/RatingComment.svelte +4 -6
- package/ratings/Star.svelte +36 -0
- package/ratings/Star.svelte.d.ts +22 -0
- package/sidebars/SidebarDropdownWrapper.svelte +4 -7
- package/timelines/Timeline.svelte +13 -2
- package/timelines/Timeline.svelte.d.ts +2 -1
- package/timelines/TimelineItem.svelte +123 -35
- package/timelines/TimelineItem.svelte.d.ts +8 -3
- package/timelines/TimelineItemHorizontal.svelte +52 -21
- package/timelines/TimelineItemHorizontal.svelte.d.ts +6 -2
- package/timelines/TimelineItemVertical.svelte +30 -25
- package/timelines/TimelineItemVertical.svelte.d.ts +6 -3
- package/tooltips/Tooltip.svelte +12 -2
- package/tooltips/Tooltip.svelte.d.ts +2 -3
- package/utils/ChevronDown.svelte +36 -0
- package/utils/ChevronDown.svelte.d.ts +22 -0
- package/utils/ChevronLeft.svelte +36 -0
- package/utils/ChevronLeft.svelte.d.ts +22 -0
- package/utils/ChevronRight.svelte +36 -0
- package/utils/ChevronRight.svelte.d.ts +22 -0
- package/utils/ChevronUp.svelte +36 -0
- package/utils/ChevronUp.svelte.d.ts +22 -0
- package/utils/Popper.svelte +94 -66
- package/utils/Popper.svelte.d.ts +5 -6
package/utils/Popper.svelte
CHANGED
|
@@ -1,84 +1,112 @@
|
|
|
1
|
-
<script>import { createEventDispatcher } from 'svelte';
|
|
1
|
+
<script>import { createEventDispatcher, onMount } from 'svelte';
|
|
2
|
+
import { fade } from 'svelte/transition';
|
|
2
3
|
import { createPopper } from '@popperjs/core';
|
|
3
4
|
import classNames from 'classnames';
|
|
4
|
-
|
|
5
|
-
export let
|
|
6
|
-
export let
|
|
5
|
+
export let activeContent = false;
|
|
6
|
+
export let animation = 100;
|
|
7
|
+
export let arrow = true;
|
|
7
8
|
export let offset = 8;
|
|
9
|
+
export let placement = 'top';
|
|
8
10
|
export let trigger = 'hover';
|
|
9
|
-
export let
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
export let triggeredBy;
|
|
12
|
+
const dispatch = createEventDispatcher();
|
|
13
|
+
let open = false;
|
|
12
14
|
let clickable;
|
|
13
15
|
$: clickable = trigger === 'click';
|
|
14
|
-
|
|
16
|
+
$: dispatch('show', open);
|
|
17
|
+
let triggerEl;
|
|
18
|
+
let triggerEls = [];
|
|
19
|
+
let popper;
|
|
15
20
|
let _blocked = false; // managment of the race condition between focusin and click events
|
|
16
|
-
const block = () => ((_blocked = true), setTimeout(() => (_blocked = false),
|
|
21
|
+
const block = () => ((_blocked = true), setTimeout(() => (_blocked = false), 250));
|
|
17
22
|
const showHandler = (ev) => {
|
|
23
|
+
if (triggerEl === undefined)
|
|
24
|
+
triggerEl = ev.target;
|
|
25
|
+
else if (triggerEls.includes(ev.target) && triggerEl !== ev.target) {
|
|
26
|
+
popper.state.elements.reference = ev.target;
|
|
27
|
+
popper.setOptions({ placement });
|
|
28
|
+
triggerEl = ev.target;
|
|
29
|
+
block();
|
|
30
|
+
}
|
|
18
31
|
if (clickable && ev.type === 'focusin' && !open)
|
|
19
32
|
block();
|
|
20
|
-
open = ev.type === 'click' && !_blocked ? !open : true;
|
|
33
|
+
open = clickable && ev.type === 'click' && !_blocked ? !open : true;
|
|
21
34
|
};
|
|
35
|
+
// typescript typeguards - poper.state.element.reference: Element|HTMLElement|VirtualElement
|
|
36
|
+
const hasHover = (el) => el.matches && el.matches(':hover');
|
|
37
|
+
const hasFocus = (el) => el.contains && el.contains(document.activeElement);
|
|
22
38
|
const hideHandler = (ev) => {
|
|
23
|
-
if (activeContent)
|
|
24
|
-
setTimeout(() =>
|
|
25
|
-
|
|
26
|
-
(
|
|
39
|
+
if (activeContent) {
|
|
40
|
+
setTimeout(() => {
|
|
41
|
+
const elements = Object.values(popper?.state.elements ?? {});
|
|
42
|
+
if (ev.type === 'mouseleave' && elements.some(hasHover))
|
|
43
|
+
return;
|
|
44
|
+
if (ev.type === 'focusout' && elements.some(hasFocus))
|
|
45
|
+
return;
|
|
46
|
+
open = false;
|
|
47
|
+
}, 100);
|
|
48
|
+
}
|
|
27
49
|
else
|
|
28
50
|
open = false;
|
|
29
51
|
};
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return modifiers;
|
|
52
|
+
function init(node, _open) {
|
|
53
|
+
popper = createPopper(triggerEl, node, {
|
|
54
|
+
placement,
|
|
55
|
+
modifiers: [
|
|
56
|
+
{ name: 'offset', options: { offset: [0, offset] } },
|
|
57
|
+
{ name: 'eventListeners', enabled: open }
|
|
58
|
+
]
|
|
59
|
+
});
|
|
60
|
+
return {
|
|
61
|
+
destroy() {
|
|
62
|
+
popper.destroy();
|
|
63
|
+
}
|
|
64
|
+
};
|
|
44
65
|
}
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
66
|
+
onMount(() => {
|
|
67
|
+
const events = [
|
|
68
|
+
['focusin', showHandler, true],
|
|
69
|
+
['focusout', hideHandler, true],
|
|
70
|
+
['click', showHandler, clickable],
|
|
71
|
+
['mouseenter', showHandler, !clickable],
|
|
72
|
+
['mouseleave', hideHandler, !clickable]
|
|
73
|
+
];
|
|
74
|
+
triggerEls = [...document.querySelectorAll(triggeredBy)];
|
|
75
|
+
if (!triggerEls.length)
|
|
76
|
+
console.error('no triggers given');
|
|
77
|
+
triggerEls.forEach((element) => {
|
|
78
|
+
// trigger must be focusable
|
|
79
|
+
if (element.tabIndex < 0)
|
|
80
|
+
element.tabIndex = 0;
|
|
81
|
+
for (const [name, handler, cond] of events)
|
|
82
|
+
if (cond)
|
|
83
|
+
element.addEventListener(name, handler);
|
|
84
|
+
});
|
|
85
|
+
return () => {
|
|
86
|
+
triggerEl = undefined;
|
|
87
|
+
triggerEls.forEach((element) => {
|
|
88
|
+
if (element) {
|
|
89
|
+
for (const [name, handler, cond] of events)
|
|
90
|
+
element.removeEventListener(name, handler);
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
};
|
|
94
|
+
});
|
|
58
95
|
</script>
|
|
59
96
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
on:focusin={activeContent ? showHandler : undefined}
|
|
77
|
-
on:focusout={activeContent ? hideHandler : undefined}
|
|
78
|
-
on:mouseenter={activeContent && !clickable ? showHandler : undefined}
|
|
79
|
-
on:mouseleave={activeContent && !clickable ? hideHandler : undefined}
|
|
80
|
-
style="position: absolute;"
|
|
81
|
-
>
|
|
82
|
-
<slot />
|
|
83
|
-
{#if arrow}<div data-popper-arrow />{/if}
|
|
84
|
-
</div>
|
|
97
|
+
{#if open}
|
|
98
|
+
<div
|
|
99
|
+
use:init={open}
|
|
100
|
+
transition:fade={{ duration: animation ? animation : 0 }}
|
|
101
|
+
role="tooltip"
|
|
102
|
+
tabIndex={activeContent ? -1 : undefined}
|
|
103
|
+
class={classNames('z-10', $$props.class)}
|
|
104
|
+
on:focusin={activeContent ? showHandler : undefined}
|
|
105
|
+
on:focusout={activeContent ? hideHandler : undefined}
|
|
106
|
+
on:mouseenter={activeContent && !clickable ? showHandler : undefined}
|
|
107
|
+
on:mouseleave={activeContent && !clickable ? hideHandler : undefined}
|
|
108
|
+
style="position: absolute;">
|
|
109
|
+
<slot />
|
|
110
|
+
{#if arrow}<div data-popper-arrow />{/if}
|
|
111
|
+
</div>
|
|
112
|
+
{/if}
|
package/utils/Popper.svelte.d.ts
CHANGED
|
@@ -3,13 +3,13 @@ import type { Placement } from '@popperjs/core';
|
|
|
3
3
|
declare const __propDef: {
|
|
4
4
|
props: {
|
|
5
5
|
[x: string]: any;
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
activeContent?: boolean;
|
|
7
|
+
animation?: false | number;
|
|
8
|
+
arrow?: boolean;
|
|
8
9
|
offset?: number;
|
|
10
|
+
placement?: Placement;
|
|
9
11
|
trigger?: 'hover' | 'click';
|
|
10
|
-
|
|
11
|
-
animation?: false | `duration-${number}`;
|
|
12
|
-
activeContent: boolean;
|
|
12
|
+
triggeredBy: string;
|
|
13
13
|
};
|
|
14
14
|
events: {
|
|
15
15
|
show: CustomEvent<any>;
|
|
@@ -17,7 +17,6 @@ declare const __propDef: {
|
|
|
17
17
|
[evt: string]: CustomEvent<any>;
|
|
18
18
|
};
|
|
19
19
|
slots: {
|
|
20
|
-
trigger: {};
|
|
21
20
|
default: {};
|
|
22
21
|
};
|
|
23
22
|
};
|