layplux 0.0.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 (201) hide show
  1. package/dist/cjs/components/center-view/index.cjs +41 -0
  2. package/dist/cjs/components/corner-glow/index.cjs +31 -0
  3. package/dist/cjs/components/dropdown/index.cjs +162 -0
  4. package/dist/cjs/components/icon/index.cjs +59 -0
  5. package/dist/cjs/components/index.cjs +25 -0
  6. package/dist/cjs/components/panel-view/index.cjs +166 -0
  7. package/dist/cjs/components/popup/index.cjs +280 -0
  8. package/dist/cjs/components/title/index.cjs +76 -0
  9. package/dist/cjs/components/tooltip/index.cjs +68 -0
  10. package/dist/cjs/components/widget/index.cjs +104 -0
  11. package/dist/cjs/index.cjs +40 -0
  12. package/dist/cjs/layout/glass-overlay.cjs +31 -0
  13. package/dist/cjs/layout/layered-manager.cjs +35 -0
  14. package/dist/cjs/layout/layplux.cjs +41 -0
  15. package/dist/cjs/layout/root-pane.cjs +46 -0
  16. package/dist/cjs/layout/skeleton/bottom-area.cjs +64 -0
  17. package/dist/cjs/layout/skeleton/bottom-left-area.cjs +42 -0
  18. package/dist/cjs/layout/skeleton/bottom-right-area.cjs +38 -0
  19. package/dist/cjs/layout/skeleton/center-area.cjs +467 -0
  20. package/dist/cjs/layout/skeleton/index.cjs +24 -0
  21. package/dist/cjs/layout/skeleton/left-bottom-area.cjs +42 -0
  22. package/dist/cjs/layout/skeleton/left-top-area.cjs +42 -0
  23. package/dist/cjs/layout/skeleton/right-bottom-area.cjs +38 -0
  24. package/dist/cjs/layout/skeleton/right-top-area.cjs +38 -0
  25. package/dist/cjs/layout/skeleton/skeleton.cjs +66 -0
  26. package/dist/cjs/layout/skeleton/top-area.cjs +64 -0
  27. package/dist/cjs/locales/en-US.cjs +34 -0
  28. package/dist/cjs/locales/index.cjs +39 -0
  29. package/dist/cjs/locales/zh-CN.cjs +34 -0
  30. package/dist/cjs/managers/area.cjs +32 -0
  31. package/dist/cjs/managers/index.cjs +20 -0
  32. package/dist/cjs/managers/pane.cjs +34 -0
  33. package/dist/cjs/managers/skeleton.cjs +208 -0
  34. package/dist/cjs/managers/theme.cjs +37 -0
  35. package/dist/cjs/managers/widget-container.cjs +96 -0
  36. package/dist/cjs/managers/widget.cjs +103 -0
  37. package/dist/cjs/types/config.cjs +16 -0
  38. package/dist/cjs/types/index.cjs +18 -0
  39. package/dist/cjs/types/locale.cjs +16 -0
  40. package/dist/cjs/utils/event-bus.cjs +154 -0
  41. package/dist/cjs/utils/focus-tracker.cjs +154 -0
  42. package/dist/cjs/utils/index.cjs +31 -0
  43. package/dist/cjs/utils/unique-id.cjs +27 -0
  44. package/dist/cjs/utils/vue.cjs +37 -0
  45. package/dist/esm/components/center-view/index.mjs +21 -0
  46. package/dist/esm/components/corner-glow/index.mjs +11 -0
  47. package/dist/esm/components/dropdown/index.mjs +146 -0
  48. package/dist/esm/components/icon/index.mjs +39 -0
  49. package/dist/esm/components/index.mjs +8 -0
  50. package/dist/esm/components/panel-view/index.mjs +152 -0
  51. package/dist/esm/components/popup/index.mjs +268 -0
  52. package/dist/esm/components/title/index.mjs +56 -0
  53. package/dist/esm/components/tooltip/index.mjs +48 -0
  54. package/dist/esm/components/widget/index.mjs +84 -0
  55. package/dist/esm/index.mjs +10 -0
  56. package/dist/esm/layout/glass-overlay.mjs +11 -0
  57. package/dist/esm/layout/layered-manager.mjs +15 -0
  58. package/dist/esm/layout/layplux.mjs +21 -0
  59. package/dist/esm/layout/root-pane.mjs +26 -0
  60. package/dist/esm/layout/skeleton/bottom-area.mjs +44 -0
  61. package/dist/esm/layout/skeleton/bottom-left-area.mjs +22 -0
  62. package/dist/esm/layout/skeleton/bottom-right-area.mjs +18 -0
  63. package/dist/esm/layout/skeleton/center-area.mjs +454 -0
  64. package/dist/esm/layout/skeleton/index.mjs +4 -0
  65. package/dist/esm/layout/skeleton/left-bottom-area.mjs +22 -0
  66. package/dist/esm/layout/skeleton/left-top-area.mjs +22 -0
  67. package/dist/esm/layout/skeleton/right-bottom-area.mjs +18 -0
  68. package/dist/esm/layout/skeleton/right-top-area.mjs +18 -0
  69. package/dist/esm/layout/skeleton/skeleton.mjs +46 -0
  70. package/dist/esm/layout/skeleton/top-area.mjs +44 -0
  71. package/dist/esm/locales/en-US.mjs +14 -0
  72. package/dist/esm/locales/index.mjs +19 -0
  73. package/dist/esm/locales/zh-CN.mjs +14 -0
  74. package/dist/esm/managers/area.mjs +12 -0
  75. package/dist/esm/managers/index.mjs +3 -0
  76. package/dist/esm/managers/pane.mjs +14 -0
  77. package/dist/esm/managers/skeleton.mjs +192 -0
  78. package/dist/esm/managers/theme.mjs +17 -0
  79. package/dist/esm/managers/widget-container.mjs +76 -0
  80. package/dist/esm/managers/widget.mjs +83 -0
  81. package/dist/esm/types/config.mjs +0 -0
  82. package/dist/esm/types/index.mjs +1 -0
  83. package/dist/esm/types/locale.mjs +0 -0
  84. package/dist/esm/utils/event-bus.mjs +124 -0
  85. package/dist/esm/utils/focus-tracker.mjs +135 -0
  86. package/dist/esm/utils/index.mjs +10 -0
  87. package/dist/esm/utils/unique-id.mjs +7 -0
  88. package/dist/esm/utils/vue.mjs +17 -0
  89. package/dist/style/base/_tokens-dark.scss +51 -0
  90. package/dist/style/base/_tokens.scss +56 -0
  91. package/dist/style/components/_bottom-area.scss +30 -0
  92. package/dist/style/components/_bottom-left-area.scss +8 -0
  93. package/dist/style/components/_bottom-right-area.scss +8 -0
  94. package/dist/style/components/_center-area.scss +162 -0
  95. package/dist/style/components/_corner-glow.scss +17 -0
  96. package/dist/style/components/_dropdown.scss +91 -0
  97. package/dist/style/components/_glass-pane.scss +6 -0
  98. package/dist/style/components/_layered-manager.scss +6 -0
  99. package/dist/style/components/_left-bottom-area.scss +8 -0
  100. package/dist/style/components/_left-top-area.scss +9 -0
  101. package/dist/style/components/_pane-view.scss +79 -0
  102. package/dist/style/components/_popup.scss +19 -0
  103. package/dist/style/components/_right-bottom-area.scss +8 -0
  104. package/dist/style/components/_right-top-area.scss +8 -0
  105. package/dist/style/components/_root-pane.scss +17 -0
  106. package/dist/style/components/_skeleton.scss +38 -0
  107. package/dist/style/components/_title-view.scss +176 -0
  108. package/dist/style/components/_tooltip.scss +65 -0
  109. package/dist/style/components/_top-area.scss +25 -0
  110. package/dist/style/index.css +768 -0
  111. package/dist/style/layplux.scss +21 -0
  112. package/dist/types/components/center-view/index.d.ts +16 -0
  113. package/dist/types/components/center-view/index.d.ts.map +1 -0
  114. package/dist/types/components/corner-glow/index.d.ts +2 -0
  115. package/dist/types/components/corner-glow/index.d.ts.map +1 -0
  116. package/dist/types/components/dropdown/index.d.ts +116 -0
  117. package/dist/types/components/dropdown/index.d.ts.map +1 -0
  118. package/dist/types/components/icon/index.d.ts +22 -0
  119. package/dist/types/components/icon/index.d.ts.map +1 -0
  120. package/dist/types/components/index.d.ts +9 -0
  121. package/dist/types/components/index.d.ts.map +1 -0
  122. package/dist/types/components/panel-view/index.d.ts +22 -0
  123. package/dist/types/components/panel-view/index.d.ts.map +1 -0
  124. package/dist/types/components/popup/index.d.ts +99 -0
  125. package/dist/types/components/popup/index.d.ts.map +1 -0
  126. package/dist/types/components/title/index.d.ts +57 -0
  127. package/dist/types/components/title/index.d.ts.map +1 -0
  128. package/dist/types/components/tooltip/index.d.ts +69 -0
  129. package/dist/types/components/tooltip/index.d.ts.map +1 -0
  130. package/dist/types/components/widget/index.d.ts +15 -0
  131. package/dist/types/components/widget/index.d.ts.map +1 -0
  132. package/dist/types/index.d.ts +10 -0
  133. package/dist/types/index.d.ts.map +1 -0
  134. package/dist/types/layout/glass-overlay.d.ts +2 -0
  135. package/dist/types/layout/glass-overlay.d.ts.map +1 -0
  136. package/dist/types/layout/layered-manager.d.ts +8 -0
  137. package/dist/types/layout/layered-manager.d.ts.map +1 -0
  138. package/dist/types/layout/layplux.d.ts +25 -0
  139. package/dist/types/layout/layplux.d.ts.map +1 -0
  140. package/dist/types/layout/root-pane.d.ts +8 -0
  141. package/dist/types/layout/root-pane.d.ts.map +1 -0
  142. package/dist/types/layout/skeleton/bottom-area.d.ts +9 -0
  143. package/dist/types/layout/skeleton/bottom-area.d.ts.map +1 -0
  144. package/dist/types/layout/skeleton/bottom-left-area.d.ts +9 -0
  145. package/dist/types/layout/skeleton/bottom-left-area.d.ts.map +1 -0
  146. package/dist/types/layout/skeleton/bottom-right-area.d.ts +9 -0
  147. package/dist/types/layout/skeleton/bottom-right-area.d.ts.map +1 -0
  148. package/dist/types/layout/skeleton/center-area.d.ts +11 -0
  149. package/dist/types/layout/skeleton/center-area.d.ts.map +1 -0
  150. package/dist/types/layout/skeleton/index.d.ts +2 -0
  151. package/dist/types/layout/skeleton/index.d.ts.map +1 -0
  152. package/dist/types/layout/skeleton/left-bottom-area.d.ts +9 -0
  153. package/dist/types/layout/skeleton/left-bottom-area.d.ts.map +1 -0
  154. package/dist/types/layout/skeleton/left-top-area.d.ts +9 -0
  155. package/dist/types/layout/skeleton/left-top-area.d.ts.map +1 -0
  156. package/dist/types/layout/skeleton/right-bottom-area.d.ts +9 -0
  157. package/dist/types/layout/skeleton/right-bottom-area.d.ts.map +1 -0
  158. package/dist/types/layout/skeleton/right-top-area.d.ts +9 -0
  159. package/dist/types/layout/skeleton/right-top-area.d.ts.map +1 -0
  160. package/dist/types/layout/skeleton/skeleton.d.ts +8 -0
  161. package/dist/types/layout/skeleton/skeleton.d.ts.map +1 -0
  162. package/dist/types/layout/skeleton/top-area.d.ts +9 -0
  163. package/dist/types/layout/skeleton/top-area.d.ts.map +1 -0
  164. package/dist/types/locales/en-US.d.ts +3 -0
  165. package/dist/types/locales/en-US.d.ts.map +1 -0
  166. package/dist/types/locales/index.d.ts +7 -0
  167. package/dist/types/locales/index.d.ts.map +1 -0
  168. package/dist/types/locales/zh-CN.d.ts +3 -0
  169. package/dist/types/locales/zh-CN.d.ts.map +1 -0
  170. package/dist/types/managers/area.d.ts +10 -0
  171. package/dist/types/managers/area.d.ts.map +1 -0
  172. package/dist/types/managers/index.d.ts +5 -0
  173. package/dist/types/managers/index.d.ts.map +1 -0
  174. package/dist/types/managers/pane.d.ts +8 -0
  175. package/dist/types/managers/pane.d.ts.map +1 -0
  176. package/dist/types/managers/skeleton.d.ts +38 -0
  177. package/dist/types/managers/skeleton.d.ts.map +1 -0
  178. package/dist/types/managers/theme.d.ts +2 -0
  179. package/dist/types/managers/theme.d.ts.map +1 -0
  180. package/dist/types/managers/widget-container.d.ts +21 -0
  181. package/dist/types/managers/widget-container.d.ts.map +1 -0
  182. package/dist/types/managers/widget.d.ts +26 -0
  183. package/dist/types/managers/widget.d.ts.map +1 -0
  184. package/dist/types/types/config.d.ts +54 -0
  185. package/dist/types/types/config.d.ts.map +1 -0
  186. package/dist/types/types/index.d.ts +2 -0
  187. package/dist/types/types/index.d.ts.map +1 -0
  188. package/dist/types/types/locale.d.ts +12 -0
  189. package/dist/types/types/locale.d.ts.map +1 -0
  190. package/dist/types/utils/event-bus.d.ts +18 -0
  191. package/dist/types/utils/event-bus.d.ts.map +1 -0
  192. package/dist/types/utils/focus-tracker.d.ts +37 -0
  193. package/dist/types/utils/focus-tracker.d.ts.map +1 -0
  194. package/dist/types/utils/index.d.ts +6 -0
  195. package/dist/types/utils/index.d.ts.map +1 -0
  196. package/dist/types/utils/unique-id.d.ts +2 -0
  197. package/dist/types/utils/unique-id.d.ts.map +1 -0
  198. package/dist/types/utils/vue.d.ts +5 -0
  199. package/dist/types/utils/vue.d.ts.map +1 -0
  200. package/dist/umd/index.js +4000 -0
  201. package/package.json +46 -0
