From 0535a4b83fe8b41f9ccb282ec54d860428b2d800 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sat, 5 Oct 2024 12:57:36 +0100 Subject: [PATCH 1/3] Added hex chars to digits --- CHANGELOG.md | 6 + .../images/compositor/cuts.excalidraw.svg | 21 +++ src/textual/renderables/digits.py | 105 +++++++++++++- src/textual/widgets/_digits.py | 3 +- .../test_snapshots/test_digits.svg | 110 +++++++------- .../test_example_calculator.svg | 136 +++++++++--------- .../test_snapshots/test_example_merlin.svg | 128 ++++++++--------- .../test_snapshots/test_recompose.svg | 115 ++++++++------- tests/snapshot_tests/snapshot_apps/digits.py | 16 ++- 9 files changed, 382 insertions(+), 258 deletions(-) create mode 100644 docs/blog/images/compositor/cuts.excalidraw.svg diff --git a/CHANGELOG.md b/CHANGELOG.md index 39ffcc4d91..007418ccb5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). +## Unrelease + +### Added + +- Added support for A-F to Digits widget + ## [0.82.0] - 2024-10-03 ### Fixed diff --git a/docs/blog/images/compositor/cuts.excalidraw.svg b/docs/blog/images/compositor/cuts.excalidraw.svg new file mode 100644 index 0000000000..454ac2943c --- /dev/null +++ b/docs/blog/images/compositor/cuts.excalidraw.svg @@ -0,0 +1,21 @@ + + + eyJ2ZXJzaW9uIjoiMSIsImVuY29kaW5nIjoiYnN0cmluZyIsImNvbXByZXNzZWQiOnRydWUsImVuY29kZWQiOiJ4nO1cXGlTXHUwMDFiSVx1MDAxMv3uX+Hwflx1MDAxZHqyqrKyKidiY1x1MDAwM7BcdTAwMDFzmfvamHBcYqlBXHK6kJpDTMx/3yyBUSPRtlxi00Y9i1x1MDAxY1x1MDAwMabPUtV7mS+P7r/evX//Ie134lx1MDAwZn+8/1x1MDAxMN9UK42k1q1cXH/4LWy/iru9pN2SXXrwd6992a1cdTAwMGWOrKdpp/fH7783K93zOO00KtU4ukp6l5VGL72sJe2o2m7+nqRxs/ef8HO90oz/3Wk3a2k3XHUwMDFh3mQmriVpu3t3r7hcdTAwMTE341bak6v/V/5+//6vwc/M6LpxNa20Tlx1MDAxYvHghMGu4Vx1MDAwMFmPblxcb7dcdTAwMDZjJfCOjXvYnfQ+yr3SuCb7TmS88XBP2PShf9m4XFyurK5XXHUwMDEzz8manbPzt43l4S1PkkZjO+03XHUwMDA2Q6p2273eTL2SVuvDI3ppt31cdTAwMWXvJ7W0/m3mMttcdTAwMWbO7bVlXHUwMDE2hmd125en9VbcXHUwMDBiXHUwMDEzoFx1MDAxZba2O5VqkvbDNoCHrXez8Mf74ZZcdTAwMWL5y4CLXGZbrzR7r+WXfdhcdTAwMWQugFx1MDAwNiNw1lx1MDAwMuDo7ruRzbdcdTAwMWKyXHUwMDE4MrJ/qTj8XHUwMDFiju24Uj0/lVx1MDAwMbZqw2MqtuZPTobHXFzff19cdTAwMDJcdTAwMTOBUoDOkFx0t3k4olx1MDAxZSen9TRMiY88XCJqZTw55V1mIPFgWdiy08hsXHUwMDFldoS7dz7XXHUwMDA26PhzuFx1MDAxNl3B1edwRuuy0chOZat2P5XfUDTEkbnf8vfw64XjP2XwN7zDZadWuYOKctpcdTAwMDNcdTAwMTnWXHUwMDFhLD3sbySt89HbN9rV8yG63mXu9TxIW0V5mFZeXHUwMDE5kPVmnlx1MDAxONafPn/d2FrWfDW7sLG/u7wxn9RXtspcdTAwMDFrXHUwMDFmkVx1MDAxMvSyIatccuIjVFx1MDAxYqdcIq2UdkaxMZbxp0B9rE/08fE4qI2FyFvnXHUwMDE0OmByPsOdIaopQlJibfxcdTAwMWSqcVx1MDAxNNVKeGfM1ILa/Vx1MDAxMlBzXHUwMDA2siOgRvCWlfV2YkxfxfHlXHT2t2ut7mm10j1Z+rL2tV9cdTAwMDZMo+fIM1x1MDAxMFx1MDAxM4mJtMz0XHUwMDE41FxuXCJcdTAwMWJmQ0xccjpW2vxcdTAwMTSqT06qXFzlolCtyFtAXHUwMDAw9U/HtZz+JKQp30xcdTAwMGKcZS3BqIkhvXfe3OhcdTAwMWSbjcOjzY1afLo7O1x1MDAwYpdHXHUwMDA1QLpW6dXjXHUwMDE3ttNcdTAwMWOhXHUwMDEyW+wh2GpF7lx1MDAxMaa1o0iJOkEn62KdN8XIXHUwMDBmiIyWUbDMuVx1MDAwNa3tU5hW3ovPMKDZilxiQSY/XG5qrcDKyeC5XGJQ619cdTAwMGLqzDxXuulcXNKqJa3T0VPiVi1nT6PSS+fbzWaSyjA22kkrXHUwMDFkPWJw3dlut31djytjcyFXzt3XXHSXXHUwMDFiSv7wXHUwMDE5/u/9XHUwMDEwYIM/XHUwMDFl/v/nb09cdTAwMWU9k7/24TO+6sNcdTAwMGK+y/5+Lv+VtaNbXHUwMDFmXFxcdTAwMWEhsnYwuUu7ZuzHa3p9e+X0Y/W0t8udlWqrXHUwMDE0/EdcdTAwMDZcdTAwMTH+XHUwMDA2RZt6XHUwMDAzZEfpbyNrWFx0pVx1MDAxOMmbn9Npeey34lVcclx1MDAxMTnHqFx08IngI8BcdTAwMDDQOlBcZmKqXGKG47wnv5zM7LJC5Y3708793IVcdTAwMGaf8SV/KeZDrphVjj3IaMzk1D/a/7SCXHUwMDFiqzPzXHUwMDE32y32+1x1MDAwN/PX+1x1MDAxZqFcdTAwMTTUJytBmJg6tMBGXHUwMDEzXHUwMDBm/elcdTAwMWT1MVx1MDAxMu+PXlx1MDAxMVx1MDAxOZ+1li+ad5AgUS4uc241XHUwMDEw+aEoy1CfI7LWaTnMeraQkdX3ft9cbu9cdKmQXHUwMDE47Y36hVA/d+HDZ3zJX4j6aEY3XHUwMDBlmS9BPiuaPDWzf6FcdTAwMGZcdTAwMGZkPe2CWztbSSt4fDVTXHUwMDBlze+NXHUwMDBmPt9y8OzKmOGt74gvky+hrlx1MDAwN1x1MDAxMFxmKzHBhTDfReSsXHUwMDAxI8G0kFx1MDAwNO2TzLdcdTAwMTFo8jJEwVx1MDAwMttMvP1cdTAwMTDGKlx1MDAxNlx1MDAwN2HpzeuXh/q5K1x1MDAxZj7ja/5C1Le5pVx1MDAwNoXgrISOXHUwMDE54/Aj7i8tdPb8Nc6ZWWw7TPTJwfrXpFx1MDAxNNxncJFcdTAwMDBcdTAwMTO1VSGssqNOnyPZ6DyS+H6GYvS+iXRIYHmSuINQqUx6KsN9XHUwMDEzyVx1MDAwMWTJO9GHmFx0XG6+cV8r0oa9e3P75eF+/tKHz/iiP5P8301ik8XRrd9MgKyWXGJcdTAwMDCW+09sXHUwMDAytio37mj+XHUwMDEwVbw3t9XVXs/DzFJcdTAwMTmy2KEyYyx4YidcdTAwMDbWqeFVwvlikiPnXHUwMDE1kvUuXGIzNzKul6nMSDxcdTAwMTeB18xahcyjy9wmm8M2XHUwMDFlPXlkbcloXHUwMDE4T2KzQq1VQTH/NCWxv4trpTA/oFx1MDAxNZY5L+s5ObBcdTAwMGZu2sc7XHUwMDE1OtxuLvXh4Iw6bv78qlxmwFx1MDAwZeVcdTAwMTmRXHUwMDBmXHUwMDEwMlnK2ZF4llBLTCE4kvBcdTAwMWbQOPVTwM4rzihSkXfegTfog8TxT1x1MDAwMtsptjpk1ZSRKGgslyVmXHUwMDExRY9oPY1VRyOmUr1cdTAwMTSwc3M0lFx1MDAxZqkhO2/xOeWZ6+3ezuLa/serdn9paX55/XD3dCEthVxcXHUwMDBi5Vx1MDAxOSVGUCwhalx0k/Fxftayi1x1MDAxY1x1MDAxMYTZ8MGzXHUwMDE2otdeqDrDTHIqXHUwMDE3UnF8k2uFyLXXKs7o70VrMlwiYvuM3rBLm8yufHZcdTAwMTf9/cXPO0eLqqn6nUop6Fx1MDAxZlxcmlx1MDAwYi1VoavAg3zxMfqLOzOgKKSvoFx1MDAxOPq/SHlGZJ6XsN++1WdKRP/Xqc9I2PGdOM1brbPC6Efkb29cdTAwMWS4XHI4X/6YdFt76582afF47aJcdTAwMTTkXHUwMDBm9Vx1MDAxOVx1MDAwMFx1MDAxMK9pQY6mx42hlmV1UNZcdTAwMDZccoq51DwysCmqz1xmxLhRb9wvXHUwMDEz91+nQKNcdTAwMTBGt37jvlOhQynb7vbDLO3NTlx1MDAxYla+Jlx1MDAxYp3GcvOipeqrm76ISLaIXG6N6HphvYhcdTAwMWTlPGWIM1xiZSF0z7Ig2Fkl0ZhcdTAwMWZcdTAwMTnYVFx1MDAxNWhsaF73Q4a9MX/amf869ZnvJLEwPFWAcq+JmX+Stnoz7lr7zllz8XZleflr40qXgvlcZlx1MDAxNLElRmsl6sKRp0FcYiDy4k2dM1x1MDAwMcFcdTAwMDUx/4XqM2AlJlTZjtI37k8791+1PpNpRlx1MDAxZtP9xpHFyV3/2fx28+CiuXRSW7g5WrFmK1WXh2VIYofqjMwtgXZCXHUwMDFlm1XT4Vx1MDAwMs76iEM4XHUwMDE2zFx1MDAwM7pMPuAlXHJAWGc2XHUwMDBlQ0eo8Uz4VFx1MDAxNlvchFx1MDAwNyf6UIVWWczk0+9cdTAwMWZcdTAwMDdT4Vx1MDAxMT6P//gnXGa+XHUwMDBiaudyg1lcdTAwMTRhp1lNnsZONnt80Vvduard7KzgVvK5uf71pFxmoLagI2MkRjWOVchi01xiqDlcdTAwMDLvSVx1MDAwMo3wkIEuxquJUo68qFx1MDAxNlx1MDAxNE5ZbZR/6rlcdTAwMTkv43RcdTAwMWVE3qhQZVx1MDAxOMW0XHUwMDE32U0so/z/xjTnXHUwMDE20pWQ3lx1MDAwNFU4uVb7vOw7l/25tVx1MDAxNduq9tM67FxcptQrXHUwMDAzqokkRtYkcTA5IG38XGKoXSR2lFx1MDAwN831StuCQO1MpMREs4SCqMm6J6I0XHUwMDAxNbBccllzsOFcdTAwMTldXHUwMDFjS9BcYi3lXHUwMDFmwv83rFnnRiAyOTo0Sk5ec6h3XHUwMDBmqb6+ujm7ubjxJb2AZOOwWYrn0b01XHUwMDEy4ImdMyhcdTAwMDFg9oGvO1STKECxoUgqdMxcdTAwMTSTdbQ6XG6lTpFcdTAwMWbOSVx1MDAwNFxu8ERcdTAwMDBcIvpDXGa0Mqx00CFGjeVcdTAwMWVcdTAwMWNoNIqL6VxyLVxyqr3KzagprTWhXHUwMDAxmNxYu7U0ae23ub55vb3emYmXLs6sLVx1MDAwM6yRXHUwMDA3XHUwMDE5NfZi61x1MDAxMFx1MDAwNDAjgTWLXHUwMDFkVeFBb3FgRD/ZXHUwMDFkktv2ZDHEV4RA7J04hlx1MDAxY1x0XHUwMDEyymRcdTAwMGUwNIfwmK5GXHUwMDE5IUzpa1x1MDAxNtBQ5uHLQpuejMt9fk9cdTAwMDGKS1x1MDAwNKTJ48XGTYuPruFcdTAwMTbi7fn+rePtne5NKeJFXCJcdTAwMTWJcGYtUEFcdTAwMTHQj3v5hd2Rtlo0t1x1MDAwNO1cIkZ+LlxczG16cjZcdTAwMTKLJjdcdTAwMDFDXHUwMDAwXHUwMDA0T8HaRl5cdOhF30tYqzyOaevwXHUwMDFlXGJQ2br+XHUwMDE04VpU3K95fYjDfG3tNFr1qIz2w86HhfZsv3Nx4G6gfbhT4y/99YXFMsBa/HYkglV7NFx1MDAxYUTd0uM0XGIzRtZYgVxmia5cdTAwMTV7Xoy5fpEu1fCiXHUwMDA2I8p7XHUwMDFh7bXEXHUwMDAz+lx1MDAxNzWpapOrrjU471xi+Vx1MDAxOU2qXHUwMDFin5Ldr6tcdTAwMDe1I1+7/LK1u9vrzp03ylx1MDAwMGxcdTAwMGJcdTAwMDFT4r8pXHUwMDA0XV6N4Fx1MDAxYTFcdTAwMTL/rlx1MDAxOFx1MDAwNn2sanRcXNPUpCrL5Vx1MDAwMMD843Gd36SW26MqXHUwMDBl2TojPyZcdTAwMDb0sj7c+7RcYoszldo5XzTV0tHHq3I8Riw2L4LQryyGXHUwMDEy6HGl2jNHVrGIaqE4WZ7m/tSQozHWZ5E+PfWq51x1MDAwMjozz//oetVrNahcdTAwMWHMb1C1JDKYJvdlzZbbullaWL44OlTV08O1ai3Z2ylcdTAwMDX1gzMjXGZCTFx1MDAxOe+1XHUwMDE5eSGWZ1x1MDAxZnkySlx1MDAxNJAxLltFmr72VNBcdTAwMDDi6IpRaW/kL4T8r9SeyvlvXHUwMDBlQ/lcYlx1MDAxN54hZFx1MDAwZleXXHUwMDBm2lx1MDAxZnF99rRzrdZmb1x1MDAxYVx1MDAwYnvbqlx1MDAxNORcdTAwMGaZXHUwMDA3LzLWg6hZ0I+rXHUwMDFmnl1EXHUwMDAwXHUwMDE2Rc1qX5Dff5mXhyhwXHUwMDAzhTtcdTAwMTRccm/Mn3bmv05zqja5qXStlFxyr8pRkyt+t6bbs1x1MDAxN7O1w+Pzav+o06pvtY7PSsF8jz64fatDzV7Cw8epdLFcdTAwMDVcdTAwMTE7M3jFQMhfXHUwMDE3U1wiepnuVEPe6aLe7vrG/UK4/zrtqd9JXylcdGxcdTAwMTWhhsmrw0lcdTAwMWZcdTAwMTdnbrc2LzqL+4e3t1uzvLDYLVx1MDAwNfdZuchbXHUwMDFk8vzOXHUwMDAx4eO3XHUwMDA3XHUwMDA07pNmjy68OsCpqe5PNTq8XHUwMDA111x1MDAxN/Ncbtw38lx1MDAxN0L+1+xPXHJ52Vxc/1x1MDAwZlx1MDAwZYGyXHUwMDE1glx1MDAxZpmA21V7Nnd2Xe2qPb7Ypd3mLH5aKENcdTAwMDZbXCL6SKxcdTAwMDCFLDZmX5J6d7pccu99Z6PRiFx1MDAwMFNmmlx1MDAxYkTEaLNcdTAwMTYxw9NYcvyFpZlsoXysn896kdeIk1x1MDAwMztePejUz5bXatf987S5Nbe12a1cdTAwMWSUXHUwMDAx2OR0JFwi3lx1MDAxOPm62qJ6XHUwMDFj0TKKslx1MDAwMFx1MDAwMmNZk86Wg6evlK7C++dccmldSEz7KsB+d+9cdTAwMTI+VDqd7VQu+TA0+WpJbTu5jVx1MDAxZl3mw1VcdTAwMTJfzz058+Hz4d39+Fx1MDAwM1x1MDAxZePB9/z73d//XHUwMDAzXpv8VSJ9 + + + + + diff --git a/src/textual/renderables/digits.py b/src/textual/renderables/digits.py index f22943e414..9fd2044404 100644 --- a/src/textual/renderables/digits.py +++ b/src/textual/renderables/digits.py @@ -5,8 +5,8 @@ from rich.segment import Segment from rich.style import Style, StyleType -DIGITS = " 0123456789+-^x:" -DIGITS3X3 = """\ +DIGITS = " 0123456789+-^x:ABCDEF" +DIGITS3X3_BOLD = """\ @@ -55,6 +55,96 @@ : +╭─╮ +├─┤ +╵ ╵ +┌─╮ +├─┤ +└─╯ +╭─╮ +│ +╰─╯ +┌─╮ +│ │ +└─╯ +╭─╴ +├─ +╰─╴ +╭─╴ +├─ +╵ + +""".splitlines() + + +DIGITS3X3 = """\ + + + +╭─╮ +│ │ +╰─╯ +╶╮ + │ +╶┴╴ +╶─╮ +┌─┘ +╰─╴ +╶─╮ + ─┤ +╶─╯ +╷ ╷ +╰─┤ + ╵ +╭─╴ +╰─╮ +╶─╯ +╭─╴ +├─╮ +╰─╯ +╶─┐ + │ + ╵ +╭─╮ +├─┤ +╰─╯ +╭─╮ +╰─┤ +╶─╯ + +╶┼╴ + + +╶─╴ + + ^ + + + + × + + + : + +╭─╮ +├─┤ +╵ ╵ +┌─╮ +├─┤ +└─╯ +╭─╮ +│ +╰─╯ +┌─╮ +│ │ +└─╯ +╭─╴ +├─ +╰─╴ +╭─╴ +├─ +╵ + """.splitlines() @@ -91,6 +181,11 @@ def render(self, style: Style) -> RenderResult: row2 = digit_pieces[1].append row3 = digit_pieces[2].append + if style.bold: + digits = DIGITS3X3_BOLD + else: + digits = DIGITS3X3 + for character in self._text: try: position = DIGITS.index(character) * 3 @@ -99,9 +194,9 @@ def render(self, style: Style) -> RenderResult: row2(" ") row3(character) else: - row1(DIGITS3X3[position].ljust(3)) - row2(DIGITS3X3[position + 1].ljust(3)) - row3(DIGITS3X3[position + 2].ljust(3)) + row1(digits[position].ljust(3)) + row2(digits[position + 1].ljust(3)) + row3(digits[position + 2].ljust(3)) new_line = Segment.line() for line in digit_pieces: diff --git a/src/textual/widgets/_digits.py b/src/textual/widgets/_digits.py index c64f9cafa4..b85fe27525 100644 --- a/src/textual/widgets/_digits.py +++ b/src/textual/widgets/_digits.py @@ -18,8 +18,7 @@ class Digits(Widget): Digits { width: 1fr; height: auto; - text-align: left; - text-style: bold; + text-align: left; box-sizing: border-box; } """ diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots/test_digits.svg b/tests/snapshot_tests/__snapshots__/test_snapshots/test_digits.svg index 91fd49898b..238accbed3 100644 --- a/tests/snapshot_tests/__snapshots__/test_snapshots/test_digits.svg +++ b/tests/snapshot_tests/__snapshots__/test_snapshots/test_digits.svg @@ -19,132 +19,132 @@ font-weight: 700; } - .terminal-1348330842-matrix { + .terminal-2016553667-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1348330842-title { + .terminal-2016553667-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1348330842-r1 { fill: #e1e1e1;font-weight: bold } -.terminal-1348330842-r2 { fill: #c5c8c6 } -.terminal-1348330842-r3 { fill: #e1e1e1 } + .terminal-2016553667-r1 { fill: #e1e1e1 } +.terminal-2016553667-r2 { fill: #c5c8c6 } +.terminal-2016553667-r3 { fill: #e1e1e1;font-weight: bold } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - DigitApp + DigitApp - + - - ╺━┓  ┓ ╻ ╻╺━┓╺━┓                                                                 - ━┫  ┃ ┗━┫┏━┛  ┃                                                                 -╺━┛.╺┻╸  ╹┗━╸  ╹                                                                 -                      ┏━┓ ┓ ╺━┓╺━┓╻ ╻┏━╸┏━╸╺━┓┏━┓┏━┓                             -                      ┃ ┃ ┃ ┏━┛ ━┫┗━┫┗━┓┣━┓  ┃┣━┫┗━┫╺╋╸╺━╸                       -                      ┗━┛╺┻╸┗━╸╺━┛  ╹╺━┛┗━┛  ╹┗━┛╺━┛      .,                     -                                                              ╺━┓    ┓ ┏━┓ ^ ╻ ╻ -                                                               ━┫ ×  ┃ ┃ ┃   ┗━┫ -                                                              ╺━┛   ╺┻╸┗━┛     ╹ - - - - - - - - - - - - - - + + ╶─╮ ╶╮ ╷ ╷╶─╮╶─┐                                                                 + ─┤  │ ╰─┤┌─┘  │                                                                 +╶─╯.╶┴╴  ╵╰─╴  ╵                                                                 +             ╭─╮╶╮ ╶─╮╶─╮╷ ╷╭─╴╭─╴╶─┐╭─╮╭─╮        ╭─╮┌─╮╭─╮┌─╮╭─╴╭─╴            +             │ │ │ ┌─┘ ─┤╰─┤╰─╮├─╮  │├─┤╰─┤╶┼╴╶─╴  ├─┤├─┤│  │ │├─ ├─             +             ╰─╯╶┴╴╰─╴╶─╯  ╵╶─╯╰─╯  ╵╰─╯╶─╯      .,╵ ╵└─╯╰─╯└─╯╰─╴╵              +             ┏━┓ ┓ ╺━┓╺━┓╻ ╻┏━╸┏━╸╺━┓┏━┓┏━┓        ╭─╮┌─╮╭─╮┌─╮╭─╴╭─╴            +             ┃ ┃ ┃ ┏━┛ ━┫┗━┫┗━┓┣━┓  ┃┣━┫┗━┫╺╋╸╺━╸  ├─┤├─┤│  │ │├─ ├─             +             ┗━┛╺┻╸┗━╸╺━┛  ╹╺━┛┗━┛  ╹┗━┛╺━┛      .,╵ ╵└─╯╰─╯└─╯╰─╴╵              +                                                              ╶─╮   ╶╮ ╭─╮ ^ ╷ ╷ +                                                               ─┤ ×  │ │ │   ╰─┤ +                                                              ╶─╯   ╶┴╴╰─╯     ╵ + + + + + + + + + + + diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_calculator.svg b/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_calculator.svg index fc4357d199..312e3a8a19 100644 --- a/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_calculator.svg +++ b/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_calculator.svg @@ -19,145 +19,145 @@ font-weight: 700; } - .terminal-2896294451-matrix { + .terminal-3758221115-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-2896294451-title { + .terminal-3758221115-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-2896294451-r1 { fill: #e1e1e1 } -.terminal-2896294451-r2 { fill: #1e1e1e } -.terminal-2896294451-r3 { fill: #c5c8c6 } -.terminal-2896294451-r4 { fill: #e5ebf2;font-weight: bold } -.terminal-2896294451-r5 { fill: #507bb3 } -.terminal-2896294451-r6 { fill: #ffcf56 } -.terminal-2896294451-r7 { fill: #004578;font-weight: bold } -.terminal-2896294451-r8 { fill: #dde6ed;font-weight: bold } -.terminal-2896294451-r9 { fill: #211505;font-weight: bold } -.terminal-2896294451-r10 { fill: #001541 } -.terminal-2896294451-r11 { fill: #b86b00 } -.terminal-2896294451-r12 { fill: #454a50 } -.terminal-2896294451-r13 { fill: #e2e3e3;font-weight: bold } -.terminal-2896294451-r14 { fill: #000000 } -.terminal-2896294451-r15 { fill: #14191f } + .terminal-3758221115-r1 { fill: #e1e1e1 } +.terminal-3758221115-r2 { fill: #1e1e1e } +.terminal-3758221115-r3 { fill: #c5c8c6 } +.terminal-3758221115-r4 { fill: #e5ebf2 } +.terminal-3758221115-r5 { fill: #507bb3 } +.terminal-3758221115-r6 { fill: #ffcf56 } +.terminal-3758221115-r7 { fill: #004578;font-weight: bold } +.terminal-3758221115-r8 { fill: #dde6ed;font-weight: bold } +.terminal-3758221115-r9 { fill: #211505;font-weight: bold } +.terminal-3758221115-r10 { fill: #001541 } +.terminal-3758221115-r11 { fill: #b86b00 } +.terminal-3758221115-r12 { fill: #454a50 } +.terminal-3758221115-r13 { fill: #e2e3e3;font-weight: bold } +.terminal-3758221115-r14 { fill: #000000 } +.terminal-3758221115-r15 { fill: #14191f } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - CalculatorApp + CalculatorApp - + - - - -                                                                     ┏━┓ -                                                                     ┃ ┃ -                                                                     ┗━┛ - - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - AC  +/-  %  ÷  -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - 7  8  9  ×  -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - 4  5  6  -  -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - 1  2  3  +  -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▅▅ - -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + + + +                                                                     ╭─╮ +                                                                     │ │ +                                                                     ╰─╯ + + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + AC  +/-  %  ÷  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 7  8  9  ×  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 4  5  6  -  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + 1  2  3  +  +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▅▅ + +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_merlin.svg b/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_merlin.svg index 424a18628e..2199d7a4b2 100644 --- a/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_merlin.svg +++ b/tests/snapshot_tests/__snapshots__/test_snapshots/test_example_merlin.svg @@ -19,141 +19,141 @@ font-weight: 700; } - .terminal-4281637637-matrix { + .terminal-2134437-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-4281637637-title { + .terminal-2134437-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-4281637637-r1 { fill: #e1e1e1 } -.terminal-4281637637-r2 { fill: #1e1e1e } -.terminal-4281637637-r3 { fill: #c5c8c6 } -.terminal-4281637637-r4 { fill: #fea62b;font-weight: bold } -.terminal-4281637637-r5 { fill: #004578 } -.terminal-4281637637-r6 { fill: #e1e1e1;font-weight: bold } -.terminal-4281637637-r7 { fill: #0178d4 } -.terminal-4281637637-r8 { fill: #e2e2e2 } -.terminal-4281637637-r9 { fill: #262626 } -.terminal-4281637637-r10 { fill: #737373;font-weight: bold } -.terminal-4281637637-r11 { fill: #14191f } + .terminal-2134437-r1 { fill: #e1e1e1 } +.terminal-2134437-r2 { fill: #1e1e1e } +.terminal-2134437-r3 { fill: #c5c8c6 } +.terminal-2134437-r4 { fill: #fea62b } +.terminal-2134437-r5 { fill: #004578 } +.terminal-2134437-r6 { fill: #e1e1e1;font-weight: bold } +.terminal-2134437-r7 { fill: #0178d4 } +.terminal-2134437-r8 { fill: #e2e2e2 } +.terminal-2134437-r9 { fill: #262626 } +.terminal-2134437-r10 { fill: #737373;font-weight: bold } +.terminal-2134437-r11 { fill: #14191f } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - MerlinApp + MerlinApp - + - - - -┏━┓   ┏━┓┏━┓   ┏━┓┏━┓ -┃ ┃ : ┃ ┃┃ ┃ : ┃ ┃┃ ┃ -┗━┛   ┗━┛┗━┛   ┗━┛┗━┛ - - -█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ - -    7         8         9      -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -    4         5         6      -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ - -    1         2         3      -▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ - -▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ -▇▇ + + + +╭─╮   ╭─╮╭─╮   ╭─╮╭─╮ +│ │ : │ ││ │ : │ ││ │ +╰─╯   ╰─╯╰─╯   ╰─╯╰─╯ + + +█▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀▀█ + +    7         8         9      +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +    4         5         6      +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ + +    1         2         3      +▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ + +▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁ +▇▇ diff --git a/tests/snapshot_tests/__snapshots__/test_snapshots/test_recompose.svg b/tests/snapshot_tests/__snapshots__/test_snapshots/test_recompose.svg index 3feef6016d..6b3f7a1094 100644 --- a/tests/snapshot_tests/__snapshots__/test_snapshots/test_recompose.svg +++ b/tests/snapshot_tests/__snapshots__/test_snapshots/test_recompose.svg @@ -19,135 +19,134 @@ font-weight: 700; } - .terminal-1943930343-matrix { + .terminal-3827288185-matrix { font-family: Fira Code, monospace; font-size: 20px; line-height: 24.4px; font-variant-east-asian: full-width; } - .terminal-1943930343-title { + .terminal-3827288185-title { font-size: 18px; font-weight: bold; font-family: arial; } - .terminal-1943930343-r1 { fill: #ff0000 } -.terminal-1943930343-r2 { fill: #c5c8c6 } -.terminal-1943930343-r3 { fill: #e1e1e1;font-weight: bold } -.terminal-1943930343-r4 { fill: #e1e1e1 } -.terminal-1943930343-r5 { fill: #fea62b } -.terminal-1943930343-r6 { fill: #323232 } + .terminal-3827288185-r1 { fill: #ff0000 } +.terminal-3827288185-r2 { fill: #c5c8c6 } +.terminal-3827288185-r3 { fill: #e1e1e1 } +.terminal-3827288185-r4 { fill: #fea62b } +.terminal-3827288185-r5 { fill: #323232 } - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - + - RecomposeApp + RecomposeApp - + - - ┌─────────┐┌─────────┐┌──────────┐┌─────────┐┌──────────┐┌─────────┐┌──────────┐ - ┓ ┏━┓   ││ ┓  ┓    ││ ┓ ╺━┓    ││ ┓ ╺━┓   ││ ┓ ╻ ╻    ││ ┓ ┏━╸   ││ ┓ ┏━╸     - ┃ ┃ ┃   ││ ┃  ┃    ││ ┃ ┏━┛    ││ ┃  ━┫   ││ ┃ ┗━┫    ││ ┃ ┗━┓   ││ ┃ ┣━┓     -╺┻╸┗━┛   ││╺┻╸╺┻╸   ││╺┻╸┗━╸    ││╺┻╸╺━┛   ││╺┻╸  ╹    ││╺┻╸╺━┛   ││╺┻╸┗━┛     -└─────────┘└─────────┘└──────────┘└─────────┘└──────────┘└─────────┘└──────────┘ - - - - - - - -━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━50%                                            - - - - - - - - - - + + ┌─────────┐┌─────────┐┌──────────┐┌─────────┐┌──────────┐┌─────────┐┌──────────┐ +╶╮ ╭─╮   ││╶╮ ╶╮    ││╶╮ ╶─╮    ││╶╮ ╶─╮   ││╶╮ ╷ ╷    ││╶╮ ╭─╴   ││╶╮ ╭─╴     + │ │ │   ││ │  │    ││ │ ┌─┘    ││ │  ─┤   ││ │ ╰─┤    ││ │ ╰─╮   ││ │ ├─╮     +╶┴╴╰─╯   ││╶┴╴╶┴╴   ││╶┴╴╰─╴    ││╶┴╴╶─╯   ││╶┴╴  ╵    ││╶┴╴╶─╯   ││╶┴╴╰─╯     +└─────────┘└─────────┘└──────────┘└─────────┘└──────────┘└─────────┘└──────────┘ + + + + + + + +━━━━━━━━━━━━━━━━╺━━━━━━━━━━━━━━━50%                                            + + + + + + + + + + diff --git a/tests/snapshot_tests/snapshot_apps/digits.py b/tests/snapshot_tests/snapshot_apps/digits.py index f4c1be6e01..93d7c5df32 100644 --- a/tests/snapshot_tests/snapshot_apps/digits.py +++ b/tests/snapshot_tests/snapshot_apps/digits.py @@ -4,21 +4,25 @@ class DigitApp(App): CSS = """ - #digits1 { + .left { text-align: left; } - #digits2 { + .center { text-align:center; } - #digits3 { + .right { text-align:right; } + .bold { + text-style: bold; + } """ def compose(self) -> ComposeResult: - yield Digits("3.1427", id="digits1") - yield Digits(" 0123456789+-.,", id="digits2") - yield Digits("3x10^4", id="digits3") + yield Digits("3.1427", classes="left") + yield Digits(" 0123456789+-.,ABCDEF", classes="center") + yield Digits(" 0123456789+-.,ABCDEF", classes="center bold") + yield Digits("3x10^4", classes="right") if __name__ == "__main__": From 54d7dd6d0337b68dce215da0db448555ae16b632 Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sat, 5 Oct 2024 12:59:28 +0100 Subject: [PATCH 2/3] changelog --- CHANGELOG.md | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 007418ccb5..5b27bc934b 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,15 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](http://keepachangelog.com/) and this project adheres to [Semantic Versioning](http://semver.org/). -## Unrelease +## Unreleased ### Added -- Added support for A-F to Digits widget +- Added support for A-F to Digits widget https://github.com/Textualize/textual/pull/5094 + +### Changed + +- Digits are now thin by default, style with text-style: bold to get bold digits https://github.com/Textualize/textual/pull/5094 ## [0.82.0] - 2024-10-03 From 1e208b4a5688c8601f78df2db41603efa8c3656a Mon Sep 17 00:00:00 2001 From: Will McGugan Date: Sat, 5 Oct 2024 17:37:12 +0100 Subject: [PATCH 3/3] update digits docs --- docs/widgets/digits.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/widgets/digits.md b/docs/widgets/digits.md index 4fb919f762..77c271b972 100644 --- a/docs/widgets/digits.md +++ b/docs/widgets/digits.md @@ -4,7 +4,7 @@ A widget to display numerical values in tall multi-line characters. -The digits 0-9 are supported, in addition to the following characters `+`, `-`, `^`, `:`, and `×`. +The digits 0-9 and characters A-F are supported, in addition to `+`, `-`, `^`, `:`, and `×`. Other characters will be displayed in a regular size font. You can set the text to be displayed in the constructor, or call [`update()`][textual.widgets.Digits.update] to change the text after the widget has been mounted.