diff --git a/package.json b/package.json
index e8b5ab7246759..a5485c04dc1b4 100644
--- a/package.json
+++ b/package.json
@@ -24,7 +24,7 @@
"type-check": "NODE_OPTIONS='--max-old-space-size=4096' tsc --build",
"prettier-check": "prettier --check '+(e|web)/**/*.{ts,tsx,js,jsx,mts}'",
"prettier-write": "prettier --write --log-level silent '+(e|web)/**/*.{ts,tsx,js,jsx,mts}'",
- "process-icons": "node web/packages/design/src/Icon/script/script.js & pnpm prettier --loglevel silent --write 'web/packages/design/src/Icon/Icons/*.tsx'",
+ "process-icons": "node web/packages/design/src/Icon/script/script.js & pnpm prettier --log-level silent --write 'web/packages/design/src/Icon/**/*.tsx'",
"nop": "exit 0"
},
"private": true,
diff --git a/web/packages/design/src/Icon/Icon.story.tsx b/web/packages/design/src/Icon/Icon.story.tsx
new file mode 100644
index 0000000000000..87377283a0869
--- /dev/null
+++ b/web/packages/design/src/Icon/Icon.story.tsx
@@ -0,0 +1,51 @@
+/**
+ * Teleport
+ * Copyright (C) 2025 Gravitational, Inc.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+
+import { useEffect, useRef } from 'react';
+import styled from 'styled-components';
+
+import { Flex } from 'design';
+import { blink } from 'design/keyframes';
+
+import { Broadcast } from './Icons/Broadcast';
+
+export default {
+ // Nest stories under Icon/Icon, so that Icon/Icons which lists all icons is the first story.
+ title: 'Design/Icon/Icon',
+};
+
+export const WithRef = () => {
+ const nodeRef = useRef(null);
+
+ useEffect(() => {
+ nodeRef.current?.scrollIntoView({ block: 'center' });
+ }, []);
+
+ return (
+
+
+
+
On the first render, the view should be scrolled to the icon.