feat: replace text buttons with icons (tooltip on hover)

Replaces the two visible 'button-like' affordances with LabIcon glyphs
so the sidebar and toolbar stay compact; the explanatory text moves
to the hover tooltip.

Changes:
- Toolbar 'Save Snapshot' button: text label -> saveIcon (floppy),
  tooltip '保存当前 notebook 为快照'
- Sidebar panel '快照历史' text label -> saveIcon + caption='快照历史'
  (the panel tab is now icon-only)
- Sidebar refresh button: text -> refreshIcon with a 1s rotate animation
  while loading

Dependencies:
- Adds @jupyterlab/ui-components to package.json (source of the
  standard LabIcon set: saveIcon, refreshIcon, historyIcon)

Style:
- New .jp-snapshot-panel-refresh-button sizing (28x24 fixed box,
  centered icon) and .is-loading spin keyframes
- @keyframes jp-snapshot-spin applied to the icon's .jp-Icon element

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
tao.chen
2026-07-21 18:41:01 +08:00
co-authored by Claude
parent 2fc584d70f
commit 263232bea4
6 changed files with 45 additions and 11 deletions
Generated
+5 -3
View File
@@ -1969,7 +1969,6 @@ wheels = [
name = "snapshot"
source = { editable = "." }
dependencies = [
{ name = "boto3" },
{ name = "jupyter-server" },
]
@@ -1978,6 +1977,9 @@ dev = [
{ name = "jupyter-builder" },
{ name = "jupyterlab" },
]
s3 = [
{ name = "boto3" },
]
test = [
{ name = "coverage" },
{ name = "pytest" },
@@ -1988,7 +1990,7 @@ test = [
[package.metadata]
requires-dist = [
{ name = "boto3", specifier = ">=1.43.52" },
{ name = "boto3", marker = "extra == 's3'", specifier = ">=1.34.0" },
{ name = "coverage", marker = "extra == 'test'" },
{ name = "jupyter-builder", marker = "extra == 'dev'", specifier = ">=1.0.0" },
{ name = "jupyter-server", specifier = ">=2.4.0,<3" },
@@ -1998,7 +2000,7 @@ requires-dist = [
{ name = "pytest-cov", marker = "extra == 'test'" },
{ name = "pytest-jupyter", extras = ["server"], marker = "extra == 'test'", specifier = ">=0.6.0" },
]
provides-extras = ["dev", "test"]
provides-extras = ["dev", "s3", "test"]
[[package]]
name = "soupsieve"