tclock 0.1.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
tclock-0.1.2/LICENSE ADDED
@@ -0,0 +1,24 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Eivind Teig
4
+
5
+ This project is a Python port of clock-tui, Copyright (c) 2022 Race604
6
+ (https://github.com/race604/clock-tui), also released under the MIT License.
7
+
8
+ Permission is hereby granted, free of charge, to any person obtaining a copy
9
+ of this software and associated documentation files (the "Software"), to deal
10
+ in the Software without restriction, including without limitation the rights
11
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+ copies of the Software, and to permit persons to whom the Software is
13
+ furnished to do so, subject to the following conditions:
14
+
15
+ The above copyright notice and this permission notice shall be included in all
16
+ copies or substantial portions of the Software.
17
+
18
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
+ SOFTWARE.
tclock-0.1.2/PKG-INFO ADDED
@@ -0,0 +1,194 @@
1
+ Metadata-Version: 2.4
2
+ Name: tclock
3
+ Version: 0.1.2
4
+ Summary: A clock, timer, stopwatch and countdown for your terminal, built with Textual
5
+ Keywords: clock,timer,stopwatch,countdown,tui,textual,terminal
6
+ Author: Eivind Teig
7
+ Author-email: Eivind Teig <eivind.teig@gmail.com>
8
+ License-Expression: MIT
9
+ License-File: LICENSE
10
+ Classifier: Development Status :: 4 - Beta
11
+ Classifier: Environment :: Console
12
+ Classifier: Intended Audience :: End Users/Desktop
13
+ Classifier: Operating System :: OS Independent
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.14
16
+ Classifier: Topic :: Utilities
17
+ Requires-Dist: textual>=8.0
18
+ Requires-Dist: typer>=0.15
19
+ Requires-Dist: platformdirs>=4.0
20
+ Requires-Dist: tzdata ; sys_platform == 'win32'
21
+ Requires-Python: >=3.14
22
+ Project-URL: Homepage, https://github.com/eivl/tclock
23
+ Project-URL: Repository, https://github.com/eivl/tclock
24
+ Project-URL: Issues, https://github.com/eivl/tclock/issues
25
+ Project-URL: Original, https://github.com/race604/clock-tui
26
+ Description-Content-Type: text/markdown
27
+
28
+ # tclock
29
+
30
+ A clock, timer, stopwatch and countdown for your terminal, drawn with big block digits.
31
+ Built with [Textual](https://textual.textualize.io/). A Python port of
32
+ [race604/clock-tui](https://github.com/race604/clock-tui).
33
+
34
+ Works on Linux, macOS and Windows. Requires Python 3.14 or newer.
35
+
36
+ ## Install
37
+
38
+ ```shell
39
+ uv tool install tclock
40
+ # or
41
+ pipx install tclock
42
+ # or
43
+ pip install tclock
44
+ ```
45
+
46
+ ## Usage
47
+
48
+ ```shell
49
+ tclock # clock (default mode)
50
+ tclock clock -z Asia/Tokyo -D # another timezone, no date line
51
+ tclock timer -d 25m -d 5m -t Work -t Break -r
52
+ tclock stopwatch
53
+ tclock countdown -t 2027-01-01 -T "New year"
54
+ tclock -c '#e63946' -s 2 # colour and size apply to every mode
55
+ ```
56
+
57
+ Keys while running:
58
+
59
+ | Key | Action |
60
+ |------------------|----------------------------------------|
61
+ | `q`, `Ctrl+C` | quit |
62
+ | `Space` | pause / resume (timer and stopwatch) |
63
+ | `c` | switch to clock |
64
+ | `w` | switch to stopwatch |
65
+ | `t` | switch to timer (defaults from config) |
66
+ | `?` | show / hide the key overlay |
67
+
68
+ A key bar with the same bindings appears along the bottom whenever you touch the keyboard
69
+ or mouse and fades out after a few seconds, so the clock stays clean at rest.
70
+
71
+ Run `tclock --help` or `tclock <mode> --help` for every flag.
72
+
73
+ ### Clock
74
+
75
+ `tclock clock [-z TZ] [-D] [-S] [-m]` shows the current time. `-z` takes an IANA zone such
76
+ as `Europe/Oslo`. `-D` hides the date, `-S` hides seconds, `-m` shows tenths of a second.
77
+
78
+ ### Timer
79
+
80
+ `tclock timer -d 5m` counts down five minutes. Durations are a number plus `s`, `m`, `h`
81
+ or `d`. Repeat `-d` to run several durations in sequence and `-t` to title each of them.
82
+ `-r` repeats the sequence, `-P` starts paused, `-Q` quits when time is up, `-M` hides
83
+ tenths.
84
+
85
+ `-e` runs a shell command when the timer ends and shows its result in the footer:
86
+
87
+ ```shell
88
+ tclock timer -d 25m -e 'notify-send tclock "Time is up"' # Linux
89
+ tclock timer -d 25m -e 'osascript -e "display notification \"Time is up\""' # macOS
90
+ tclock timer -d 25m -e 'msg * Time is up' # Windows
91
+ ```
92
+
93
+ When the timer runs out the screen flashes green until you quit or switch mode.
94
+
95
+ ### Stopwatch
96
+
97
+ `tclock stopwatch` counts up. Press `Space` to pause. The final time is printed to the
98
+ terminal after you quit.
99
+
100
+ ### Countdown
101
+
102
+ `tclock countdown -t WHEN [-T TITLE] [-c] [-r] [-m]` shows the time until `WHEN`, which
103
+ can be `20:00`, `20:00:00` (today), `2027-01-01` (midnight), `2026-12-25 20:00:00` (local
104
+ time) or RFC 3339 such as `2026-12-25T20:00:00-04:00`. `-c` keeps counting (negative)
105
+ after the moment has passed instead of blinking `0:00`; `-r` counts up since the moment.
106
+
107
+ ## Configuration
108
+
109
+ tclock reads an optional TOML file:
110
+
111
+ | OS | Path |
112
+ |---------|-------------------------------------------------------------|
113
+ | Linux | `~/.config/tclock/config.toml` (honours `$XDG_CONFIG_HOME`) |
114
+ | macOS | `~/Library/Application Support/tclock/config.toml` |
115
+ | Windows | `%APPDATA%\tclock\config.toml` |
116
+
117
+ Command-line flags override the file; the file overrides built-in defaults. Every key is
118
+ optional. The full schema, with the built-in defaults:
119
+
120
+ ```toml
121
+ [default]
122
+ mode = "clock" # clock, timer, stopwatch or countdown when no mode is given
123
+ color = "green"
124
+ size = 1
125
+
126
+ [clock]
127
+ show_date = true
128
+ show_seconds = true
129
+ show_millis = false
130
+ # timezone = "Europe/Oslo"
131
+
132
+ [timer]
133
+ durations = ["25m", "5m"]
134
+ titles = []
135
+ repeat = false
136
+ show_millis = true
137
+ start_paused = false
138
+ auto_quit = false
139
+ execute = [] # joined with spaces into one shell command
140
+
141
+ [countdown]
142
+ # time = "2027-01-01"
143
+ # title = "New year"
144
+ show_millis = false
145
+ continue_on_zero = false
146
+ reverse = false
147
+ ```
148
+
149
+ A broken file or a wrong value produces a warning on stderr and the default is used.
150
+
151
+ ## Differences from the Rust clock-tui
152
+
153
+ - Flags that took several values now repeat instead: `-d 25m -d 5m`, `-t Work -t Break`.
154
+ - `--execute` takes one quoted shell string instead of a list of words.
155
+ - The config file lives in the platform-native location listed above rather than always
156
+ in `~/.config/tclock/`.
157
+ - `tclock timer` without `-d` uses the `[timer] durations` from the config file
158
+ (`25m`, `5m` by default) instead of a fixed `5m`.
159
+ - `tclock countdown` without `--time` falls back to `[countdown] time` in the config file.
160
+ - `Ctrl+C` quits. In the Rust binary it switches to clock mode, because its key matcher
161
+ ignores the Ctrl modifier (so `Ctrl+Q`, `Ctrl+W` and `Ctrl+T` also act like the plain
162
+ letters there).
163
+ - Mode keys work from every mode. In the Rust binary a widget, once created, stays in a
164
+ fixed priority order (clock > timer > stopwatch > countdown), so e.g. `t` from the
165
+ clock has no visible effect and `w` from a timer keeps showing the timer.
166
+ - The `?` help overlay and the auto-hiding key bar are additions.
167
+
168
+ ## Development
169
+
170
+ ```shell
171
+ uv sync
172
+ uv run pytest
173
+ uv run ruff check . && uv run ruff format --check . && uv run mypy src
174
+ uv run tclock
175
+ ```
176
+
177
+ ## Releasing
178
+
179
+ Releases are automated with GitHub Actions:
180
+
181
+ 1. In the Actions tab run **Release** and choose `patch`, `minor`, `major`, `rc` or
182
+ `stable`. The workflow runs `uv version --bump`, commits `chore: release vX.Y.Z` to
183
+ `main` and pushes the tag `vX.Y.Z`.
184
+ 2. The tag triggers **Publish**, which builds the sdist and wheel and uploads them to PyPI
185
+ with [trusted publishing](https://docs.pypi.org/trusted-publishers/).
186
+
187
+ One-time setup: on pypi.org add a trusted publisher for this repository with workflow
188
+ `publish.yml` and environment `pypi`, and create a `pypi` environment in the GitHub repo
189
+ settings. If `main` is branch-protected, give the Release workflow a token that may push
190
+ to it (a PAT stored as a secret, or a ruleset bypass for GitHub Actions).
191
+
192
+ ## License
193
+
194
+ MIT. Original clock-tui by Race604, also MIT.
tclock-0.1.2/README.md ADDED
@@ -0,0 +1,167 @@
1
+ # tclock
2
+
3
+ A clock, timer, stopwatch and countdown for your terminal, drawn with big block digits.
4
+ Built with [Textual](https://textual.textualize.io/). A Python port of
5
+ [race604/clock-tui](https://github.com/race604/clock-tui).
6
+
7
+ Works on Linux, macOS and Windows. Requires Python 3.14 or newer.
8
+
9
+ ## Install
10
+
11
+ ```shell
12
+ uv tool install tclock
13
+ # or
14
+ pipx install tclock
15
+ # or
16
+ pip install tclock
17
+ ```
18
+
19
+ ## Usage
20
+
21
+ ```shell
22
+ tclock # clock (default mode)
23
+ tclock clock -z Asia/Tokyo -D # another timezone, no date line
24
+ tclock timer -d 25m -d 5m -t Work -t Break -r
25
+ tclock stopwatch
26
+ tclock countdown -t 2027-01-01 -T "New year"
27
+ tclock -c '#e63946' -s 2 # colour and size apply to every mode
28
+ ```
29
+
30
+ Keys while running:
31
+
32
+ | Key | Action |
33
+ |------------------|----------------------------------------|
34
+ | `q`, `Ctrl+C` | quit |
35
+ | `Space` | pause / resume (timer and stopwatch) |
36
+ | `c` | switch to clock |
37
+ | `w` | switch to stopwatch |
38
+ | `t` | switch to timer (defaults from config) |
39
+ | `?` | show / hide the key overlay |
40
+
41
+ A key bar with the same bindings appears along the bottom whenever you touch the keyboard
42
+ or mouse and fades out after a few seconds, so the clock stays clean at rest.
43
+
44
+ Run `tclock --help` or `tclock <mode> --help` for every flag.
45
+
46
+ ### Clock
47
+
48
+ `tclock clock [-z TZ] [-D] [-S] [-m]` shows the current time. `-z` takes an IANA zone such
49
+ as `Europe/Oslo`. `-D` hides the date, `-S` hides seconds, `-m` shows tenths of a second.
50
+
51
+ ### Timer
52
+
53
+ `tclock timer -d 5m` counts down five minutes. Durations are a number plus `s`, `m`, `h`
54
+ or `d`. Repeat `-d` to run several durations in sequence and `-t` to title each of them.
55
+ `-r` repeats the sequence, `-P` starts paused, `-Q` quits when time is up, `-M` hides
56
+ tenths.
57
+
58
+ `-e` runs a shell command when the timer ends and shows its result in the footer:
59
+
60
+ ```shell
61
+ tclock timer -d 25m -e 'notify-send tclock "Time is up"' # Linux
62
+ tclock timer -d 25m -e 'osascript -e "display notification \"Time is up\""' # macOS
63
+ tclock timer -d 25m -e 'msg * Time is up' # Windows
64
+ ```
65
+
66
+ When the timer runs out the screen flashes green until you quit or switch mode.
67
+
68
+ ### Stopwatch
69
+
70
+ `tclock stopwatch` counts up. Press `Space` to pause. The final time is printed to the
71
+ terminal after you quit.
72
+
73
+ ### Countdown
74
+
75
+ `tclock countdown -t WHEN [-T TITLE] [-c] [-r] [-m]` shows the time until `WHEN`, which
76
+ can be `20:00`, `20:00:00` (today), `2027-01-01` (midnight), `2026-12-25 20:00:00` (local
77
+ time) or RFC 3339 such as `2026-12-25T20:00:00-04:00`. `-c` keeps counting (negative)
78
+ after the moment has passed instead of blinking `0:00`; `-r` counts up since the moment.
79
+
80
+ ## Configuration
81
+
82
+ tclock reads an optional TOML file:
83
+
84
+ | OS | Path |
85
+ |---------|-------------------------------------------------------------|
86
+ | Linux | `~/.config/tclock/config.toml` (honours `$XDG_CONFIG_HOME`) |
87
+ | macOS | `~/Library/Application Support/tclock/config.toml` |
88
+ | Windows | `%APPDATA%\tclock\config.toml` |
89
+
90
+ Command-line flags override the file; the file overrides built-in defaults. Every key is
91
+ optional. The full schema, with the built-in defaults:
92
+
93
+ ```toml
94
+ [default]
95
+ mode = "clock" # clock, timer, stopwatch or countdown when no mode is given
96
+ color = "green"
97
+ size = 1
98
+
99
+ [clock]
100
+ show_date = true
101
+ show_seconds = true
102
+ show_millis = false
103
+ # timezone = "Europe/Oslo"
104
+
105
+ [timer]
106
+ durations = ["25m", "5m"]
107
+ titles = []
108
+ repeat = false
109
+ show_millis = true
110
+ start_paused = false
111
+ auto_quit = false
112
+ execute = [] # joined with spaces into one shell command
113
+
114
+ [countdown]
115
+ # time = "2027-01-01"
116
+ # title = "New year"
117
+ show_millis = false
118
+ continue_on_zero = false
119
+ reverse = false
120
+ ```
121
+
122
+ A broken file or a wrong value produces a warning on stderr and the default is used.
123
+
124
+ ## Differences from the Rust clock-tui
125
+
126
+ - Flags that took several values now repeat instead: `-d 25m -d 5m`, `-t Work -t Break`.
127
+ - `--execute` takes one quoted shell string instead of a list of words.
128
+ - The config file lives in the platform-native location listed above rather than always
129
+ in `~/.config/tclock/`.
130
+ - `tclock timer` without `-d` uses the `[timer] durations` from the config file
131
+ (`25m`, `5m` by default) instead of a fixed `5m`.
132
+ - `tclock countdown` without `--time` falls back to `[countdown] time` in the config file.
133
+ - `Ctrl+C` quits. In the Rust binary it switches to clock mode, because its key matcher
134
+ ignores the Ctrl modifier (so `Ctrl+Q`, `Ctrl+W` and `Ctrl+T` also act like the plain
135
+ letters there).
136
+ - Mode keys work from every mode. In the Rust binary a widget, once created, stays in a
137
+ fixed priority order (clock > timer > stopwatch > countdown), so e.g. `t` from the
138
+ clock has no visible effect and `w` from a timer keeps showing the timer.
139
+ - The `?` help overlay and the auto-hiding key bar are additions.
140
+
141
+ ## Development
142
+
143
+ ```shell
144
+ uv sync
145
+ uv run pytest
146
+ uv run ruff check . && uv run ruff format --check . && uv run mypy src
147
+ uv run tclock
148
+ ```
149
+
150
+ ## Releasing
151
+
152
+ Releases are automated with GitHub Actions:
153
+
154
+ 1. In the Actions tab run **Release** and choose `patch`, `minor`, `major`, `rc` or
155
+ `stable`. The workflow runs `uv version --bump`, commits `chore: release vX.Y.Z` to
156
+ `main` and pushes the tag `vX.Y.Z`.
157
+ 2. The tag triggers **Publish**, which builds the sdist and wheel and uploads them to PyPI
158
+ with [trusted publishing](https://docs.pypi.org/trusted-publishers/).
159
+
160
+ One-time setup: on pypi.org add a trusted publisher for this repository with workflow
161
+ `publish.yml` and environment `pypi`, and create a `pypi` environment in the GitHub repo
162
+ settings. If `main` is branch-protected, give the Release workflow a token that may push
163
+ to it (a PAT stored as a secret, or a ruleset bypass for GitHub Actions).
164
+
165
+ ## License
166
+
167
+ MIT. Original clock-tui by Race604, also MIT.
@@ -0,0 +1,80 @@
1
+ [project]
2
+ name = "tclock"
3
+ version = "0.1.2"
4
+ description = "A clock, timer, stopwatch and countdown for your terminal, built with Textual"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ license-files = ["LICENSE"]
8
+ requires-python = ">=3.14"
9
+ keywords = [
10
+ "clock",
11
+ "timer",
12
+ "stopwatch",
13
+ "countdown",
14
+ "tui",
15
+ "textual",
16
+ "terminal",
17
+ ]
18
+ classifiers = [
19
+ "Development Status :: 4 - Beta",
20
+ "Environment :: Console",
21
+ "Intended Audience :: End Users/Desktop",
22
+ "Operating System :: OS Independent",
23
+ "Programming Language :: Python :: 3",
24
+ "Programming Language :: Python :: 3.14",
25
+ "Topic :: Utilities",
26
+ ]
27
+ dependencies = [
28
+ "textual>=8.0",
29
+ "typer>=0.15",
30
+ "platformdirs>=4.0",
31
+ "tzdata; sys_platform == 'win32'",
32
+ ]
33
+
34
+ [[project.authors]]
35
+ name = "Eivind Teig"
36
+ email = "eivind.teig@gmail.com"
37
+
38
+ [project.urls]
39
+ Homepage = "https://github.com/eivl/tclock"
40
+ Repository = "https://github.com/eivl/tclock"
41
+ Issues = "https://github.com/eivl/tclock/issues"
42
+ Original = "https://github.com/race604/clock-tui"
43
+
44
+ [project.scripts]
45
+ tclock = "tclock.cli:main"
46
+
47
+ [dependency-groups]
48
+ dev = [
49
+ "pytest>=8.0",
50
+ "pytest-asyncio>=0.24",
51
+ "ruff>=0.6",
52
+ "mypy>=1.11",
53
+ ]
54
+
55
+ [build-system]
56
+ requires = ["uv_build>=0.12.5,<0.13.0"]
57
+ build-backend = "uv_build"
58
+
59
+ [tool.pytest.ini_options]
60
+ asyncio_mode = "auto"
61
+ testpaths = ["tests"]
62
+
63
+ [tool.ruff]
64
+ line-length = 100
65
+ target-version = "py314"
66
+ extend-exclude = ["docs"]
67
+
68
+ [tool.ruff.lint]
69
+ select = [
70
+ "E",
71
+ "F",
72
+ "I",
73
+ "UP",
74
+ "B",
75
+ "SIM",
76
+ ]
77
+
78
+ [tool.mypy]
79
+ python_version = "3.14"
80
+ strict = true
@@ -0,0 +1,62 @@
1
+ [project]
2
+ name = "tclock"
3
+ version = "0.1.2"
4
+ description = "A clock, timer, stopwatch and countdown for your terminal, built with Textual"
5
+ readme = "README.md"
6
+ license = "MIT"
7
+ license-files = ["LICENSE"]
8
+ authors = [{ name = "Eivind Teig", email = "eivind.teig@gmail.com" }]
9
+ requires-python = ">=3.14"
10
+ keywords = ["clock", "timer", "stopwatch", "countdown", "tui", "textual", "terminal"]
11
+ classifiers = [
12
+ "Development Status :: 4 - Beta",
13
+ "Environment :: Console",
14
+ "Intended Audience :: End Users/Desktop",
15
+ "Operating System :: OS Independent",
16
+ "Programming Language :: Python :: 3",
17
+ "Programming Language :: Python :: 3.14",
18
+ "Topic :: Utilities",
19
+ ]
20
+ dependencies = [
21
+ "textual>=8.0",
22
+ "typer>=0.15",
23
+ "platformdirs>=4.0",
24
+ "tzdata; sys_platform == 'win32'",
25
+ ]
26
+
27
+ [project.urls]
28
+ Homepage = "https://github.com/eivl/tclock"
29
+ Repository = "https://github.com/eivl/tclock"
30
+ Issues = "https://github.com/eivl/tclock/issues"
31
+ Original = "https://github.com/race604/clock-tui"
32
+
33
+ [project.scripts]
34
+ tclock = "tclock.cli:main"
35
+
36
+ [dependency-groups]
37
+ dev = [
38
+ "pytest>=8.0",
39
+ "pytest-asyncio>=0.24",
40
+ "ruff>=0.6",
41
+ "mypy>=1.11",
42
+ ]
43
+
44
+ [build-system]
45
+ requires = ["uv_build>=0.12.5,<0.13.0"]
46
+ build-backend = "uv_build"
47
+
48
+ [tool.pytest.ini_options]
49
+ asyncio_mode = "auto"
50
+ testpaths = ["tests"]
51
+
52
+ [tool.ruff]
53
+ line-length = 100
54
+ target-version = "py314"
55
+ extend-exclude = ["docs"]
56
+
57
+ [tool.ruff.lint]
58
+ select = ["E", "F", "I", "UP", "B", "SIM"]
59
+
60
+ [tool.mypy]
61
+ python_version = "3.14"
62
+ strict = true
@@ -0,0 +1,10 @@
1
+ """tclock: a clock, timer, stopwatch and countdown for the terminal."""
2
+
3
+ from importlib.metadata import PackageNotFoundError, version
4
+
5
+ try:
6
+ __version__ = version("tclock")
7
+ except PackageNotFoundError: # running from a checkout that is not installed
8
+ __version__ = "0.0.0"
9
+
10
+ __all__ = ["__version__"]
@@ -0,0 +1,55 @@
1
+ Screen {
2
+ align: center middle;
3
+ overflow: hidden hidden;
4
+ layers: base keybar;
5
+ }
6
+
7
+ Screen.-flash {
8
+ background: ansi_green;
9
+ }
10
+
11
+ Screen.-flash Label {
12
+ color: ansi_black;
13
+ }
14
+
15
+ #body {
16
+ height: auto;
17
+ overflow: hidden hidden;
18
+ }
19
+
20
+ #header, #footer {
21
+ width: 100%;
22
+ text-align: center;
23
+ }
24
+
25
+ #header {
26
+ margin-bottom: 1;
27
+ }
28
+
29
+ #footer {
30
+ margin-top: 1;
31
+ }
32
+
33
+ /* The key bar sits on its own layer so showing it never moves the digits. */
34
+ #keybar {
35
+ layer: keybar;
36
+ dock: bottom;
37
+ }
38
+
39
+ HelpScreen {
40
+ align: center middle;
41
+ background: $background 60%;
42
+ }
43
+
44
+ HelpScreen > #help {
45
+ width: auto;
46
+ height: auto;
47
+ padding: 1 2;
48
+ border: round $primary;
49
+ border-title-align: center;
50
+ }
51
+
52
+ HelpScreen #help-keys {
53
+ width: auto;
54
+ height: auto;
55
+ }