diff --git a/components.d.ts b/components.d.ts
index 8fa004ea..e9290ef4 100644
--- a/components.d.ts
+++ b/components.d.ts
@@ -12,6 +12,7 @@ declare module '@vue/runtime-core' {
CollapsibleToolMenu: typeof import('./src/components/CollapsibleToolMenu.vue')['default']
ColoredCard: typeof import('./src/components/ColoredCard.vue')['default']
FavoriteButton: typeof import('./src/components/FavoriteButton.vue')['default']
+ FormatTransformer: typeof import('./src/components/FormatTransformer.vue')['default']
InputCopyable: typeof import('./src/components/InputCopyable.vue')['default']
MenuIconItem: typeof import('./src/components/MenuIconItem.vue')['default']
MenuLayout: typeof import('./src/components/MenuLayout.vue')['default']
diff --git a/src/components/FormatTransformer.vue b/src/components/FormatTransformer.vue
new file mode 100644
index 00000000..dea5d56a
--- /dev/null
+++ b/src/components/FormatTransformer.vue
@@ -0,0 +1,57 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/components/TextareaCopyable.vue b/src/components/TextareaCopyable.vue
index 9bcb65cc..6be5652b 100644
--- a/src/components/TextareaCopyable.vue
+++ b/src/components/TextareaCopyable.vue
@@ -7,7 +7,7 @@
:style="height ? `min-height: ${height - 40 /* card padding */ + 10 /* negative margin compensation */}px` : ''"
>
-
+
diff --git a/src/composable/validation.ts b/src/composable/validation.ts
index 2c58b60b..527aafad 100644
--- a/src/composable/validation.ts
+++ b/src/composable/validation.ts
@@ -3,7 +3,7 @@ import { reactive, watch, type Ref } from 'vue';
type ValidatorReturnType = unknown;
-interface UseValidationRule {
+export interface UseValidationRule {
validator: (value: T) => ValidatorReturnType;
message: string;
}
diff --git a/src/tools/json-minify/json-minify.vue b/src/tools/json-minify/json-minify.vue
index 92ab7d2e..d7e9d15c 100644
--- a/src/tools/json-minify/json-minify.vue
+++ b/src/tools/json-minify/json-minify.vue
@@ -1,57 +1,27 @@
-
-
-
-
-
-
+
-
-