Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion requirements-ci.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,6 @@ lxml
zeep
fastapi
uvicorn
mcp; python_version >= "3.10"
# mcp 2.0 renamed/moved FastMCP (mcp.server.fastmcp.FastMCP -> mcp.server.mcpserver.MCPServer)
# with an incompatible constructor, breaking TimeTrackerMCP_Server.py; pinned until it's migrated.
mcp<2.0; python_version >= "3.10"
4 changes: 3 additions & 1 deletion requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@ spyne
lxml
fastapi
uvicorn
mcp; python_version >= "3.10"
# mcp 2.0 renamed/moved FastMCP (mcp.server.fastmcp.FastMCP -> mcp.server.mcpserver.MCPServer)
# with an incompatible constructor, breaking TimeTrackerMCP_Server.py; pinned until it's migrated.
mcp<2.0; python_version >= "3.10"
14 changes: 14 additions & 0 deletions sl/SL_Menu.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,20 @@ def render_icon_button_css():
row-gap: 0 !important;
}}

/* Adds breathing room above the toolbar itself. Deliberately its own
rule rather than folded into the one above: that one's selector
(:has st-key-toolbar_new_popover) never actually matches anything
- st.popover()'s key= doesn't get reflected as a "st-key-*" class
in this Streamlit version (same root cause worked around in
button_selectors above) - so touching it would newly activate its
existing align-items/column-gap rules too, changing more than
just spacing. st-key-toolbar_today_btn is a plain st.button, whose
key correctly does become a class, so it reliably identifies the
same toolbar row without that side effect. */
[data-testid="stHorizontalBlock"]:has([class*="st-key-toolbar_today_btn"]) {{
margin-top: 1rem !important;
}}

[data-testid="column"]:has([class*="st-key-toolbar_"]),
[data-testid="column"]:has([class*="st-key-main_done_button"]),
[data-testid="column"]:has([class*="st-key-main_edit_button"]),
Expand Down
8 changes: 6 additions & 2 deletions sl/style_blue.css
Original file line number Diff line number Diff line change
Expand Up @@ -234,8 +234,12 @@ h5, h6 {
with white text) shares that same pseudo-element with the out-of-month
filler cells above, so it lost its fill too - leaving white-on-transparent
text that's invisible against this theme's light background. Restore a
solid, on-brand circle behind just the selected day. */
[data-baseweb="calendar"] .st-cj::after {
solid, on-brand circle behind just the selected day.
Matched via aria-label (BaseWeb prefixes it with "Selected" only for that
one cell) rather than a class name: Streamlit/emotion assigns those
classes by render order, so the exact class standing for "selected" here
can differ from page to page - it is not a stable hook. */
[data-baseweb="calendar"] [aria-label^="Selected"]::after {
background-color: var(--tc-accent) !important;
}

Expand Down
8 changes: 6 additions & 2 deletions sl/style_claude.css
Original file line number Diff line number Diff line change
Expand Up @@ -235,8 +235,12 @@ h5, h6 {
with white text) shares that same pseudo-element with the out-of-month
filler cells above, so it lost its fill too - leaving white-on-transparent
text that's invisible against this theme's light background. Restore a
solid, on-brand circle behind just the selected day. */
[data-baseweb="calendar"] .st-cj::after {
solid, on-brand circle behind just the selected day.
Matched via aria-label (BaseWeb prefixes it with "Selected" only for that
one cell) rather than a class name: Streamlit/emotion assigns those
classes by render order, so the exact class standing for "selected" here
can differ from page to page - it is not a stable hook. */
[data-baseweb="calendar"] [aria-label^="Selected"]::after {
background-color: var(--tc-accent) !important;
}

Expand Down
30 changes: 25 additions & 5 deletions sl/style_dark.css
Original file line number Diff line number Diff line change
Expand Up @@ -202,13 +202,33 @@ h5, h6 {
background-color: transparent !important;
}

/* BaseWeb sets its own default near-black text color (meant for a light
background) directly on the day-number cells and the month/year nav
buttons, rather than leaving it to inherit from the calendar-level color
rule above - so that rule alone never reaches them, and the numbers are
nearly invisible against this theme's dark popover background. Override
both directly: full text color for the day numbers themselves (primary
content), the muted tone for the nav buttons and weekday-initials row
(secondary chrome), matching how the rest of this stylesheet treats
labels/captions. */
[data-baseweb="calendar"] [role="gridcell"] {
color: var(--tc-text) !important;
}

[data-baseweb="calendar"] [role="presentation"],
[data-baseweb="calendar"] button {
color: var(--tc-text-muted) !important;
}

/* The selected day's own indicator (a circular ::after ring BaseWeb pairs
with white text) shares that same pseudo-element with the out-of-month
filler cells above, so it lost its fill too. Text still happens to read
fine here since this theme's regular day text is already light-on-dark,
but give the selected day its own solid, on-brand circle too rather than
relying on that coincidence. */
[data-baseweb="calendar"] .st-cj::after {
filler cells above, so it lost its fill too. Give the selected day its
own solid, on-brand circle instead.
Matched via aria-label (BaseWeb prefixes it with "Selected" only for that
one cell) rather than a class name: Streamlit/emotion assigns those
classes by render order, so the exact class standing for "selected" here
can differ from page to page - it is not a stable hook. */
[data-baseweb="calendar"] [aria-label^="Selected"]::after {
background-color: var(--tc-accent) !important;
}

Expand Down
2 changes: 1 addition & 1 deletion tt/TimeTracker.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ class TimeTracker:

The data is loaded from and saved to a JSON file.
"""
VERSION = "3.24"
VERSION = "3.25"
STATUS_OPEN = "open"
STATUS_CLOSED = "closed"
STATUS_DONE = "done"
Expand Down
Loading