create ui lib, grouping
This commit is contained in:
parent
f0b877f11b
commit
77149c180b
|
@ -5,13 +5,11 @@
|
|||
"files": [
|
||||
"dist"
|
||||
],
|
||||
"main": "./dist/client.umd.cjs",
|
||||
"module": "./dist/client.js",
|
||||
"types": "./dist/index.d.ts",
|
||||
"exports": {
|
||||
".": {
|
||||
"import": "./dist/client.js",
|
||||
"require": "./dist/client.umd.cjs"
|
||||
"import": "./dist/client.js"
|
||||
},
|
||||
"./dist/style.css": {
|
||||
"import": "./dist/style.css",
|
||||
|
|
|
@ -12,7 +12,7 @@ export default defineConfig({
|
|||
entry: 'src/index.ts',
|
||||
name: 'Client',
|
||||
fileName: 'client',
|
||||
formats: ['es', 'cjs', 'umd'],
|
||||
formats: ['es'],
|
||||
},
|
||||
rollupOptions: {
|
||||
external: ['vue'],
|
||||
|
|
|
@ -16,12 +16,13 @@
|
|||
import { computed, ref } from 'vue';
|
||||
import { Editor, SelectionEvent } from '../editor';
|
||||
import Menu from './menu/Menu.vue';
|
||||
import { WorldFile, instancableGameObjects } from '@freeblox/engine';
|
||||
import { Group, WorldFile, instancableGameObjects } from '@freeblox/engine';
|
||||
import { useEditorEvents } from '../composables/use-editor-events';
|
||||
import { exportToFile } from '../utils/export-file';
|
||||
import { readFileToString } from '../utils/read-file';
|
||||
|
||||
const selection = ref(false);
|
||||
const groupState = ref(0);
|
||||
const currentlyOpen = ref<string | undefined>(undefined);
|
||||
|
||||
const props = defineProps<{
|
||||
|
@ -92,6 +93,19 @@ const editMenu = computed(() => [
|
|||
disabled: !selection.value,
|
||||
onClick: () => props.editor.events.emit('duplicate'),
|
||||
},
|
||||
{
|
||||
id: 'group',
|
||||
label: groupState.value === 2 ? 'Ungroup' : 'Group',
|
||||
shortcut: 'CTRL+G',
|
||||
disabled: !selection.value,
|
||||
onClick: () => props.editor.events.emit('group'),
|
||||
},
|
||||
{
|
||||
id: 'selectAll',
|
||||
label: 'Select all',
|
||||
shortcut: 'CTRL+A',
|
||||
onClick: () => props.editor.events.emit('selectAll'),
|
||||
},
|
||||
{
|
||||
id: 'delete',
|
||||
label: 'Delete',
|
||||
|
@ -146,6 +160,16 @@ const loadLevelFromFile = async () => {
|
|||
|
||||
const setSelectionPreset = (event: SelectionEvent) => {
|
||||
selection.value = !!event.selection?.length;
|
||||
if (!event.selection.length) {
|
||||
groupState.value = 0;
|
||||
} else if (
|
||||
event.selection.length === 1 &&
|
||||
event.selection[0] instanceof Group
|
||||
) {
|
||||
groupState.value = 2;
|
||||
} else {
|
||||
groupState.value = 1;
|
||||
}
|
||||
};
|
||||
|
||||
register('selected', setSelectionPreset);
|
||||
|
|
|
@ -24,13 +24,14 @@ export class Editor extends Engine {
|
|||
this.render = new Renderer(element);
|
||||
this.render.renderer.autoClear = false;
|
||||
|
||||
this.use(HistoryComponent);
|
||||
this.use(ViewportComponent);
|
||||
this.use(EnvironmentComponent);
|
||||
this.use(LevelComponent);
|
||||
this.use(WorkspaceComponent);
|
||||
this.use(HistoryComponent);
|
||||
this.use(ShortcutsComponent);
|
||||
this.use(MouseComponent);
|
||||
|
||||
this.getComponent(ViewportComponent).setSizeFromViewport();
|
||||
this.start();
|
||||
}
|
||||
|
|
|
@ -54,13 +54,21 @@ export class HistoryComponent extends EngineComponent {
|
|||
if (!object) break;
|
||||
prevState[prop] = object[prop];
|
||||
|
||||
if (object[prop]?.clone) prevState[prop] = object[prop].clone();
|
||||
if (prop === 'parent') {
|
||||
(value as Object3D)?.attach(object);
|
||||
} else if (object[prop].copy && prop !== 'material') {
|
||||
object[prop].copy(value);
|
||||
prevState[prop] = object[prop];
|
||||
const parentObject = value as Object3D;
|
||||
if (!parentObject) {
|
||||
object.removeFromParent();
|
||||
this.events.emit('sceneLeave', object);
|
||||
}
|
||||
parentObject?.attach(object);
|
||||
} else {
|
||||
object[prop] = value;
|
||||
if (object[prop]?.clone) prevState[prop] = object[prop].clone();
|
||||
if (object[prop].copy && prop !== 'material') {
|
||||
object[prop].copy(value);
|
||||
} else {
|
||||
object[prop] = value;
|
||||
}
|
||||
}
|
||||
|
||||
this.events.emit('change', {
|
||||
|
@ -94,14 +102,21 @@ export class HistoryComponent extends EngineComponent {
|
|||
if (!object) break;
|
||||
prevState[prop] = object[prop];
|
||||
|
||||
if (object[prop]?.clone) prevState[prop] = object[prop].clone();
|
||||
if (prop === 'parent') {
|
||||
object?.removeFromParent();
|
||||
(value as Object3D)?.add(object);
|
||||
} else if (object[prop].copy && prop !== 'material') {
|
||||
object[prop].copy(value);
|
||||
prevState[prop] = object[prop];
|
||||
const parentObject = value as Object3D;
|
||||
if (!parentObject) {
|
||||
object.removeFromParent();
|
||||
this.events.emit('sceneLeave', object);
|
||||
}
|
||||
parentObject?.attach(object);
|
||||
} else {
|
||||
object[prop] = value;
|
||||
if (object[prop]?.clone) prevState[prop] = object[prop].clone();
|
||||
if (object[prop].copy && prop !== 'material') {
|
||||
object[prop].copy(value);
|
||||
} else {
|
||||
object[prop] = value;
|
||||
}
|
||||
}
|
||||
|
||||
this.events.emit('change', {
|
||||
|
@ -184,6 +199,10 @@ export class HistoryComponent extends EngineComponent {
|
|||
this.restory.length = 0;
|
||||
};
|
||||
|
||||
const sceneJoinEvent = (event: Object3D) => {
|
||||
this.add(event, { parent: null });
|
||||
};
|
||||
|
||||
this.events.addListener('change', changeEvent);
|
||||
this.events.addListener('transformStart', transformStart);
|
||||
this.events.addListener('transformEnd', transformEnd);
|
||||
|
@ -192,6 +211,7 @@ export class HistoryComponent extends EngineComponent {
|
|||
this.events.addListener('undo', undo);
|
||||
this.events.addListener('redo', redo);
|
||||
this.events.addListener('resetHistory', resetEvent);
|
||||
this.events.addListener('sceneJoin', sceneJoinEvent);
|
||||
|
||||
return () => {
|
||||
this.events.removeEventListener('change', changeEvent);
|
||||
|
@ -202,6 +222,7 @@ export class HistoryComponent extends EngineComponent {
|
|||
this.events.removeEventListener('undo', undo);
|
||||
this.events.removeEventListener('redo', redo);
|
||||
this.events.removeEventListener('resetHistory', resetEvent);
|
||||
this.events.removeEventListener('sceneJoin', sceneJoinEvent);
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -60,6 +60,12 @@ export class ShortcutsComponent extends EngineComponent {
|
|||
case 'y':
|
||||
this.events.emit('redo');
|
||||
break;
|
||||
case 'g':
|
||||
this.events.emit('group');
|
||||
break;
|
||||
case 'a':
|
||||
this.events.emit('selectAll');
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -6,6 +6,7 @@ import {
|
|||
EventEmitter,
|
||||
GameObject,
|
||||
GameObject3D,
|
||||
Group,
|
||||
MouseButtonEvent,
|
||||
Renderer,
|
||||
TransformControls,
|
||||
|
@ -13,9 +14,13 @@ import {
|
|||
} from '@freeblox/engine';
|
||||
import {
|
||||
AxesHelper,
|
||||
Box3,
|
||||
Box3Helper,
|
||||
BoxHelper,
|
||||
Color,
|
||||
Euler,
|
||||
GridHelper,
|
||||
LineBasicMaterial,
|
||||
Material,
|
||||
MathUtils,
|
||||
Object3D,
|
||||
|
@ -42,10 +47,12 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
public background = new Object3D();
|
||||
public world = new World();
|
||||
public helpers = new Object3D();
|
||||
private box3 = new Box3();
|
||||
|
||||
public transformControls!: TransformControls;
|
||||
private grid!: GridHelper;
|
||||
private box!: BoxHelper;
|
||||
private boxes: BoxHelper[] = [];
|
||||
private box3Helper!: Box3Helper;
|
||||
private axes!: AxesHelper;
|
||||
private viewHelper!: ViewHelper;
|
||||
|
||||
|
@ -77,7 +84,7 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
}
|
||||
|
||||
update(dt: number) {
|
||||
this.box?.update();
|
||||
this.boxes.forEach((box) => box.update());
|
||||
|
||||
this.cameraControls?.update(dt);
|
||||
|
||||
|
@ -165,11 +172,13 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
const attachTo = this.selection.find(
|
||||
(item) => !(item as GameObject).virtual
|
||||
);
|
||||
|
||||
if (attachTo) {
|
||||
this.transformControls?.attach(attachTo);
|
||||
this.box.setFromObject(attachTo);
|
||||
this.box.visible = true;
|
||||
}
|
||||
|
||||
this.highlightSelection();
|
||||
this.setEncapsulatingBox3();
|
||||
};
|
||||
|
||||
const deselectedHandler = (select: SelectionEvent) => {
|
||||
|
@ -178,18 +187,18 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
this.selection.splice(index, 1);
|
||||
}
|
||||
|
||||
this.highlightSelection();
|
||||
this.setEncapsulatingBox3();
|
||||
|
||||
const attachTo = this.selection.find(
|
||||
(item) => !(item as GameObject).virtual
|
||||
);
|
||||
if (this.selection.length && attachTo) {
|
||||
this.transformControls?.attach(attachTo);
|
||||
this.box.setFromObject(attachTo);
|
||||
this.box.visible = true;
|
||||
return;
|
||||
}
|
||||
|
||||
this.transformControls?.detach();
|
||||
this.box.visible = false;
|
||||
};
|
||||
|
||||
const selectHandler = (event: SelectEvent) => {
|
||||
|
@ -276,6 +285,10 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
};
|
||||
|
||||
const changeListener = (change: ChangeEvent) => {
|
||||
if (['position', 'rotation', 'scale'].includes(change.property)) {
|
||||
this.setEncapsulatingBox3();
|
||||
}
|
||||
|
||||
if (change.object instanceof Environment) {
|
||||
this.events.emit('setEnvironment', {
|
||||
[change.property]: change.value,
|
||||
|
@ -289,6 +302,7 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
);
|
||||
if (!filteredSelection.length) return;
|
||||
|
||||
this.cutOperation = false;
|
||||
this.clipboard = [];
|
||||
filteredSelection.forEach((entry) => {
|
||||
this.clipboard.push(entry);
|
||||
|
@ -408,6 +422,83 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
this.events.emit('instance', { type: item });
|
||||
};
|
||||
|
||||
const groupEvent = () => {
|
||||
if (!this.selection.length) return;
|
||||
// Ungroup
|
||||
if (this.selection.length === 1 && this.selection[0] instanceof Group) {
|
||||
const group = this.selection[0];
|
||||
const objects = [...group.children];
|
||||
this.events.emit('reparent', {
|
||||
object: objects,
|
||||
parent: group.parent!,
|
||||
});
|
||||
this.events.emit('remove', { object: group });
|
||||
objects.forEach((obj, index) =>
|
||||
this.events.emit('select', {
|
||||
object: obj,
|
||||
multi: index !== 0,
|
||||
})
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
// Group
|
||||
const center = new Vector3();
|
||||
const tempBox = new Box3();
|
||||
const newGroup = new Group();
|
||||
this.selection.forEach((obj) => tempBox.expandByObject(obj));
|
||||
tempBox.getCenter(center);
|
||||
newGroup.position.copy(center);
|
||||
this.world.add(newGroup);
|
||||
this.events.emit('sceneJoin', newGroup);
|
||||
this.events.emit('reparent', {
|
||||
object: this.selection,
|
||||
parent: newGroup,
|
||||
});
|
||||
this.events.emit('select', { object: newGroup });
|
||||
};
|
||||
|
||||
// Deselect scene-leaves, usually by history
|
||||
const sceneLeaveEvent = (object: Object3D) => {
|
||||
if (!this.selection.length) return;
|
||||
const indexOf = this.selection.indexOf(object);
|
||||
if (indexOf > -1) {
|
||||
this.selection.splice(indexOf, 1);
|
||||
this.events.emit('deselected', {
|
||||
object,
|
||||
selection: this.selection,
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
const selectAllEvent = () => {
|
||||
if (this.selection.length) {
|
||||
const oldSelection = this.selection;
|
||||
this.selection = [];
|
||||
oldSelection.forEach((selection) =>
|
||||
this.events.emit('deselected', {
|
||||
object: selection,
|
||||
selection: [],
|
||||
picker: true,
|
||||
})
|
||||
);
|
||||
}
|
||||
|
||||
const basis = this.world.children.filter(
|
||||
(obj) => obj instanceof GameObject && !obj.virtual
|
||||
);
|
||||
|
||||
basis.forEach((item) => {
|
||||
this.selection.push(item);
|
||||
this.events.emit('selected', {
|
||||
object: item,
|
||||
selection: this.selection,
|
||||
multi: basis.length > 1,
|
||||
picker: true,
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
this.events.addListener('mouseDown', mouseDownEventHandler);
|
||||
this.events.addListener('mouseMove', mouseMoveEventHandler);
|
||||
this.events.addListener('mouseUp', mouseUpEventHandler);
|
||||
|
@ -426,6 +517,9 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
this.events.addListener('reset', resetEvent);
|
||||
this.events.addListener('duplicate', duplicateEvent);
|
||||
this.events.addListener('insert', insertEvent);
|
||||
this.events.addListener('group', groupEvent);
|
||||
this.events.addListener('selectAll', selectAllEvent);
|
||||
this.events.addListener('sceneLeave', sceneLeaveEvent);
|
||||
|
||||
return () => {
|
||||
this.events.removeEventListener('mouseDown', mouseDownEventHandler);
|
||||
|
@ -449,6 +543,9 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
this.events.removeEventListener('reset', resetEvent);
|
||||
this.events.removeEventListener('duplicate', duplicateEvent);
|
||||
this.events.removeEventListener('insert', insertEvent);
|
||||
this.events.removeEventListener('group', groupEvent);
|
||||
this.events.removeEventListener('selectAll', selectAllEvent);
|
||||
this.events.removeEventListener('sceneLeave', sceneLeaveEvent);
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -461,16 +558,57 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
this.grid = new GridHelper(100, 100);
|
||||
this.background.add(this.grid);
|
||||
|
||||
this.box = new BoxHelper(this.world, 0x00a2ff);
|
||||
(this.box.material as Material).depthTest = false;
|
||||
(this.box.material as Material).transparent = true;
|
||||
this.box.visible = false;
|
||||
this.helpers.add(this.box);
|
||||
|
||||
this.axes = new AxesHelper(50);
|
||||
this.helpers.add(this.axes);
|
||||
}
|
||||
|
||||
private makeSelectBox() {
|
||||
const box = new BoxHelper(this.world, 0x00a2ff);
|
||||
(box.material as Material).depthTest = false;
|
||||
(box.material as Material).transparent = true;
|
||||
(box.material as LineBasicMaterial).linewidth = 2;
|
||||
this.helpers.add(box);
|
||||
return box;
|
||||
}
|
||||
|
||||
private highlightSelection() {
|
||||
this.boxes.forEach((box) => {
|
||||
box.removeFromParent();
|
||||
box.dispose();
|
||||
});
|
||||
this.boxes.length = 0;
|
||||
if (!this.selection.length) return;
|
||||
|
||||
for (const selected of this.selection) {
|
||||
if ((selected as GameObject).virtual) continue;
|
||||
const box = this.makeSelectBox();
|
||||
box.setFromObject(selected);
|
||||
this.boxes.push(box);
|
||||
}
|
||||
}
|
||||
|
||||
private setEncapsulatingBox3() {
|
||||
this.box3.makeEmpty();
|
||||
if (this.box3Helper) {
|
||||
this.helpers.remove(this.box3Helper);
|
||||
this.box3Helper.dispose();
|
||||
}
|
||||
|
||||
const nonVirtual = this.selection.filter(
|
||||
(item) => !(item as GameObject).virtual
|
||||
);
|
||||
if (!nonVirtual.length) return;
|
||||
|
||||
nonVirtual.forEach((object) => this.box3.expandByObject(object));
|
||||
|
||||
if (nonVirtual.length <= 1) return;
|
||||
this.box3Helper = new Box3Helper(this.box3, new Color(0x00a2ff));
|
||||
(this.box3Helper.material as Material).depthTest = false;
|
||||
(this.box3Helper.material as Material).transparent = true;
|
||||
(this.box3Helper.material as LineBasicMaterial).linewidth = 4;
|
||||
this.helpers.add(this.box3Helper);
|
||||
}
|
||||
|
||||
private initializeControls() {
|
||||
let translationSnap: number | null = 0.5;
|
||||
let scaleSnap: number | null = 0.5;
|
||||
|
@ -480,7 +618,7 @@ export class WorkspaceComponent extends EngineComponent {
|
|||
if (this.cameraControls) this.cameraControls.dispose();
|
||||
if (this.transformControls) {
|
||||
translationSnap = this.transformControls.translationSnap;
|
||||
scaleSnap = (this.transformControls as any).scaleSnap; // FIXME: typedef bug
|
||||
scaleSnap = this.transformControls.scaleSnap;
|
||||
rotationSnap = this.transformControls.rotationSnap;
|
||||
mode = this.transformControls.getMode();
|
||||
this.helpers.remove(this.transformControls);
|
||||
|
|
|
@ -44,6 +44,8 @@ export type Events = {
|
|||
copy: () => void;
|
||||
delete: () => void;
|
||||
duplicate: () => void;
|
||||
group: () => void;
|
||||
selectAll: () => void;
|
||||
insert: (type: string) => void;
|
||||
paste: (event: Object3D | undefined) => void;
|
||||
resetHistory: () => void;
|
||||
|
|
|
@ -20,9 +20,9 @@ export class MouseComponent extends EngineComponent {
|
|||
private mouseButtonsLast: MouseMap = [false, false, false];
|
||||
|
||||
private mousePosition = new Vector2(0, 0);
|
||||
private mousePositionGL = new Vector2(0, 0);
|
||||
private mousepositionNDC = new Vector2(0, 0);
|
||||
private mousePositionLast = new Vector2(0, 0);
|
||||
private mousePositionGLLast = new Vector2(0, 0);
|
||||
private mousepositionNDCLast = new Vector2(0, 0);
|
||||
private canvasOffset = new Vector2(0, 0);
|
||||
|
||||
private cleanUpEvents?: Function;
|
||||
|
@ -45,7 +45,7 @@ export class MouseComponent extends EngineComponent {
|
|||
}
|
||||
|
||||
update(delta: number): void {
|
||||
this.ray.setFromCamera(this.mousePositionGL, this.renderer.camera);
|
||||
this.ray.setFromCamera(this.mousepositionNDC, this.renderer.camera);
|
||||
this.mouseButtonsLast = [...this.mouseButtons];
|
||||
}
|
||||
|
||||
|
@ -62,7 +62,7 @@ export class MouseComponent extends EngineComponent {
|
|||
this.mouseButtons[ev.button] = true;
|
||||
this.events.emit('mouseDown', {
|
||||
position: this.mousePosition,
|
||||
positionGL: this.mousePositionGL,
|
||||
positionNDC: this.mousepositionNDC,
|
||||
button: ev.button,
|
||||
target: object,
|
||||
shift: ev.shiftKey,
|
||||
|
@ -81,7 +81,7 @@ export class MouseComponent extends EngineComponent {
|
|||
this.mouseButtons[ev.button] = false;
|
||||
this.events.emit('mouseUp', {
|
||||
position: this.mousePosition,
|
||||
positionGL: this.mousePositionGL,
|
||||
positionNDC: this.mousepositionNDC,
|
||||
button: ev.button,
|
||||
target: object,
|
||||
shift: ev.shiftKey,
|
||||
|
@ -94,19 +94,19 @@ export class MouseComponent extends EngineComponent {
|
|||
|
||||
const mouseMove = (ev: MouseEvent) => {
|
||||
this.mousePositionLast = this.mousePosition.clone();
|
||||
this.mousePositionGLLast = this.mousePositionGL.clone();
|
||||
this.mousepositionNDCLast = this.mousepositionNDC.clone();
|
||||
|
||||
this.mousePosition.set(ev.clientX, ev.clientY).sub(this.canvasOffset);
|
||||
this.mousePositionGL.set(
|
||||
this.mousepositionNDC.set(
|
||||
(this.mousePosition.x / this.renderer.resolution.x) * 2 - 1,
|
||||
-(this.mousePosition.y / this.renderer.resolution.y) * 2 + 1
|
||||
);
|
||||
|
||||
this.events.emit('mouseMove', {
|
||||
position: this.mousePosition,
|
||||
positionGL: this.mousePositionGL,
|
||||
positionNDC: this.mousepositionNDC,
|
||||
offset: this.mousePositionLast.clone().sub(this.mousePosition),
|
||||
offsetGL: this.mousePositionGLLast.clone().sub(this.mousePositionGL),
|
||||
offsetGL: this.mousepositionNDCLast.clone().sub(this.mousepositionNDC),
|
||||
raw: ev,
|
||||
});
|
||||
};
|
||||
|
|
|
@ -34,6 +34,7 @@ export class PhysicsWorldComponent extends EngineComponent {
|
|||
this.cleanUpEvents?.call(this);
|
||||
this.physicsWorld.removeCharacterController(this.characterPhysics);
|
||||
for (const object of this.trackedObjects) object.dispose();
|
||||
this.physicsWorld.free();
|
||||
}
|
||||
|
||||
private createRapier() {
|
||||
|
|
|
@ -33,6 +33,7 @@ export class Engine extends GameRunner {
|
|||
for (const component of this.components) {
|
||||
component.dispose();
|
||||
}
|
||||
this.render.dispose();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -3,6 +3,7 @@ import {
|
|||
AnimationClip,
|
||||
AnimationMixer,
|
||||
LoopOnce,
|
||||
Quaternion,
|
||||
Skeleton,
|
||||
SkinnedMesh,
|
||||
Vector3,
|
||||
|
@ -15,7 +16,6 @@ import { NameTag } from './nametag.object';
|
|||
import { CanvasUtils } from '../canvas/utils';
|
||||
import { PhysicsTicking } from '../physics';
|
||||
import type Rapier from '@dimforge/rapier3d';
|
||||
import { Quaternion } from '@dimforge/rapier3d';
|
||||
|
||||
export type HumanoidBodyPart =
|
||||
| 'Head'
|
||||
|
@ -29,8 +29,8 @@ export class Humanoid extends GameObject implements PhysicsTicking {
|
|||
public isTickingObject = true;
|
||||
public objectType = 'Humanoid';
|
||||
public name = 'Humanoid';
|
||||
private ready = false;
|
||||
private skeleton!: Skeleton;
|
||||
protected ready = false;
|
||||
protected skeleton!: Skeleton;
|
||||
private _health = 100;
|
||||
private _maxHealth = 100;
|
||||
private _velocity = new Vector3(0, 0, 0);
|
||||
|
@ -70,14 +70,14 @@ export class Humanoid extends GameObject implements PhysicsTicking {
|
|||
public characterHeight = 5.5;
|
||||
public characterHalfHeight = this.characterHeight / 2;
|
||||
|
||||
private shouldJump = false;
|
||||
protected shouldJump = false;
|
||||
|
||||
private mixer!: AnimationMixer;
|
||||
protected mixer!: AnimationMixer;
|
||||
private idleAction!: AnimationAction;
|
||||
private walkAction!: AnimationAction;
|
||||
private jumpAction!: AnimationAction;
|
||||
|
||||
private nameTag?: NameTag;
|
||||
protected nameTag?: NameTag;
|
||||
|
||||
protected collider?: Rapier.Collider;
|
||||
protected rigidBody?: Rapier.RigidBody;
|
||||
|
@ -85,7 +85,7 @@ export class Humanoid extends GameObject implements PhysicsTicking {
|
|||
protected characterControllerRef?: Rapier.KinematicCharacterController;
|
||||
|
||||
@EditorProperty({ type: Number })
|
||||
public weight = -16;
|
||||
public mass = -8;
|
||||
|
||||
@EditorProperty({ type: Boolean })
|
||||
public jumpPower = 8;
|
||||
|
@ -123,6 +123,10 @@ export class Humanoid extends GameObject implements PhysicsTicking {
|
|||
this._grounded = value;
|
||||
}
|
||||
|
||||
private get weight() {
|
||||
return (this.physicsWorldRef?.gravity.y || -9.81) + this.mass;
|
||||
}
|
||||
|
||||
private get bodyParts() {
|
||||
return Humanoid.bodyPartNames.map((key) => this.getBodyPartByName(key));
|
||||
}
|
||||
|
|
|
@ -5,11 +5,10 @@ import {
|
|||
ColorRepresentation,
|
||||
Vector3,
|
||||
} from 'three';
|
||||
import { WorldFile } from './world-file';
|
||||
|
||||
export interface MousePositionEvent {
|
||||
position: Vector2;
|
||||
positionGL: Vector2;
|
||||
positionNDC: Vector2;
|
||||
raw: MouseEvent;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,24 @@
|
|||
# Logs
|
||||
logs
|
||||
*.log
|
||||
npm-debug.log*
|
||||
yarn-debug.log*
|
||||
yarn-error.log*
|
||||
pnpm-debug.log*
|
||||
lerna-debug.log*
|
||||
|
||||
node_modules
|
||||
dist
|
||||
dist-ssr
|
||||
*.local
|
||||
|
||||
# Editor directories and files
|
||||
.vscode/*
|
||||
!.vscode/extensions.json
|
||||
.idea
|
||||
.DS_Store
|
||||
*.suo
|
||||
*.ntvs*
|
||||
*.njsproj
|
||||
*.sln
|
||||
*.sw?
|
|
@ -0,0 +1,18 @@
|
|||
# Vue 3 + TypeScript + Vite
|
||||
|
||||
This template should help get you started developing with Vue 3 and TypeScript in Vite. The template uses Vue 3 `<script setup>` SFCs, check out the [script setup docs](https://v3.vuejs.org/api/sfc-script-setup.html#sfc-script-setup) to learn more.
|
||||
|
||||
## Recommended IDE Setup
|
||||
|
||||
- [VS Code](https://code.visualstudio.com/) + [Volar](https://marketplace.visualstudio.com/items?itemName=Vue.volar) (and disable Vetur) + [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin).
|
||||
|
||||
## Type Support For `.vue` Imports in TS
|
||||
|
||||
TypeScript cannot handle type information for `.vue` imports by default, so we replace the `tsc` CLI with `vue-tsc` for type checking. In editors, we need [TypeScript Vue Plugin (Volar)](https://marketplace.visualstudio.com/items?itemName=Vue.vscode-typescript-vue-plugin) to make the TypeScript language service aware of `.vue` types.
|
||||
|
||||
If the standalone TypeScript plugin doesn't feel fast enough to you, Volar has also implemented a [Take Over Mode](https://github.com/johnsoncodehk/volar/discussions/471#discussioncomment-1361669) that is more performant. You can enable it by the following steps:
|
||||
|
||||
1. Disable the built-in TypeScript Extension
|
||||
1. Run `Extensions: Show Built-in Extensions` from VSCode's command palette
|
||||
2. Find `TypeScript and JavaScript Language Features`, right click and select `Disable (Workspace)`
|
||||
2. Reload the VSCode window by running `Developer: Reload Window` from the command palette.
|
|
@ -0,0 +1,13 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<link rel="icon" type="image/svg+xml" href="/vite.svg" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>Freeblox UI Library</title>
|
||||
</head>
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
<script type="module" src="/src/main.ts"></script>
|
||||
</body>
|
||||
</html>
|
|
@ -0,0 +1,21 @@
|
|||
{
|
||||
"name": "@freeblox/ui-lib",
|
||||
"private": true,
|
||||
"version": "0.0.0",
|
||||
"type": "module",
|
||||
"scripts": {
|
||||
"dev": "vite",
|
||||
"build": "vue-tsc && vite build",
|
||||
"preview": "vite preview"
|
||||
},
|
||||
"dependencies": {
|
||||
"vue": "^3.2.47"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vitejs/plugin-vue": "^4.1.0",
|
||||
"typescript": "^5.0.2",
|
||||
"vite": "^4.3.9",
|
||||
"vite-plugin-dts": "^2.3.0",
|
||||
"vue-tsc": "^1.4.2"
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
|
After Width: | Height: | Size: 1.5 KiB |
|
@ -0,0 +1,30 @@
|
|||
<script setup lang="ts">
|
||||
import HelloWorld from './components/HelloWorld.vue'
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<div>
|
||||
<a href="https://vitejs.dev" target="_blank">
|
||||
<img src="/vite.svg" class="logo" alt="Vite logo" />
|
||||
</a>
|
||||
<a href="https://vuejs.org/" target="_blank">
|
||||
<img src="./assets/vue.svg" class="logo vue" alt="Vue logo" />
|
||||
</a>
|
||||
</div>
|
||||
<HelloWorld msg="Vite + Vue" />
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.logo {
|
||||
height: 6em;
|
||||
padding: 1.5em;
|
||||
will-change: filter;
|
||||
transition: filter 300ms;
|
||||
}
|
||||
.logo:hover {
|
||||
filter: drop-shadow(0 0 2em #646cffaa);
|
||||
}
|
||||
.logo.vue:hover {
|
||||
filter: drop-shadow(0 0 2em #42b883aa);
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1 @@
|
|||
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="37.07" height="36" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 198"><path fill="#41B883" d="M204.8 0H256L128 220.8L0 0h97.92L128 51.2L157.44 0h47.36Z"></path><path fill="#41B883" d="m0 0l128 220.8L256 0h-51.2L128 132.48L50.56 0H0Z"></path><path fill="#35495E" d="M50.56 0L128 133.12L204.8 0h-47.36L128 51.2L97.92 0H50.56Z"></path></svg>
|
After Width: | Height: | Size: 496 B |
|
@ -0,0 +1,38 @@
|
|||
<script setup lang="ts">
|
||||
import { ref } from 'vue'
|
||||
|
||||
defineProps<{ msg: string }>()
|
||||
|
||||
const count = ref(0)
|
||||
</script>
|
||||
|
||||
<template>
|
||||
<h1>{{ msg }}</h1>
|
||||
|
||||
<div class="card">
|
||||
<button type="button" @click="count++">count is {{ count }}</button>
|
||||
<p>
|
||||
Edit
|
||||
<code>components/HelloWorld.vue</code> to test HMR
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<p>
|
||||
Check out
|
||||
<a href="https://vuejs.org/guide/quick-start.html#local" target="_blank"
|
||||
>create-vue</a
|
||||
>, the official Vue + Vite starter
|
||||
</p>
|
||||
<p>
|
||||
Install
|
||||
<a href="https://github.com/vuejs/language-tools" target="_blank">Volar</a>
|
||||
in your IDE for a better DX
|
||||
</p>
|
||||
<p class="read-the-docs">Click on the Vite and Vue logos to learn more</p>
|
||||
</template>
|
||||
|
||||
<style scoped>
|
||||
.read-the-docs {
|
||||
color: #888;
|
||||
}
|
||||
</style>
|
|
@ -0,0 +1,5 @@
|
|||
import { createApp } from 'vue'
|
||||
import './style.css'
|
||||
import App from './App.vue'
|
||||
|
||||
createApp(App).mount('#app')
|
|
@ -0,0 +1,80 @@
|
|||
:root {
|
||||
font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;
|
||||
line-height: 1.5;
|
||||
font-weight: 400;
|
||||
|
||||
color-scheme: light dark;
|
||||
color: rgba(255, 255, 255, 0.87);
|
||||
background-color: #242424;
|
||||
|
||||
font-synthesis: none;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-text-size-adjust: 100%;
|
||||
}
|
||||
|
||||
a {
|
||||
font-weight: 500;
|
||||
color: #646cff;
|
||||
text-decoration: inherit;
|
||||
}
|
||||
a:hover {
|
||||
color: #535bf2;
|
||||
}
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
display: flex;
|
||||
place-items: center;
|
||||
min-width: 320px;
|
||||
min-height: 100vh;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 3.2em;
|
||||
line-height: 1.1;
|
||||
}
|
||||
|
||||
button {
|
||||
border-radius: 8px;
|
||||
border: 1px solid transparent;
|
||||
padding: 0.6em 1.2em;
|
||||
font-size: 1em;
|
||||
font-weight: 500;
|
||||
font-family: inherit;
|
||||
background-color: #1a1a1a;
|
||||
cursor: pointer;
|
||||
transition: border-color 0.25s;
|
||||
}
|
||||
button:hover {
|
||||
border-color: #646cff;
|
||||
}
|
||||
button:focus,
|
||||
button:focus-visible {
|
||||
outline: 4px auto -webkit-focus-ring-color;
|
||||
}
|
||||
|
||||
.card {
|
||||
padding: 2em;
|
||||
}
|
||||
|
||||
#app {
|
||||
max-width: 1280px;
|
||||
margin: 0 auto;
|
||||
padding: 2rem;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: light) {
|
||||
:root {
|
||||
color: #213547;
|
||||
background-color: #ffffff;
|
||||
}
|
||||
a:hover {
|
||||
color: #747bff;
|
||||
}
|
||||
button {
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
}
|
|
@ -0,0 +1 @@
|
|||
/// <reference types="vite/client" />
|
|
@ -0,0 +1,30 @@
|
|||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"useDefineForClassFields": true,
|
||||
"lib": [
|
||||
"ES2020",
|
||||
"DOM",
|
||||
"DOM.Iterable"
|
||||
],
|
||||
/* Bundler mode */
|
||||
"moduleResolution": "bundler",
|
||||
"allowImportingTsExtensions": true,
|
||||
"resolveJsonModule": true,
|
||||
"isolatedModules": true,
|
||||
"noEmit": true,
|
||||
"allowJs": true,
|
||||
"jsx": "preserve"
|
||||
},
|
||||
"include": [
|
||||
"src/**/*.ts",
|
||||
"src/**/*.d.ts",
|
||||
"src/**/*.tsx",
|
||||
"src/**/*.vue"
|
||||
],
|
||||
"references": [
|
||||
{
|
||||
"path": "./tsconfig.node.json"
|
||||
}
|
||||
]
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"composite": true,
|
||||
"skipLibCheck": true,
|
||||
"module": "ESNext",
|
||||
"moduleResolution": "bundler",
|
||||
"allowSyntheticDefaultImports": true
|
||||
},
|
||||
"include": ["vite.config.ts"]
|
||||
}
|
|
@ -0,0 +1,24 @@
|
|||
import { defineConfig } from 'vite';
|
||||
import vue from '@vitejs/plugin-vue';
|
||||
import dts from 'vite-plugin-dts';
|
||||
|
||||
// https://vitejs.dev/config/
|
||||
export default defineConfig({
|
||||
plugins: [vue(), dts()],
|
||||
build: {
|
||||
lib: {
|
||||
entry: 'src/index.ts',
|
||||
name: 'UILib',
|
||||
fileName: 'ui-lib',
|
||||
formats: ['es', 'cjs', 'umd'],
|
||||
},
|
||||
rollupOptions: {
|
||||
external: ['vue'],
|
||||
output: {
|
||||
globals: {
|
||||
vue: 'Vue',
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
|
@ -183,6 +183,28 @@ importers:
|
|||
specifier: ^5.0.4
|
||||
version: 5.0.4
|
||||
|
||||
packages/ui-lib:
|
||||
dependencies:
|
||||
vue:
|
||||
specifier: ^3.2.47
|
||||
version: 3.2.47
|
||||
devDependencies:
|
||||
'@vitejs/plugin-vue':
|
||||
specifier: ^4.1.0
|
||||
version: 4.1.0(vite@4.3.9)(vue@3.2.47)
|
||||
typescript:
|
||||
specifier: ^5.0.2
|
||||
version: 5.1.3
|
||||
vite:
|
||||
specifier: ^4.3.9
|
||||
version: 4.3.9(@types/node@18.0.0)(sass@1.62.1)
|
||||
vite-plugin-dts:
|
||||
specifier: ^2.3.0
|
||||
version: 2.3.0(vite@4.3.9)
|
||||
vue-tsc:
|
||||
specifier: ^1.4.2
|
||||
version: 1.4.2(typescript@5.1.3)
|
||||
|
||||
packages:
|
||||
|
||||
/@alloc/quick-lru@5.2.0:
|
||||
|
@ -388,6 +410,7 @@ packages:
|
|||
/@babel/helper-string-parser@7.21.5:
|
||||
resolution: {integrity: sha512-5pTUx3hAJaZIdW99sJ6ZUUgWq/Y+Hja7TowEnLNMm1VivRgZQL3vpBY3qUACVsvw+yQU6+YgfBVmcbLaZtrA1w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helper-string-parser@7.22.5:
|
||||
resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
|
||||
|
@ -396,6 +419,7 @@ packages:
|
|||
/@babel/helper-validator-identifier@7.19.1:
|
||||
resolution: {integrity: sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==}
|
||||
engines: {node: '>=6.9.0'}
|
||||
dev: true
|
||||
|
||||
/@babel/helper-validator-identifier@7.22.5:
|
||||
resolution: {integrity: sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==}
|
||||
|
@ -426,13 +450,6 @@ packages:
|
|||
js-tokens: 4.0.0
|
||||
dev: true
|
||||
|
||||
/@babel/parser@7.22.4:
|
||||
resolution: {integrity: sha512-VLLsx06XkEYqBtE5YGPwfSGwfrjnyPP5oiGty3S8pQLFDFLaS8VwWSIxkTXpcvr5zeYLE6+MBNl2npl/YnfofA==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
hasBin: true
|
||||
dependencies:
|
||||
'@babel/types': 7.22.4
|
||||
|
||||
/@babel/parser@7.22.5:
|
||||
resolution: {integrity: sha512-DFZMC9LJUG9PLOclRC32G63UXwzqS2koQC8dkx+PLdmt1xSePYpbT/NbsrJy8Q/muXz7o/h/d4A7Fuyixm559Q==}
|
||||
engines: {node: '>=6.0.0'}
|
||||
|
@ -523,6 +540,7 @@ packages:
|
|||
'@babel/helper-string-parser': 7.21.5
|
||||
'@babel/helper-validator-identifier': 7.19.1
|
||||
to-fast-properties: 2.0.0
|
||||
dev: true
|
||||
|
||||
/@babel/types@7.22.5:
|
||||
resolution: {integrity: sha512-zo3MIHGOkPOfoRXitsgHLjEXmlDaD/5KU1Uzuc9GNiZPhSqVxVRtxuPaSBZDsYZ9qV88AjtMtWW7ww98loJ9KA==}
|
||||
|
@ -830,7 +848,6 @@ packages:
|
|||
'@rushstack/node-core-library': 3.59.2
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
dev: false
|
||||
|
||||
/@microsoft/api-extractor@7.35.1:
|
||||
resolution: {integrity: sha512-xGVf1lKCYKEyJsspLzQjo4Oo6PGDPH95Z5/te75xQWpcRHcfemb6zTSPtiFeVDHkg9Tan5HW2QXGLwQRkW199w==}
|
||||
|
@ -850,7 +867,6 @@ packages:
|
|||
typescript: 5.0.4
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
dev: false
|
||||
|
||||
/@microsoft/tsdoc-config@0.16.2:
|
||||
resolution: {integrity: sha512-OGiIzzoBLgWWR0UdRJX98oYO+XKGf7tiK4Zk6tQ/E4IJqGCe7dvkTvgDZV5cFJUzLGDOjeAXrnZoA6QkVySuxw==}
|
||||
|
@ -859,11 +875,9 @@ packages:
|
|||
ajv: 6.12.6
|
||||
jju: 1.4.0
|
||||
resolve: 1.19.0
|
||||
dev: false
|
||||
|
||||
/@microsoft/tsdoc@0.14.2:
|
||||
resolution: {integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug==}
|
||||
dev: false
|
||||
|
||||
/@netlify/functions@1.6.0:
|
||||
resolution: {integrity: sha512-6G92AlcpFrQG72XU8YH8pg94eDnq7+Q0YJhb8x4qNpdGsvuzvrfHWBmqFGp/Yshmv4wex9lpsTRZOocdrA2erQ==}
|
||||
|
@ -1394,14 +1408,12 @@ packages:
|
|||
resolve: 1.22.2
|
||||
semver: 7.3.8
|
||||
z-schema: 5.0.5
|
||||
dev: false
|
||||
|
||||
/@rushstack/rig-package@0.3.19:
|
||||
resolution: {integrity: sha512-2d0/Gn+qjOYneZbiHjn4SjyDwq9I0WagV37z0F1V71G+yONgH7wlt3K/UoNiDkhA8gTHYPRo2jz3CvttybwSag==}
|
||||
dependencies:
|
||||
resolve: 1.22.2
|
||||
strip-json-comments: 3.1.1
|
||||
dev: false
|
||||
|
||||
/@rushstack/ts-command-line@4.13.3:
|
||||
resolution: {integrity: sha512-6aQIv/o1EgsC/+SpgUyRmzg2QIAL6sudEzw3sWzJKwWuQTc5XRsyZpyldfE7WAmIqMXDao9QG35/NYORjHm5Zw==}
|
||||
|
@ -1410,7 +1422,6 @@ packages:
|
|||
argparse: 1.0.10
|
||||
colors: 1.2.5
|
||||
string-argv: 0.3.2
|
||||
dev: false
|
||||
|
||||
/@sideway/address@4.1.4:
|
||||
resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==}
|
||||
|
@ -1571,7 +1582,6 @@ packages:
|
|||
minimatch: 7.4.6
|
||||
mkdirp: 2.1.6
|
||||
path-browserify: 1.0.1
|
||||
dev: false
|
||||
|
||||
/@tufjs/canonical-json@1.0.0:
|
||||
resolution: {integrity: sha512-QTnf++uxunWvG2z3UFNzAoQPHxnSXOwtaI3iJ+AohhV+5vONuArPjJE7aPXPVXfXJsqrVbZBu9b81AJoSd09IQ==}
|
||||
|
@ -1592,7 +1602,6 @@ packages:
|
|||
|
||||
/@types/argparse@1.0.38:
|
||||
resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==}
|
||||
dev: false
|
||||
|
||||
/@types/estree@1.0.1:
|
||||
resolution: {integrity: sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==}
|
||||
|
@ -1856,7 +1865,7 @@ packages:
|
|||
/@vue/compiler-sfc@3.2.47:
|
||||
resolution: {integrity: sha512-rog05W+2IFfxjMcFw10tM9+f7i/+FFpZJJ5XHX72NP9eC2uRD+42M3pYcQqDXVYoj74kHMSEdQ/WmCjt8JFksQ==}
|
||||
dependencies:
|
||||
'@babel/parser': 7.22.4
|
||||
'@babel/parser': 7.22.5
|
||||
'@vue/compiler-core': 3.2.47
|
||||
'@vue/compiler-dom': 3.2.47
|
||||
'@vue/compiler-ssr': 3.2.47
|
||||
|
@ -2018,7 +2027,6 @@ packages:
|
|||
fast-json-stable-stringify: 2.1.0
|
||||
json-schema-traverse: 0.4.1
|
||||
uri-js: 4.4.1
|
||||
dev: false
|
||||
|
||||
/ansi-align@3.0.1:
|
||||
resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==}
|
||||
|
@ -2138,7 +2146,6 @@ packages:
|
|||
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
|
||||
dependencies:
|
||||
sprintf-js: 1.0.3
|
||||
dev: false
|
||||
|
||||
/argparse@2.0.1:
|
||||
resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
|
||||
|
@ -2560,7 +2567,6 @@ packages:
|
|||
|
||||
/code-block-writer@12.0.0:
|
||||
resolution: {integrity: sha512-q4dMFMlXtKR3XNBHyMHt/3pwYNA69EDk00lloMOaaUMKPUXBw6lpXtbu3MMVG6/uOihGnRDOlkyqsONEUj60+w==}
|
||||
dev: false
|
||||
|
||||
/color-convert@1.9.3:
|
||||
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
|
||||
|
@ -2598,7 +2604,6 @@ packages:
|
|||
/colors@1.2.5:
|
||||
resolution: {integrity: sha512-erNRLao/Y3Fv54qUa0LBB+//Uf3YwMUmdJinN20yMXm9zdKKqH9wt7R9IIVZ+K7ShzfpLV/Zg8+VyrBJYB4lpg==}
|
||||
engines: {node: '>=0.1.90'}
|
||||
dev: false
|
||||
|
||||
/combined-stream@1.0.8:
|
||||
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
|
||||
|
@ -2630,7 +2635,6 @@ packages:
|
|||
resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==}
|
||||
engines: {node: ^12.20.0 || >=14}
|
||||
requiresBuild: true
|
||||
dev: false
|
||||
optional: true
|
||||
|
||||
/commondir@1.0.1:
|
||||
|
@ -3261,7 +3265,6 @@ packages:
|
|||
|
||||
/fast-deep-equal@3.1.3:
|
||||
resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
|
||||
dev: false
|
||||
|
||||
/fast-folder-size@2.0.0:
|
||||
resolution: {integrity: sha512-rz+/HCtQYJv2I2b/91PVhisz8mj8epZhC+XNRQ7OC43IUiPCJCTSRb59lpS+WlVdQY3vxMTQ9KTOzIHCTl+DiA==}
|
||||
|
@ -3283,7 +3286,6 @@ packages:
|
|||
|
||||
/fast-json-stable-stringify@2.1.0:
|
||||
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
|
||||
dev: false
|
||||
|
||||
/fastq@1.15.0:
|
||||
resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
|
||||
|
@ -3423,7 +3425,6 @@ packages:
|
|||
graceful-fs: 4.2.11
|
||||
jsonfile: 4.0.0
|
||||
universalify: 0.1.2
|
||||
dev: false
|
||||
|
||||
/fs-minipass@2.1.0:
|
||||
resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==}
|
||||
|
@ -3838,7 +3839,6 @@ packages:
|
|||
/import-lazy@4.0.0:
|
||||
resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/imurmurhash@0.1.4:
|
||||
resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
|
||||
|
@ -4122,7 +4122,6 @@ packages:
|
|||
|
||||
/jju@1.4.0:
|
||||
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
|
||||
dev: false
|
||||
|
||||
/joi@17.9.2:
|
||||
resolution: {integrity: sha512-Itk/r+V4Dx0V3c7RLFdRh12IOjySm2/WGPMubBT92cQvRfYZhPM2W0hZlctjj72iES8jsRCwp7S/cRmWBnJ4nw==}
|
||||
|
@ -4158,7 +4157,6 @@ packages:
|
|||
|
||||
/json-schema-traverse@0.4.1:
|
||||
resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
|
||||
dev: false
|
||||
|
||||
/json5@2.2.3:
|
||||
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
|
||||
|
@ -4174,7 +4172,6 @@ packages:
|
|||
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
|
||||
optionalDependencies:
|
||||
graceful-fs: 4.2.11
|
||||
dev: false
|
||||
|
||||
/jsonfile@6.1.0:
|
||||
resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==}
|
||||
|
@ -4270,14 +4267,12 @@ packages:
|
|||
|
||||
/lodash.get@4.4.2:
|
||||
resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==}
|
||||
dev: false
|
||||
|
||||
/lodash.isarguments@3.1.0:
|
||||
resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==}
|
||||
|
||||
/lodash.isequal@4.5.0:
|
||||
resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==}
|
||||
dev: false
|
||||
|
||||
/lodash.isplainobject@4.0.6:
|
||||
resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==}
|
||||
|
@ -4368,7 +4363,6 @@ packages:
|
|||
engines: {node: '>=12'}
|
||||
dependencies:
|
||||
'@jridgewell/sourcemap-codec': 1.4.15
|
||||
dev: false
|
||||
|
||||
/magic-string@0.30.0:
|
||||
resolution: {integrity: sha512-LA+31JYDJLs82r2ScLrlz1GjSgu66ZV518eyWT+S8VhyQn/JL0u9MeBOvQMGYiPk1DBiSN9DDMOcXvigJZaViQ==}
|
||||
|
@ -4514,7 +4508,6 @@ packages:
|
|||
engines: {node: '>=10'}
|
||||
dependencies:
|
||||
brace-expansion: 2.0.1
|
||||
dev: false
|
||||
|
||||
/minimatch@9.0.1:
|
||||
resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==}
|
||||
|
@ -4603,7 +4596,6 @@ packages:
|
|||
resolution: {integrity: sha512-+hEnITedc8LAtIP9u3HJDFIdcLV2vXP33sqLLIzkv1Db1zO/1OxbvYf0Y1OC/S/Qo5dxHXepofhmxL02PsKe+A==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
dev: false
|
||||
|
||||
/mlly@1.3.0:
|
||||
resolution: {integrity: sha512-HT5mcgIQKkOrZecOjOX3DJorTikWXwsBfpcr/MGBkhfWcjiqvnaL/9ppxvIUXfjT6xt4DVIAsN9fMUz1ev4bIw==}
|
||||
|
@ -5231,7 +5223,6 @@ packages:
|
|||
|
||||
/path-browserify@1.0.1:
|
||||
resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==}
|
||||
dev: false
|
||||
|
||||
/path-is-absolute@1.0.1:
|
||||
resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
|
||||
|
@ -5741,7 +5732,6 @@ packages:
|
|||
/punycode@2.3.0:
|
||||
resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
|
||||
engines: {node: '>=6'}
|
||||
dev: false
|
||||
|
||||
/queue-microtask@1.2.3:
|
||||
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
|
||||
|
@ -5873,7 +5863,6 @@ packages:
|
|||
dependencies:
|
||||
is-core-module: 2.12.1
|
||||
path-parse: 1.0.7
|
||||
dev: false
|
||||
|
||||
/resolve@1.22.2:
|
||||
resolution: {integrity: sha512-Sb+mjNHOULsBv818T40qSPeRiuWLyaGMa5ewydRLFimneixmVy2zdivRl+AF6jaYPC8ERxGDmFSiqui6SfPd+g==}
|
||||
|
@ -5997,7 +5986,6 @@ packages:
|
|||
hasBin: true
|
||||
dependencies:
|
||||
lru-cache: 6.0.0
|
||||
dev: false
|
||||
|
||||
/semver@7.5.1:
|
||||
resolution: {integrity: sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw==}
|
||||
|
@ -6189,7 +6177,6 @@ packages:
|
|||
|
||||
/sprintf-js@1.0.3:
|
||||
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
|
||||
dev: false
|
||||
|
||||
/ssri@10.0.4:
|
||||
resolution: {integrity: sha512-12+IR2CB2C28MMAw0Ncqwj5QbTcs0nGIhgJzYWzDkb21vWmfNI83KS4f3Ci6GI98WreIfG7o9UXp3C0qbpA8nQ==}
|
||||
|
@ -6218,7 +6205,6 @@ packages:
|
|||
/string-argv@0.3.2:
|
||||
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
|
||||
engines: {node: '>=0.6.19'}
|
||||
dev: false
|
||||
|
||||
/string-width@4.2.3:
|
||||
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
|
||||
|
@ -6282,7 +6268,6 @@ packages:
|
|||
/strip-json-comments@3.1.1:
|
||||
resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
|
||||
engines: {node: '>=8'}
|
||||
dev: false
|
||||
|
||||
/strip-literal@1.0.1:
|
||||
resolution: {integrity: sha512-QZTsipNpa2Ppr6v1AmJHESqJ3Uz247MUS0OjrnnZjFAvEoWqxuyFuXn2xLgMtRnijJShAa1HL0gtJyUs7u7n3Q==}
|
||||
|
@ -6518,7 +6503,6 @@ packages:
|
|||
dependencies:
|
||||
'@ts-morph/common': 0.19.0
|
||||
code-block-writer: 12.0.0
|
||||
dev: false
|
||||
|
||||
/tslib@2.5.3:
|
||||
resolution: {integrity: sha512-mSxlJJwl3BMEQCUNnxXBU9jP4JBktcEGhURcPR6VQVlnP0FdDEsIaz0C35dXNGLyRfrATNofF0F5p2KPxQgB+w==}
|
||||
|
@ -6652,7 +6636,6 @@ packages:
|
|||
/universalify@0.1.2:
|
||||
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
|
||||
engines: {node: '>= 4.0.0'}
|
||||
dev: false
|
||||
|
||||
/universalify@2.0.0:
|
||||
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
|
||||
|
@ -6774,7 +6757,6 @@ packages:
|
|||
resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
|
||||
dependencies:
|
||||
punycode: 2.3.0
|
||||
dev: false
|
||||
|
||||
/util-deprecate@1.0.2:
|
||||
resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
|
||||
|
@ -6812,7 +6794,6 @@ packages:
|
|||
/validator@13.9.0:
|
||||
resolution: {integrity: sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA==}
|
||||
engines: {node: '>= 0.10'}
|
||||
dev: false
|
||||
|
||||
/vite-node@0.31.4(@types/node@18.0.0)(sass@1.62.1):
|
||||
resolution: {integrity: sha512-uzL377GjJtTbuc5KQxVbDu2xfU/x0wVjUtXQR2ihS21q/NK6ROr4oG0rsSkBBddZUVCwzfx22in76/0ZZHXgkQ==}
|
||||
|
@ -6894,7 +6875,7 @@ packages:
|
|||
peerDependencies:
|
||||
vite: '>=2.9.0'
|
||||
dependencies:
|
||||
'@babel/parser': 7.22.4
|
||||
'@babel/parser': 7.22.5
|
||||
'@microsoft/api-extractor': 7.35.1
|
||||
'@rollup/pluginutils': 5.0.2(rollup@3.23.0)
|
||||
'@rushstack/node-core-library': 3.59.2
|
||||
|
@ -6909,7 +6890,6 @@ packages:
|
|||
- '@types/node'
|
||||
- rollup
|
||||
- supports-color
|
||||
dev: false
|
||||
|
||||
/vite-plugin-inspect@0.7.28(vite@4.3.9):
|
||||
resolution: {integrity: sha512-XRdQGdf+PU6eT0EoL8beUyFQfcCrHr06OyRM71IT8t7rEC9JywdsscehGHEAyFZryfaVBWAI280N63BI2N+1BA==}
|
||||
|
@ -7314,7 +7294,6 @@ packages:
|
|||
validator: 13.9.0
|
||||
optionalDependencies:
|
||||
commander: 9.5.0
|
||||
dev: false
|
||||
|
||||
/zhead@2.0.4:
|
||||
resolution: {integrity: sha512-V4R94t3ifk9AURym6OskbKcnowzgp5Z88tkoL/NF67vyryNxC62u6mx5F1Ux4oh4+YN7FFmKYEyWy6m5kfPH6g==}
|
||||
|
|
Loading…
Reference in New Issue