flowbite-svelte 0.39.2 → 0.40.1

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 (42) hide show
  1. package/dist/accordion/Accordion.svelte +2 -1
  2. package/dist/accordion/Accordion.svelte.d.ts.map +1 -1
  3. package/dist/accordion/AccordionItem.svelte +13 -4
  4. package/dist/accordion/AccordionItem.svelte.d.ts.map +1 -1
  5. package/dist/darkmode/DarkMode.svelte +10 -4
  6. package/dist/dropdowns/Dropdown.svelte +3 -6
  7. package/dist/dropdowns/Dropdown.svelte.d.ts +236 -2
  8. package/dist/dropdowns/Dropdown.svelte.d.ts.map +1 -1
  9. package/dist/forms/FloatingLabelInput.svelte +1 -10
  10. package/dist/forms/FloatingLabelInput.svelte.d.ts.map +1 -1
  11. package/dist/forms/Input.svelte +1 -10
  12. package/dist/forms/Input.svelte.d.ts.map +1 -1
  13. package/dist/forms/Toggle.svelte +1 -1
  14. package/dist/forms/Toggle.svelte.d.ts.map +1 -1
  15. package/dist/indicators/Indicator.svelte.d.ts +3 -3
  16. package/dist/indicators/Indicator.svelte.d.ts.map +1 -1
  17. package/dist/megamenu/MegaMenu.svelte.d.ts +241 -6
  18. package/dist/megamenu/MegaMenu.svelte.d.ts.map +1 -1
  19. package/dist/paginations/Pagination.svelte +9 -9
  20. package/dist/paginations/Pagination.svelte.d.ts +1 -0
  21. package/dist/paginations/Pagination.svelte.d.ts.map +1 -1
  22. package/dist/paginations/PaginationItem.svelte +5 -10
  23. package/dist/paginations/PaginationItem.svelte.d.ts +1 -0
  24. package/dist/paginations/PaginationItem.svelte.d.ts.map +1 -1
  25. package/dist/popover/Popover.svelte.d.ts +1 -1
  26. package/dist/speed-dial/SpeedDial.svelte.d.ts +1 -1
  27. package/dist/speed-dial/SpeedDial.svelte.d.ts.map +1 -1
  28. package/dist/speed-dial/SpeedDialButton.svelte.d.ts +1 -1
  29. package/dist/speed-dial/SpeedDialButton.svelte.d.ts.map +1 -1
  30. package/dist/tooltips/Tooltip.svelte +4 -2
  31. package/dist/tooltips/Tooltip.svelte.d.ts +1 -1
  32. package/dist/tooltips/Tooltip.svelte.d.ts.map +1 -1
  33. package/dist/types.d.ts +1 -2
  34. package/dist/types.d.ts.map +1 -1
  35. package/dist/utils/Chevron.svelte.d.ts +1 -1
  36. package/dist/utils/Chevron.svelte.d.ts.map +1 -1
  37. package/dist/utils/Frame.svelte +17 -17
  38. package/dist/utils/Popper.svelte +58 -48
  39. package/dist/utils/Popper.svelte.d.ts +1 -1
  40. package/dist/utils/Popper.svelte.d.ts.map +1 -1
  41. package/dist/utils/focusTrap.d.ts.map +1 -1
  42. package/package.json +15 -15
@@ -1,8 +1,8 @@
1
- <script>import { onMount } from 'svelte';
2
- import { createPopper } from '@popperjs/core';
3
- import { twMerge } from 'tailwind-merge';
4
- import createEventDispatcher from './createEventDispatcher';
1
+ <script>import * as dom from '@floating-ui/dom';
2
+ import { onMount } from 'svelte';
3
+ import { twJoin } from 'tailwind-merge';
5
4
  import Frame from './Frame.svelte';
5
+ import createEventDispatcher from './createEventDispatcher';
6
6
  export let activeContent = false;
7
7
  export let arrow = true;
8
8
  export let offset = 8;
@@ -17,9 +17,10 @@ let clickable;
17
17
  $: clickable = trigger === 'click';
18
18
  $: dispatch('show', triggerEl, open);
19
19
  let triggerEl;
