@qverse-ui/lit-components 1.0.7 → 1.0.9
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.
- package/dist/components/common/index.d.ts +3 -1
- package/dist/components/common/index.d.ts.map +1 -1
- package/dist/components/common/index.js +4 -1
- package/dist/components/common/index.js.map +1 -1
- package/dist/components/common/lit-switch-dollhouse-view/index.d.ts +2 -0
- package/dist/components/common/lit-switch-dollhouse-view/index.d.ts.map +1 -1
- package/dist/components/common/lit-switch-dollhouse-view/index.js +12 -4
- package/dist/components/common/lit-switch-dollhouse-view/index.js.map +1 -1
- package/dist/components/common/lit-switch-dollhouse-view/interaction.d.ts +6 -0
- package/dist/components/common/lit-switch-dollhouse-view/interaction.d.ts.map +1 -1
- package/dist/components/common/lit-switch-dollhouse-view/interaction.js +11 -0
- package/dist/components/common/lit-switch-dollhouse-view/interaction.js.map +1 -1
- package/dist/components/common/lit-switch-floor/constants.d.ts +12 -0
- package/dist/components/common/lit-switch-floor/constants.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/constants.js +17 -0
- package/dist/components/common/lit-switch-floor/constants.js.map +1 -0
- package/dist/components/common/lit-switch-floor/events.d.ts +3 -0
- package/dist/components/common/lit-switch-floor/events.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/events.js +25 -0
- package/dist/components/common/lit-switch-floor/events.js.map +1 -0
- package/dist/components/common/lit-switch-floor/index.d.ts +46 -0
- package/dist/components/common/lit-switch-floor/index.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/index.js +134 -0
- package/dist/components/common/lit-switch-floor/index.js.map +1 -0
- package/dist/components/common/lit-switch-floor/interaction.d.ts +58 -0
- package/dist/components/common/lit-switch-floor/interaction.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/interaction.js +302 -0
- package/dist/components/common/lit-switch-floor/interaction.js.map +1 -0
- package/dist/components/common/lit-switch-floor/logic.d.ts +27 -0
- package/dist/components/common/lit-switch-floor/logic.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/logic.js +137 -0
- package/dist/components/common/lit-switch-floor/logic.js.map +1 -0
- package/dist/components/common/lit-switch-floor/properties.d.ts +25 -0
- package/dist/components/common/lit-switch-floor/properties.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/properties.js +14 -0
- package/dist/components/common/lit-switch-floor/properties.js.map +1 -0
- package/dist/components/common/lit-switch-floor/styles.d.ts +2 -0
- package/dist/components/common/lit-switch-floor/styles.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/styles.js +106 -0
- package/dist/components/common/lit-switch-floor/styles.js.map +1 -0
- package/dist/components/common/lit-switch-floor/template.d.ts +4 -0
- package/dist/components/common/lit-switch-floor/template.d.ts.map +1 -0
- package/dist/components/common/lit-switch-floor/template.js +66 -0
- package/dist/components/common/lit-switch-floor/template.js.map +1 -0
- package/dist/components/common/lit-switch-floorplan-view/index.d.ts +2 -0
- package/dist/components/common/lit-switch-floorplan-view/index.d.ts.map +1 -1
- package/dist/components/common/lit-switch-floorplan-view/index.js +12 -4
- package/dist/components/common/lit-switch-floorplan-view/index.js.map +1 -1
- package/dist/components/common/lit-switch-floorplan-view/interaction.d.ts +4 -0
- package/dist/components/common/lit-switch-floorplan-view/interaction.d.ts.map +1 -1
- package/dist/components/common/lit-switch-floorplan-view/interaction.js +9 -0
- package/dist/components/common/lit-switch-floorplan-view/interaction.js.map +1 -1
- package/dist/components/common/lit-switch-panorama-view/index.d.ts +2 -0
- package/dist/components/common/lit-switch-panorama-view/index.d.ts.map +1 -1
- package/dist/components/common/lit-switch-panorama-view/index.js +15 -4
- package/dist/components/common/lit-switch-panorama-view/index.js.map +1 -1
- package/dist/components/common/lit-switch-panorama-view/interaction.d.ts +4 -0
- package/dist/components/common/lit-switch-panorama-view/interaction.d.ts.map +1 -1
- package/dist/components/common/lit-switch-panorama-view/interaction.js +9 -1
- package/dist/components/common/lit-switch-panorama-view/interaction.js.map +1 -1
- package/dist/components/index.d.ts +1 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +4 -1
- package/dist/components/index.js.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
import { SCROLLABLE_FLOOR_COUNT, DEFAULT_ALL_LABEL, FLOOR_ITEM_HEIGHT } from "./constants.js";
|
|
2
|
+
import { dispatchClick, dispatchComplete } from "./events.js";
|
|
3
|
+
import { isPanoramaViewMode, applyFloorSelection, getViewMode, resolveCurrentPanoramaLocationId, resolveFloorIdxByLocationId, applyFloorVisibilityInModelView, resolvePanoramaCurrentFloor, resolveFirstFloorIdx } from "./logic.js";
|
|
4
|
+
import { ViewMode } from "../../../enum/view.mode.js";
|
|
5
|
+
const lastStableViewMode = /* @__PURE__ */ new WeakMap();
|
|
6
|
+
const pendingUserFloorSwitch = /* @__PURE__ */ new WeakMap();
|
|
7
|
+
function rememberStableViewMode(host, mode) {
|
|
8
|
+
const resolved = mode ?? getViewMode(host.qspace);
|
|
9
|
+
if (resolved && resolved !== ViewMode.Transitioning) {
|
|
10
|
+
lastStableViewMode.set(host, resolved);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function getCurrentFloor(host) {
|
|
14
|
+
var _a;
|
|
15
|
+
return ((_a = host.option) == null ? void 0 : _a.currentFloor) ?? "all";
|
|
16
|
+
}
|
|
17
|
+
function setCurrentFloor(host, floor) {
|
|
18
|
+
if (`${getCurrentFloor(host)}` === `${floor}`) {
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
host.option.currentFloor = floor;
|
|
22
|
+
host.requestUpdate();
|
|
23
|
+
}
|
|
24
|
+
function resetToAllOnTransitioning(host) {
|
|
25
|
+
pendingUserFloorSwitch.delete(host);
|
|
26
|
+
const floors = host.option.floors ?? [];
|
|
27
|
+
setCurrentFloor(host, "all");
|
|
28
|
+
if (host.qspace && floors.length > 0) {
|
|
29
|
+
applyFloorVisibilityInModelView(host.qspace, "all", floors);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
function setFloorSwitchEnabled(host, value) {
|
|
33
|
+
host.setEnabled(value);
|
|
34
|
+
}
|
|
35
|
+
function syncEnabledFromViewMode(host, mode) {
|
|
36
|
+
const resolved = mode ?? getViewMode(host.qspace);
|
|
37
|
+
switch (resolved) {
|
|
38
|
+
case ViewMode.Panorama:
|
|
39
|
+
case ViewMode.Dollhouse:
|
|
40
|
+
case ViewMode.Floorplan:
|
|
41
|
+
setFloorSwitchEnabled(host, true);
|
|
42
|
+
break;
|
|
43
|
+
case ViewMode.Transitioning:
|
|
44
|
+
setFloorSwitchEnabled(host, false);
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
function isFloorSwitchVisible(host) {
|
|
49
|
+
var _a;
|
|
50
|
+
return (((_a = host.option.floors) == null ? void 0 : _a.length) ?? 0) > 0;
|
|
51
|
+
}
|
|
52
|
+
function getFloorLabel(host, idx) {
|
|
53
|
+
var _a;
|
|
54
|
+
const item = (_a = host.option.floors) == null ? void 0 : _a.find((floor) => floor.idx === idx);
|
|
55
|
+
if (item == null ? void 0 : item.name) {
|
|
56
|
+
return item.name;
|
|
57
|
+
}
|
|
58
|
+
if (idx >= 0) {
|
|
59
|
+
return `F${idx + 1}`;
|
|
60
|
+
}
|
|
61
|
+
return `B${-idx}`;
|
|
62
|
+
}
|
|
63
|
+
function getAllLabel(host) {
|
|
64
|
+
var _a;
|
|
65
|
+
return ((_a = host.option) == null ? void 0 : _a.allLabel) ?? DEFAULT_ALL_LABEL;
|
|
66
|
+
}
|
|
67
|
+
function getFloorListReverse(host) {
|
|
68
|
+
return (host.option.floors ?? []).slice().reverse();
|
|
69
|
+
}
|
|
70
|
+
function syncVisibility(host) {
|
|
71
|
+
host.toggleAttribute("hidden", !isFloorSwitchVisible(host));
|
|
72
|
+
}
|
|
73
|
+
function syncDefaultFloorForViewMode(host, mode, options) {
|
|
74
|
+
const resolved = mode ?? getViewMode(host.qspace);
|
|
75
|
+
if (resolved === ViewMode.Panorama) {
|
|
76
|
+
applyPanoramaCurrentFloorFromModel(host, {
|
|
77
|
+
force: (options == null ? void 0 : options.forcePanorama) ?? false
|
|
78
|
+
});
|
|
79
|
+
} else if (resolved === ViewMode.Floorplan) {
|
|
80
|
+
applyFloorplanDefaultFloor(host, resolved, {
|
|
81
|
+
force: (options == null ? void 0 : options.forceFloorplan) ?? false
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
function applyPanoramaCurrentFloorFromModel(host, options) {
|
|
86
|
+
var _a;
|
|
87
|
+
if (!host.qspace) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
if (isPanoramaViewMode(host.qspace)) {
|
|
91
|
+
rememberStableViewMode(host, ViewMode.Panorama);
|
|
92
|
+
}
|
|
93
|
+
const floors = host.option.floors ?? [];
|
|
94
|
+
if (floors.length === 0) {
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
if (!(options == null ? void 0 : options.force)) {
|
|
98
|
+
const explicitFloor = (_a = host.option) == null ? void 0 : _a.currentFloor;
|
|
99
|
+
if (explicitFloor !== void 0 && explicitFloor !== "all") {
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const idx = resolvePanoramaCurrentFloor(host.qspace, floors);
|
|
104
|
+
if (idx === null) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
setCurrentFloor(host, idx);
|
|
108
|
+
}
|
|
109
|
+
function applyFloorplanDefaultFloor(host, mode, options) {
|
|
110
|
+
var _a;
|
|
111
|
+
const floors = host.option.floors ?? [];
|
|
112
|
+
if (!host.qspace || floors.length === 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
const resolved = mode ?? getViewMode(host.qspace);
|
|
116
|
+
if (resolved !== ViewMode.Floorplan) {
|
|
117
|
+
return;
|
|
118
|
+
}
|
|
119
|
+
if (!(options == null ? void 0 : options.force)) {
|
|
120
|
+
const explicitFloor = (_a = host.option) == null ? void 0 : _a.currentFloor;
|
|
121
|
+
if (explicitFloor !== void 0 && explicitFloor !== "all") {
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const firstIdx = resolveFirstFloorIdx(floors);
|
|
126
|
+
if (firstIdx === null) {
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
setCurrentFloor(host, firstIdx);
|
|
130
|
+
applyFloorSelection(host.qspace, firstIdx, floors);
|
|
131
|
+
}
|
|
132
|
+
function applyInitialEntryView(host, mode) {
|
|
133
|
+
const resolved = mode ?? getViewMode(host.qspace);
|
|
134
|
+
if (resolved !== ViewMode.Floorplan) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
applyFloorplanDefaultFloor(host, resolved, { force: true });
|
|
138
|
+
}
|
|
139
|
+
function handleCoreLoaded(host) {
|
|
140
|
+
var _a, _b;
|
|
141
|
+
syncVisibility(host);
|
|
142
|
+
const mode = (_b = (_a = host.qspace) == null ? void 0 : _a.view) == null ? void 0 : _b.mode;
|
|
143
|
+
rememberStableViewMode(host, mode);
|
|
144
|
+
syncEnabledFromViewMode(host, mode);
|
|
145
|
+
applyInitialEntryView(host, mode);
|
|
146
|
+
host.requestUpdate();
|
|
147
|
+
}
|
|
148
|
+
function handleViewModeChange(host, mode) {
|
|
149
|
+
if (mode === ViewMode.Transitioning) {
|
|
150
|
+
resetToAllOnTransitioning(host);
|
|
151
|
+
} else {
|
|
152
|
+
rememberStableViewMode(host, mode);
|
|
153
|
+
}
|
|
154
|
+
syncEnabledFromViewMode(host, mode);
|
|
155
|
+
if (mode !== ViewMode.Transitioning) {
|
|
156
|
+
syncDefaultFloorForViewMode(host, mode, {
|
|
157
|
+
forceFloorplan: mode === ViewMode.Floorplan,
|
|
158
|
+
forcePanorama: mode === ViewMode.Panorama
|
|
159
|
+
});
|
|
160
|
+
if (mode === ViewMode.Panorama) {
|
|
161
|
+
queueMicrotask(() => {
|
|
162
|
+
if (!isPanoramaViewMode(host.qspace)) {
|
|
163
|
+
return;
|
|
164
|
+
}
|
|
165
|
+
applyPanoramaCurrentFloorFromModel(host, { force: true });
|
|
166
|
+
host.requestUpdate();
|
|
167
|
+
});
|
|
168
|
+
} else if (mode === ViewMode.Floorplan) {
|
|
169
|
+
queueMicrotask(() => {
|
|
170
|
+
if (getViewMode(host.qspace) !== ViewMode.Floorplan) {
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
applyFloorplanDefaultFloor(host, ViewMode.Floorplan, { force: true });
|
|
174
|
+
host.requestUpdate();
|
|
175
|
+
});
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
host.requestUpdate();
|
|
179
|
+
}
|
|
180
|
+
function handleWaypointStart(host) {
|
|
181
|
+
if (isPanoramaViewMode(host.qspace)) {
|
|
182
|
+
setFloorSwitchEnabled(host, false);
|
|
183
|
+
host.requestUpdate();
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function handleWaypointComplete(host, data) {
|
|
187
|
+
const pending = pendingUserFloorSwitch.get(host);
|
|
188
|
+
if (isPanoramaViewMode(host.qspace)) {
|
|
189
|
+
const floors = host.option.floors ?? [];
|
|
190
|
+
const locationId = (data == null ? void 0 : data.current_pano_id) ?? resolveCurrentPanoramaLocationId(host.qspace) ?? "";
|
|
191
|
+
const idx = locationId ? resolveFloorIdxByLocationId(host.qspace, locationId, floors) : null;
|
|
192
|
+
if (idx !== null) {
|
|
193
|
+
if (`${getCurrentFloor(host)}` !== `${idx}`) {
|
|
194
|
+
setCurrentFloor(host, idx);
|
|
195
|
+
dispatchComplete(host, idx);
|
|
196
|
+
} else if (pending !== void 0) {
|
|
197
|
+
dispatchComplete(host, pending);
|
|
198
|
+
}
|
|
199
|
+
pendingUserFloorSwitch.delete(host);
|
|
200
|
+
} else {
|
|
201
|
+
applyPanoramaCurrentFloorFromModel(host, { force: true });
|
|
202
|
+
if (pending !== void 0) {
|
|
203
|
+
dispatchComplete(host, pending);
|
|
204
|
+
pendingUserFloorSwitch.delete(host);
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
syncEnabledFromViewMode(host);
|
|
209
|
+
host.requestUpdate();
|
|
210
|
+
}
|
|
211
|
+
function handleSelectFloor(host, floorIndex, e) {
|
|
212
|
+
if (!host.enabled) {
|
|
213
|
+
e.preventDefault();
|
|
214
|
+
e.stopPropagation();
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
if (`${floorIndex}` === `${getCurrentFloor(host)}`) {
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
dispatchClick(host, floorIndex, e);
|
|
221
|
+
setCurrentFloor(host, floorIndex);
|
|
222
|
+
if (host.qspace) {
|
|
223
|
+
if (isPanoramaViewMode(host.qspace)) {
|
|
224
|
+
setFloorSwitchEnabled(host, false);
|
|
225
|
+
}
|
|
226
|
+
applyFloorSelection(host.qspace, floorIndex, host.option.floors ?? []);
|
|
227
|
+
if (floorIndex !== "all" && !isPanoramaViewMode(host.qspace)) {
|
|
228
|
+
dispatchComplete(host, floorIndex);
|
|
229
|
+
} else if (floorIndex !== "all" && isPanoramaViewMode(host.qspace)) {
|
|
230
|
+
pendingUserFloorSwitch.set(host, floorIndex);
|
|
231
|
+
}
|
|
232
|
+
} else if (floorIndex !== "all") {
|
|
233
|
+
dispatchComplete(host, floorIndex);
|
|
234
|
+
}
|
|
235
|
+
host.requestUpdate();
|
|
236
|
+
}
|
|
237
|
+
function handleScrollUp(host) {
|
|
238
|
+
if (!host.enabled || host.scrollOffset === 0) {
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
host.downActive = true;
|
|
242
|
+
host.scrollOffset += 1;
|
|
243
|
+
host.requestUpdate();
|
|
244
|
+
}
|
|
245
|
+
function handleScrollDown(host) {
|
|
246
|
+
if (!host.enabled) {
|
|
247
|
+
return;
|
|
248
|
+
}
|
|
249
|
+
const floorList = host.option.floors ?? [];
|
|
250
|
+
const { scrollOffset } = host;
|
|
251
|
+
if (-scrollOffset + SCROLLABLE_FLOOR_COUNT >= floorList.length) {
|
|
252
|
+
return;
|
|
253
|
+
}
|
|
254
|
+
if (-scrollOffset + SCROLLABLE_FLOOR_COUNT === floorList.length - 1) {
|
|
255
|
+
host.downActive = false;
|
|
256
|
+
}
|
|
257
|
+
host.upActive = true;
|
|
258
|
+
host.scrollOffset -= 1;
|
|
259
|
+
host.requestUpdate();
|
|
260
|
+
}
|
|
261
|
+
function getTranslateStyle(host) {
|
|
262
|
+
return `transform: translateY(${host.scrollOffset * FLOOR_ITEM_HEIGHT}px)`;
|
|
263
|
+
}
|
|
264
|
+
function isAllFloorActive(host) {
|
|
265
|
+
return `${getCurrentFloor(host)}` === "all";
|
|
266
|
+
}
|
|
267
|
+
function isFloorActive(host, idx) {
|
|
268
|
+
return `${idx}` === `${getCurrentFloor(host)}`;
|
|
269
|
+
}
|
|
270
|
+
function showScrollArrows(host) {
|
|
271
|
+
var _a;
|
|
272
|
+
return (((_a = host.option.floors) == null ? void 0 : _a.length) ?? 0) > SCROLLABLE_FLOOR_COUNT;
|
|
273
|
+
}
|
|
274
|
+
function isUpArrowActive(host) {
|
|
275
|
+
return host.upActive && host.scrollOffset !== 0;
|
|
276
|
+
}
|
|
277
|
+
export {
|
|
278
|
+
applyFloorplanDefaultFloor,
|
|
279
|
+
applyPanoramaCurrentFloorFromModel,
|
|
280
|
+
getAllLabel,
|
|
281
|
+
getCurrentFloor,
|
|
282
|
+
getFloorLabel,
|
|
283
|
+
getFloorListReverse,
|
|
284
|
+
getTranslateStyle,
|
|
285
|
+
handleCoreLoaded,
|
|
286
|
+
handleScrollDown,
|
|
287
|
+
handleScrollUp,
|
|
288
|
+
handleSelectFloor,
|
|
289
|
+
handleViewModeChange,
|
|
290
|
+
handleWaypointComplete,
|
|
291
|
+
handleWaypointStart,
|
|
292
|
+
isAllFloorActive,
|
|
293
|
+
isFloorActive,
|
|
294
|
+
isFloorSwitchVisible,
|
|
295
|
+
isUpArrowActive,
|
|
296
|
+
setCurrentFloor,
|
|
297
|
+
setFloorSwitchEnabled,
|
|
298
|
+
showScrollArrows,
|
|
299
|
+
syncEnabledFromViewMode,
|
|
300
|
+
syncVisibility
|
|
301
|
+
};
|
|
302
|
+
//# sourceMappingURL=interaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"interaction.js","sources":["../../../../src/components/common/lit-switch-floor/interaction.ts"],"sourcesContent":["/*\r\n * @Author: ncz\r\n * @Date: 2026-05-30\r\n * @Description: lit-switch-floor 交互与状态同步\r\n */\r\n\r\nimport {\r\n DEFAULT_ALL_LABEL,\r\n FLOOR_ITEM_HEIGHT,\r\n SCROLLABLE_FLOOR_COUNT,\r\n} from './constants.js'\r\nimport { dispatchClick, dispatchComplete } from './events.js'\r\nimport {\r\n applyFloorSelection,\r\n applyFloorVisibilityInModelView,\r\n getViewMode,\r\n isPanoramaViewMode,\r\n resolveCurrentPanoramaLocationId,\r\n resolveFirstFloorIdx,\r\n resolveFloorIdxByLocationId,\r\n resolvePanoramaCurrentFloor,\r\n} from './logic.js'\r\nimport type { FloorItem, FloorSwitchOption } from './properties.js'\r\nimport { ViewMode } from '@/enum/view.mode'\r\n\r\n/** 记录最近一次非 transitioning 的 view.mode,用于全景切走时重置选中层 */\r\nconst lastStableViewMode = new WeakMap<FloorSwitchHost, string>()\r\n\r\n/** 用户点击具体楼层后待 SDK 完成切换(全景 switch.waypoint.complete 时派发 complete) */\r\nconst pendingUserFloorSwitch = new WeakMap<FloorSwitchHost, number>()\r\n\r\n/** 记录最近一次非 transitioning 的 view.mode */\r\nfunction rememberStableViewMode(host: FloorSwitchHost, mode?: string): void {\r\n\r\n const resolved = mode ?? getViewMode(host.qspace)\r\n\r\n if (resolved && resolved !== ViewMode.Transitioning) {\r\n\r\n lastStableViewMode.set(host, resolved)\r\n\r\n }\r\n\r\n}\r\n\r\n/** 当前选中层(唯一数据源:option.currentFloor) */\r\nexport function getCurrentFloor(host: FloorSwitchHost): number | 'all' {\r\n\r\n return host.option?.currentFloor ?? 'all'\r\n\r\n}\r\n\r\n/** 更新选中层并触发重绘 */\r\nexport function setCurrentFloor(host: FloorSwitchHost, floor: number | 'all'): void {\r\n\r\n if (`${getCurrentFloor(host)}` === `${floor}`) {\r\n\r\n return\r\n\r\n }\r\n\r\n host.option.currentFloor = floor\r\n host.requestUpdate()\r\n\r\n}\r\n\r\n/** 过渡模式:立即选中全部,恢复全部楼层启用且不透明 */\r\nfunction resetToAllOnTransitioning(host: FloorSwitchHost): void {\r\n\r\n pendingUserFloorSwitch.delete(host)\r\n\r\n const floors = host.option.floors ?? []\r\n\r\n setCurrentFloor(host, 'all')\r\n\r\n if (host.qspace && floors.length > 0) {\r\n\r\n applyFloorVisibilityInModelView(host.qspace, 'all', floors)\r\n\r\n }\r\n\r\n}\r\n\r\nexport type FloorSwitchHost = HTMLElement & {\r\n\r\n qspace: any\r\n option: FloorSwitchOption\r\n enabled: boolean\r\n scrollOffset: number\r\n upActive: boolean\r\n downActive: boolean\r\n requestUpdate: () => void\r\n toggleAttribute: (name: string, force?: boolean) => void\r\n setEnabled: (value: boolean) => void\r\n onSelectFloor?: (floorIndex: number | 'all', e: Event) => void\r\n onScrollUp?: () => void\r\n onScrollDown?: () => void\r\n\r\n}\r\n\r\nexport function setFloorSwitchEnabled(host: FloorSwitchHost, value: boolean): void {\r\n\r\n host.setEnabled(value)\r\n\r\n}\r\n\r\n/** 按 view.mode 同步 enabled:视图过渡中禁用,稳定视图下可点 */\r\nexport function syncEnabledFromViewMode(host: FloorSwitchHost, mode?: string): void {\r\n\r\n const resolved = mode ?? getViewMode(host.qspace)\r\n\r\n switch (resolved) {\r\n\r\n case ViewMode.Panorama:\r\n case ViewMode.Dollhouse:\r\n case ViewMode.Floorplan:\r\n setFloorSwitchEnabled(host, true)\r\n break\r\n\r\n case ViewMode.Transitioning:\r\n setFloorSwitchEnabled(host, false)\r\n break\r\n\r\n default:\r\n break\r\n\r\n }\r\n\r\n}\r\n\r\n/** 有楼层数据即显示(含单层) */\r\nexport function isFloorSwitchVisible(host: FloorSwitchHost): boolean {\r\n\r\n return (host.option.floors?.length ?? 0) > 0\r\n\r\n}\r\n\r\n/** 楼层显示名:优先 floors[].name,否则 F{n} / B{n} */\r\nexport function getFloorLabel(host: FloorSwitchHost, idx: number): string {\r\n\r\n const item = host.option.floors?.find((floor) => floor.idx === idx)\r\n\r\n if (item?.name) {\r\n\r\n return item.name\r\n\r\n }\r\n\r\n if (idx >= 0) {\r\n\r\n return `F${idx + 1}`\r\n\r\n }\r\n\r\n return `B${-idx}`\r\n\r\n}\r\n\r\nexport function getAllLabel(host: FloorSwitchHost): string {\r\n\r\n return host.option?.allLabel ?? DEFAULT_ALL_LABEL\r\n\r\n}\r\n\r\n/** 倒序楼层列表,对齐作品编辑端 floorListReverse */\r\nexport function getFloorListReverse(host: FloorSwitchHost): FloorItem[] {\r\n\r\n return (host.option.floors ?? []).slice().reverse()\r\n\r\n}\r\n\r\nexport function syncVisibility(host: FloorSwitchHost): void {\r\n\r\n host.toggleAttribute('hidden', !isFloorSwitchVisible(host))\r\n\r\n}\r\n\r\n/** 按当前视图模式同步默认选中层 */\r\nfunction syncDefaultFloorForViewMode(\r\n host: FloorSwitchHost,\r\n mode?: string,\r\n options?: { forceFloorplan?: boolean; forcePanorama?: boolean },\r\n): void {\r\n\r\n const resolved = mode ?? getViewMode(host.qspace)\r\n\r\n if (resolved === ViewMode.Panorama) {\r\n\r\n applyPanoramaCurrentFloorFromModel(host, {\r\n force: options?.forcePanorama ?? false,\r\n })\r\n\r\n } else if (resolved === ViewMode.Floorplan) {\r\n\r\n applyFloorplanDefaultFloor(host, resolved, {\r\n force: options?.forceFloorplan ?? false,\r\n })\r\n\r\n }\r\n\r\n}\r\n\r\n/** 全景视图:按当前点位 / model.floor.idx 同步选中层 */\r\nexport function applyPanoramaCurrentFloorFromModel(\r\n host: FloorSwitchHost,\r\n options?: { force?: boolean },\r\n): void {\r\n\r\n if (!host.qspace) {\r\n\r\n return\r\n\r\n }\r\n\r\n if (isPanoramaViewMode(host.qspace)) {\r\n\r\n rememberStableViewMode(host, ViewMode.Panorama)\r\n\r\n }\r\n\r\n const floors = host.option.floors ?? []\r\n\r\n if (floors.length === 0) {\r\n\r\n return\r\n\r\n }\r\n\r\n if (!options?.force) {\r\n\r\n const explicitFloor = host.option?.currentFloor\r\n\r\n if (explicitFloor !== undefined && explicitFloor !== 'all') {\r\n\r\n return\r\n\r\n }\r\n\r\n }\r\n\r\n const idx = resolvePanoramaCurrentFloor(host.qspace, floors)\r\n\r\n if (idx === null) {\r\n\r\n return\r\n\r\n }\r\n\r\n setCurrentFloor(host, idx)\r\n\r\n}\r\n\r\n/** 平面视图:默认选中第一层并同步 SDK 楼层透明度与启用状态 */\r\nexport function applyFloorplanDefaultFloor(\r\n host: FloorSwitchHost,\r\n mode?: string,\r\n options?: { force?: boolean },\r\n): void {\r\n\r\n const floors = host.option.floors ?? []\r\n\r\n if (!host.qspace || floors.length === 0) {\r\n\r\n return\r\n\r\n }\r\n\r\n const resolved = mode ?? getViewMode(host.qspace)\r\n\r\n if (resolved !== ViewMode.Floorplan) {\r\n\r\n return\r\n\r\n }\r\n\r\n if (!options?.force) {\r\n\r\n const explicitFloor = host.option?.currentFloor\r\n\r\n if (explicitFloor !== undefined && explicitFloor !== 'all') {\r\n\r\n return\r\n\r\n }\r\n\r\n }\r\n\r\n const firstIdx = resolveFirstFloorIdx(floors)\r\n\r\n if (firstIdx === null) {\r\n\r\n return\r\n\r\n }\r\n\r\n setCurrentFloor(host, firstIdx)\r\n\r\n applyFloorSelection(host.qspace, firstIdx, floors)\r\n\r\n}\r\n\r\n/** 首入视图:core.loaded 后,当前为平面视图时默认选中第一层 */\r\nfunction applyInitialEntryView(host: FloorSwitchHost, mode?: string): void {\r\n\r\n const resolved = mode ?? getViewMode(host.qspace)\r\n\r\n if (resolved !== ViewMode.Floorplan) {\r\n\r\n return\r\n\r\n }\r\n\r\n applyFloorplanDefaultFloor(host, resolved, { force: true })\r\n\r\n}\r\n\r\n/** core.loaded:同步 enabled;平面视图首入默认第一层 */\r\nexport function handleCoreLoaded(host: FloorSwitchHost): void {\r\n\r\n syncVisibility(host)\r\n\r\n const mode = host.qspace?.view?.mode\r\n\r\n rememberStableViewMode(host, mode)\r\n\r\n syncEnabledFromViewMode(host, mode)\r\n\r\n applyInitialEntryView(host, mode)\r\n\r\n host.requestUpdate()\r\n\r\n}\r\n\r\n/** 视图模式变化:过渡中禁用并恢复全部楼层;切到全景 / 平面时同步默认楼层 */\r\nexport function handleViewModeChange(host: FloorSwitchHost, mode: string): void {\r\n\r\n if (mode === ViewMode.Transitioning) {\r\n\r\n resetToAllOnTransitioning(host)\r\n\r\n } else {\r\n\r\n rememberStableViewMode(host, mode)\r\n\r\n }\r\n\r\n syncEnabledFromViewMode(host, mode)\r\n\r\n if (mode !== ViewMode.Transitioning) {\r\n\r\n syncDefaultFloorForViewMode(host, mode, {\r\n forceFloorplan: mode === ViewMode.Floorplan,\r\n forcePanorama: mode === ViewMode.Panorama,\r\n })\r\n\r\n if (mode === ViewMode.Panorama) {\r\n\r\n queueMicrotask(() => {\r\n\r\n if (!isPanoramaViewMode(host.qspace)) {\r\n\r\n return\r\n\r\n }\r\n\r\n applyPanoramaCurrentFloorFromModel(host, { force: true })\r\n host.requestUpdate()\r\n\r\n })\r\n\r\n } else if (mode === ViewMode.Floorplan) {\r\n\r\n queueMicrotask(() => {\r\n\r\n if (getViewMode(host.qspace) !== ViewMode.Floorplan) {\r\n\r\n return\r\n\r\n }\r\n\r\n applyFloorplanDefaultFloor(host, ViewMode.Floorplan, { force: true })\r\n host.requestUpdate()\r\n\r\n })\r\n\r\n }\r\n\r\n }\r\n\r\n host.requestUpdate()\r\n\r\n}\r\n\r\n/** 点位切换开始:全景下禁用按钮 */\r\nexport function handleWaypointStart(host: FloorSwitchHost): void {\r\n\r\n if (isPanoramaViewMode(host.qspace)) {\r\n\r\n setFloorSwitchEnabled(host, false)\r\n\r\n host.requestUpdate()\r\n\r\n }\r\n\r\n}\r\n\r\n/** 点位切换完成:同步选中层;楼层与选中态不一致或用户点击楼层切换完成后派发 complete */\r\nexport function handleWaypointComplete(\r\n host: FloorSwitchHost,\r\n data?: { current_pano_id?: string },\r\n): void {\r\n\r\n const pending = pendingUserFloorSwitch.get(host)\r\n\r\n if (isPanoramaViewMode(host.qspace)) {\r\n\r\n const floors = host.option.floors ?? []\r\n const locationId = data?.current_pano_id\r\n ?? resolveCurrentPanoramaLocationId(host.qspace)\r\n ?? ''\r\n const idx = locationId\r\n ? resolveFloorIdxByLocationId(host.qspace, locationId, floors)\r\n : null\r\n\r\n if (idx !== null) {\r\n\r\n if (`${getCurrentFloor(host)}` !== `${idx}`) {\r\n\r\n setCurrentFloor(host, idx)\r\n dispatchComplete(host, idx)\r\n\r\n } else if (pending !== undefined) {\r\n\r\n dispatchComplete(host, pending)\r\n\r\n }\r\n\r\n pendingUserFloorSwitch.delete(host)\r\n\r\n } else {\r\n\r\n applyPanoramaCurrentFloorFromModel(host, { force: true })\r\n\r\n if (pending !== undefined) {\r\n\r\n dispatchComplete(host, pending)\r\n pendingUserFloorSwitch.delete(host)\r\n\r\n }\r\n\r\n }\r\n\r\n }\r\n\r\n syncEnabledFromViewMode(host)\r\n\r\n host.requestUpdate()\r\n\r\n}\r\n\r\n/** 点击某一楼层(或全部) */\r\nexport function handleSelectFloor(\r\n host: FloorSwitchHost,\r\n floorIndex: number | 'all',\r\n e: Event,\r\n): void {\r\n\r\n if (!host.enabled) {\r\n\r\n e.preventDefault()\r\n e.stopPropagation()\r\n\r\n return\r\n\r\n }\r\n\r\n if (`${floorIndex}` === `${getCurrentFloor(host)}`) {\r\n\r\n return\r\n\r\n }\r\n\r\n dispatchClick(host, floorIndex, e)\r\n\r\n setCurrentFloor(host, floorIndex)\r\n\r\n if (host.qspace) {\r\n\r\n if (isPanoramaViewMode(host.qspace)) {\r\n\r\n setFloorSwitchEnabled(host, false)\r\n\r\n }\r\n\r\n applyFloorSelection(host.qspace, floorIndex, host.option.floors ?? [])\r\n\r\n if (floorIndex !== 'all' && !isPanoramaViewMode(host.qspace)) {\r\n\r\n dispatchComplete(host, floorIndex)\r\n\r\n } else if (floorIndex !== 'all' && isPanoramaViewMode(host.qspace)) {\r\n\r\n pendingUserFloorSwitch.set(host, floorIndex)\r\n\r\n }\r\n\r\n } else if (floorIndex !== 'all') {\r\n\r\n dispatchComplete(host, floorIndex)\r\n\r\n }\r\n\r\n host.requestUpdate()\r\n\r\n}\r\n\r\nexport function handleScrollUp(host: FloorSwitchHost): void {\r\n\r\n if (!host.enabled || host.scrollOffset === 0) {\r\n\r\n return\r\n\r\n }\r\n\r\n host.downActive = true\r\n host.scrollOffset += 1\r\n\r\n host.requestUpdate()\r\n\r\n}\r\n\r\nexport function handleScrollDown(host: FloorSwitchHost): void {\r\n\r\n if (!host.enabled) {\r\n\r\n return\r\n\r\n }\r\n\r\n const floorList = host.option.floors ?? []\r\n const { scrollOffset } = host\r\n\r\n if (-scrollOffset + SCROLLABLE_FLOOR_COUNT >= floorList.length) {\r\n\r\n return\r\n\r\n }\r\n\r\n if (-scrollOffset + SCROLLABLE_FLOOR_COUNT === floorList.length - 1) {\r\n\r\n host.downActive = false\r\n\r\n }\r\n\r\n host.upActive = true\r\n host.scrollOffset -= 1\r\n\r\n host.requestUpdate()\r\n\r\n}\r\n\r\nexport function getTranslateStyle(host: FloorSwitchHost): string {\r\n\r\n return `transform: translateY(${host.scrollOffset * FLOOR_ITEM_HEIGHT}px)`\r\n\r\n}\r\n\r\nexport function isAllFloorActive(host: FloorSwitchHost): boolean {\r\n\r\n return `${getCurrentFloor(host)}` === 'all'\r\n\r\n}\r\n\r\nexport function isFloorActive(host: FloorSwitchHost, idx: number): boolean {\r\n\r\n return `${idx}` === `${getCurrentFloor(host)}`\r\n\r\n}\r\n\r\nexport function showScrollArrows(host: FloorSwitchHost): boolean {\r\n\r\n return (host.option.floors?.length ?? 0) > SCROLLABLE_FLOOR_COUNT\r\n\r\n}\r\n\r\nexport function isUpArrowActive(host: FloorSwitchHost): boolean {\r\n\r\n return host.upActive && host.scrollOffset !== 0\r\n\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { FloorItem } from './properties.js';
|
|
2
|
+
/**
|
|
3
|
+
* 模型 API:Lit 组件接收 raw qspace(space.qspace),楼层能力在 qspace.model
|
|
4
|
+
* 编辑端 Service 层使用 space.core.model 包装,此处与之对齐到同一底层 model
|
|
5
|
+
*/
|
|
6
|
+
export declare function resolveModel(qspace: any): any;
|
|
7
|
+
/** 当前视图模式 */
|
|
8
|
+
export declare function getViewMode(qspace: any): string;
|
|
9
|
+
export declare function isPanoramaViewMode(qspace: any): boolean;
|
|
10
|
+
/** 第一层:floorList 中 idx 最小项(通常为 F1 / idx 0) */
|
|
11
|
+
export declare function resolveFirstFloorIdx(floors: FloorItem[]): number | null;
|
|
12
|
+
/** 全景当前点位 location_id(兼容 SDK 多种字段) */
|
|
13
|
+
export declare function resolveCurrentPanoramaLocationId(qspace: any): string | null;
|
|
14
|
+
/** 全景视图下同步当前楼层:优先当前点位 flooridx,其次 model.floor.idx */
|
|
15
|
+
export declare function resolvePanoramaCurrentFloor(qspace: any, floors: FloorItem[]): number | null;
|
|
16
|
+
/** 根据点位 location_id 解析所在楼层 idx(须在 option.floors 内) */
|
|
17
|
+
export declare function resolveFloorIdxByLocationId(qspace: any, locationId: string, floors: FloorItem[]): number | null;
|
|
18
|
+
/** 全景视图:调用 model.switchFloor 切换楼层 */
|
|
19
|
+
export declare function switchFloorInPanorama(qspace: any, index: number | 'all'): void;
|
|
20
|
+
/**
|
|
21
|
+
* 3D / 平面视图:选中层 enable + 不透明,其余 disable + 半透明
|
|
22
|
+
* 对齐作品编辑端 SDK Core/model.switchFloor 中非全景分支
|
|
23
|
+
*/
|
|
24
|
+
export declare function applyFloorVisibilityInModelView(qspace: any, index: number | 'all', floors: FloorItem[]): void;
|
|
25
|
+
/** 按当前视图模式执行楼层操作 */
|
|
26
|
+
export declare function applyFloorSelection(qspace: any, index: number | 'all', floors: FloorItem[]): void;
|
|
27
|
+
//# sourceMappingURL=logic.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.d.ts","sourceRoot":"","sources":["../../../../src/components/common/lit-switch-floor/logic.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAGhD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,GAAG,GAAG,GAAG,CAI7C;AAED,aAAa;AACb,wBAAgB,WAAW,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,CAY/C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,GAAG,GAAG,OAAO,CAIvD;AAED,8CAA8C;AAC9C,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,GAAG,IAAI,CAUvE;AAED,sCAAsC;AACtC,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,GAAG,GAAG,MAAM,GAAG,IAAI,CA8B3E;AAED,qDAAqD;AACrD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,GAAG,EACX,MAAM,EAAE,SAAS,EAAE,GAClB,MAAM,GAAG,IAAI,CAsCf;AAED,sDAAsD;AACtD,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,GAAG,EACX,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,SAAS,EAAE,GAClB,MAAM,GAAG,IAAI,CA0Cf;AAED,qCAAqC;AACrC,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,KAAK,GAAG,IAAI,CAoB9E;AAED;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,MAAM,EAAE,SAAS,EAAE,GAClB,IAAI,CA6BN;AAED,oBAAoB;AACpB,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,GAAG,EACX,KAAK,EAAE,MAAM,GAAG,KAAK,EACrB,MAAM,EAAE,SAAS,EAAE,GAClB,IAAI,CAYN"}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { ViewMode } from "../../../enum/view.mode.js";
|
|
2
|
+
import { INACTIVE_FLOOR_OPACITY } from "./constants.js";
|
|
3
|
+
function resolveModel(qspace) {
|
|
4
|
+
var _a;
|
|
5
|
+
return (qspace == null ? void 0 : qspace.model) ?? ((_a = qspace == null ? void 0 : qspace.core) == null ? void 0 : _a.model) ?? null;
|
|
6
|
+
}
|
|
7
|
+
function getViewMode(qspace) {
|
|
8
|
+
var _a;
|
|
9
|
+
try {
|
|
10
|
+
return ((_a = qspace == null ? void 0 : qspace.view) == null ? void 0 : _a.mode) ?? "";
|
|
11
|
+
} catch {
|
|
12
|
+
return "";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
function isPanoramaViewMode(qspace) {
|
|
16
|
+
return getViewMode(qspace) === ViewMode.Panorama;
|
|
17
|
+
}
|
|
18
|
+
function resolveFirstFloorIdx(floors) {
|
|
19
|
+
if (floors.length === 0) {
|
|
20
|
+
return null;
|
|
21
|
+
}
|
|
22
|
+
return floors.reduce((first, floor) => floor.idx < first.idx ? floor : first).idx;
|
|
23
|
+
}
|
|
24
|
+
function resolveCurrentPanoramaLocationId(qspace) {
|
|
25
|
+
var _a, _b, _c, _d;
|
|
26
|
+
const model = resolveModel(qspace);
|
|
27
|
+
if (!model) {
|
|
28
|
+
return null;
|
|
29
|
+
}
|
|
30
|
+
const candidates = [
|
|
31
|
+
(_a = model.pano) == null ? void 0 : _a.location_id,
|
|
32
|
+
(_b = model.pano) == null ? void 0 : _b.id,
|
|
33
|
+
model.current_pano_id,
|
|
34
|
+
(_c = model.waypoint) == null ? void 0 : _c.location_id,
|
|
35
|
+
(_d = model.currentWaypoint) == null ? void 0 : _d.location_id
|
|
36
|
+
];
|
|
37
|
+
for (const id of candidates) {
|
|
38
|
+
if (typeof id === "string" && id.length > 0) {
|
|
39
|
+
return id;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
function resolvePanoramaCurrentFloor(qspace, floors) {
|
|
45
|
+
var _a, _b;
|
|
46
|
+
if (!isPanoramaViewMode(qspace)) {
|
|
47
|
+
return null;
|
|
48
|
+
}
|
|
49
|
+
const locationId = resolveCurrentPanoramaLocationId(qspace);
|
|
50
|
+
if (locationId) {
|
|
51
|
+
const fromWaypoint = resolveFloorIdxByLocationId(qspace, locationId, floors);
|
|
52
|
+
if (fromWaypoint !== null) {
|
|
53
|
+
return fromWaypoint;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
const idx = (_b = (_a = resolveModel(qspace)) == null ? void 0 : _a.floor) == null ? void 0 : _b.idx;
|
|
57
|
+
if (typeof idx !== "number") {
|
|
58
|
+
return null;
|
|
59
|
+
}
|
|
60
|
+
if (!floors.some((floor) => floor.idx === idx)) {
|
|
61
|
+
return null;
|
|
62
|
+
}
|
|
63
|
+
return idx;
|
|
64
|
+
}
|
|
65
|
+
function resolveFloorIdxByLocationId(qspace, locationId, floors) {
|
|
66
|
+
var _a;
|
|
67
|
+
if (!locationId || floors.length === 0) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
const waypoints = (_a = resolveModel(qspace)) == null ? void 0 : _a.waypoints;
|
|
71
|
+
if (!Array.isArray(waypoints)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
const waypoint = waypoints.find(
|
|
75
|
+
(item) => item.location_id === locationId
|
|
76
|
+
);
|
|
77
|
+
if (!waypoint) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
const flooridx = waypoint.flooridx;
|
|
81
|
+
if (typeof flooridx !== "number") {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
if (!floors.some((floor) => floor.idx === flooridx)) {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
return flooridx;
|
|
88
|
+
}
|
|
89
|
+
function switchFloorInPanorama(qspace, index) {
|
|
90
|
+
const model = resolveModel(qspace);
|
|
91
|
+
if (!(model == null ? void 0 : model.switchFloor)) {
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
if (index === "all") {
|
|
95
|
+
model.switchFloor("all");
|
|
96
|
+
return;
|
|
97
|
+
}
|
|
98
|
+
model.switchFloor(index);
|
|
99
|
+
}
|
|
100
|
+
function applyFloorVisibilityInModelView(qspace, index, floors) {
|
|
101
|
+
const model = resolveModel(qspace);
|
|
102
|
+
if (!model) {
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
floors.forEach((floor) => {
|
|
106
|
+
var _a, _b, _c, _d, _e;
|
|
107
|
+
const isActive = index === "all" || floor.idx === index;
|
|
108
|
+
if (isActive) {
|
|
109
|
+
(_a = model.enableFloor) == null ? void 0 : _a.call(model, floor.idx);
|
|
110
|
+
(_b = model.showFloor) == null ? void 0 : _b.call(model, floor.idx);
|
|
111
|
+
(_c = model.setFloorOpacity) == null ? void 0 : _c.call(model, floor.idx, 1);
|
|
112
|
+
return;
|
|
113
|
+
}
|
|
114
|
+
(_d = model.disableFloor) == null ? void 0 : _d.call(model, floor.idx);
|
|
115
|
+
(_e = model.setFloorOpacity) == null ? void 0 : _e.call(model, floor.idx, INACTIVE_FLOOR_OPACITY);
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
function applyFloorSelection(qspace, index, floors) {
|
|
119
|
+
if (isPanoramaViewMode(qspace)) {
|
|
120
|
+
switchFloorInPanorama(qspace, index);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
applyFloorVisibilityInModelView(qspace, index, floors);
|
|
124
|
+
}
|
|
125
|
+
export {
|
|
126
|
+
applyFloorSelection,
|
|
127
|
+
applyFloorVisibilityInModelView,
|
|
128
|
+
getViewMode,
|
|
129
|
+
isPanoramaViewMode,
|
|
130
|
+
resolveCurrentPanoramaLocationId,
|
|
131
|
+
resolveFirstFloorIdx,
|
|
132
|
+
resolveFloorIdxByLocationId,
|
|
133
|
+
resolveModel,
|
|
134
|
+
resolvePanoramaCurrentFloor,
|
|
135
|
+
switchFloorInPanorama
|
|
136
|
+
};
|
|
137
|
+
//# sourceMappingURL=logic.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logic.js","sources":["../../../../src/components/common/lit-switch-floor/logic.ts"],"sourcesContent":["/*\r\n * @Author: ncz\r\n * @Date: 2026-05-30\r\n * @Description: lit-switch-floor 楼层切换(数据由宿主传入,按视图模式调用 SDK)\r\n */\r\n\r\nimport { ViewMode } from '@/enum/view.mode'\r\nimport type { FloorItem } from './properties.js'\r\nimport { INACTIVE_FLOOR_OPACITY } from './constants.js'\r\n\r\n/**\r\n * 模型 API:Lit 组件接收 raw qspace(space.qspace),楼层能力在 qspace.model\r\n * 编辑端 Service 层使用 space.core.model 包装,此处与之对齐到同一底层 model\r\n */\r\nexport function resolveModel(qspace: any): any {\r\n\r\n return qspace?.model ?? qspace?.core?.model ?? null\r\n\r\n}\r\n\r\n/** 当前视图模式 */\r\nexport function getViewMode(qspace: any): string {\r\n\r\n try {\r\n\r\n return qspace?.view?.mode ?? ''\r\n\r\n } catch {\r\n\r\n return ''\r\n\r\n }\r\n\r\n}\r\n\r\nexport function isPanoramaViewMode(qspace: any): boolean {\r\n\r\n return getViewMode(qspace) === ViewMode.Panorama\r\n\r\n}\r\n\r\n/** 第一层:floorList 中 idx 最小项(通常为 F1 / idx 0) */\r\nexport function resolveFirstFloorIdx(floors: FloorItem[]): number | null {\r\n\r\n if (floors.length === 0) {\r\n\r\n return null\r\n\r\n }\r\n\r\n return floors.reduce((first, floor) => (floor.idx < first.idx ? floor : first)).idx\r\n\r\n}\r\n\r\n/** 全景当前点位 location_id(兼容 SDK 多种字段) */\r\nexport function resolveCurrentPanoramaLocationId(qspace: any): string | null {\r\n\r\n const model = resolveModel(qspace)\r\n\r\n if (!model) {\r\n\r\n return null\r\n\r\n }\r\n\r\n const candidates = [\r\n model.pano?.location_id,\r\n model.pano?.id,\r\n model.current_pano_id,\r\n model.waypoint?.location_id,\r\n model.currentWaypoint?.location_id,\r\n ]\r\n\r\n for (const id of candidates) {\r\n\r\n if (typeof id === 'string' && id.length > 0) {\r\n\r\n return id\r\n\r\n }\r\n\r\n }\r\n\r\n return null\r\n\r\n}\r\n\r\n/** 全景视图下同步当前楼层:优先当前点位 flooridx,其次 model.floor.idx */\r\nexport function resolvePanoramaCurrentFloor(\r\n qspace: any,\r\n floors: FloorItem[],\r\n): number | null {\r\n\r\n if (!isPanoramaViewMode(qspace)) {\r\n\r\n return null\r\n\r\n }\r\n\r\n const locationId = resolveCurrentPanoramaLocationId(qspace)\r\n\r\n if (locationId) {\r\n\r\n const fromWaypoint = resolveFloorIdxByLocationId(qspace, locationId, floors)\r\n\r\n if (fromWaypoint !== null) {\r\n\r\n return fromWaypoint\r\n\r\n }\r\n\r\n }\r\n\r\n const idx = resolveModel(qspace)?.floor?.idx\r\n\r\n if (typeof idx !== 'number') {\r\n\r\n return null\r\n\r\n }\r\n\r\n if (!floors.some((floor) => floor.idx === idx)) {\r\n\r\n return null\r\n\r\n }\r\n\r\n return idx\r\n\r\n}\r\n\r\n/** 根据点位 location_id 解析所在楼层 idx(须在 option.floors 内) */\r\nexport function resolveFloorIdxByLocationId(\r\n qspace: any,\r\n locationId: string,\r\n floors: FloorItem[],\r\n): number | null {\r\n\r\n if (!locationId || floors.length === 0) {\r\n\r\n return null\r\n\r\n }\r\n\r\n const waypoints = resolveModel(qspace)?.waypoints\r\n\r\n if (!Array.isArray(waypoints)) {\r\n\r\n return null\r\n\r\n }\r\n\r\n const waypoint = waypoints.find(\r\n (item: { location_id?: string }) => item.location_id === locationId,\r\n )\r\n\r\n if (!waypoint) {\r\n\r\n return null\r\n\r\n }\r\n\r\n const flooridx = waypoint.flooridx\r\n\r\n if (typeof flooridx !== 'number') {\r\n\r\n return null\r\n\r\n }\r\n\r\n if (!floors.some((floor) => floor.idx === flooridx)) {\r\n\r\n return null\r\n\r\n }\r\n\r\n return flooridx\r\n\r\n}\r\n\r\n/** 全景视图:调用 model.switchFloor 切换楼层 */\r\nexport function switchFloorInPanorama(qspace: any, index: number | 'all'): void {\r\n\r\n const model = resolveModel(qspace)\r\n\r\n if (!model?.switchFloor) {\r\n\r\n return\r\n\r\n }\r\n\r\n if (index === 'all') {\r\n\r\n model.switchFloor('all')\r\n\r\n return\r\n\r\n }\r\n\r\n model.switchFloor(index)\r\n\r\n}\r\n\r\n/**\r\n * 3D / 平面视图:选中层 enable + 不透明,其余 disable + 半透明\r\n * 对齐作品编辑端 SDK Core/model.switchFloor 中非全景分支\r\n */\r\nexport function applyFloorVisibilityInModelView(\r\n qspace: any,\r\n index: number | 'all',\r\n floors: FloorItem[],\r\n): void {\r\n\r\n const model = resolveModel(qspace)\r\n\r\n if (!model) {\r\n\r\n return\r\n\r\n }\r\n\r\n floors.forEach((floor) => {\r\n\r\n const isActive = index === 'all' || floor.idx === index\r\n\r\n if (isActive) {\r\n\r\n model.enableFloor?.(floor.idx)\r\n model.showFloor?.(floor.idx)\r\n model.setFloorOpacity?.(floor.idx, 1)\r\n\r\n return\r\n\r\n }\r\n\r\n model.disableFloor?.(floor.idx)\r\n model.setFloorOpacity?.(floor.idx, INACTIVE_FLOOR_OPACITY)\r\n\r\n })\r\n\r\n}\r\n\r\n/** 按当前视图模式执行楼层操作 */\r\nexport function applyFloorSelection(\r\n qspace: any,\r\n index: number | 'all',\r\n floors: FloorItem[],\r\n): void {\r\n\r\n if (isPanoramaViewMode(qspace)) {\r\n\r\n switchFloorInPanorama(qspace, index)\r\n\r\n return\r\n\r\n }\r\n\r\n applyFloorVisibilityInModelView(qspace, index, floors)\r\n\r\n}\r\n"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/** 渲染用楼层项(来自宿主 option.floors) */
|
|
2
|
+
export type FloorItem = {
|
|
3
|
+
idx: number;
|
|
4
|
+
name?: string;
|
|
5
|
+
};
|
|
6
|
+
/** 宿主传入的楼层项;Vue: :option="{ floors: [{ idx, name }] }" */
|
|
7
|
+
export type FloorOptionItem = {
|
|
8
|
+
idx: number;
|
|
9
|
+
name: string;
|
|
10
|
+
};
|
|
11
|
+
/** 宿主配置;楼层数据须由宿主获取后传入,组件内部不拉取 model */
|
|
12
|
+
export type FloorSwitchOption = {
|
|
13
|
+
/** 楼层列表(idx、name) */
|
|
14
|
+
floors?: FloorOptionItem[];
|
|
15
|
+
/** 当前选中楼层;默认「全部」,组件在点击 / SDK 同步时写入 */
|
|
16
|
+
currentFloor?: number | 'all';
|
|
17
|
+
/** 「全部」文案,默认「全部」 */
|
|
18
|
+
allLabel?: string;
|
|
19
|
+
};
|
|
20
|
+
/** 布尔属性转换器 */
|
|
21
|
+
export declare const booleanAttr: {
|
|
22
|
+
fromAttribute(value: string | null): boolean;
|
|
23
|
+
toAttribute(value: boolean): string | null;
|
|
24
|
+
};
|
|
25
|
+
//# sourceMappingURL=properties.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../../src/components/common/lit-switch-floor/properties.ts"],"names":[],"mappings":"AAMA,iCAAiC;AACjC,MAAM,MAAM,SAAS,GAAG;IAEtB,GAAG,EAAE,MAAM,CAAA;IAEX,IAAI,CAAC,EAAE,MAAM,CAAA;CAEd,CAAA;AAED,0DAA0D;AAC1D,MAAM,MAAM,eAAe,GAAG;IAE5B,GAAG,EAAE,MAAM,CAAA;IAEX,IAAI,EAAE,MAAM,CAAA;CAEb,CAAA;AAED,uCAAuC;AACvC,MAAM,MAAM,iBAAiB,GAAG;IAE9B,qBAAqB;IACrB,MAAM,CAAC,EAAE,eAAe,EAAE,CAAA;IAE1B,sCAAsC;IACtC,YAAY,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;IAE7B,oBAAoB;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAElB,CAAA;AAED,cAAc;AACd,eAAO,MAAM,WAAW;yBACD,MAAM,GAAG,IAAI,GAAG,OAAO;uBAQzB,OAAO,GAAG,MAAM,GAAG,IAAI;CAK3C,CAAA"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
const booleanAttr = {
|
|
2
|
+
fromAttribute(value) {
|
|
3
|
+
if (value === null) return false;
|
|
4
|
+
if (value === "false" || value === "0") return false;
|
|
5
|
+
return true;
|
|
6
|
+
},
|
|
7
|
+
toAttribute(value) {
|
|
8
|
+
return value ? "" : null;
|
|
9
|
+
}
|
|
10
|
+
};
|
|
11
|
+
export {
|
|
12
|
+
booleanAttr
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=properties.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"properties.js","sources":["../../../../src/components/common/lit-switch-floor/properties.ts"],"sourcesContent":["/*\r\n * @Author: ncz\r\n * @Date: 2026-05-30\r\n * @Description: lit-switch-floor 属性类型\r\n */\r\n\r\n/** 渲染用楼层项(来自宿主 option.floors) */\r\nexport type FloorItem = {\r\n\r\n idx: number\r\n\r\n name?: string\r\n\r\n}\r\n\r\n/** 宿主传入的楼层项;Vue: :option=\"{ floors: [{ idx, name }] }\" */\r\nexport type FloorOptionItem = {\r\n\r\n idx: number\r\n\r\n name: string\r\n\r\n}\r\n\r\n/** 宿主配置;楼层数据须由宿主获取后传入,组件内部不拉取 model */\r\nexport type FloorSwitchOption = {\r\n\r\n /** 楼层列表(idx、name) */\r\n floors?: FloorOptionItem[]\r\n\r\n /** 当前选中楼层;默认「全部」,组件在点击 / SDK 同步时写入 */\r\n currentFloor?: number | 'all'\r\n\r\n /** 「全部」文案,默认「全部」 */\r\n allLabel?: string\r\n\r\n}\r\n\r\n/** 布尔属性转换器 */\r\nexport const booleanAttr = {\r\n fromAttribute(value: string | null): boolean {\r\n\r\n if (value === null) return false\r\n if (value === 'false' || value === '0') return false\r\n\r\n return true\r\n\r\n },\r\n toAttribute(value: boolean): string | null {\r\n\r\n return value ? '' : null\r\n\r\n },\r\n}\r\n"],"names":[],"mappings":"AAuCO,MAAM,cAAc;AAAA,EACzB,cAAc,OAA+B;AAE3C,QAAI,UAAU,KAAM,QAAO;AAC3B,QAAI,UAAU,WAAW,UAAU,IAAK,QAAO;AAE/C,WAAO;AAAA,EAET;AAAA,EACA,YAAY,OAA+B;AAEzC,WAAO,QAAQ,KAAK;AAAA,EAEtB;AACF;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"styles.d.ts","sourceRoot":"","sources":["../../../../src/components/common/lit-switch-floor/styles.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,MAAM,yBAoGlB,CAAA"}
|