@intechstudio/grid-uikit 1.20260622.954 → 1.20260622.1259

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.
@@ -4,20 +4,25 @@
4
4
  import { onDestroy, onMount } from "svelte";
5
5
  import MoltenPushButton from "./MoltenPushButton.svelte";
6
6
 
7
- export let text = "";
8
- export let placement = "top";
9
- export let duration = 250;
10
- export let delay = 750;
11
- export let instant = false;
12
- export let nowrap = false;
13
- export let buttons: any[] = [];
14
- export let triggerEvents = ["hover"];
15
- export let referenceElement: HTMLElement;
16
- export let component: any | undefined = undefined;
17
-
18
- let showbuttons = false;
19
- let showTooltip: boolean;
20
-
7
+ let {
8
+ text = "",
9
+ placement = "top",
10
+ duration = 250,
11
+ delay = 750,
12
+ instant = false,
13
+ nowrap = false,
14
+ buttons = [] as any[],
15
+ triggerEvents = ["hover"],
16
+ referenceElement,
17
+ component = undefined,
18
+ class: className = "",
19
+ } = $props();
20
+
21
+ let showbuttons = $state(false);
22
+ let showTooltip = $state(false);
23
+
24
+ let tooltipElement: HTMLDivElement | undefined = $state();
25
+ let previousFocusedElement: HTMLElement | null = null;
21
26
  let closeTimeout: any;
22
27
  let openTimeout: any;
23
28
 
@@ -110,6 +115,41 @@
110
115
  //e.stopPropagation();
111
116
  }
112
117
 
118
+ function handleDocumentKeyDown(e: KeyboardEvent) {
119
+ if (e.key === "Escape" && (showbuttons || showTooltip)) {
120
+ const active = document.activeElement;
121
+ if (
122
+ active === referenceElement ||
123
+ active === tooltipElement ||
124
+ tooltipElement?.contains(active) ||
125
+ referenceElement.contains(active)
126
+ ) {
127
+ e.stopImmediatePropagation();
128
+ close();
129
+ }
130
+ }
131
+ }
132
+
133
+ function handleDocumentMouseDown(e: MouseEvent) {
134
+ if (!showbuttons && !showTooltip) return;
135
+ const target = e.target as Node;
136
+ const popover = document.querySelector(".svelte-easy-popover");
137
+ if (
138
+ popover &&
139
+ !popover.contains(target) &&
140
+ !referenceElement.contains(target)
141
+ ) {
142
+ close();
143
+ }
144
+ }
145
+
146
+ $effect(() => {
147
+ if (tooltipElement) {
148
+ previousFocusedElement = document.activeElement as HTMLElement | null;
149
+ tooltipElement.focus();
150
+ }
151
+ });
152
+
113
153
  onMount(() => {
114
154
  referenceElement.addEventListener(
115
155
  "mouseenter",
@@ -122,6 +162,8 @@
122
162
  referenceElement.addEventListener("click", handleReferenceElementClick);
123
163
  referenceElement.addEventListener("focus", handleReferenceElementFocus);
124
164
  referenceElement.addEventListener("blur", handleReferenceElementBlur);
165
+ document.addEventListener("mousedown", handleDocumentMouseDown);
166
+ document.addEventListener("keydown", handleDocumentKeyDown);
125
167
  });
126
168
 
127
169
  onDestroy(() => {
@@ -136,6 +178,8 @@
136
178
  referenceElement.removeEventListener("click", handleReferenceElementClick);
137
179
  referenceElement.removeEventListener("focus", handleReferenceElementFocus);
138
180
  referenceElement.removeEventListener("blur", handleReferenceElementBlur);
181
+ document.removeEventListener("mousedown", handleDocumentMouseDown);
182
+ document.removeEventListener("keydown", handleDocumentKeyDown);
139
183
  });
140
184
 
141
185
  function interceptEvent(e: any) {
@@ -165,6 +209,10 @@
165
209
  clearTimeout(closeTimeout);
166
210
  showTooltip = false;
167
211
  showbuttons = false;
212
+ if (previousFocusedElement) {
213
+ previousFocusedElement.focus();
214
+ previousFocusedElement = null;
215
+ }
168
216
  }
169
217
  </script>
170
218
 
@@ -181,7 +229,9 @@
181
229
  on:mouseenter={handleMouseEnter}
182
230
  on:mouseleave={handleMouseLeave}
183
231
  on:click={handleClick}
184
- class="{$$props.class} tooltip-container"
232
+ bind:this={tooltipElement}
233
+ tabindex="-1"
234
+ class="{className} tooltip-container"
185
235
  transition:fade|global={{
186
236
  duration: instant ? 0 : duration, //Make it instant when explicitly clicked
187
237
  }}
@@ -1,30 +1,15 @@
1
- interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
2
- new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
3
- $$bindings?: Bindings;
4
- } & Exports;
5
- (internal: unknown, props: Props & {
6
- $$events?: Events;
7
- $$slots?: Slots;
8
- }): Exports & {
9
- $set?: any;
10
- $on?: any;
11
- };
12
- z_$$bindings?: Bindings;
13
- }
14
- declare const MoltenTooltip: $$__sveltets_2_IsomorphicComponent<{
15
- [x: string]: any;
16
- text?: string | undefined;
17
- placement?: string | undefined;
18
- duration?: number | undefined;
19
- delay?: number | undefined;
20
- instant?: boolean | undefined;
21
- nowrap?: boolean | undefined;
22
- buttons?: any[] | undefined;
23
- triggerEvents?: string[] | undefined;
24
- referenceElement: HTMLElement;
25
- component?: any | undefined;
26
- }, {
27
- [evt: string]: CustomEvent<any>;
28
- }, {}, {}, string>;
29
- type MoltenTooltip = InstanceType<typeof MoltenTooltip>;
1
+ declare const MoltenTooltip: import("svelte").Component<{
2
+ text?: string;
3
+ placement?: string;
4
+ duration?: number;
5
+ delay?: number;
6
+ instant?: boolean;
7
+ nowrap?: boolean;
8
+ buttons?: any[];
9
+ triggerEvents?: any[];
10
+ referenceElement: any;
11
+ component?: any;
12
+ class?: string;
13
+ }, {}, "">;
14
+ type MoltenTooltip = ReturnType<typeof MoltenTooltip>;
30
15
  export default MoltenTooltip;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intechstudio/grid-uikit",
3
- "version": "1.20260622.954",
3
+ "version": "1.20260622.1259",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/intechstudio/grid-uikit.git"