diff --git a/src/components/settings/Settings.stories.tsx b/src/components/settings/Settings.stories.tsx index c4b199e..76d46fe 100644 --- a/src/components/settings/Settings.stories.tsx +++ b/src/components/settings/Settings.stories.tsx @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-explicit-any */ import type { Meta, StoryObj } from '@storybook/react'; -import React, { useRef, useState } from 'react'; -import { Save } from 'lucide-react'; +import React, { useRef, useState, useCallback } from 'react'; +import { Save, Copy, Check } from 'lucide-react'; import { Button } from '../ui/button'; import { Settings } from './index'; import type { SettingsElement, SettingsProps } from './settings-types'; @@ -23,12 +23,39 @@ type LogEntry = { }; function EventLog({ entries }: { entries: LogEntry[] }) { + const [copied, setCopied] = useState(false); + + const handleCopy = useCallback(() => { + const text = entries + .map((e) => { + const base = `${e.time} ${e.type === 'save' ? 'onSave' : 'onChange'} pageId="${e.pageId}"`; + if (e.type === 'change') return `${base} key="${e.key}" value=${JSON.stringify(e.value)}`; + if (e.type === 'save') return `${base} values=${JSON.stringify(e.values, null, 2)}`; + return base; + }) + .join('\n'); + navigator.clipboard.writeText(text).then(() => { + setCopied(true); + setTimeout(() => setCopied(false), 2000); + }); + }, [entries]); + if (entries.length === 0) return null; return (