From 3344b2aea9acea8081b2686abf1f13abfdcae657 Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Fri, 5 Jun 2026 17:23:13 +0530 Subject: [PATCH] feat(renderer): add shadcn slider primitive --- package-lock.json | 34 +++++++++++++++++++++++++++ package.json | 1 + src/renderer/components/ui/slider.tsx | 33 ++++++++++++++++++++++++++ tests/component/ui/slider.test.tsx | 10 ++++++++ 4 files changed, 78 insertions(+) create mode 100644 src/renderer/components/ui/slider.tsx create mode 100644 tests/component/ui/slider.test.tsx diff --git a/package-lock.json b/package-lock.json index 4445aba..4561a56 100644 --- a/package-lock.json +++ b/package-lock.json @@ -32,6 +32,7 @@ "@radix-ui/react-context-menu": "^2.2.16", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.6", "@tanstack/react-table": "^8.21.3", @@ -4433,6 +4434,39 @@ } } }, + "node_modules/@radix-ui/react-slider": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slider/-/react-slider-1.3.6.tgz", + "integrity": "sha512-JPYb1GuM1bxfjMRlNLE+BcmBC8onfCi60Blk7OBqi2MLTFdS+8401U4uFjnwkOr49BLmXxLC6JHkvAsx5OJvHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.1", + "@radix-ui/primitive": "1.1.3", + "@radix-ui/react-collection": "1.1.7", + "@radix-ui/react-compose-refs": "1.1.2", + "@radix-ui/react-context": "1.1.2", + "@radix-ui/react-direction": "1.1.1", + "@radix-ui/react-primitive": "2.1.3", + "@radix-ui/react-use-controllable-state": "1.2.2", + "@radix-ui/react-use-layout-effect": "1.1.1", + "@radix-ui/react-use-previous": "1.1.1", + "@radix-ui/react-use-size": "1.1.1" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, "node_modules/@radix-ui/react-slot": { "version": "1.2.4", "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.2.4.tgz", diff --git a/package.json b/package.json index 8d31a3b..b4f3ed5 100644 --- a/package.json +++ b/package.json @@ -103,6 +103,7 @@ "@radix-ui/react-context-menu": "^2.2.16", "@radix-ui/react-label": "^2.1.8", "@radix-ui/react-scroll-area": "^1.2.10", + "@radix-ui/react-slider": "^1.3.6", "@radix-ui/react-slot": "^1.2.4", "@radix-ui/react-switch": "^1.2.6", "@tanstack/react-table": "^8.21.3", diff --git a/src/renderer/components/ui/slider.tsx b/src/renderer/components/ui/slider.tsx new file mode 100644 index 0000000..81877b2 --- /dev/null +++ b/src/renderer/components/ui/slider.tsx @@ -0,0 +1,33 @@ +"use client" + +import * as React from "react" +import * as SliderPrimitive from "@radix-ui/react-slider" +import { cn } from "@/lib/utils" + +const Slider = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, ...props }, ref) => { + const { 'aria-label': ariaLabel, ...rest } = props; + return ( + + + + + + + ); +}) +Slider.displayName = SliderPrimitive.Root.displayName + +export { Slider } diff --git a/tests/component/ui/slider.test.tsx b/tests/component/ui/slider.test.tsx new file mode 100644 index 0000000..83145b8 --- /dev/null +++ b/tests/component/ui/slider.test.tsx @@ -0,0 +1,10 @@ +import { describe, it, expect, vi } from 'vitest'; +import { render, screen } from '@testing-library/react'; +import { Slider } from '@/components/ui/slider'; + +describe('Slider', () => { + it('renders with default value', () => { + render(); + expect(screen.getByRole('slider', { name: /volume/i })).toHaveAttribute('aria-valuenow', '50'); + }); +});