@mekari/pixel3-popover 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.
Files changed (53) hide show
  1. package/dist/chunk-2ZUCITXI.mjs +8 -0
  2. package/dist/chunk-3VISLXE6.mjs +94 -0
  3. package/dist/chunk-6AOSFLZR.mjs +55 -0
  4. package/dist/chunk-7E4KFP32.mjs +10045 -0
  5. package/dist/chunk-E2N74NQW.mjs +29 -0
  6. package/dist/chunk-EOUKE4WB.mjs +308 -0
  7. package/dist/chunk-KRK533DP.mjs +25 -0
  8. package/dist/chunk-OBEDLACV.mjs +44 -0
  9. package/dist/chunk-QZ7VFGWC.mjs +6 -0
  10. package/dist/chunk-SMKHJPNG.mjs +55 -0
  11. package/dist/content.d.mts +8 -0
  12. package/dist/content.d.ts +8 -0
  13. package/dist/content.js +233 -0
  14. package/dist/content.mjs +10 -0
  15. package/dist/index.d.mts +11 -0
  16. package/dist/index.d.ts +11 -0
  17. package/dist/index.js +10607 -0
  18. package/dist/index.mjs +30 -0
  19. package/dist/list-item.d.mts +8 -0
  20. package/dist/list-item.d.ts +8 -0
  21. package/dist/list-item.js +10593 -0
  22. package/dist/list-item.mjs +15 -0
  23. package/dist/list.d.mts +5 -0
  24. package/dist/list.d.ts +5 -0
  25. package/dist/list.js +71 -0
  26. package/dist/list.mjs +9 -0
  27. package/dist/metafile-cjs.json +1 -0
  28. package/dist/metafile-esm.json +1 -0
  29. package/dist/modules/popover.context.d.mts +13 -0
  30. package/dist/modules/popover.context.d.ts +13 -0
  31. package/dist/modules/popover.context.js +33 -0
  32. package/dist/modules/popover.context.mjs +9 -0
  33. package/dist/modules/popover.hooks.d.mts +111 -0
  34. package/dist/modules/popover.hooks.d.ts +111 -0
  35. package/dist/modules/popover.hooks.js +337 -0
  36. package/dist/modules/popover.hooks.mjs +18 -0
  37. package/dist/modules/popover.props.d.mts +153 -0
  38. package/dist/modules/popover.props.d.ts +153 -0
  39. package/dist/modules/popover.props.js +121 -0
  40. package/dist/modules/popover.props.mjs +13 -0
  41. package/dist/popover.d.mts +126 -0
  42. package/dist/popover.d.ts +126 -0
  43. package/dist/popover.js +213 -0
  44. package/dist/popover.mjs +10 -0
  45. package/dist/singleton-popover.d.mts +135 -0
  46. package/dist/singleton-popover.d.ts +135 -0
  47. package/dist/singleton-popover.js +197 -0
  48. package/dist/singleton-popover.mjs +10 -0
  49. package/dist/trigger.d.mts +5 -0
  50. package/dist/trigger.d.ts +5 -0
  51. package/dist/trigger.js +115 -0
  52. package/dist/trigger.mjs +9 -0
  53. package/package.json +42 -0