20
+ let floatingEl;
21
+ let arrowEl;
20
22
  let contentEl;
21
23
  let triggerEls = [];
22
- let popper;
23
24
  let _blocked = false; // management of the race condition between focusin and click events
24
25
  const block = () => ((_blocked = true), setTimeout(() => (_blocked = false), 250));
25
26
  const showHandler = (ev) => {
@@ -33,15 +34,13 @@ const showHandler = (ev) => {
33
34
  block();
34
35
  open = clickable && ev.type === 'click' && !_blocked ? !open : true;
35
36
  };
36
- // reactivity
37
- $: popper && popper.setOptions({ placement });
38
- // typescript typeguards - poper.state.element.reference: Element|HTMLElement|VirtualElement
39
- const hasHover = (el) => el.matches && el.matches(':hover');
40
- const hasFocus = (el) => el.contains && el.contains(document.activeElement);
37
+ const hasHover = (el) => el.matches(':hover');
38
+ const hasFocus = (el) => el.contains(document.activeElement);
39
+ const px = (n) => (n != null ? `${n}px` : '');
41
40
  const hideHandler = (ev) => {
42
41
  if (activeContent) {
43
42
  setTimeout(() => {
44
- const elements = Object.values(popper?.state.elements ?? {});
43
+ const elements = [triggerEl, floatingEl, arrowEl].filter((x) => x);
45
44
  if (ev.type === 'mouseleave' && elements.some(hasHover))
46
45
  return;
47
46
  if (ev.type === 'focusout' && elements.some(hasFocus))
@@ -52,33 +51,47 @@ const hideHandler = (ev) => {
52
51
  else
53
52
  open = false;
54
53
  };
55
- function init(node, _triggerEl) {
56
- const arrowEl = arrow ? node.lastElementChild : undefined;
57
- popper = createPopper(_triggerEl, node, {
54
+ let arrowSide;
55
+ const oppositeSideMap = {
56
+ left: 'right',
57
+ right: 'left',
58
+ bottom: 'top',
59
+ top: 'bottom'
60
+ };
61
+ function updatePosition() {
62
+ dom
63
+ .computePosition(triggerEl, floatingEl, {
58
64
  placement,
59
65
  strategy,
60
- modifiers: [
61
- {
62
- name: 'offset',
63
- options: {
64
- offset: ({ reference, popper }) => {
65
- // for full screen mega menu
66
- return [yOnly ? popper.width / 2 - reference.width / 2 - reference.x : 0, offset];
67
- }
68
- }
69
- },
70
- { name: 'eventListeners', enabled: open },
71
- { name: 'flip', enabled: false },
72
- { name: 'arrow', enabled: arrow, options: { element: arrowEl, padding: 10 } }
66
+ middleware: [
67
+ dom.flip(),
68
+ dom.shift(),
69
+ dom.offset(+offset),
70
+ arrowEl && dom.arrow({ element: arrowEl, padding: 10 })
73
71
  ]
72
+ })
73
+ .then(({ x, y, middlewareData, placement, strategy }) => {
74
+ floatingEl.style.position = strategy;
75
+ floatingEl.style.left = yOnly ? '0' : px(x);
76
+ floatingEl.style.top = px(y);
77
+ if (middlewareData.arrow && arrowEl) {
78
+ arrowEl.style.left = px(middlewareData.arrow.x);
79
+ arrowEl.style.top = px(middlewareData.arrow.y);
80
+ arrowSide = oppositeSideMap[placement.split('-')[0]];
81
+ arrowEl.style[arrowSide] = px(-arrowEl.offsetWidth / 2 - ($$props.border ? 1 : 0));
82
+ }
74
83
  });
84
+ }
85
+ function init(node, _triggerEl) {
86
+ floatingEl = node;
87
+ let cleanup = dom.autoUpdate(node, _triggerEl, updatePosition);
75
88
  return {
76
89
  update(_triggerEl) {
77
- popper.state.elements.reference = _triggerEl;
78
- popper.update();
90
+ cleanup();
91
+ cleanup = dom.autoUpdate(node, _triggerEl, updatePosition);
79
92
  },
80
93
  destroy() {
81
- popper.destroy();
94
+ cleanup();
82
95
  }
83
96
  };
84
97
  }
@@ -117,10 +130,8 @@ onMount(() => {
117
130
  function optional(pred, func) {
118
131
  return pred ? func : () => undefined;
119
132
  }
120
- let position = 'bottom';
121
- $: position = placement.split('-', 1)[0];
122
133
  let arrowClass;
123
- $: arrowClass = twMerge('after:w-[9px] after:h-[9px] after:rotate-45 bg-inherit after:bg-inherit invisible after:visible after:block border-inherit after:border-inherit', position === 'top' && ($$props.border ? 'after:border-b after:border-r -bottom-[5px]' : '-bottom-[4px]'), position === 'bottom' && ($$props.border ? 'after:border-t after:border-l -top-[5px]' : '-top-[4px]'), position === 'left' && ($$props.border ? 'after:border-t after:border-r -right-[5px]' : '-right-[4px]'), position === 'right' && ($$props.border ? 'after:border-b after:border-l -left-[5px]' : '-left-[4px]'));
134
+ $: arrowClass = twJoin('absolute pointer-events-none block w-[10px] h-[10px] rotate-45 bg-inherit border-inherit', $$props.border && arrowSide === 'bottom' && 'border-b border-r', $$props.border && arrowSide === 'top' && 'border-t border-l ', $$props.border && arrowSide === 'right' && 'border-t border-r ', $$props.border && arrowSide === 'left' && 'border-b border-l ');
124
135
  </script>
125
136
 
126
137
  {#if !triggerEl}
@@ -137,23 +148,22 @@ $: arrowClass = twMerge('after:w-[9px] after:h-[9px] after:rotate-45 bg-inherit
137
148
  on:focusout={optional(activeContent, hideHandler)}
138
149
  on:mouseenter={optional(activeContent && !clickable, showHandler)}
139
150
  on:mouseleave={optional(activeContent && !clickable, hideHandler)}
140
- {...$$restProps}
141
- class={twMerge('outline-none', $$props.class)}>
151
+ {...$$restProps}>
142
152
  <slot />
143
- {#if arrow}<div class={arrowClass} />{/if}
153
+ {#if arrow}<div class={arrowClass} bind:this={arrowEl} />{/if}
144
154
  </Frame>
145
155
  {/if}
146
156
 
147
157
  <!--
148
- @component
149
- ## Props
150
- @prop activeContent: boolean = false;
151
- @prop arrow: boolean = true;
152
- @prop offset: number = 8;
153
- @prop placement: Placement = 'top';
154
- @prop trigger: 'hover' | 'click' = 'hover';
155
- @prop triggeredBy: string | undefined = undefined;
156
- @prop strategy: 'absolute' | 'fixed' = 'absolute';
157
- @prop open: boolean = false;
158
- @prop yOnly: boolean = false;
159
- -->
158
+ @component
159
+ ## Props
160
+ @prop activeContent: boolean = false;
161
+ @prop arrow: boolean = true;
162
+ @prop offset: number = 8;
163
+ @prop placement: Placement = 'top';
164
+ @prop trigger: 'hover' | 'click' = 'hover';
165
+ @prop triggeredBy: string | undefined = undefined;
166
+ @prop strategy: 'absolute' | 'fixed' = 'absolute';
167
+ @prop open: boolean = false;
168
+ @prop yOnly: boolean = false;
169
+ -->
@@ -1,5 +1,5 @@
1
1
  import { SvelteComponentTyped } from "svelte";
2
- import type { Placement } from '@popperjs/core';
2
+ import type { Placement } from '@floating-ui/dom';
3
3
  declare const __propDef: {
4
4
  props: {
5
5
  download?: any;
@@ -1 +1 @@
1
- {"version":3,"file":"Popper.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/Popper.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AAID,OAAO,KAAK,EAAE,SAAS,EAAY,MAAM,gBAAgB,CAAC;AA8K1D,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAwC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,oBAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;CAC/F"}
1
+ {"version":3,"file":"Popper.svelte.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/Popper.svelte"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,QAAQ,CAE5C;AACD,OAAO,KAAK,EAAyB,SAAS,EAAQ,MAAM,kBAAkB,CAAC;AA8L/E,QAAA,MAAM,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAAwC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AACjD,MAAM,MAAM,YAAY,GAAG,OAAO,SAAS,CAAC,MAAM,CAAC;AACnD,MAAM,MAAM,WAAW,GAAG,OAAO,SAAS,CAAC,KAAK,CAAC;AAEjD;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,oBAAoB,CAAC,WAAW,EAAE,YAAY,EAAE,WAAW,CAAC;CAC/F"}
@@ -1 +1 @@
1
- {"version":3,"file":"focusTrap.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/focusTrap.js"],"names":[],"mappings":";AA0C2yrC,oJAAsM"}
1
+ {"version":3,"file":"focusTrap.d.ts","sourceRoot":"","sources":["../../../src/lib/utils/focusTrap.js"],"names":[],"mappings":";AA0Cw1rC,oJAAsM"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "flowbite-svelte",
3
- "version": "0.39.2",
3
+ "version": "0.40.1",
4
4
  "description": "Flowbite components for Svelte",
5
5
  "main": "dist/index.js",
6
6
  "author": {
@@ -30,12 +30,12 @@
30
30
  },
31
31
  "devDependencies": {
32
32
  "@docsearch/js": "^3.5.1",
33
- "@playwright/test": "^1.35.1",
34
- "@sveltejs/adapter-vercel": "^3.0.1",
35
- "@sveltejs/kit": "^1.21.0",
33
+ "@playwright/test": "^1.36.0",
34
+ "@sveltejs/adapter-vercel": "^3.0.2",
35
+ "@sveltejs/kit": "^1.22.3",
36
36
  "@sveltejs/package": "2.1.0",
37
- "@typescript-eslint/eslint-plugin": "^5.60.1",
38
- "@typescript-eslint/parser": "^5.60.1",
37
+ "@typescript-eslint/eslint-plugin": "^5.62.0",
38
+ "@typescript-eslint/parser": "^5.62.0",
39
39
  "autoprefixer": "^10.4.14",
40
40
  "createprops": "^0.5.5",
41
41
  "esbuild": "0.18.10",
@@ -44,22 +44,22 @@
44
44
  "eslint-plugin-svelte": "^2.32.2",
45
45
  "mdsvex": "^0.11.0",
46
46
  "mdsvexamples": "^0.3.3",
47
- "postcss": "^8.4.24",
47
+ "postcss": "^8.4.26",
48
48
  "postcss-load-config": "^4.0.1",
49
49
  "prettier": "^2.8.8",
50
50
  "prettier-plugin-svelte": "^2.10.1",
51
51
  "prism-themes": "^1.9.0",
52
- "publint": "^0.1.15",
53
- "svelte": "^4.0.2",
54
- "svelte-check": "^3.4.4",
52
+ "publint": "^0.1.16",
53
+ "svelte": "^4.0.5",
54
+ "svelte-check": "^3.4.6",
55
55
  "svelte-meta-tags": "^2.8.0",
56
56
  "svelte-preprocess": "^5.0.4",
57
- "svelte2tsx": "^0.6.16",
57
+ "svelte2tsx": "^0.6.19",
58
58
  "tailwind-merge": "^1.13.1",
59
- "tailwindcss": "^3.3.2",
59
+ "tailwindcss": "^3.3.3",
60
60
  "tslib": "^2.6.0",
61
61
  "typescript": "^5.1.6",
62
- "vite": "^4.3.9",
62
+ "vite": "^4.4.4",
63
63
  "vitest": "^0.32.4"
64
64
  },
65
65
  "peerDependencies": {
@@ -109,8 +109,8 @@
109
109
  "url": "https://github.com/themesberg/flowbite-svelte"
110
110
  },
111
111
  "dependencies": {
112
- "@popperjs/core": "^2.11.8",
113
- "flowbite": "^1.6.6",
112
+ "@floating-ui/dom": "^1.4.5",
113
+ "flowbite": "^1.7.0",
114
114
  "tailwind-merge": "^1.13.2"
115
115
  },
116
116
  "engines": {