From 948d9bfd84d51a8a3cc68370ebc94bf7073020f0 Mon Sep 17 00:00:00 2001 From: Robert Abram Date: Sat, 2 May 2026 15:51:01 -0500 Subject: [PATCH 1/2] Add more contrast, minor updates --- .github/workflows/coverage.yaml | 4 ++-- .github/workflows/tests.yaml | 3 ++- .gitignore | 1 + pyproject.toml | 12 ++++++++++- requirements.txt | 8 ++++---- src/textual_thin_slider/thinslider.py | 29 +++++++++++++++++++-------- 6 files changed, 41 insertions(+), 16 deletions(-) diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 77ffff0..9ab2400 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -8,10 +8,10 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - - name: Set up Python 3.13 + - name: Set up Python 3.14 uses: actions/setup-python@v4 with: - python-version: 3.13 + python-version: 3.14 - name: Install Dependencies run: | python -m pip install --upgrade pip diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml index 007d954..f851f4c 100644 --- a/.github/workflows/tests.yaml +++ b/.github/workflows/tests.yaml @@ -18,7 +18,8 @@ jobs: python-version: ${{ matrix.python-version }} - name: Install Dependencies run: | - python -m pip install --upgrade pip + python -m pip install --upgrade pip + python -m pip install pytest pytest-asyncio if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Run Unittests run: | diff --git a/.gitignore b/.gitignore index d35c6b3..84b2d90 100644 --- a/.gitignore +++ b/.gitignore @@ -208,3 +208,4 @@ cython_debug/ marimo/_static/ marimo/_lsp/ __marimo__/ +.aider* \ No newline at end of file diff --git a/pyproject.toml b/pyproject.toml index 7d43e9e..3f0c231 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,9 @@ description = "A thin slider control widget for the Textual UI platform" authors = [ { name = "Robert Abram", email = "rabram991@gmail.com" }, ] -dependencies = ["textual", ] +dependencies = [ + "textual", +] readme = "README.md" classifiers = [ "Development Status :: 5 - Production/Stable", @@ -39,6 +41,14 @@ keywords = [ "control" ] +[project.optional-dependencies] +dev = [ + "build", + "pytest", + "pytest-asyncio", + "coverage", +] + [project.urls] Homepage = "https://github.com/robabram/textual-thin-slider" Repository = "https://github.com/robabram/textual-thin-slider" diff --git a/requirements.txt b/requirements.txt index 904a874..27a033a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,7 @@ textual # Development, build or testing libraries -build -pytest -pytest-asyncio -coverage +# build +# pytest +# pytest-asyncio +# coverage diff --git a/src/textual_thin_slider/thinslider.py b/src/textual_thin_slider/thinslider.py index 27906f8..9258319 100644 --- a/src/textual_thin_slider/thinslider.py +++ b/src/textual_thin_slider/thinslider.py @@ -32,6 +32,11 @@ class ThinSliderRender: SOLID_GLYPH: ClassVar[str] = "█" BLANK_GLYPH: ClassVar[str] = " " + range_min: int = 0 + range_max: int = 0 + value: int = 0 + display_type: ThinSliderDisplayOptions = ThinSliderDisplayOptions.none + def __init__(self, range_min: int = 0, range_max: int = 100, value: int = 0, display_type: ThinSliderDisplayOptions = ThinSliderDisplayOptions.none) -> None: self.range_min = range_min @@ -39,6 +44,11 @@ def __init__(self, range_min: int = 0, range_max: int = 100, value: int = 0, self.value = value self.display_type = display_type + def update(self, value: int = None): + """ Update the slider position value and return self """ + self.value = value or self.value + return self + @classmethod def render_bar(cls, range_min: int, range_max: int, size: int, value: int, display_type: ThinSliderDisplayOptions) -> str: @@ -105,7 +115,8 @@ class ThinSlider(Widget, can_focus=True): """ A Textual thin slider control widget. """ - renderer: ClassVar[Type[ThinSliderRender]] = ThinSliderRender + renderer_cls: ClassVar[Type[ThinSliderRender]] = ThinSliderRender + renderer: ThinSliderRender # Prevent user from selecting text within the widget ALLOW_SELECT = False @@ -121,7 +132,7 @@ class ThinSlider(Widget, can_focus=True): background: $surface; padding: 0 0; - color: $foreground 90%; + color: $foreground 80%; &:focus { # border: tall $border; @@ -183,6 +194,13 @@ def __init__(self, range_min: int, range_max: int, self._virtual_pos = ((self.value - self.min) / (self.total_steps / 100)) / self.step + self.renderer = self.renderer_cls( + range_min=self.min, + range_max=self.max, + value=self.value, + display_type=self.display_type + ) + @property def total_steps(self) -> int: return int((self.max - self.min) / self.step) + 1 @@ -204,12 +222,7 @@ def watch_value(self) -> None: def render(self) -> RenderableType: """ Render the slider bar """ - return self.renderer( - range_min=self.min, - range_max=self.max, - value=self.value, - display_type=self.display_type - ) + return self.renderer.update(self.value) def _calc_bar_min_max_positions(self, display_left: int, width: int) -> tuple[int, int]: """ From 577f435af6f3d8c2bb5a3b5a8a977d9edc0753b9 Mon Sep 17 00:00:00 2001 From: Robert Abram Date: Sat, 2 May 2026 15:53:51 -0500 Subject: [PATCH 2/2] Install pytest for coverage job --- .github/workflows/coverage.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/coverage.yaml b/.github/workflows/coverage.yaml index 9ab2400..3d8f0cd 100644 --- a/.github/workflows/coverage.yaml +++ b/.github/workflows/coverage.yaml @@ -15,7 +15,7 @@ jobs: - name: Install Dependencies run: | python -m pip install --upgrade pip - pip install coverage setuptools + pip install coverage setuptools pytest pytest-asyncio if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - name: Run Coverage run: |