summaryrefslogtreecommitdiff
path: root/packages
diff options
context:
space:
mode:
authorFineArchs <133759614+FineArchs@users.noreply.github.com>2024-09-17 20:11:50 +0900
committerGitHub <noreply@github.com>2024-09-17 20:11:50 +0900
commitdaf9ae5d4a31cfe5eaf85985e78449bb0eebbe1e (patch)
treeab60418be826b103a00747d02b6acc883b4558c2 /packages
parentRevert "refactor" (diff)
downloadsharkey-daf9ae5d4a31cfe5eaf85985e78449bb0eebbe1e.tar.gz
sharkey-daf9ae5d4a31cfe5eaf85985e78449bb0eebbe1e.tar.bz2
sharkey-daf9ae5d4a31cfe5eaf85985e78449bb0eebbe1e.zip
ScratchpadにUIインスペクターを追加 (#14565)
* add ui list * Update scratchpad.vue * experiment * design change * redesign * redesign * Update ja-JP.yml * redesign * component properties * whole json * use textarea * fix import * stringify function * Update CHANGELOG.md * UI Component Monitor -> UI Inspector * uiInspectorOpenedFlags -> uiInspectorOpenedComponents Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com> * fix * change key i -> c.value.id --------- Co-authored-by: syuilo <4439005+syuilo@users.noreply.github.com>
Diffstat (limited to 'packages')
-rw-r--r--packages/frontend/src/pages/scratchpad.vue59
1 files changed, 59 insertions, 0 deletions
diff --git a/packages/frontend/src/pages/scratchpad.vue b/packages/frontend/src/pages/scratchpad.vue
index 9aaa8ff9c6..897ff6acdf 100644
--- a/packages/frontend/src/pages/scratchpad.vue
+++ b/packages/frontend/src/pages/scratchpad.vue
@@ -30,6 +30,24 @@ SPDX-License-Identifier: AGPL-3.0-only
</div>
</MkContainer>
+ <MkContainer :foldable="true" :expanded="false">
+ <template #header>{{ i18n.ts.uiInspector }}</template>
+ <div :class="$style.uiInspector">
+ <div v-for="c in components" :key="c.value.id">
+ <div :class="$style.uiInspectorType">{{ c.value.type }}</div>
+ <div :class="$style.uiInspectorId">{{ c.value.id }}</div>
+ <button :class="$style.uiInspectorPropsToggle" @click="() => uiInspectorOpenedComponents.set(c, !uiInspectorOpenedComponents.get(c))">
+ <i v-if="uiInspectorOpenedComponents.get(c)" class="ti ti-chevron-up icon"></i>
+ <i v-else class="ti ti-chevron-down icon"></i>
+ </button>
+ <div v-if="uiInspectorOpenedComponents.get(c)">
+ <MkTextarea :modelValue="stringifyUiProps(c.value)" code readonly></MkTextarea>
+ </div>
+ </div>
+ <div :class="$style.uiInspectorDescription">{{ i18n.ts.uiInspectorDescription }}</div>
+ </div>
+ </MkContainer>
+
<div class="">
{{ i18n.ts.scratchpadDescription }}
</div>
@@ -43,6 +61,7 @@ import { onDeactivated, onUnmounted, Ref, ref, watch, computed } from 'vue';
import { Interpreter, Parser, utils } from '@syuilo/aiscript';
import MkContainer from '@/components/MkContainer.vue';
import MkButton from '@/components/MkButton.vue';
+import MkTextarea from '@/components/MkTextarea.vue';
import MkCodeEditor from '@/components/MkCodeEditor.vue';
import { aiScriptReadline, createAiScriptEnv } from '@/scripts/aiscript/api.js';
import * as os from '@/os.js';
@@ -61,6 +80,7 @@ const logs = ref<any[]>([]);
const root = ref<AsUiRoot>();
const components = ref<Ref<AsUiComponent>[]>([]);
const uiKey = ref(0);
+const uiInspectorOpenedComponents = ref(new Map<string, boolean>);
const saved = miLocalStorage.getItem('scratchpad');
if (saved) {
@@ -71,6 +91,14 @@ watch(code, () => {
miLocalStorage.setItem('scratchpad', code.value);
});
+function stringifyUiProps(uiProps) {
+ return JSON.stringify(
+ { ...uiProps, type: undefined, id: undefined },
+ (k, v) => typeof v === 'function' ? '<function>' : v,
+ 2
+ );
+}
+
async function run() {
if (aiscript) aiscript.abort();
root.value = undefined;
@@ -192,4 +220,35 @@ definePageMetadata(() => ({
}
}
}
+
+.uiInspector {
+ display: grid;
+ gap: 8px;
+ padding: 16px;
+}
+
+.uiInspectorType {
+ display: inline-block;
+ border: hidden;
+ border-radius: 10px;
+ background-color: var(--panelHighlight);
+ padding: 2px 8px;
+ font-size: 12px;
+}
+
+.uiInspectorId {
+ display: inline-block;
+ padding-left: 8px;
+}
+
+.uiInspectorDescription {
+ display: block;
+ font-size: 12px;
+ padding-top: 16px;
+}
+
+.uiInspectorPropsToggle {
+ background: none;
+ border: none;
+}
</style>