@pathscale/ui 1.1.68 → 1.1.69

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.
@@ -3,7 +3,6 @@
3
3
  * Root
4
4
  * -----------------------------------------------------------------------------------------------*/
5
5
  .tooltip {
6
- position: relative;
7
6
  display: inline-flex;
8
7
  }
9
8
 
@@ -27,7 +26,7 @@
27
26
  * Content
28
27
  * -----------------------------------------------------------------------------------------------*/
29
28
  .tooltip__content {
30
- position: absolute;
29
+ position: fixed;
31
30
  z-index: 9999;
32
31
  max-width: 20rem;
33
32
  border-radius: var(--radius-field, 0.5rem);
@@ -41,15 +40,12 @@
41
40
  pointer-events: none;
42
41
  background-color: var(--color-neutral);
43
42
  color: var(--color-neutral-content);
44
- box-shadow:
45
- 0 4px 6px -1px oklch(0% 0 0 / 0.1),
46
- 0 2px 4px -2px oklch(0% 0 0 / 0.1);
43
+ box-shadow: 0 4px 6px -1px oklch(0% 0 0 / 0.1), 0 2px 4px -2px
44
+ oklch(0% 0 0 / 0.1);
47
45
 
48
46
  opacity: 0;
49
47
  overflow: visible;
50
- transition:
51
- opacity 150ms ease,
52
- transform 150ms ease;
48
+ transition: opacity 150ms ease, transform 150ms ease;
53
49
  }
54
50
 
55
51
  /* Visible state */
@@ -60,46 +56,42 @@
60
56
 
61
57
  /* ----- Placement: top (default) ----- */
62
58
  .tooltip__content[data-placement="top"] {
63
- bottom: calc(100% + 0.75rem);
64
- left: 50%;
65
- transform: translateX(-50%) translateY(0.25rem);
59
+ transform: translateY(0.25rem);
60
+ transform-origin: bottom;
66
61
  }
67
62
 
68
63
  .tooltip__content[data-placement="top"][data-open="true"] {
69
- transform: translateX(-50%) translateY(0);
64
+ transform: translateY(0);
70
65
  }
71
66
 
72
67
  /* ----- Placement: bottom ----- */
73
68
  .tooltip__content[data-placement="bottom"] {
74
- top: calc(100% + 0.75rem);
75
- left: 50%;
76
- transform: translateX(-50%) translateY(-0.25rem);
69
+ transform: translateY(-0.25rem);
70
+ transform-origin: top;
77
71
  }
78
72
 
79
73
  .tooltip__content[data-placement="bottom"][data-open="true"] {
80
- transform: translateX(-50%) translateY(0);
74
+ transform: translateY(0);
81
75
  }
82
76
 
83
77
  /* ----- Placement: left ----- */
84
78
  .tooltip__content[data-placement="left"] {
85
- right: calc(100% + 0.75rem);
86
- top: 50%;
87
- transform: translateX(0.25rem) translateY(-50%);
79
+ transform: translateX(0.25rem);
80
+ transform-origin: right;
88
81
  }
89
82
 
90
83
  .tooltip__content[data-placement="left"][data-open="true"] {
91
- transform: translateX(0) translateY(-50%);
84
+ transform: translateX(0);
92
85
  }
93
86
 
94
87
  /* ----- Placement: right ----- */
95
88
  .tooltip__content[data-placement="right"] {
96
- left: calc(100% + 0.75rem);
97
- top: 50%;
98
- transform: translateX(-0.25rem) translateY(-50%);
89
+ transform: translateX(-0.25rem);
90
+ transform-origin: left;
99
91
  }
100
92
 
101
93
  .tooltip__content[data-placement="right"][data-open="true"] {
102
- transform: translateX(0) translateY(-50%);
94
+ transform: translateX(0);
103
95
  }
104
96
 
105
97
  /* ----- Reduced motion ----- */
@@ -1,10 +1,13 @@
1
1
  import "./Tooltip.css";
2
2
  import { type Component, type JSX, type ParentComponent } from "solid-js";
3
+ import { type OverlayPlacement } from "../_shared/overlayPosition";
3
4
  import type { IComponentBaseProps } from "../types";
