From b8002277839d674654275ebc3e1c2b2046b46bee Mon Sep 17 00:00:00 2001 From: Jin Yi Date: Tue, 9 Sep 2025 13:34:36 +0900 Subject: [PATCH] feat: add dynamic icon support for NavItem components (#5285) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * feat: add dynamic icon support for NavItem components - Created NavIcon component with switch-case based icon rendering - Added iconName prop to NavItem and NavItemData interface - Updated LeftSidePanel to pass icon names to nav items - Added sample icons to SampleModelSelector navigation (download, tag, layers, grid) - Uses i-lucide syntax without imports for better tree-shaking 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude * test: add Storybook stories for navigation components - Add NavIcon.stories.ts with interactive icon selector and all icons gallery - Add NavItem.stories.ts with text customization and interactive list examples - Add LeftSidePanel.stories.ts with various navigation configurations - Remove old Navigation.stories.ts (replaced with component-specific stories) - Configure slot visibility and hide update:modelValue event in controls * refactor: simplify NavIcon component and improve type definitions * fix: add icon size specification for Lucide icons in Storybook * feature: NavItem story modified * fix: disable knip unresolved imports rule for virtual icon modules Add unresolved: 'off' to knip configuration to ignore virtual module imports from unplugin-icons (~icons/*). These are generated at build time and cannot be resolved statically. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude * chore: v-if condition added * chore: knip ignoreUnresolved added based on knip issue PR * refactor: navItem types added & deleting any type on storybook files --------- Co-authored-by: Claude --- knip.config.ts | 3 +- src/components/widget/SampleModelSelector.vue | 18 +- .../widget/layout/BaseWidget.stories.ts | 38 ++- src/components/widget/nav/NavIcon.vue | 13 + src/components/widget/nav/NavItem.stories.ts | 123 +++++++++ src/components/widget/nav/NavItem.vue | 15 +- .../widget/nav/Navigation.stories.ts | 138 ---------- .../widget/panel/LeftSidePanel.stories.ts | 253 ++++++++++++++++++ src/components/widget/panel/LeftSidePanel.vue | 2 + src/types/navTypes.ts | 3 + 10 files changed, 445 insertions(+), 161 deletions(-) create mode 100644 src/components/widget/nav/NavIcon.vue create mode 100644 src/components/widget/nav/NavItem.stories.ts delete mode 100644 src/components/widget/nav/Navigation.stories.ts create mode 100644 src/components/widget/panel/LeftSidePanel.stories.ts diff --git a/knip.config.ts b/knip.config.ts index 9df077d77..e7fa5db8a 100644 --- a/knip.config.ts +++ b/knip.config.ts @@ -51,7 +51,8 @@ const config: KnipConfig = { tags: [ '-knipIgnoreUnusedButUsedByCustomNodes', '-knipIgnoreUnusedButUsedByVueNodesBranch' - ] + ], + ignoreUnresolved: ['^~icons/'] } export default config diff --git a/src/components/widget/SampleModelSelector.vue b/src/components/widget/SampleModelSelector.vue index 8a5ea674e..704bb42f8 100644 --- a/src/components/widget/SampleModelSelector.vue +++ b/src/components/widget/SampleModelSelector.vue @@ -87,8 +87,6 @@