diff --git a/package-lock.json b/package-lock.json index 35cd101..11b14cd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -27,6 +27,7 @@ "sass": "^1.54.0", "svelte": "^4.2.15", "svelte-check": "^3.4.3", + "svelte-feather-icons": "^4.1.0", "svelte-preprocess": "^5.0.4", "tslib": "^2.4.0", "typesafe-event-emitter": "^1.1.0", @@ -710,12 +711,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -956,9 +957,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -1630,6 +1631,24 @@ "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0" } }, + "node_modules/svelte-feather-icons": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/svelte-feather-icons/-/svelte-feather-icons-4.1.0.tgz", + "integrity": "sha512-fcTL4VzEN4BoccQJjKiui0b9DWEsmO6zGpI0tQTJbthRtNrYheoU487zyA1BD8rj9kj6jbKGmGVo7zbSdRvMvA==", + "dev": true, + "dependencies": { + "svelte": "^3.38.2" + } + }, + "node_modules/svelte-feather-icons/node_modules/svelte": { + "version": "3.59.2", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.59.2.tgz", + "integrity": "sha512-vzSyuGr3eEoAtT/A6bmajosJZIUWySzY2CzB3w2pgPvnkUjGqlDnsNnA0PMO+mMAhuyMul6C2uuZzY6ELSkzyA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, "node_modules/svelte-hmr": { "version": "0.15.3", "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", diff --git a/package.json b/package.json index dd9f60b..611e7f5 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "sass": "^1.54.0", "svelte": "^4.2.15", "svelte-check": "^3.4.3", + "svelte-feather-icons": "^4.1.0", "svelte-preprocess": "^5.0.4", "tslib": "^2.4.0", "typesafe-event-emitter": "^1.1.0", diff --git a/src/app.html b/src/app.html index 952997e..75bcaf1 100644 --- a/src/app.html +++ b/src/app.html @@ -4,8 +4,6 @@ - - %sveltekit.head% diff --git a/src/elf/fileTypes.ts b/src/elf/fileTypes.ts index 848a1bc..20940fe 100644 --- a/src/elf/fileTypes.ts +++ b/src/elf/fileTypes.ts @@ -662,7 +662,7 @@ function generateTypedefFor(dataType: DataType, typedef: TypeDefinition): FileTy instantiate(): object { let result = {} - result[VALUE_UUID] = ValueUuid() + result[VALUE_UUID] = ValueUuid('instantiate()') result[DATA_TYPE] = dataType for (const [fieldName, type] of Object.entries(fieldTypes)) { diff --git a/src/elf/parser.ts b/src/elf/parser.ts index 9f85356..94fa95e 100644 --- a/src/elf/parser.ts +++ b/src/elf/parser.ts @@ -281,6 +281,8 @@ export default function parseElfBinary(dataType: DataType, arrayBuffer: ArrayBuf let obj = objFromReader(reader, dataType) as Instance applyRelocations(obj, offset, relocations, symbolTable, stringSection, dataType, allowSkippingRelocations) + obj[VALUE_UUID] = ValueUuid(DataType[dataType] + " " + obj[FILE_TYPES[dataType].identifyingField]) + result.push(obj) } @@ -290,9 +292,9 @@ export default function parseElfBinary(dataType: DataType, arrayBuffer: ArrayBuf } function objFromReader(reader: BinaryReader, dataType: DataType): UuidTagged { - let result = { - [VALUE_UUID]: ValueUuid(), - [DATA_TYPE]: dataType, + // @ts-expect-error + let result: UuidTagged = { + [DATA_TYPE]: dataType } for (const [fieldName, fieldType] of Object.entries(FILE_TYPES[dataType].typedef)) { diff --git a/src/elf/util.ts b/src/elf/util.ts index 952472c..bc47c17 100644 --- a/src/elf/util.ts +++ b/src/elf/util.ts @@ -55,7 +55,7 @@ export function duplicateObjectInBinary(binary: ElfBinary, dat let clone = {...obj} Object.setPrototypeOf(clone, Object.getPrototypeOf(obj)) - clone[VALUE_UUID] = ValueUuid() + clone[VALUE_UUID] = ValueUuid(`cloned ${DataType[dataType]} ${clone[FILE_TYPES[dataType].identifyingField]}`) if (incrementId && FILE_TYPES[dataType].identifyingField == "id") { // @ts-ignore diff --git a/src/elf/valueIdentifier.ts b/src/elf/valueIdentifier.ts index d7c78cc..e38bd0d 100644 --- a/src/elf/valueIdentifier.ts +++ b/src/elf/valueIdentifier.ts @@ -10,6 +10,6 @@ export interface UuidTagged { [DATA_TYPE]: DataType } -export function ValueUuid() { - return Symbol() +export function ValueUuid(label: string) { + return Symbol(`UUID: ${label}`) } diff --git a/src/lib/editor/fileEditor/cardListEditor/BasicObjectArray.svelte b/src/lib/editor/fileEditor/cardListEditor/BasicObjectArray.svelte index 2a21536..d1cee96 100644 --- a/src/lib/editor/fileEditor/cardListEditor/BasicObjectArray.svelte +++ b/src/lib/editor/fileEditor/cardListEditor/BasicObjectArray.svelte @@ -12,23 +12,29 @@ import { toReadableString } from "$lib/util"; import { showModal } from "$lib/modal/modal"; import FieldOptionAlert from "$lib/modals/FieldOptionAlert.svelte"; - + + const INITIAL_COUNT_SHOWN = 60 + export let binary: ElfBinary export let objects: UuidTagged[] - export let referenceObjects: UuidTagged[] export let dataType: DataType + export let indices: Set = undefined export let highlightedFields: WeakMap = undefined let objectEditors: ObjectEditor[] = [] let areEditorsOpen: boolean[] = [] - let countShown = 60 + let countShown = INITIAL_COUNT_SHOWN let debouncer: Debouncer - $: objectSlice = objects.slice(0, countShown) + $: objectSlice = indices + ? [...indices].slice(0, countShown).map(i => objects[i]) + : objects.slice(0, countShown) $: if (objects && debouncer) debouncer.reset() + $: if (indices) countShown = INITIAL_COUNT_SHOWN + onMount(() => { let isDebug = !!parseInt(PUBLIC_DEBUG) @@ -45,7 +51,6 @@ } }) - export function scrollIntoView(object?: UuidTagged) { let index = object ? objects.indexOf(object) : objects.length - 1 @@ -93,7 +98,7 @@ function titleOf(obj: any) { let { displayName, identifyingField } = FILE_TYPES[dataType] - let index = referenceObjects.indexOf(obj) + let index = objects.indexOf(obj) return `${displayName} ${index}: ${obj[identifyingField]}` } @@ -104,7 +109,7 @@ } - countShown += 80} /> + countShown += 80} /> {#each objectSlice as obj, i (obj[VALUE_UUID])}
dispatch('add')}> -
+
Add new Object
dispatch('clear')}> -
+
Delete all Objects
diff --git a/src/lib/editor/fileEditor/cardListEditor/InnerIndexPageEditor.svelte b/src/lib/editor/fileEditor/cardListEditor/InnerIndexPageEditor.svelte index 061c4b2..838e322 100644 --- a/src/lib/editor/fileEditor/cardListEditor/InnerIndexPageEditor.svelte +++ b/src/lib/editor/fileEditor/cardListEditor/InnerIndexPageEditor.svelte @@ -5,6 +5,7 @@ import { nonnativeButton } from "$lib/nonnativeButton"; import { OpenWindowEvent } from "$lib/editor/events"; import type { ElfBinary } from "paper-mario-elfs/elfBinary"; + import { ExternalLinkIcon } from "svelte-feather-icons"; const dispatch = createEventDispatcher() @@ -22,11 +23,6 @@ editorElements.forEach(editor => editor.open = true) } - onMount(() => { - // @ts-ignore - feather.replace() - }) - $: items = Object.entries(dataTypeExtensions(DataTypeExtension.ComplexEditorCategory, dataType)) @@ -39,7 +35,7 @@ dataType, })) }}> - +
{label ?? name}
@@ -53,7 +49,7 @@ max-width: 56rem; height: 20px; - .icon-link { + :global(.icon-link) { float: left; margin-top: -2px; margin-right: 6px; diff --git a/src/lib/editor/fileEditor/cardListEditor/LinearEditor.svelte b/src/lib/editor/fileEditor/cardListEditor/LinearEditor.svelte index 912726f..decc1a0 100644 --- a/src/lib/editor/fileEditor/cardListEditor/LinearEditor.svelte +++ b/src/lib/editor/fileEditor/cardListEditor/LinearEditor.svelte @@ -1,7 +1,7 @@ @@ -7,10 +8,10 @@
+ }}> + }}>