@@ -0,0 +1,29 @@
1
+ import {
2
+ usePopoverTrigger
3
+ } from "./chunk-EOUKE4WB.mjs";
4
+
5
+ // src/trigger.tsx
6
+ import { createVNode as _createVNode, Fragment as _Fragment } from "vue";
7
+ import { defineComponent, cloneVNode } from "vue";
8
+ var MpPopoverTrigger = defineComponent({
9
+ name: "MpPopoverTrigger",
10
+ inheritAttrs: false,
11
+ setup(_, {
12
+ slots
13
+ }) {
14
+ const {
15
+ rootAttrs
16
+ } = usePopoverTrigger();
17
+ return () => {
18
+ if (slots.default && slots.default().length > 1) {
19
+ console.error("[MpPopoverTrigger] Only 1 node allowed");
20
+ }
21
+ const clone = cloneVNode(slots.default()[0], rootAttrs.value);
22
+ return _createVNode(_Fragment, null, [clone]);
23
+ };
24
+ }
25
+ });
26
+
27
+ export {
28
+ MpPopoverTrigger
29
+ };
@@ -0,0 +1,308 @@
1
+ import {
2
+ usePopoverContext
3
+ } from "./chunk-2ZUCITXI.mjs";
4
+ import {
5
+ __name
6
+ } from "./chunk-QZ7VFGWC.mjs";
7
+
8
+ // src/modules/popover.hooks.ts
9
+ import { ref, computed, watch, toRefs } from "vue";
10
+ import { useFloating, autoUpdate, offset, flip, shift } from "@floating-ui/vue";
11
+ import { useId, onClickOutside, onKeyStroke, unrefElement } from "@mekari/pixel3-utils";
12
+ import { popoverContentRecipe, popoverListRecipe, popoverListItemRecipe } from "@mekari/pixel3-styled-system/recipes";
13
+ import { flex } from "@mekari/pixel3-styled-system/patterns";
14
+ function usePopover(props, emit) {
15
+ const isOpen = ref(props.defaultIsOpen);
16
+ const triggerNode = ref(null);
17
+ const contentNode = ref(null);
18
+ const placement = ref(props.placement);
19
+ const middleware = ref([offset(4), flip(), shift()]);
20
+ const isHovering = ref(false);
21
+ const {
22
+ floatingStyles
23
+ } = useFloating(triggerNode, contentNode, {
24
+ placement,
25
+ middleware,
26
+ whileElementsMounted: autoUpdate
27
+ });
28
+ function onOpenPopover() {
29
+ emit("open", {
30
+ isOpen,
31
+ triggerNode,
32
+ contentNode,
33
+ placement
34
+ });
35
+ if (props.isManual)
36
+ return;
37
+ isOpen.value = true;
38
+ }
39
+ __name(onOpenPopover, "onOpenPopover");
40
+ function onClosePopover() {
41
+ emit("close", {
42
+ isOpen,
43
+ triggerNode,
44
+ contentNode,
45
+ placement
46
+ });
47
+ if (props.isManual)
48
+ return;
49
+ isOpen.value = false;
50
+ }
51
+ __name(onClosePopover, "onClosePopover");
52
+ function setHovering(value) {
53
+ isHovering.value = value;
54
+ }
55
+ __name(setHovering, "setHovering");
56
+ watch(() => props.isOpen, (newValue) => {
57
+ if (props.isManual) {
58
+ if (newValue) {
59
+ isOpen.value = newValue;
60
+ emit("open");
61
+ return;
62
+ }
63
+ isOpen.value = newValue;
64
+ emit("close");
65
+ }
66
+ });
67
+ return {
68
+ isOpen,
69
+ isHovering,
70
+ onOpenPopover,
71
+ onClosePopover,
72
+ setHovering,
73
+ triggerNode,
74
+ contentNode,
75
+ floatingStyles
76
+ };
77
+ }
78
+ __name(usePopover, "usePopover");
79
+ function useSingletonPopover(props, emit) {
80
+ const {
81
+ triggerNode
82
+ } = toRefs(props);
83
+ const isOpen = ref(props.defaultIsOpen);
84
+ const contentNode = ref(null);
85
+ const placement = ref(props.placement);
86
+ const middleware = ref([offset(4), flip(), shift()]);
87
+ const isHovering = ref(false);
88
+ const {
89
+ floatingStyles
90
+ } = useFloating(triggerNode, contentNode, {
91
+ placement,
92
+ middleware,
93
+ whileElementsMounted: autoUpdate
94
+ });
95
+ function onOpenPopover() {
96
+ emit("open");
97
+ }
98
+ __name(onOpenPopover, "onOpenPopover");
99
+ function onClosePopover() {
100
+ emit("close");
101
+ }
102
+ __name(onClosePopover, "onClosePopover");
103
+ function setHovering(value) {
104
+ isHovering.value = value;
105
+ }
106
+ __name(setHovering, "setHovering");
107
+ watch(() => props.isOpen, (newValue) => {
108
+ if (newValue) {
109
+ isOpen.value = newValue;
110
+ emit("open");
111
+ return;
112
+ }
113
+ isOpen.value = newValue;
114
+ emit("close");
115
+ });
116
+ return {
117
+ triggerNode,
118
+ contentNode,
119
+ floatingStyles,
120
+ isOpen,
121
+ onOpenPopover,
122
+ onClosePopover,
123
+ isHovering,
124
+ setHovering
125
+ };
126
+ }
127
+ __name(useSingletonPopover, "useSingletonPopover");
128
+ function usePopoverTrigger() {
129
+ const {
130
+ isOpen,
131
+ isHovering,
132
+ setHovering,
133
+ onOpenPopover,
134
+ onClosePopover,
135
+ triggerNode,
136
+ rootProps: popoverProps
137
+ } = usePopoverContext();
138
+ const {
139
+ id,
140
+ trigger
141
+ } = popoverProps;
142
+ const getId = computed(() => (id == null ? void 0 : id.value) ? `popover-trigger-${id.value}` : `popover-trigger-${useId(4)}`);
143
+ const rootAttrs = computed(() => {
144
+ return {
145
+ ref: triggerNode,
146
+ "data-pixel-component": "MpPopoverTrigger",
147
+ id: getId.value,
148
+ onClick: () => {
149
+ if (trigger.value === "click") {
150
+ isOpen.value ? onClosePopover() : onOpenPopover();
151
+ }
152
+ },
153
+ onMouseenter: () => {
154
+ if (trigger.value === "hover") {
155
+ setHovering(true);
156
+ setTimeout(() => {
157
+ onOpenPopover();
158
+ }, 300);
159
+ }
160
+ },
161
+ onMouseleave: () => {
162
+ if (trigger.value === "hover") {
163
+ setHovering(false);
164
+ setTimeout(() => {
165
+ if (isHovering.value === false) {
166
+ onClosePopover();
167
+ }
168
+ }, 300);
169
+ }
170
+ }
171
+ };
172
+ });
173
+ return {
174
+ rootAttrs
175
+ };
176
+ }
177
+ __name(usePopoverTrigger, "usePopoverTrigger");
178
+ function usePopoverContent(props, emit) {
179
+ const {
180
+ isOpen,
181
+ isHovering,
182
+ setHovering,
183
+ triggerNode,
184
+ contentNode,
185
+ floatingStyles,
186
+ onOpenPopover,
187
+ onClosePopover,
188
+ rootProps: popoverProps
189
+ } = usePopoverContext();
190
+ const {
191
+ id,
192
+ closeOnBlur,
193
+ closeOnEscape,
194
+ trigger,
195
+ isAdaptiveWidth,
196
+ usePortal
197
+ } = popoverProps;
198
+ const restContentNode = computed(() => isOpen.value ? contentNode.value : null);
199
+ const getId = computed(() => (id == null ? void 0 : id.value) ? `popover-content-${id.value}` : `popover-content-${useId(4)}`);
200
+ onClickOutside(restContentNode, (e) => {
201
+ emit("blur", e);
202
+ if (closeOnBlur.value) {
203
+ onClosePopover();
204
+ }
205
+ });
206
+ onKeyStroke("Escape", (e) => {
207
+ if (isOpen.value) {
208
+ emit("escape");
209
+ if (closeOnEscape.value) {
210
+ onClosePopover();
211
+ e.preventDefault();
212
+ }
213
+ }
214
+ });
215
+ const rootAttrs = computed(() => {
216
+ const triggerEl = unrefElement(triggerNode);
217
+ const adaptiveWidthStyle = isAdaptiveWidth.value ? {
218
+ width: "max-content",
219
+ minWidth: (usePortal == null ? void 0 : usePortal.value) ? `${triggerEl == null ? void 0 : triggerEl.clientWidth}px` : "100%",
220
+ maxWidth: "90vw"
221
+ } : {};
222
+ return {
223
+ ref: contentNode,
224
+ "data-pixel-component": "MpPopoverContent",
225
+ id: getId.value,
226
+ class: popoverContentRecipe({
227
+ isDark: props.isDark,
228
+ isUnstyled: props.isUnstyled
229
+ }),
230
+ style: {
231
+ display: isOpen.value ? "unset" : "none",
232
+ ...floatingStyles.value,
233
+ ...adaptiveWidthStyle
234
+ },
235
+ onMouseenter: () => {
236
+ if (trigger.value === "hover") {
237
+ setHovering(true);
238
+ setTimeout(() => {
239
+ onOpenPopover();
240
+ }, 300);
241
+ }
242
+ },
243
+ onMouseleave: () => {
244
+ if (trigger.value === "hover") {
245
+ setHovering(false);
246
+ setTimeout(() => {
247
+ if (isHovering.value === false) {
248
+ onClosePopover();
249
+ }
250
+ }, 300);
251
+ }
252
+ }
253
+ };
254
+ });
255
+ return {
256
+ rootAttrs,
257
+ popoverProps,
258
+ isOpen,
259
+ floatingStyles
260
+ };
261
+ }
262
+ __name(usePopoverContent, "usePopoverContent");
263
+ function usePopoverList() {
264
+ const rootAttrs = {
265
+ "data-pixel-component": "MpPopoverList",
266
+ class: popoverListRecipe()
267
+ };
268
+ return {
269
+ rootAttrs
270
+ };
271
+ }
272
+ __name(usePopoverList, "usePopoverList");
273
+ function usePopoverListItem(props) {
274
+ const isHighligted = ref(false);
275
+ const rootAttrs = computed(() => {
276
+ return {
277
+ "data-pixel-component": "MpPopoverListItem",
278
+ role: props.role,
279
+ class: popoverListItemRecipe(),
280
+ disabled: props.isDisabled,
281
+ "data-highlight": isHighligted.value || void 0,
282
+ "data-active": props.isActive || void 0,
283
+ onmouseenter: () => isHighligted.value = true,
284
+ onmouseleave: () => isHighligted.value = false
285
+ };
286
+ });
287
+ const contentAttrs = {
288
+ class: flex({
289
+ justifyContent: "space-between",
290
+ alignItems: "center",
291
+ width: "full"
292
+ })
293
+ };
294
+ return {
295
+ rootAttrs,
296
+ contentAttrs
297
+ };
298
+ }
299
+ __name(usePopoverListItem, "usePopoverListItem");
300
+
301
+ export {
302
+ usePopover,
303
+ useSingletonPopover,
304
+ usePopoverTrigger,
305
+ usePopoverContent,
306
+ usePopoverList,
307
+ usePopoverListItem
308
+ };
@@ -0,0 +1,25 @@
1
+ import {
2
+ usePopoverList
3
+ } from "./chunk-EOUKE4WB.mjs";
4
+
5
+ // src/list.tsx
6
+ import { createVNode as _createVNode } from "vue";
7
+ import { defineComponent } from "vue";
8
+ var MpPopoverList = defineComponent({
9
+ name: "MpPopoverList",
10
+ inheritAttrs: false,
11
+ setup(_, {
12
+ slots
13
+ }) {
14
+ const {
15
+ rootAttrs
16
+ } = usePopoverList();
17
+ return () => {
18
+ return _createVNode("div", rootAttrs, [slots.default()]);
19
+ };
20
+ }
21
+ });
22
+
23
+ export {
24
+ MpPopoverList
25
+ };
@@ -0,0 +1,44 @@
1
+ import {
2
+ popoverContentProps
3
+ } from "./chunk-3VISLXE6.mjs";
4
+ import {
5
+ usePopoverContent
6
+ } from "./chunk-EOUKE4WB.mjs";
7
+
8
+ // src/content.tsx
9
+ import { createTextVNode as _createTextVNode, createVNode as _createVNode, mergeProps as _mergeProps, Fragment as _Fragment } from "vue";
10
+ import { defineComponent, Teleport } from "vue";
11
+ var MpPopoverContent = defineComponent({
12
+ name: "MpPopoverContent",
13
+ inheritAttrs: false,
14
+ props: popoverContentProps,
15
+ emits: ["blur", "escape"],
16
+ setup(props, {
17
+ slots,
18
+ attrs,
19
+ emit
20
+ }) {
21
+ const {
22
+ rootAttrs,
23
+ popoverProps,
24
+ isOpen
25
+ } = usePopoverContent(props, emit);
26
+ const {
27
+ isKeepAlive,
28
+ usePortal
29
+ } = popoverProps;
30
+ return () => {
31
+ const node = _createVNode(_Fragment, null, [_createVNode("div", _mergeProps(rootAttrs.value, attrs), [slots.default()])]);
32
+ const renderNode = usePortal.value ? _createVNode(Teleport, {
33
+ "to": "body"
34
+ }, {
35
+ default: () => [_createTextVNode(" "), node, _createTextVNode(" ")]
36
+ }) : node;
37
+ return isKeepAlive.value ? renderNode : isOpen.value ? renderNode : null;
38
+ };
39
+ }
40
+ });
41
+
42
+ export {
43
+ MpPopoverContent
44
+ };
@@ -0,0 +1,6 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
3
+
4
+ export {
5
+ __name
6
+ };
@@ -0,0 +1,55 @@
1
+ import {
2
+ popoverProps
3
+ } from "./chunk-3VISLXE6.mjs";
4
+ import {
5
+ usePopover
6
+ } from "./chunk-EOUKE4WB.mjs";
7
+ import {
8
+ PopoverProvider
9
+ } from "./chunk-2ZUCITXI.mjs";
10
+
11
+ // src/popover.tsx
12
+ import { createVNode as _createVNode, Fragment as _Fragment } from "vue";
13
+ import { defineComponent, toRefs } from "vue";
14
+ var MpPopover = defineComponent({
15
+ name: "MpPopover",
16
+ inheritAttrs: false,
17
+ props: popoverProps,
18
+ emits: ["open", "close"],
19
+ setup(props, {
20
+ slots,
21
+ emit
22
+ }) {
23
+ const {
24
+ triggerNode,
25
+ contentNode,
26
+ floatingStyles,
27
+ isOpen,
28
+ isHovering,
29
+ onOpenPopover,
30
+ onClosePopover,
31
+ setHovering
32
+ } = usePopover(props, emit);
33
+ PopoverProvider({
34
+ isOpen,
35
+ isHovering,
36
+ onOpenPopover,
37
+ onClosePopover,
38
+ setHovering,
39
+ triggerNode,
40
+ contentNode,
41
+ floatingStyles,
42
+ rootProps: toRefs(props)
43
+ });
44
+ return () => {
45
+ return _createVNode(_Fragment, null, [slots.default({
46
+ isOpen,
47
+ onClosePopover
48
+ })]);
49
+ };
50
+ }
51
+ });
52
+
53
+ export {
54
+ MpPopover
55
+ };
@@ -0,0 +1,8 @@
1
+ import { MpPopoverContentType } from './modules/popover.props.mjs';
2
+ import 'vue';
3
+ import '@floating-ui/vue';
4
+ import '@mekari/pixel3-utils';
5
+
6
+ declare const MpPopoverContent: MpPopoverContentType;
7
+
8
+ export { MpPopoverContent };
@@ -0,0 +1,8 @@
1
+ import { MpPopoverContentType } from './modules/popover.props.js';
2
+ import 'vue';
3
+ import '@floating-ui/vue';
4
+ import '@mekari/pixel3-utils';
5
+
6
+ declare const MpPopoverContent: MpPopoverContentType;
7
+
8
+ export { MpPopoverContent };