@mekari/pixel3-tooltip 0.0.0

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.
@@ -0,0 +1,188 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/tooltip.tsx
22
+ var tooltip_exports = {};
23
+ __export(tooltip_exports, {
24
+ MpTooltip: () => MpTooltip
25
+ });
26
+ module.exports = __toCommonJS(tooltip_exports);
27
+ var import_vue3 = require("vue");
28
+ var import_vue4 = require("vue");
29
+
30
+ // src/modules/tooltip.hooks.ts
31
+ var import_vue = require("@floating-ui/vue");
32
+ var import_pixel3_utils = require("@mekari/pixel3-utils");
33
+ var import_vue2 = require("vue");
34
+ var import_recipes = require("@mekari/pixel3-styled-system/recipes");
35
+ function useTooltip(props, emit, slots) {
36
+ if (slots.default().length > 1) {
37
+ console.error("[Pixel]: The MpTooltip component only expects one child.");
38
+ }
39
+ const getId = (0, import_vue2.computed)(() => props.id || `tooltip-${(0, import_pixel3_utils.useId)(4)}`);
40
+ const isOpen = (0, import_vue2.ref)(false);
41
+ const triggerNode = (0, import_vue2.ref)(null);
42
+ const contentNode = (0, import_vue2.ref)(null);
43
+ const placement = (0, import_vue2.ref)(props.placement);
44
+ const middleware = (0, import_vue2.ref)([(0, import_vue.offset)(4), (0, import_vue.flip)(), (0, import_vue.shift)()]);
45
+ const {
46
+ floatingStyles
47
+ } = (0, import_vue.useFloating)(triggerNode, contentNode, {
48
+ placement,
49
+ middleware,
50
+ whileElementsMounted: import_vue.autoUpdate
51
+ });
52
+ function onOpenTooltip() {
53
+ setTimeout(() => {
54
+ isOpen.value = true;
55
+ emit("open");
56
+ }, props.showDelay);
57
+ }
58
+ __name(onOpenTooltip, "onOpenTooltip");
59
+ function onCloseTooltip() {
60
+ setTimeout(() => {
61
+ isOpen.value = false;
62
+ emit("close");
63
+ }, props.hideDelay);
64
+ }
65
+ __name(onCloseTooltip, "onCloseTooltip");
66
+ const triggerAttrs = (0, import_vue2.computed)(() => {
67
+ return {
68
+ ref: triggerNode,
69
+ "data-pixel-component": "MpTooltip",
70
+ id: getId.value,
71
+ onMouseover: () => {
72
+ if (props.isManual)
73
+ return;
74
+ onOpenTooltip();
75
+ },
76
+ onMouseleave: () => {
77
+ if (props.isManual)
78
+ return;
79
+ onCloseTooltip();
80
+ },
81
+ onFocus: () => {
82
+ if (props.isManual)
83
+ return;
84
+ onOpenTooltip();
85
+ },
86
+ onBlur: () => {
87
+ if (props.isManual)
88
+ return;
89
+ onCloseTooltip();
90
+ }
91
+ };
92
+ });
93
+ const contentAttrs = (0, import_vue2.computed)(() => {
94
+ return {
95
+ ref: contentNode,
96
+ class: (0, import_recipes.tooltipRecipe)(),
97
+ style: {
98
+ display: isOpen.value ? "unset" : "none",
99
+ ...floatingStyles.value
100
+ }
101
+ };
102
+ });
103
+ (0, import_vue2.watch)(() => props.isOpen, (newValue) => {
104
+ if (props.isManual) {
105
+ isOpen.value = newValue;
106
+ }
107
+ });
108
+ return {
109
+ triggerNode,
110
+ contentNode,
111
+ triggerAttrs,
112
+ contentAttrs,
113
+ isOpen,
114
+ onOpenTooltip,
115
+ onCloseTooltip
116
+ };
117
+ }
118
+ __name(useTooltip, "useTooltip");
119
+
120
+ // src/modules/tooltip.props.ts
121
+ var tooltipProps = {
122
+ label: {
123
+ type: String
124
+ },
125
+ placement: {
126
+ type: String,
127
+ default: "top"
128
+ },
129
+ id: {
130
+ type: String
131
+ },
132
+ defaultIsOpen: {
133
+ type: Boolean
134
+ },
135
+ isManual: {
136
+ type: Boolean
137
+ },
138
+ isOpen: {
139
+ type: Boolean
140
+ },
141
+ showDelay: {
142
+ type: Number,
143
+ default: 0
144
+ },
145
+ hideDelay: {
146
+ type: Number,
147
+ default: 0
148
+ },
149
+ usePortal: {
150
+ type: Boolean
151
+ },
152
+ isKeepAlive: {
153
+ type: Boolean,
154
+ default: true
155
+ }
156
+ };
157
+
158
+ // src/tooltip.tsx
159
+ var MpTooltip = (0, import_vue4.defineComponent)({
160
+ name: "MpTooltip",
161
+ inheritAttrs: false,
162
+ props: tooltipProps,
163
+ emits: ["open", "close"],
164
+ setup(props, {
165
+ slots,
166
+ emit
167
+ }) {
168
+ const {
169
+ triggerAttrs,
170
+ contentAttrs,
171
+ isOpen
172
+ } = useTooltip(props, emit, slots);
173
+ return () => {
174
+ const triggerNode = (0, import_vue4.cloneVNode)(slots.default()[0], triggerAttrs.value);
175
+ const contentNode = (0, import_vue3.createVNode)("div", contentAttrs.value, [(0, import_vue3.createTextVNode)(" "), slots.label ? slots.label() : props.label, (0, import_vue3.createTextVNode)(" ")]);
176
+ const renderContentNode = props.usePortal ? (0, import_vue3.createVNode)(import_vue4.Teleport, {
177
+ "to": "body"
178
+ }, {
179
+ default: () => [(0, import_vue3.createTextVNode)(" "), contentNode, (0, import_vue3.createTextVNode)(" ")]
180
+ }) : contentNode;
181
+ return (0, import_vue3.createVNode)(import_vue3.Fragment, null, [triggerNode, props.isKeepAlive ? renderContentNode : isOpen.value ? renderContentNode : null]);
182
+ };
183
+ }
184
+ });
185
+ // Annotate the CommonJS export names for ESM import in node:
186
+ 0 && (module.exports = {
187
+ MpTooltip
188
+ });
@@ -0,0 +1,9 @@
1
+ import {
2
+ MpTooltip
3
+ } from "./chunk-4C7JA7QR.mjs";
4
+ import "./chunk-OBETIXOG.mjs";
5
+ import "./chunk-22GSYROL.mjs";
6
+ import "./chunk-QZ7VFGWC.mjs";
7
+ export {
8
+ MpTooltip
9
+ };
@@ -0,0 +1,5 @@
1
+ import { Directive } from 'vue';
2
+
3
+ declare const PixelTooltipDirective: Directive;
4
+
5
+ export { PixelTooltipDirective };
@@ -0,0 +1,5 @@
1
+ import { Directive } from 'vue';
2
+
3
+ declare const PixelTooltipDirective: Directive;
4
+
5
+ export { PixelTooltipDirective };
@@ -0,0 +1,219 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
7
+ var __export = (target, all) => {
8
+ for (var name in all)
9
+ __defProp(target, name, { get: all[name], enumerable: true });
10
+ };
11
+ var __copyProps = (to, from, except, desc) => {
12
+ if (from && typeof from === "object" || typeof from === "function") {
13
+ for (let key of __getOwnPropNames(from))
14
+ if (!__hasOwnProp.call(to, key) && key !== except)
15
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
16
+ }
17
+ return to;
18
+ };
19
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
20
+
21
+ // src/v-tooltip.ts
22
+ var v_tooltip_exports = {};
23
+ __export(v_tooltip_exports, {
24
+ PixelTooltipDirective: () => PixelTooltipDirective
25
+ });
26
+ module.exports = __toCommonJS(v_tooltip_exports);
27
+ var import_vue5 = require("vue");
28
+
29
+ // src/singleton-tooltip.tsx
30
+ var import_vue3 = require("vue");
31
+ var import_vue4 = require("vue");
32
+
33
+ // src/modules/tooltip.props.ts
34
+ var singletonTooltipProps = {
35
+ triggerNode: {
36
+ type: [Object],
37
+ default: null
38
+ },
39
+ label: {
40
+ type: String
41
+ },
42
+ placement: {
43
+ type: String,
44
+ default: "right"
45
+ },
46
+ isOpen: {
47
+ type: Boolean
48
+ }
49
+ };
50
+
51
+ // src/modules/tooltip.hooks.ts
52
+ var import_vue = require("@floating-ui/vue");
53
+ var import_pixel3_utils = require("@mekari/pixel3-utils");
54
+ var import_vue2 = require("vue");
55
+ var import_recipes = require("@mekari/pixel3-styled-system/recipes");
56
+ function useSingletonTooltip(props) {
57
+ const {
58
+ triggerNode: triggerNode2,
59
+ isOpen,
60
+ placement
61
+ } = (0, import_vue2.toRefs)(props);
62
+ const contentNode = (0, import_vue2.ref)(null);
63
+ const middleware = (0, import_vue2.ref)([(0, import_vue.offset)(4), (0, import_vue.flip)(), (0, import_vue.shift)()]);
64
+ const {
65
+ floatingStyles
66
+ } = (0, import_vue.useFloating)(triggerNode2, contentNode, {
67
+ placement,
68
+ middleware,
69
+ whileElementsMounted: import_vue.autoUpdate
70
+ });
71
+ const contentAttrs = (0, import_vue2.computed)(() => {
72
+ return {
73
+ ref: contentNode,
74
+ class: (0, import_recipes.tooltipRecipe)(),
75
+ style: {
76
+ display: (isOpen == null ? void 0 : isOpen.value) ? "unset" : "none",
77
+ ...floatingStyles.value
78
+ }
79
+ };
80
+ });
81
+ return {
82
+ triggerNode: triggerNode2,
83
+ contentNode,
84
+ contentAttrs
85
+ };
86
+ }
87
+ __name(useSingletonTooltip, "useSingletonTooltip");
88
+
89
+ // src/singleton-tooltip.tsx
90
+ var MpSingletonTooltip = (0, import_vue4.defineComponent)({
91
+ name: "MpSingletonTooltip",
92
+ inheritAttrs: false,
93
+ props: singletonTooltipProps,
94
+ setup(props, {
95
+ slots
96
+ }) {
97
+ const {
98
+ contentAttrs
99
+ } = useSingletonTooltip(props);
100
+ return () => {
101
+ return props.label ? (0, import_vue3.createVNode)("div", contentAttrs.value, [(0, import_vue3.createTextVNode)(" "), slots.default ? slots.default() : props.label, (0, import_vue3.createTextVNode)(" ")]) : null;
102
+ };
103
+ }
104
+ });
105
+
106
+ // src/v-tooltip.ts
107
+ var directiveApp;
108
+ var triggerNode = (0, import_vue5.ref)(null);
109
+ var timeoutOpen = (0, import_vue5.ref)();
110
+ var timeoutClose = (0, import_vue5.ref)();
111
+ var tooltipState = (0, import_vue5.ref)({
112
+ isOpen: false,
113
+ label: "",
114
+ placement: "top"
115
+ });
116
+ function initTooltipDirectiveApp() {
117
+ if (directiveApp)
118
+ return;
119
+ directiveApp = (0, import_vue5.createApp)({
120
+ devtools: {
121
+ hide: true
122
+ },
123
+ name: "PixelTooltipDirectiveApp",
124
+ render() {
125
+ return (0, import_vue5.h)(MpSingletonTooltip, {
126
+ isOpen: tooltipState.value.isOpen,
127
+ triggerNode,
128
+ label: tooltipState.value.label,
129
+ placement: tooltipState.value.placement
130
+ });
131
+ }
132
+ });
133
+ const mountTarget = document.createElement("div");
134
+ mountTarget.id = "PixelTooltipDirectiveApp";
135
+ document.body.appendChild(mountTarget);
136
+ directiveApp.mount(mountTarget);
137
+ }
138
+ __name(initTooltipDirectiveApp, "initTooltipDirectiveApp");
139
+ var PixelTooltipDirective = {
140
+ mounted: (el, binding) => {
141
+ if (window) {
142
+ initTooltipDirectiveApp();
143
+ }
144
+ const value = binding.value;
145
+ const props = {
146
+ label: typeof binding.value === "string" ? binding.value : value.label,
147
+ placement: value.placement,
148
+ showDelay: value.showDelay,
149
+ hideDelay: value.hideDelay
150
+ };
151
+ el.$pixelTooltip = {
152
+ show: async () => {
153
+ clearTimeout(timeoutOpen.value);
154
+ timeoutOpen.value = setTimeout(async () => {
155
+ triggerNode.value = el;
156
+ tooltipState.value.label = props.label;
157
+ tooltipState.value.placement = props.placement || "top";
158
+ tooltipState.value.isOpen = true;
159
+ }, value.showDelay || 0);
160
+ },
161
+ hide: () => {
162
+ clearTimeout(timeoutClose.value);
163
+ timeoutClose.value = setTimeout(async () => {
164
+ tooltipState.value.isOpen = false;
165
+ tooltipState.value.label = "";
166
+ }, value.hideDelay || 0);
167
+ }
168
+ };
169
+ el.addEventListener("mouseover", el.$pixelTooltip.show);
170
+ el.addEventListener("focus", el.$pixelTooltip.show);
171
+ el.addEventListener("mouseleave", el.$pixelTooltip.hide);
172
+ el.addEventListener("blur", el.$pixelTooltip.hide);
173
+ },
174
+ updated: (el, binding) => {
175
+ if (window) {
176
+ initTooltipDirectiveApp();
177
+ }
178
+ const value = binding.value;
179
+ const props = {
180
+ label: typeof binding.value === "string" ? binding.value : value.label,
181
+ placement: value.placement,
182
+ showDelay: value.showDelay,
183
+ hideDelay: value.hideDelay
184
+ };
185
+ el.$pixelTooltip = {
186
+ show: async () => {
187
+ clearTimeout(timeoutOpen.value);
188
+ timeoutOpen.value = setTimeout(async () => {
189
+ triggerNode.value = el;
190
+ tooltipState.value.label = props.label;
191
+ tooltipState.value.placement = props.placement || "top";
192
+ tooltipState.value.isOpen = true;
193
+ }, value.showDelay || 0);
194
+ },
195
+ hide: () => {
196
+ clearTimeout(timeoutClose.value);
197
+ timeoutClose.value = setTimeout(async () => {
198
+ tooltipState.value.isOpen = false;
199
+ tooltipState.value.label = "";
200
+ }, value.hideDelay || 0);
201
+ }
202
+ };
203
+ el.addEventListener("mouseover", el.$pixelTooltip.show);
204
+ el.addEventListener("focus", el.$pixelTooltip.show);
205
+ el.addEventListener("mouseleave", el.$pixelTooltip.hide);
206
+ el.addEventListener("blur", el.$pixelTooltip.hide);
207
+ },
208
+ beforeUnmount(el) {
209
+ el.removeEventListener("mouseover", el.$pixelTooltip.show);
210
+ el.removeEventListener("focus", el.$pixelTooltip.show);
211
+ el.removeEventListener("mouseleave", el.$pixelTooltip.hide);
212
+ el.removeEventListener("blur", el.$pixelTooltip.hide);
213
+ delete el["$pixelTooltip"];
214
+ }
215
+ };
216
+ // Annotate the CommonJS export names for ESM import in node:
217
+ 0 && (module.exports = {
218
+ PixelTooltipDirective
219
+ });
@@ -0,0 +1,10 @@
1
+ import {
2
+ PixelTooltipDirective
3
+ } from "./chunk-73AMP22F.mjs";
4
+ import "./chunk-JHWDKDBR.mjs";
5
+ import "./chunk-OBETIXOG.mjs";
6
+ import "./chunk-22GSYROL.mjs";
7
+ import "./chunk-QZ7VFGWC.mjs";
8
+ export {
9
+ PixelTooltipDirective
10
+ };
package/package.json ADDED
@@ -0,0 +1,42 @@
1
+ {
2
+ "name": "@mekari/pixel3-tooltip",
3
+ "version": "0.0.0",
4
+ "main": "dist/index.js",
5
+ "license": "MIT",
6
+ "files": [
7
+ "dist"
8
+ ],
9
+ "dependencies": {
10
+ "@floating-ui/vue": "^1.0.2",
11
+ "@mekari/pixel3-styled-system": "0.0.0",
12
+ "@mekari/pixel3-utils": "0.0.0"
13
+ },
14
+ "peerDependencies": {
15
+ "vue": "^3.3.7"
16
+ },
17
+ "devDependencies": {
18
+ "vue": "^3.3.7"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "module": "dist/index.mjs",
24
+ "types": "dist/index.d.ts",
25
+ "exports": {
26
+ ".": {
27
+ "types": "./dist/index.d.ts",
28
+ "require": "./dist/index.js",
29
+ "default": "./dist/index.mjs"
30
+ }
31
+ },
32
+ "scripts": {
33
+ "clean": "rimraf dist .turbo",
34
+ "build": "tsup && pnpm build:types",
35
+ "build:fast": "tsup",
36
+ "build:types": "tsup src --dts-only",
37
+ "build:external": "tsup src/index.tsx --external @acme-org/styled-system",
38
+ "types:check": "tsc --noEmit",
39
+ "replace-config": "clean-package",
40
+ "restore-config": "clean-package restore"
41
+ }
42
+ }