4
- export type TooltipPlacement = "top" | "bottom" | "left" | "right";
5
+ export type TooltipPlacement = OverlayPlacement;
5
6
  export type TooltipRootProps = IComponentBaseProps & {
6
7
  children: JSX.Element;
7
8
  placement?: TooltipPlacement;
9
+ autoFlip?: boolean;
10
+ sideOffset?: number;
8
11
  showArrow?: boolean;
9
12
  delay?: number;
10
13
  closeDelay?: number;
@@ -2,6 +2,7 @@ import * as __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__ from "solid-js/web
2
2
  import "./Tooltip.css";
3
3
  import * as __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__ from "solid-js";
4
4
  import * as __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__ from "tailwind-merge";
5
+ import * as __WEBPACK_EXTERNAL_MODULE__shared_overlayPosition_js_ab299723__ from "../_shared/overlayPosition.js";
5
6
  import * as __WEBPACK_EXTERNAL_MODULE__Tooltip_classes_js_59536676__ from "./Tooltip.classes.js";
6
7
  var _tmpl$ = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)("<span>"), _tmpl$2 = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)("<div>"), _tmpl$3 = /*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.template)('<svg aria-hidden=true data-slot=tooltip-arrow-svg height=12 viewBox="0 0 12 12"width=12 xmlns=http://www.w3.org/2000/svg><path d="M0 0C5.48483 8 6.5 8 12 0Z"fill=currentColor>');
7
8
  const TooltipContext = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createContext)();
@@ -14,6 +15,8 @@ const TooltipRoot = (props)=>{
14
15
  const [local, _others] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.splitProps)(props, [
15
16
  "children",
16
17
  "placement",
18
+ "autoFlip",
19
+ "sideOffset",
17
20
  "showArrow",
18
21
  "delay",
19
22
  "closeDelay",
@@ -27,19 +30,46 @@ const TooltipRoot = (props)=>{
27
30
  ]);
28
31
  const [internalOpen, setInternalOpen] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)(Boolean(local.defaultOpen));
29
32
  const [triggerRef, setTriggerRef] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)();
33
+ const [contentRef, setContentRef] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)();
34
+ const [resolvedPlacement, setResolvedPlacement] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createSignal)(local.placement ?? "top");
35
+ let delayTimer;
36
+ let closeTimer;
30
37
  const isControlled = ()=>void 0 !== local.isOpen;
31
38
  const isOpen = ()=>isControlled() ? Boolean(local.isOpen) : internalOpen();
32
39
  const setIsOpen = (v)=>{
33
40
  if (!isControlled()) setInternalOpen(v);
34
41
  local.onOpenChange?.(v);
35
42
  };
43
+ const openTooltip = ()=>{
44
+ clearTimeout(closeTimer);
45
+ clearTimeout(delayTimer);
46
+ delayTimer = setTimeout(()=>setIsOpen(true), local.delay ?? 0);
47
+ };
48
+ const closeTooltip = ()=>{
49
+ clearTimeout(delayTimer);
50
+ clearTimeout(closeTimer);
51
+ closeTimer = setTimeout(()=>setIsOpen(false), local.closeDelay ?? 100);
52
+ };
53
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.onCleanup)(()=>{
54
+ clearTimeout(delayTimer);
55
+ clearTimeout(closeTimer);
56
+ });
36
57
  const ctx = {
37
58
  isOpen,
38
59
  setIsOpen,
39
- placement: ()=>local.placement ?? "top",
60
+ openTooltip,
61
+ closeTooltip,
62
+ preferredPlacement: ()=>local.placement ?? "top",
63
+ placement: ()=>resolvedPlacement(),
64
+ setPlacement: setResolvedPlacement,
65
+ autoFlip: ()=>local.autoFlip ?? true,
66
+ sideOffset: ()=>local.sideOffset ?? 12,
40
67
  showArrow: ()=>Boolean(local.showArrow),
41
68
  triggerRef,
42
- setTriggerRef
69
+ setTriggerRef,
70
+ contentRef,
71
+ setContentRef,
72
+ dataTheme: ()=>local.dataTheme
43
73
  };
44
74
  return (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(TooltipContext.Provider, {
45
75
  value: ctx,
@@ -74,24 +104,16 @@ const TooltipTrigger = (props)=>{
74
104
  "onFocusOut"
75
105
  ]);
76
106
  const ctx = useTooltipContext();
77
- let delayTimer;
78
- let closeTimer;
79
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.onCleanup)(()=>{
80
- clearTimeout(delayTimer);
81
- clearTimeout(closeTimer);
82
- });
83
107
  const handleMouseEnter = (e)=>{
84
- clearTimeout(closeTimer);
85
- ctx.setIsOpen(true);
108
+ ctx.openTooltip();
86
109
  if ("function" == typeof local.onMouseEnter) local.onMouseEnter(e);
87
110
  };
88
111
  const handleMouseLeave = (e)=>{
89
- closeTimer = setTimeout(()=>ctx.setIsOpen(false), 100);
112
+ ctx.closeTooltip();
90
113
  if ("function" == typeof local.onMouseLeave) local.onMouseLeave(e);
91
114
  };
92
115
  const handleFocusIn = (e)=>{
93
- clearTimeout(closeTimer);
94
- ctx.setIsOpen(true);
116
+ ctx.openTooltip();
95
117
  if ("function" == typeof local.onFocusIn) local.onFocusIn(e);
96
118
  };
97
119
  const handleFocusOut = (e)=>{
@@ -126,33 +148,78 @@ const TooltipContent = (props)=>{
126
148
  "class",
127
149
  "className",
128
150
  "dataTheme",
129
- "style"
151
+ "style",
152
+ "onMouseEnter",
153
+ "onMouseLeave"
130
154
  ]);
131
155
  const ctx = useTooltipContext();
132
- return (()=>{
133
- var _el$3 = _tmpl$2();
134
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$3, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(others, {
135
- role: "tooltip"
136
- }, ()=>({
137
- class: (0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)(__WEBPACK_EXTERNAL_MODULE__Tooltip_classes_js_59536676__.CLASSES.slot.content, local.class, local.className)
138
- }), {
139
- "data-slot": "tooltip-content",
140
- get ["data-placement"] () {
141
- return ctx.placement();
142
- },
143
- get ["data-open"] () {
144
- return ctx.isOpen() ? "true" : "false";
145
- },
146
- get ["data-theme"] () {
147
- return local.dataTheme;
148
- },
149
- get style () {
150
- return local.style;
151
- }
152
- }), false, true);
153
- (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$3, ()=>local.children);
154
- return _el$3;
155
- })();
156
+ const overlayPosition = (0, __WEBPACK_EXTERNAL_MODULE__shared_overlayPosition_js_ab299723__.createOverlayPosition)({
157
+ open: ctx.isOpen,
158
+ triggerRef: ctx.triggerRef,
159
+ overlayRef: ctx.contentRef,
160
+ placement: ctx.preferredPlacement,
161
+ offset: ctx.sideOffset,
162
+ autoFlip: ctx.autoFlip,
163
+ align: ()=>"center"
164
+ });
165
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.createEffect)(()=>{
166
+ ctx.setPlacement(overlayPosition.placement());
167
+ });
168
+ const style = ()=>{
169
+ const overlayStyle = overlayPosition.style();
170
+ if ("string" == typeof local.style) return [
171
+ local.style,
172
+ Object.entries(overlayStyle).map(([key, value])=>`${key}: ${String(value)}`).join("; ")
173
+ ].filter(Boolean).join("; ");
174
+ return {
175
+ ...local.style ?? {},
176
+ ...overlayStyle
177
+ };
178
+ };
179
+ const handleMouseEnter = (event)=>{
180
+ ctx.openTooltip();
181
+ if ("function" == typeof local.onMouseEnter) local.onMouseEnter(event);
182
+ };
183
+ const handleMouseLeave = (event)=>{
184
+ ctx.closeTooltip();
185
+ if ("function" == typeof local.onMouseLeave) local.onMouseLeave(event);
186
+ };
187
+ return (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(__WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.Show, {
188
+ get when () {
189
+ return ctx.isOpen();
190
+ },
191
+ get children () {
192
+ return (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.createComponent)(__WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.Portal, {
193
+ get children () {
194
+ var _el$3 = _tmpl$2();
195
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.use)((el)=>ctx.setContentRef(el), _el$3);
196
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.spread)(_el$3, (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.mergeProps)(others, {
197
+ role: "tooltip"
198
+ }, ()=>({
199
+ class: (0, __WEBPACK_EXTERNAL_MODULE_tailwind_merge_e05e3e95__.twMerge)(__WEBPACK_EXTERNAL_MODULE__Tooltip_classes_js_59536676__.CLASSES.slot.content, local.class, local.className)
200
+ }), {
201
+ "data-slot": "tooltip-content",
202
+ get ["data-placement"] () {
203
+ return ctx.placement();
204
+ },
205
+ get ["data-open"] () {
206
+ return ctx.isOpen() ? "true" : "false";
207
+ },
208
+ get ["data-theme"] () {
209
+ return local.dataTheme ?? ctx.dataTheme();
210
+ },
211
+ get style () {
212
+ return style();
213
+ },
214
+ onMouseEnter: handleMouseEnter,
215
+ onMouseLeave: handleMouseLeave
216
+ }), false, true);
217
+ (0, __WEBPACK_EXTERNAL_MODULE_solid_js_web_35d951b7__.insert)(_el$3, ()=>local.children);
218
+ return _el$3;
219
+ }
220
+ });
221
+ }
222
+ });
156
223
  };
157
224
  const TooltipArrow = (props)=>{
158
225
  const [local, others] = (0, __WEBPACK_EXTERNAL_MODULE_solid_js_aeefcc6d__.splitProps)(props, [
@@ -2186,7 +2186,10 @@
2186
2186
  ]
2187
2187
  }
2188
2188
  }
2189
- }
2189
+ },
2190
+ "deps": [
2191
+ "_shared"
2192
+ ]
2190
2193
  },
2191
2194
  "Disclosure": {
2192
2195
  "classes": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pathscale/ui",
3
- "version": "1.1.68",
3
+ "version": "1.1.69",
4
4
  "author": "pathscale",
5
5
  "repository": {
6
6
  "type": "git",