lint fix
This commit is contained in:
parent
a8560afedc
commit
07650765d2
@ -8,6 +8,7 @@ import type { LineReplyMessage, SendLineReplyChunksParams } from "./reply-chunks
|
|||||||
export type LineAutoReplyDeps = {
|
export type LineAutoReplyDeps = {
|
||||||
buildTemplateMessageFromPayload: (
|
buildTemplateMessageFromPayload: (
|
||||||
payload: LineTemplateMessagePayload,
|
payload: LineTemplateMessagePayload,
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
) => messagingApi.TemplateMessage | null;
|
) => messagingApi.TemplateMessage | null;
|
||||||
processLineMessage: (text: string) => ProcessedLineMessage;
|
processLineMessage: (text: string) => ProcessedLineMessage;
|
||||||
chunkMarkdownText: (text: string, limit: number) => string[];
|
chunkMarkdownText: (text: string, limit: number) => string[];
|
||||||
@ -168,6 +169,7 @@ export async function deliverLineAutoReply(params: {
|
|||||||
const quickReply = deps.createQuickReplyItems(lineData.quickReplies!);
|
const quickReply = deps.createQuickReplyItems(lineData.quickReplies!);
|
||||||
const targetIndex =
|
const targetIndex =
|
||||||
replyToken && !replyTokenUsed ? Math.min(4, combined.length - 1) : combined.length - 1;
|
replyToken && !replyTokenUsed ? Math.min(4, combined.length - 1) : combined.length - 1;
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
const target = combined[targetIndex] as messagingApi.Message & {
|
const target = combined[targetIndex] as messagingApi.Message & {
|
||||||
quickReply?: messagingApi.QuickReply;
|
quickReply?: messagingApi.QuickReply;
|
||||||
};
|
};
|
||||||
|
|||||||
@ -123,6 +123,7 @@ async function sendLinePairingReply(params: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
async function shouldProcessLineEvent(
|
async function shouldProcessLineEvent(
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
event: MessageEvent | PostbackEvent,
|
event: MessageEvent | PostbackEvent,
|
||||||
context: LineHandlerContext,
|
context: LineHandlerContext,
|
||||||
): Promise<boolean> {
|
): Promise<boolean> {
|
||||||
|
|||||||
@ -86,12 +86,14 @@ const STICKER_PACKAGES: Record<string, string> = {
|
|||||||
|
|
||||||
function describeStickerKeywords(sticker: StickerEventMessage): string {
|
function describeStickerKeywords(sticker: StickerEventMessage): string {
|
||||||
// Use sticker keywords if available (LINE provides these for some stickers)
|
// Use sticker keywords if available (LINE provides these for some stickers)
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
const keywords = (sticker as StickerEventMessage & { keywords?: string[] }).keywords;
|
const keywords = (sticker as StickerEventMessage & { keywords?: string[] }).keywords;
|
||||||
if (keywords && keywords.length > 0) {
|
if (keywords && keywords.length > 0) {
|
||||||
return keywords.slice(0, 3).join(", ");
|
return keywords.slice(0, 3).join(", ");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use sticker text if available
|
// Use sticker text if available
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
const stickerText = (sticker as StickerEventMessage & { text?: string }).text;
|
const stickerText = (sticker as StickerEventMessage & { text?: string }).text;
|
||||||
if (stickerText) {
|
if (stickerText) {
|
||||||
return stickerText;
|
return stickerText;
|
||||||
|
|||||||
@ -291,6 +291,7 @@ export async function getRichMenuList(opts: RichMenuOpts = {}): Promise<RichMenu
|
|||||||
export async function getRichMenu(
|
export async function getRichMenu(
|
||||||
richMenuId: string,
|
richMenuId: string,
|
||||||
opts: RichMenuOpts = {},
|
opts: RichMenuOpts = {},
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
): Promise<RichMenuResponse | null> {
|
): Promise<RichMenuResponse | null> {
|
||||||
const client = getClient(opts);
|
const client = getClient(opts);
|
||||||
|
|
||||||
|
|||||||
@ -531,6 +531,7 @@ export function createQuickReplyItems(labels: string[]): QuickReply {
|
|||||||
export function createTextMessageWithQuickReplies(
|
export function createTextMessageWithQuickReplies(
|
||||||
text: string,
|
text: string,
|
||||||
quickReplyLabels: string[],
|
quickReplyLabels: string[],
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
): TextMessage & { quickReply: QuickReply } {
|
): TextMessage & { quickReply: QuickReply } {
|
||||||
return {
|
return {
|
||||||
type: "text",
|
type: "text",
|
||||||
|
|||||||
@ -324,6 +324,7 @@ import type { LineTemplateMessagePayload } from "./types.js";
|
|||||||
*/
|
*/
|
||||||
export function buildTemplateMessageFromPayload(
|
export function buildTemplateMessageFromPayload(
|
||||||
payload: LineTemplateMessagePayload,
|
payload: LineTemplateMessagePayload,
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
): TemplateMessage | null {
|
): TemplateMessage | null {
|
||||||
switch (payload.type) {
|
switch (payload.type) {
|
||||||
case "confirm": {
|
case "confirm": {
|
||||||
|
|||||||
@ -61,6 +61,7 @@ export interface ResolvedLineAccount {
|
|||||||
config: LineConfig & LineAccountConfig;
|
config: LineConfig & LineAccountConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* eslint-disable @typescript-eslint/no-redundant-type-constituents -- SDK types */
|
||||||
export type LineMessageType =
|
export type LineMessageType =
|
||||||
| TextMessage
|
| TextMessage
|
||||||
| ImageMessage
|
| ImageMessage
|
||||||
@ -68,6 +69,7 @@ export type LineMessageType =
|
|||||||
| AudioMessage
|
| AudioMessage
|
||||||
| StickerMessage
|
| StickerMessage
|
||||||
| LocationMessage;
|
| LocationMessage;
|
||||||
|
/* eslint-enable @typescript-eslint/no-redundant-type-constituents */
|
||||||
|
|
||||||
export interface LineWebhookContext {
|
export interface LineWebhookContext {
|
||||||
event: WebhookEvent;
|
event: WebhookEvent;
|
||||||
|
|||||||
@ -23,6 +23,7 @@ function readRawBody(req: Request): string | null {
|
|||||||
return Buffer.isBuffer(rawBody) ? rawBody.toString("utf-8") : rawBody;
|
return Buffer.isBuffer(rawBody) ? rawBody.toString("utf-8") : rawBody;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/no-redundant-type-constituents -- SDK types
|
||||||
function parseWebhookBody(req: Request, rawBody: string): WebhookRequestBody | null {
|
function parseWebhookBody(req: Request, rawBody: string): WebhookRequestBody | null {
|
||||||
if (req.body && typeof req.body === "object" && !Buffer.isBuffer(req.body)) {
|
if (req.body && typeof req.body === "object" && !Buffer.isBuffer(req.body)) {
|
||||||
return req.body as WebhookRequestBody;
|
return req.body as WebhookRequestBody;
|
||||||
|
|||||||
@ -67,7 +67,11 @@ function formatToolOutput(value: unknown): string | null {
|
|||||||
try {
|
try {
|
||||||
text = JSON.stringify(value, null, 2);
|
text = JSON.stringify(value, null, 2);
|
||||||
} catch {
|
} catch {
|
||||||
text = String(value);
|
if (typeof value === "object" && value !== null) {
|
||||||
|
text = "[object]";
|
||||||
|
} else {
|
||||||
|
text = String(value as string | number | boolean | symbol | bigint);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
const truncated = truncateText(text, TOOL_OUTPUT_CHAR_LIMIT);
|
const truncated = truncateText(text, TOOL_OUTPUT_CHAR_LIMIT);
|
||||||
|
|||||||
@ -79,7 +79,7 @@ export type AppViewState = {
|
|||||||
configApplying: boolean;
|
configApplying: boolean;
|
||||||
updateRunning: boolean;
|
updateRunning: boolean;
|
||||||
configSnapshot: ConfigSnapshot | null;
|
configSnapshot: ConfigSnapshot | null;
|
||||||
configSchema: unknown | null;
|
configSchema: unknown;
|
||||||
configSchemaLoading: boolean;
|
configSchemaLoading: boolean;
|
||||||
configUiHints: Record<string, unknown>;
|
configUiHints: Record<string, unknown>;
|
||||||
configForm: Record<string, unknown> | null;
|
configForm: Record<string, unknown> | null;
|
||||||
@ -129,7 +129,7 @@ export type AppViewState = {
|
|||||||
debugStatus: StatusSummary | null;
|
debugStatus: StatusSummary | null;
|
||||||
debugHealth: HealthSnapshot | null;
|
debugHealth: HealthSnapshot | null;
|
||||||
debugModels: unknown[];
|
debugModels: unknown[];
|
||||||
debugHeartbeat: unknown | null;
|
debugHeartbeat: unknown;
|
||||||
debugCallMethod: string;
|
debugCallMethod: string;
|
||||||
debugCallParams: string;
|
debugCallParams: string;
|
||||||
debugCallResult: string | null;
|
debugCallResult: string | null;
|
||||||
|
|||||||
@ -160,7 +160,7 @@ export class ClawdbotApp extends LitElement {
|
|||||||
@state() updateRunning = false;
|
@state() updateRunning = false;
|
||||||
@state() applySessionKey = this.settings.lastActiveSessionKey;
|
@state() applySessionKey = this.settings.lastActiveSessionKey;
|
||||||
@state() configSnapshot: ConfigSnapshot | null = null;
|
@state() configSnapshot: ConfigSnapshot | null = null;
|
||||||
@state() configSchema: unknown | null = null;
|
@state() configSchema: unknown = null;
|
||||||
@state() configSchemaVersion: string | null = null;
|
@state() configSchemaVersion: string | null = null;
|
||||||
@state() configSchemaLoading = false;
|
@state() configSchemaLoading = false;
|
||||||
@state() configUiHints: ConfigUiHints = {};
|
@state() configUiHints: ConfigUiHints = {};
|
||||||
@ -221,7 +221,7 @@ export class ClawdbotApp extends LitElement {
|
|||||||
@state() debugStatus: StatusSummary | null = null;
|
@state() debugStatus: StatusSummary | null = null;
|
||||||
@state() debugHealth: HealthSnapshot | null = null;
|
@state() debugHealth: HealthSnapshot | null = null;
|
||||||
@state() debugModels: unknown[] = [];
|
@state() debugModels: unknown[] = [];
|
||||||
@state() debugHeartbeat: unknown | null = null;
|
@state() debugHeartbeat: unknown = null;
|
||||||
@state() debugCallMethod = "";
|
@state() debugCallMethod = "";
|
||||||
@state() debugCallParams = "{}";
|
@state() debugCallParams = "{}";
|
||||||
@state() debugCallResult: string | null = null;
|
@state() debugCallResult: string | null = null;
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|||||||
|
|
||||||
import { ClawdbotApp } from "./app";
|
import { ClawdbotApp } from "./app";
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
||||||
const originalConnect = ClawdbotApp.prototype.connect;
|
const originalConnect = ClawdbotApp.prototype.connect;
|
||||||
|
|
||||||
function mountApp(pathname: string) {
|
function mountApp(pathname: string) {
|
||||||
|
|||||||
@ -21,7 +21,8 @@ export function normalizeMessage(message: unknown): NormalizedMessage {
|
|||||||
Array.isArray(contentItems) &&
|
Array.isArray(contentItems) &&
|
||||||
contentItems.some((item) => {
|
contentItems.some((item) => {
|
||||||
const x = item as Record<string, unknown>;
|
const x = item as Record<string, unknown>;
|
||||||
const t = String(x.type ?? "").toLowerCase();
|
const rawType = x.type;
|
||||||
|
const t = (typeof rawType === "string" ? rawType : "").toLowerCase();
|
||||||
return t === "toolresult" || t === "tool_result";
|
return t === "toolresult" || t === "tool_result";
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@ -13,7 +13,8 @@ export function extractToolCards(message: unknown): ToolCard[] {
|
|||||||
const cards: ToolCard[] = [];
|
const cards: ToolCard[] = [];
|
||||||
|
|
||||||
for (const item of content) {
|
for (const item of content) {
|
||||||
const kind = String(item.type ?? "").toLowerCase();
|
const rawType = item.type;
|
||||||
|
const kind = (typeof rawType === "string" ? rawType : "").toLowerCase();
|
||||||
const isToolCall =
|
const isToolCall =
|
||||||
["toolcall", "tool_call", "tooluse", "tool_use"].includes(kind) ||
|
["toolcall", "tool_call", "tooluse", "tool_use"].includes(kind) ||
|
||||||
(typeof item.name === "string" && item.arguments != null);
|
(typeof item.name === "string" && item.arguments != null);
|
||||||
@ -27,7 +28,8 @@ export function extractToolCards(message: unknown): ToolCard[] {
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (const item of content) {
|
for (const item of content) {
|
||||||
const kind = String(item.type ?? "").toLowerCase();
|
const rawKind = item.type;
|
||||||
|
const kind = (typeof rawKind === "string" ? rawKind : "").toLowerCase();
|
||||||
if (kind !== "toolresult" && kind !== "tool_result") continue;
|
if (kind !== "toolresult" && kind !== "tool_result") continue;
|
||||||
const text = extractToolText(item);
|
const text = extractToolText(item);
|
||||||
const name = typeof item.name === "string" ? item.name : "tool";
|
const name = typeof item.name === "string" ? item.name : "tool";
|
||||||
|
|||||||
@ -20,7 +20,7 @@ export type ConfigState = {
|
|||||||
configApplying: boolean;
|
configApplying: boolean;
|
||||||
updateRunning: boolean;
|
updateRunning: boolean;
|
||||||
configSnapshot: ConfigSnapshot | null;
|
configSnapshot: ConfigSnapshot | null;
|
||||||
configSchema: unknown | null;
|
configSchema: unknown;
|
||||||
configSchemaVersion: string | null;
|
configSchemaVersion: string | null;
|
||||||
configSchemaLoading: boolean;
|
configSchemaLoading: boolean;
|
||||||
configUiHints: ConfigUiHints;
|
configUiHints: ConfigUiHints;
|
||||||
|
|||||||
@ -8,7 +8,7 @@ export type DebugState = {
|
|||||||
debugStatus: StatusSummary | null;
|
debugStatus: StatusSummary | null;
|
||||||
debugHealth: HealthSnapshot | null;
|
debugHealth: HealthSnapshot | null;
|
||||||
debugModels: unknown[];
|
debugModels: unknown[];
|
||||||
debugHeartbeat: unknown | null;
|
debugHeartbeat: unknown;
|
||||||
debugCallMethod: string;
|
debugCallMethod: string;
|
||||||
debugCallParams: string;
|
debugCallParams: string;
|
||||||
debugCallResult: string | null;
|
debugCallResult: string | null;
|
||||||
|
|||||||
@ -2,6 +2,7 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|||||||
|
|
||||||
import { ClawdbotApp } from "./app";
|
import { ClawdbotApp } from "./app";
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
||||||
const originalConnect = ClawdbotApp.prototype.connect;
|
const originalConnect = ClawdbotApp.prototype.connect;
|
||||||
|
|
||||||
function mountApp(pathname: string) {
|
function mountApp(pathname: string) {
|
||||||
|
|||||||
@ -3,6 +3,7 @@ import { afterEach, beforeEach, describe, expect, it } from "vitest";
|
|||||||
import { ClawdbotApp } from "./app";
|
import { ClawdbotApp } from "./app";
|
||||||
import "../styles.css";
|
import "../styles.css";
|
||||||
|
|
||||||
|
// eslint-disable-next-line @typescript-eslint/unbound-method
|
||||||
const originalConnect = ClawdbotApp.prototype.connect;
|
const originalConnect = ClawdbotApp.prototype.connect;
|
||||||
|
|
||||||
function mountApp(pathname: string) {
|
function mountApp(pathname: string) {
|
||||||
|
|||||||
@ -31,7 +31,8 @@ export function formatEventPayload(payload: unknown): string {
|
|||||||
try {
|
try {
|
||||||
return JSON.stringify(payload, null, 2);
|
return JSON.stringify(payload, null, 2);
|
||||||
} catch {
|
} catch {
|
||||||
return String(payload);
|
if (typeof payload === "object" && payload !== null) return "[object]";
|
||||||
|
return String(payload as string | number | boolean | symbol | bigint);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@ import { analyzeConfigSchema, renderNode, schemaType, type JsonSchema } from "./
|
|||||||
type ChannelConfigFormProps = {
|
type ChannelConfigFormProps = {
|
||||||
channelId: string;
|
channelId: string;
|
||||||
configValue: Record<string, unknown> | null;
|
configValue: Record<string, unknown> | null;
|
||||||
schema: unknown | null;
|
schema: unknown;
|
||||||
uiHints: ConfigUiHints;
|
uiHints: ConfigUiHints;
|
||||||
disabled: boolean;
|
disabled: boolean;
|
||||||
onPatch: (path: Array<string | number>, value: unknown) => void;
|
onPatch: (path: Array<string | number>, value: unknown) => void;
|
||||||
|
|||||||
@ -26,7 +26,7 @@ export type ChannelsProps = {
|
|||||||
whatsappQrDataUrl: string | null;
|
whatsappQrDataUrl: string | null;
|
||||||
whatsappConnected: boolean | null;
|
whatsappConnected: boolean | null;
|
||||||
whatsappBusy: boolean;
|
whatsappBusy: boolean;
|
||||||
configSchema: unknown | null;
|
configSchema: unknown;
|
||||||
configSchemaLoading: boolean;
|
configSchemaLoading: boolean;
|
||||||
configForm: Record<string, unknown> | null;
|
configForm: Record<string, unknown> | null;
|
||||||
configUiHints: ConfigUiHints;
|
configUiHints: ConfigUiHints;
|
||||||
|
|||||||
@ -130,7 +130,7 @@ export function renderNode(params: {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Check if it's a set of literal values (enum-like)
|
// Check if it's a set of literal values (enum-like)
|
||||||
const extractLiteral = (v: JsonSchema): unknown | undefined => {
|
const extractLiteral = (v: JsonSchema): unknown => {
|
||||||
if (v.const !== undefined) return v.const;
|
if (v.const !== undefined) return v.const;
|
||||||
if (v.enum && v.enum.length === 1) return v.enum[0];
|
if (v.enum && v.enum.length === 1) return v.enum[0];
|
||||||
return undefined;
|
return undefined;
|
||||||
@ -141,6 +141,8 @@ export function renderNode(params: {
|
|||||||
if (allLiterals && literals.length > 0 && literals.length <= 5) {
|
if (allLiterals && literals.length > 0 && literals.length <= 5) {
|
||||||
// Use segmented control for small sets
|
// Use segmented control for small sets
|
||||||
const resolvedValue = value ?? schema.default;
|
const resolvedValue = value ?? schema.default;
|
||||||
|
const stringify = (v: unknown) =>
|
||||||
|
typeof v === "string" || typeof v === "number" || typeof v === "boolean" ? String(v) : "";
|
||||||
return html`
|
return html`
|
||||||
<div class="cfg-field">
|
<div class="cfg-field">
|
||||||
${showLabel ? html`<label class="cfg-field__label">${label}</label>` : nothing}
|
${showLabel ? html`<label class="cfg-field__label">${label}</label>` : nothing}
|
||||||
@ -150,11 +152,11 @@ export function renderNode(params: {
|
|||||||
(lit) => html`
|
(lit) => html`
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="cfg-segmented__btn ${lit === resolvedValue || String(lit) === String(resolvedValue) ? "active" : ""}"
|
class="cfg-segmented__btn ${lit === resolvedValue || stringify(lit) === stringify(resolvedValue) ? "active" : ""}"
|
||||||
?disabled=${disabled}
|
?disabled=${disabled}
|
||||||
@click=${() => onPatch(path, lit)}
|
@click=${() => onPatch(path, lit)}
|
||||||
>
|
>
|
||||||
${String(lit)}
|
${stringify(lit)}
|
||||||
</button>
|
</button>
|
||||||
`,
|
`,
|
||||||
)}
|
)}
|
||||||
@ -296,9 +298,15 @@ function renderTextInput(params: {
|
|||||||
const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));
|
const label = hint?.label ?? schema.title ?? humanize(String(path.at(-1)));
|
||||||
const help = hint?.help ?? schema.description;
|
const help = hint?.help ?? schema.description;
|
||||||
const isSensitive = hint?.sensitive ?? isSensitivePath(path);
|
const isSensitive = hint?.sensitive ?? isSensitivePath(path);
|
||||||
|
const defaultStr =
|
||||||
|
schema.default !== undefined &&
|
||||||
|
(typeof schema.default === "string" ||
|
||||||
|
typeof schema.default === "number" ||
|
||||||
|
typeof schema.default === "boolean")
|
||||||
|
? String(schema.default)
|
||||||
|
: undefined;
|
||||||
const placeholder =
|
const placeholder =
|
||||||
hint?.placeholder ??
|
hint?.placeholder ?? (isSensitive ? "••••" : defaultStr ? `Default: ${defaultStr}` : "");
|
||||||
(isSensitive ? "••••" : schema.default !== undefined ? `Default: ${schema.default}` : "");
|
|
||||||
const displayValue = value ?? "";
|
const displayValue = value ?? "";
|
||||||
|
|
||||||
return html`
|
return html`
|
||||||
@ -310,7 +318,7 @@ function renderTextInput(params: {
|
|||||||
type=${isSensitive ? "password" : inputType}
|
type=${isSensitive ? "password" : inputType}
|
||||||
class="cfg-input"
|
class="cfg-input"
|
||||||
placeholder=${placeholder}
|
placeholder=${placeholder}
|
||||||
.value=${displayValue == null ? "" : String(displayValue)}
|
.value=${displayValue == null ? "" : typeof displayValue === "string" || typeof displayValue === "number" ? String(displayValue) : ""}
|
||||||
?disabled=${disabled}
|
?disabled=${disabled}
|
||||||
@input=${(e: Event) => {
|
@input=${(e: Event) => {
|
||||||
const raw = (e.target as HTMLInputElement).value;
|
const raw = (e.target as HTMLInputElement).value;
|
||||||
@ -375,7 +383,7 @@ function renderNumberInput(params: {
|
|||||||
<input
|
<input
|
||||||
type="number"
|
type="number"
|
||||||
class="cfg-number__input"
|
class="cfg-number__input"
|
||||||
.value=${displayValue == null ? "" : String(displayValue)}
|
.value=${displayValue == null ? "" : typeof displayValue === "string" || typeof displayValue === "number" ? String(displayValue) : ""}
|
||||||
?disabled=${disabled}
|
?disabled=${disabled}
|
||||||
@input=${(e: Event) => {
|
@input=${(e: Event) => {
|
||||||
const raw = (e.target as HTMLInputElement).value;
|
const raw = (e.target as HTMLInputElement).value;
|
||||||
|
|||||||
@ -13,7 +13,7 @@ export type ConfigProps = {
|
|||||||
applying: boolean;
|
applying: boolean;
|
||||||
updating: boolean;
|
updating: boolean;
|
||||||
connected: boolean;
|
connected: boolean;
|
||||||
schema: unknown | null;
|
schema: unknown;
|
||||||
schemaLoading: boolean;
|
schemaLoading: boolean;
|
||||||
uiHints: ConfigUiHints;
|
uiHints: ConfigUiHints;
|
||||||
formMode: "form" | "raw";
|
formMode: "form" | "raw";
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user