@@ -0,0 +1,280 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var popup_exports = {};
20
+ __export(popup_exports, {
21
+ Popup: () => Popup
22
+ });
23
+ module.exports = __toCommonJS(popup_exports);
24
+ var import_jsx_runtime = require("vue/jsx-runtime");
25
+ var import_vue = require("vue");
26
+ function computePosition(triggerRect, popupW, popupH, placement, offsetX, offsetY) {
27
+ const vw = window.innerWidth;
28
+ const vh = window.innerHeight;
29
+ const PADDING = 8;
30
+ let top = 0;
31
+ let left = 0;
32
+ const [main, align] = placement.split("-");
33
+ if (main === "bottom") {
34
+ top = triggerRect.bottom + offsetY;
35
+ if (align === "start") left = triggerRect.left + offsetX;
36
+ else if (align === "end") left = triggerRect.right - popupW + offsetX;
37
+ else left = triggerRect.left + triggerRect.width / 2 - popupW / 2 + offsetX;
38
+ if (top + popupH > vh - PADDING) {
39
+ top = triggerRect.top - popupH - offsetY;
40
+ placement = align ? `top-${align}` : "top";
41
+ }
42
+ } else if (main === "top") {
43
+ top = triggerRect.top - popupH - offsetY;
44
+ if (align === "start") left = triggerRect.left + offsetX;
45
+ else if (align === "end") left = triggerRect.right - popupW + offsetX;
46
+ else left = triggerRect.left + triggerRect.width / 2 - popupW / 2 + offsetX;
47
+ if (top < PADDING) {
48
+ top = triggerRect.bottom + offsetY;
49
+ placement = align ? `bottom-${align}` : "bottom";
50
+ }
51
+ } else if (main === "right") {
52
+ left = triggerRect.right + offsetX;
53
+ if (align === "start") top = triggerRect.top + offsetY;
54
+ else if (align === "end") top = triggerRect.bottom - popupH + offsetY;
55
+ else top = triggerRect.top + triggerRect.height / 2 - popupH / 2 + offsetY;
56
+ if (left + popupW > vw - PADDING) {
57
+ left = triggerRect.left - popupW - offsetX;
58
+ placement = align ? `left-${align}` : "left";
59
+ }
60
+ } else if (main === "left") {
61
+ left = triggerRect.left - popupW - offsetX;
62
+ if (align === "start") top = triggerRect.top + offsetY;
63
+ else if (align === "end") top = triggerRect.bottom - popupH + offsetY;
64
+ else top = triggerRect.top + triggerRect.height / 2 - popupH / 2 + offsetY;
65
+ if (left < PADDING) {
66
+ left = triggerRect.right + offsetX;
67
+ placement = align ? `right-${align}` : "right";
68
+ }
69
+ }
70
+ top = Math.max(PADDING, Math.min(top, vh - popupH - PADDING));
71
+ left = Math.max(PADDING, Math.min(left, vw - popupW - PADDING));
72
+ return { position: { top, left }, placement };
73
+ }
74
+ const Popup = (0, import_vue.defineComponent)({
75
+ name: "LaypluxPopup",
76
+ props: {
77
+ visible: Boolean,
78
+ trigger: { type: String, default: "hover" },
79
+ placement: { type: String, default: "bottom" },
80
+ offset: { type: Object, default: () => ({ y: 4 }) },
81
+ mouseEnterDelay: { type: Number, default: 100 },
82
+ mouseLeaveDelay: { type: Number, default: 100 },
83
+ disabled: { type: Boolean, default: false },
84
+ destroyOnClose: { type: Boolean, default: true },
85
+ getContainer: { type: Function, default: () => document.body }
86
+ },
87
+ emits: ["update:visible"],
88
+ setup(props, { emit, slots }) {
89
+ const triggerRef = (0, import_vue.ref)();
90
+ const popupRef = (0, import_vue.ref)();
91
+ const position = (0, import_vue.ref)({ top: 0, left: 0 });
92
+ const currentPlacement = (0, import_vue.ref)(props.placement);
93
+ const mounted = (0, import_vue.ref)(false);
94
+ const animatingIn = (0, import_vue.ref)(false);
95
+ let enterTimer = null;
96
+ let leaveTimer = null;
97
+ let leaveAnimationTimer = null;
98
+ const clearTimers = () => {
99
+ if (enterTimer) {
100
+ clearTimeout(enterTimer);
101
+ enterTimer = null;
102
+ }
103
+ if (leaveTimer) {
104
+ clearTimeout(leaveTimer);
105
+ leaveTimer = null;
106
+ }
107
+ if (leaveAnimationTimer) {
108
+ clearTimeout(leaveAnimationTimer);
109
+ leaveAnimationTimer = null;
110
+ }
111
+ };
112
+ const updatePosition = () => {
113
+ if (!triggerRef.value || !popupRef.value) return;
114
+ const triggerRect = triggerRef.value.getBoundingClientRect();
115
+ const popupRect = popupRef.value.getBoundingClientRect();
116
+ const { x: ox = 0, y: oy = 0 } = props.offset;
117
+ const result = computePosition(
118
+ triggerRect,
119
+ popupRect.width,
120
+ popupRect.height,
121
+ props.placement,
122
+ ox,
123
+ oy
124
+ );
125
+ position.value = result.position;
126
+ currentPlacement.value = result.placement;
127
+ };
128
+ const show = () => {
129
+ if (props.disabled) return;
130
+ clearTimers();
131
+ enterTimer = setTimeout(() => {
132
+ mounted.value = true;
133
+ emit("update:visible", true);
134
+ void (0, import_vue.nextTick)(() => {
135
+ updatePosition();
136
+ requestAnimationFrame(() => {
137
+ animatingIn.value = true;
138
+ });
139
+ });
140
+ }, props.mouseEnterDelay);
141
+ };
142
+ const hide = (immediate = false) => {
143
+ clearTimers();
144
+ const delay = immediate ? 0 : props.mouseLeaveDelay;
145
+ leaveTimer = setTimeout(() => {
146
+ animatingIn.value = false;
147
+ leaveAnimationTimer = setTimeout(() => {
148
+ mounted.value = false;
149
+ emit("update:visible", false);
150
+ }, 200);
151
+ }, delay);
152
+ };
153
+ const toggle = () => {
154
+ if (mounted.value && animatingIn.value) {
155
+ hide(true);
156
+ } else {
157
+ clearTimers();
158
+ show();
159
+ }
160
+ };
161
+ (0, import_vue.watch)(
162
+ () => props.visible,
163
+ (v) => {
164
+ if (v && !mounted.value) show();
165
+ else if (!v && mounted.value) hide(true);
166
+ }
167
+ );
168
+ (0, import_vue.watch)(
169
+ () => props.placement,
170
+ (p) => {
171
+ currentPlacement.value = p;
172
+ }
173
+ );
174
+ const onResize = () => {
175
+ if (mounted.value && animatingIn.value) updatePosition();
176
+ };
177
+ (0, import_vue.onMounted)(() => {
178
+ window.addEventListener("resize", onResize);
179
+ window.addEventListener("scroll", onResize, true);
180
+ document.addEventListener("mousedown", onClickOutside, true);
181
+ document.addEventListener("keydown", onEsc);
182
+ });
183
+ (0, import_vue.onUnmounted)(() => {
184
+ clearTimers();
185
+ window.removeEventListener("resize", onResize);
186
+ window.removeEventListener("scroll", onResize, true);
187
+ document.removeEventListener("mousedown", onClickOutside, true);
188
+ document.removeEventListener("keydown", onEsc);
189
+ });
190
+ const onClickOutside = (e) => {
191
+ if (!mounted.value) return;
192
+ const target = e.target;
193
+ const trigger = triggerRef.value;
194
+ const popup = popupRef.value;
195
+ if (trigger && trigger.contains(target)) return;
196
+ if (popup && popup.contains(target)) return;
197
+ if (props.trigger === "click" || props.trigger === "contextmenu") {
198
+ hide(true);
199
+ }
200
+ };
201
+ const onEsc = (e) => {
202
+ if (e.key === "Escape" && mounted.value) {
203
+ hide(true);
204
+ }
205
+ };
206
+ const onTriggerMouseEnter = () => {
207
+ if (props.trigger === "hover") show();
208
+ };
209
+ const onTriggerMouseLeave = () => {
210
+ if (props.trigger === "hover") hide();
211
+ };
212
+ const onTriggerClick = (e) => {
213
+ if (props.trigger === "click") {
214
+ e.stopPropagation();
215
+ toggle();
216
+ }
217
+ };
218
+ const onTriggerFocus = () => {
219
+ if (props.trigger === "focus") show();
220
+ };
221
+ const onTriggerBlur = () => {
222
+ if (props.trigger === "focus") hide(true);
223
+ };
224
+ const onTriggerContextmenu = (e) => {
225
+ if (props.trigger === "contextmenu") {
226
+ e.preventDefault();
227
+ show();
228
+ }
229
+ };
230
+ const onPopupMouseEnter = () => {
231
+ if (leaveTimer) {
232
+ clearTimeout(leaveTimer);
233
+ leaveTimer = null;
234
+ }
235
+ };
236
+ const onPopupMouseLeave = () => {
237
+ if (props.trigger === "hover") hide();
238
+ };
239
+ return () => {
240
+ const container = props.getContainer();
241
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(import_jsx_runtime.Fragment, { children: [
242
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
243
+ "span",
244
+ {
245
+ ref: triggerRef,
246
+ class: "layplux-popup-trigger",
247
+ onMouseenter: onTriggerMouseEnter,
248
+ onMouseleave: onTriggerMouseLeave,
249
+ onClick: onTriggerClick,
250
+ onFocus: onTriggerFocus,
251
+ onBlur: onTriggerBlur,
252
+ onContextmenu: onTriggerContextmenu,
253
+ children: slots.default?.()
254
+ }
255
+ ),
256
+ (mounted.value || !props.destroyOnClose) && /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_vue.Teleport, { to: container, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
257
+ "div",
258
+ {
259
+ ref: popupRef,
260
+ class: [
261
+ "layplux-portal",
262
+ "layplux-popup",
263
+ currentPlacement.value,
264
+ animatingIn.value && "layplux-popup--visible"
265
+ ],
266
+ style: {
267
+ position: "fixed",
268
+ top: `${position.value.top}px`,
269
+ left: `${position.value.left}px`,
270
+ zIndex: "var(--layplux-popup-z-index, 2000)"
271
+ },
272
+ onMouseenter: onPopupMouseEnter,
273
+ onMouseleave: onPopupMouseLeave,
274
+ children: slots.content?.()
275
+ }
276
+ ) })
277
+ ] });
278
+ };
279
+ }
280
+ });
@@ -0,0 +1,76 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var title_exports = {};
20
+ __export(title_exports, {
21
+ TitleView: () => TitleView
22
+ });
23
+ module.exports = __toCommonJS(title_exports);
24
+ var import_jsx_runtime = require("vue/jsx-runtime");
25
+ var import_vue = require("vue");
26
+ var import_utils = require("../../utils");
27
+ const TitleView = (0, import_vue.defineComponent)({
28
+ name: "TitleView",
29
+ inheritAttrs: false,
30
+ props: {
31
+ icon: [String, Object, Function],
32
+ title: [String, Object, Function],
33
+ mode: {
34
+ type: String,
35
+ default: "icon-only"
36
+ },
37
+ /** 交互状态:idle / active / disabled / error。idle 时 hover 由 CSS :hover 处理 */
38
+ state: {
39
+ type: String,
40
+ default: "idle"
41
+ },
42
+ /** 聚焦/选中态,独立于 state,可与任何状态叠加 */
43
+ focused: {
44
+ type: Boolean,
45
+ default: false
46
+ },
47
+ size: {
48
+ type: String,
49
+ default: "middle"
50
+ },
51
+ className: {
52
+ type: String,
53
+ default: ""
54
+ },
55
+ onClick: Function
56
+ },
57
+ setup(props) {
58
+ return () => {
59
+ const { icon, title, mode, state, size, focused, className, onClick } = props;
60
+ const iconNode = icon ? (0, import_utils.createContent)(icon) : null;
61
+ const titleNode = title ? (0, import_utils.createContent)(title) : null;
62
+ const classes = [
63
+ "title-view",
64
+ `title-view--${mode}`,
65
+ `title-view--${state}`,
66
+ `title-view--${size}`,
67
+ focused && "title-view--focused",
68
+ className
69
+ ].filter(Boolean).join(" ");
70
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { class: classes, onClick, children: [
71
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { class: "title-view__icon", children: iconNode }),
72
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { class: "title-view__label", children: titleNode })
73
+ ] });
74
+ };
75
+ }
76
+ });
@@ -0,0 +1,68 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var tooltip_exports = {};
20
+ __export(tooltip_exports, {
21
+ Tooltip: () => Tooltip
22
+ });
23
+ module.exports = __toCommonJS(tooltip_exports);
24
+ var import_jsx_runtime = require("vue/jsx-runtime");
25
+ var import_vue = require("vue");
26
+ var import_utils = require("../../utils");
27
+ var import_popup = require("../popup");
28
+ const Tooltip = (0, import_vue.defineComponent)({
29
+ name: "LaypluxTooltip",
30
+ props: {
31
+ title: [String, Object, Function],
32
+ trigger: { type: String, default: "hover" },
33
+ placement: { type: String, default: "top" },
34
+ mouseEnterDelay: { type: Number, default: 100 },
35
+ mouseLeaveDelay: { type: Number, default: 100 },
36
+ visible: Boolean,
37
+ disabled: { type: Boolean, default: false },
38
+ getContainer: { type: Function, default: () => document.body }
39
+ },
40
+ emits: ["update:visible"],
41
+ setup(props, { emit, slots }) {
42
+ return () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
43
+ import_popup.Popup,
44
+ {
45
+ visible: props.visible,
46
+ trigger: props.trigger,
47
+ placement: props.placement,
48
+ disabled: props.disabled,
49
+ mouseEnterDelay: props.mouseEnterDelay,
50
+ mouseLeaveDelay: props.mouseLeaveDelay,
51
+ destroyOnClose: true,
52
+ getContainer: props.getContainer,
53
+ "onUpdate:visible": (v) => emit("update:visible", v),
54
+ children: {
55
+ default: () => slots.default?.(),
56
+ content: () => {
57
+ const hasContent = slots.content;
58
+ const titleNode = hasContent ? slots.content?.() : (0, import_utils.createContent)(props.title);
59
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { class: "layplux-tooltip", children: [
60
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { class: "layplux-tooltip__arrow" }),
61
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { class: "layplux-tooltip__inner", children: titleNode })
62
+ ] });
63
+ }
64
+ }
65
+ }
66
+ );
67
+ }
68
+ });
@@ -0,0 +1,104 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var widget_exports = {};
20
+ __export(widget_exports, {
21
+ WidgetTitleView: () => WidgetTitleView,
22
+ WidgetView: () => WidgetView
23
+ });
24
+ module.exports = __toCommonJS(widget_exports);
25
+ var import_jsx_runtime = require("vue/jsx-runtime");
26
+ var import_vue = require("vue");
27
+ var import_title = require("../title");
28
+ var import_tooltip = require("../tooltip");
29
+ const WidgetView = (0, import_vue.defineComponent)({
30
+ name: "WidgetView",
31
+ inheritAttrs: false,
32
+ props: {
33
+ widget: Object
34
+ },
35
+ setup(props) {
36
+ const hasError = (0, import_vue.ref)(false);
37
+ const errorMessage = (0, import_vue.ref)("");
38
+ (0, import_vue.onErrorCaptured)((err) => {
39
+ hasError.value = true;
40
+ errorMessage.value = err.message;
41
+ console.error(`[Layplux] Widget "${props.widget?.name}" crashed:`, err);
42
+ return false;
43
+ });
44
+ return () => {
45
+ const { widget } = props;
46
+ if (hasError.value) {
47
+ const fallback = widget?.config.props?.errorFallback;
48
+ if (fallback) {
49
+ return (0, import_vue.h)(fallback, { error: errorMessage.value, widget });
50
+ }
51
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { class: "layplux-widget-error", children: [
52
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("span", { children: [
53
+ '\u7EC4\u4EF6 "',
54
+ widget?.name,
55
+ '" \u53D1\u751F\u9519\u8BEF'
56
+ ] }),
57
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("pre", { children: errorMessage.value })
58
+ ] });
59
+ }
60
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_vue.Fragment, { children: widget?.renderBody() });
61
+ };
62
+ }
63
+ });
64
+ const WidgetTitleView = (0, import_vue.defineComponent)({
65
+ name: "WidgetTitleView",
66
+ inheritAttrs: false,
67
+ props: {
68
+ widget: Object
69
+ },
70
+ setup(props) {
71
+ const tooltipVisible = (0, import_vue.ref)(false);
72
+ const handleClick = () => {
73
+ tooltipVisible.value = false;
74
+ props.widget?.container?.toggleActive(props.widget?.name);
75
+ };
76
+ return () => {
77
+ const { widget } = props;
78
+ const tooltipTitle = widget?.config.props?.title ?? widget?.name ?? "";
79
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { class: "widget-title-view", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
80
+ import_tooltip.Tooltip,
81
+ {
82
+ visible: tooltipVisible.value,
83
+ "onUpdate:visible": (v) => {
84
+ tooltipVisible.value = v;
85
+ },
86
+ title: tooltipTitle,
87
+ placement: "right",
88
+ mouseEnterDelay: 500,
89
+ getContainer: () => document.querySelector(".layplux-root") || document.body,
90
+ children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
91
+ import_title.TitleView,
92
+ {
93
+ onClick: handleClick,
94
+ focused: widget?.focused.value,
95
+ state: widget?.active.value ? "active" : "idle",
96
+ icon: widget?.config.props?.icon,
97
+ title: widget?.config.props?.title
98
+ }
99
+ )
100
+ }
101
+ ) });
102
+ };
103
+ }
104
+ });
@@ -0,0 +1,40 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var index_exports = {};
30
+ __export(index_exports, {
31
+ FocusTracker: () => import_focus_tracker.FocusTracker,
32
+ Layplux: () => import_layplux.default,
33
+ createPluginEventBus: () => import_event_bus.createPluginEventBus,
34
+ useSkeleton: () => import_skeleton.useSkeleton
35
+ });
36
+ module.exports = __toCommonJS(index_exports);
37
+ var import_layplux = __toESM(require("./layout/layplux"), 1);
38
+ var import_skeleton = require("./managers/skeleton");
39
+ var import_event_bus = require("./utils/event-bus");
40
+ var import_focus_tracker = require("./utils/focus-tracker");
@@ -0,0 +1,31 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var glass_overlay_exports = {};
20
+ __export(glass_overlay_exports, {
21
+ GlassOverlay: () => GlassOverlay
22
+ });
23
+ module.exports = __toCommonJS(glass_overlay_exports);
24
+ var import_jsx_runtime = require("vue/jsx-runtime");
25
+ var import_vue = require("vue");
26
+ const GlassOverlay = (0, import_vue.defineComponent)({
27
+ name: "GlassOverlay",
28
+ setup() {
29
+ return () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", {});
30
+ }
31
+ });
@@ -0,0 +1,35 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var layered_manager_exports = {};
20
+ __export(layered_manager_exports, {
21
+ LayeredManager: () => LayeredManager
22
+ });
23
+ module.exports = __toCommonJS(layered_manager_exports);
24
+ var import_jsx_runtime = require("vue/jsx-runtime");
25
+ var import_vue = require("vue");
26
+ var import_skeleton = require("./skeleton");
27
+ const LayeredManager = (0, import_vue.defineComponent)({
28
+ name: "LayeredManager",
29
+ props: {
30
+ skeleton: Object
31
+ },
32
+ setup(props) {
33
+ return () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)("div", { class: "layered-manager", children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_skeleton.Skeleton, { skeleton: props.skeleton }) });
34
+ }
35
+ });
@@ -0,0 +1,41 @@
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 __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var layplux_exports = {};
20
+ __export(layplux_exports, {
21
+ default: () => layplux_default
22
+ });
23
+ module.exports = __toCommonJS(layplux_exports);
24
+ var import_jsx_runtime = require("vue/jsx-runtime");
25
+ var import_vue = require("vue");
26
+ var import_root_pane = require("./root-pane");
27
+ const Layplux = (0, import_vue.defineComponent)({
28
+ name: "Layplux",
29
+ props: {
30
+ skeleton: Object
31
+ },
32
+ setup(props) {
33
+ return () => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_root_pane.RootPane, { skeleton: props.skeleton, children: "Layplux" });
34
+ }
35
+ });
36
+ var layplux_default = Object.assign(Layplux, {
37
+ install: (app) => {
38
+ app.component("Layplux", Layplux);
39
+ return app;
40
+ }
41
+ });