create ui lib, grouping

This commit is contained in:
Evert Prants 2023-06-24 19:59:03 +03:00
parent f0b877f11b
commit 77149c180b
Signed by: evert
GPG Key ID: 1688DA83D222D0B5
29 changed files with 567 additions and 97 deletions

View File

@ -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",

View File

@ -12,7 +12,7 @@ export default defineConfig({
entry: 'src/index.ts',
name: 'Client',
fileName: 'client',
formats: ['es', 'cjs', 'umd'],
formats: ['es'],
},
rollupOptions: {
external: ['vue'],

View File

@ -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);

View File

@ -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();
}

View File

@ -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);
};
}
}

View File

@ -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;
}
};

View File

@ -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);

View File

@ -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;

View File

@ -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,
});
};

View File

@ -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() {

View File

@ -33,6 +33,7 @@ export class Engine extends GameRunner {
for (const component of this.components) {
component.dispose();
}
this.render.dispose();
}
/**

View File

@ -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));
}

View File

@ -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;
}

24
packages/ui-lib/.gitignore vendored Normal file
View File

@ -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?

18
packages/ui-lib/README.md Normal file
View File

@ -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.

View File

@ -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>

View File

@ -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"
}
}

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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>

View File

View File

@ -0,0 +1,5 @@
import { createApp } from 'vue'
import './style.css'
import App from './App.vue'
createApp(App).mount('#app')

View File

@ -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;
}
}

1
packages/ui-lib/src/vite-env.d.ts vendored Normal file
View File

@ -0,0 +1 @@
/// <reference types="vite/client" />

View File

@ -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"
}
]
}

View File

@ -0,0 +1,10 @@
{
"compilerOptions": {
"composite": true,
"skipLibCheck": true,
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true
},
"include": ["vite.config.ts"]
}

View File

@ -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',
},
},
},
},
});

View File

@ -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==}