Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Exercise Mode Editing Capabilities #1444

Open
wants to merge 107 commits into
base: dev
Choose a base branch
from
Open
Changes from 1 commit
Commits
Show all changes
107 commits
Select commit Hold shift + click to select a range
9989097
init
russell-rozenbaum Jun 13, 2024
1c53e11
title-box added
russell-rozenbaum Jun 22, 2024
63ccab7
added ability to change display between div/text-box depending on ins…
russell-rozenbaum Jun 22, 2024
c52269e
added functionality to switch between an edit state and finalized sta…
russell-rozenbaum Jun 24, 2024
52bbf77
added functionality to disable (set to read only) any editors while u…
russell-rozenbaum Jun 24, 2024
bde06c2
added disabling of editing_title when switching between exercise slid…
russell-rozenbaum Jun 24, 2024
80ec611
updating module name as well now
russell-rozenbaum Jun 24, 2024
5edf1c9
added an edit symbol
russell-rozenbaum Jun 24, 2024
294f669
updated UI with pencil icon wobble and positioning
russell-rozenbaum Jun 25, 2024
968fe1c
fixed bug with resetting code in editors; fixed bug with not saving w…
russell-rozenbaum Jun 26, 2024
6ffc5cf
added UI for creating and deleting buggy implementations (the buttons…
russell-rozenbaum Jun 27, 2024
a1e82bf
added functionality for creating and deleting buggy implementations; …
russell-rozenbaum Jun 27, 2024
7ea356a
added functionality for creating and deleting buggy implementations; …
russell-rozenbaum Jul 10, 2024
69fea7f
fixed bug with refreshing page while editing title causes code editor…
russell-rozenbaum Jul 23, 2024
45c783a
replaced local storage key system with Uuidm.t types rather than (key…
russell-rozenbaum Aug 3, 2024
fbd81a0
Mutant Add Delete and Title Editor (#1352)
russell-rozenbaum Aug 3, 2024
8374866
changed some string displays for mutation testing; still need to save…
russell-rozenbaum Aug 3, 2024
a2494c9
changed some string displays for mutation testing; still need to save…
russell-rozenbaum Aug 3, 2024
0ab1240
changed some string displays for mutation testing; still need to save…
russell-rozenbaum Aug 3, 2024
4c56ad5
Init
facundoy Aug 5, 2024
30c1035
fixed bugs with some editors not being disabled when editing title
russell-rozenbaum Aug 5, 2024
0488b01
Added a prompt_action type and added a placeholder for UpdatePrompt i…
facundoy Aug 5, 2024
e892a55
Changed implementation of narrative_cell
facundoy Aug 5, 2024
ebdaefb
reverted changes to exclusively title-editor w/ bugs resolved
russell-rozenbaum Aug 6, 2024
b487d0f
Merge branch 'dev' into title-editor
russell-rozenbaum Aug 6, 2024
612009a
merging to use UUIDs and title-editing properties
russell-rozenbaum Aug 7, 2024
73d7a5e
CHanged implementation of how prompt cell is viewed
facundoy Aug 11, 2024
a576e7a
Added functionality to toggle between edit and finalized state
facundoy Aug 11, 2024
b0a6a1c
Style fix
facundoy Aug 11, 2024
1a5e7a4
Changed type of prompt to string
facundoy Aug 17, 2024
b76d628
Changed implementation of prompt_view so that it changed string to ma…
facundoy Aug 17, 2024
887fa6c
resolved merge conflicts with dev
russell-rozenbaum Aug 17, 2024
229b969
fixed build failure
russell-rozenbaum Aug 17, 2024
d31a338
build and runs locally
russell-rozenbaum Aug 17, 2024
ac146e5
merge conflicts resolved; css still outdated
russell-rozenbaum Aug 17, 2024
f630de6
css updated
russell-rozenbaum Aug 17, 2024
e272d4f
Merge remote-tracking branch 'origin/mutant-add-delete' into title-ed…
russell-rozenbaum Aug 18, 2024
8da0866
Solved a bug where editing mode persisted when changing between exerc…
facundoy Aug 25, 2024
0d75c71
Added an edit button
facundoy Aug 25, 2024
757ef6b
Implemented initial animation for edit button
facundoy Aug 25, 2024
6a040f5
Added more icons and initial attempts to solve saving issues
facundoy Aug 26, 2024
52b5342
Changes done are now saved during page refreshes
facundoy Aug 27, 2024
93056b4
Increased size of textbox
facundoy Aug 30, 2024
bc305e6
Fixed a bug where the prompt would not display correctly after editin…
facundoy Aug 30, 2024
1c92865
Improved icons animations and code display, and improved code to allo…
facundoy Aug 30, 2024
7398692
Deleted print_endline statements
facundoy Aug 30, 2024
431da05
Style changes
facundoy Aug 30, 2024
de89550
Changed files to solve conflicts with dev
facundoy Sep 16, 2024
5adc764
Updated local dependencies and fixed conflict in Diag.re
facundoy Sep 16, 2024
8a05827
Added relevant update actions
facundoy Sep 22, 2024
bb11475
Added functionality to toggle between editing and finalized states
facundoy Sep 22, 2024
c44374d
Adding code that got deleted during the merge
facundoy Sep 22, 2024
bf68618
Adding code that got deleted during the merge
facundoy Sep 22, 2024
49d91b4
Solved bug where editing mode persisted between exercises
facundoy Sep 22, 2024
a938192
PersistentState type made into record field, now also storing hidden …
russell-rozenbaum Sep 27, 2024
5514fc5
Implemented the storing/exporting of new changes
facundoy Sep 28, 2024
824969a
Changed actions from edited data to edited section
facundoy Sep 28, 2024
ddd2b87
Implemented text-box and icons for editing the test validation report…
facundoy Sep 29, 2024
869917f
Implemented editable 'provided tests' in the Test Validation Report
facundoy Oct 6, 2024
746a54b
Fixed a bug where the pencil icon appeared outside of instructor mode
facundoy Oct 6, 2024
e47f631
Implemented editable point distribution for the Mutation Testing Report
facundoy Oct 6, 2024
1b89fd3
commiting before merge with dev
russell-rozenbaum Oct 11, 2024
fa62a34
fixed bugs with deleting last/first editors
russell-rozenbaum Oct 14, 2024
c762c91
style changes
facundoy Oct 20, 2024
d26947c
Added relevant update actions and implemented the storing/exporting o…
facundoy Oct 27, 2024
84849fb
Implemented the UI for the module_name and the textbox for the editing
facundoy Oct 27, 2024
89a360e
Merge branch 'description-editor' into test-editor
facundoy Nov 9, 2024
34bede5
Changes to solve merge conflicts
facundoy Nov 9, 2024
45e6143
Solved a conflict I missed
facundoy Nov 9, 2024
c1f984d
Fixed a spelling error
facundoy Nov 9, 2024
ae33a8b
Style changes to the module name cell
facundoy Nov 9, 2024
a09ceb2
Changed implementation of provided tests so that it detects how many …
facundoy Nov 11, 2024
4dae0f6
Prevented caret scrolling (through switch in main.apply function) whe…
russell-rozenbaum Nov 17, 2024
81e0286
fixed problems with attempting to place caret on recently deleted editor
russell-rozenbaum Nov 17, 2024
02f21d4
Provided number of tests for test validation changes based on the num…
facundoy Nov 24, 2024
95a7593
Fixed caret scrolling following title-editor branch changes
facundoy Nov 25, 2024
0b040a5
Prevented caret scrolling for all editing modes and prevented caret s…
facundoy Nov 25, 2024
9e7900d
Fixed problems with attempting to place caret on recently deleted edi…
facundoy Nov 25, 2024
b5fe793
Fixed bug where the number of provided tests only updated after the n…
facundoy Nov 29, 2024
038908e
Cleaned up code by eliminating old changes
facundoy Nov 29, 2024
648612a
Fixed merging conflicts
facundoy Dec 1, 2024
ceb3088
Fixed merging conflicts
facundoy Dec 2, 2024
5dd2f0f
Correctly merged dev-branch Main with PR Main
facundoy Dec 2, 2024
c2ab67e
added placeholders for title, module name, and prompt. Should be usef…
russell-rozenbaum Dec 9, 2024
2266895
added placeholders for title, module name, and prompt. Should be usef…
russell-rozenbaum Dec 9, 2024
5092383
changed the placeholders to more common placeholder names
russell-rozenbaum Dec 10, 2024
ec164a3
Merge branch 'dev' into title-editor-2
Negabinary Dec 17, 2024
cb07cf6
Fix focus
Negabinary Dec 17, 2024
5819ee8
Fix exception when adding buggy implementaiton
Negabinary Dec 17, 2024
d5a25ac
Fix styling
Negabinary Dec 18, 2024
0e7f3cf
Fix List.nth failures
Negabinary Dec 18, 2024
3b82603
Add back missing editable fields
Negabinary Dec 18, 2024
cd7b39f
Fixed a bug where double line breaks in the markdown translation was …
facundoy Dec 15, 2024
ccdd04d
Fixed styling issues
facundoy Dec 15, 2024
47a69c3
added default 'unnamed exercise module' for exercise modules that are…
russell-rozenbaum Dec 18, 2024
c571a82
fix indexing out of bounds bug when switching exercises
russell-rozenbaum Dec 20, 2024
ad783c5
added ability to edit mutation hints
russell-rozenbaum Dec 20, 2024
2298c78
adds ability to edit implementation grading hints
russell-rozenbaum Dec 20, 2024
385da45
adds safeguards to prevent negative point distributions, maybe too ma…
russell-rozenbaum Dec 20, 2024
b767108
fixes bug with not disabling code editors when editing prompt
russell-rozenbaum Dec 20, 2024
6b082cd
fixes confirm/cancel display bugs on some test panels. Also adds safe…
russell-rozenbaum Dec 20, 2024
aced072
fixes bug in impl grading test panel of displaying new point max rath…
russell-rozenbaum Dec 20, 2024
976f67e
changes default hint to be capitalized
russell-rozenbaum Dec 20, 2024
dec734e
fixed bug with exercise indexing
russell-rozenbaum Dec 21, 2024
c19228b
fixes .ml export prompt bug; added blank exercise spec
russell-rozenbaum Dec 21, 2024
4a24b21
fixes double hole bug in BlankExercise.ml
russell-rozenbaum Dec 21, 2024
e4626cd
puts captions and subcaptions from perspective of instructor when in …
russell-rozenbaum Dec 21, 2024
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
Prev Previous commit
Next Next commit
added UI for creating and deleting buggy implementations (the buttons…
… are non-functional still)
  • Loading branch information
russell-rozenbaum committed Jun 27, 2024
commit 6ffc5cfffd8b5f74b487f9c6926acd51316fab90
91 changes: 90 additions & 1 deletion src/haz3lweb/view/Cell.re
Original file line number Diff line number Diff line change
@@ -307,7 +307,7 @@ let editor_view =
div(
~attr=
Attr.many([
Attr.classes(["cell-item"]),
Attr.class_("cell-item"),
Attr.on_mousedown(on_mousedown),
]),
Option.to_list(caption) @ mousedown_overlay @ [code_view],
@@ -332,6 +332,95 @@ let panel = (~classes=[], content, ~footer: option(t)) => {
);
};

let student_title_cell = (~title) => {
div(~attr=Attr.class_("title-text"), [text(title)]);
};

let update_title = (_, inject) => {
let new_title =
Obj.magic(Js_of_ocaml.Js.some(JsUtil.get_elem_by_id("title-input-box")))##.value;
let update_events = [
inject(UpdateAction.Set(EditingTitle)),
inject(UpdateAction.UpdateTitle(new_title)),
];
Virtual_dom.Vdom.Effect.Many(update_events);
};

let editing_title_cell = (~inject, ~title) => {
div(
~attr=Attr.class_("title-edit"),
[
input(
~attr=
Attr.many([
Attr.class_("title-text"),
Attr.id("title-input-box"),
Attr.value(title),
]),
[],
),
div(
~attr=Attr.class_("instructor-edit-icon"),
[
Widgets.button(
Icons.confirm,
update_title(_, inject),
~tooltip="Confirm",
),
],
),
div(
~attr=Attr.class_("instructor-edit-icon"),
[
Widgets.button(
Icons.cancel,
_ => inject(UpdateAction.Set(EditingTitle)),
~tooltip="Cancel",
),
],
),
],
);
};

let instructor_title_cell = (~inject, ~title) => {
div(
~attr=Attr.class_("title-edit"),
[
text(title),
div(
~attr=Attr.class_("instructor-edit-icon"),
[
Widgets.button(
Icons.pencil,
_ => inject(UpdateAction.Set(EditingTitle)),
~tooltip="Edit Title",
),
],
),
],
);
};

let wrong_impl_caption = (~inject, sub: string) => {
div(
~attr=Attr.class_("wrong-impl-cell-caption"),
[
caption("", ~rest=sub),
div(
~attr=Attr.class_("instructor-edit-icon"),
[
Widgets.button(
Icons.delete,
_ => inject(UpdateAction.Set(EditingTitle)),
~tooltip="Delete Buggy Implementation",
),
],
),
],
);
};

/* An editor view that is not selectable or editable,
* and does not show error holes or test results.
* Used in Docs to display the header example */
118 changes: 52 additions & 66 deletions src/haz3lweb/view/ExerciseMode.re
Original file line number Diff line number Diff line change
@@ -66,74 +66,28 @@ let view =
~mousedown_updates=[SwitchEditor(this_pos)],
~settings,
~highlights,
~caption=Cell.caption(caption, ~rest=?subcaption),
~caption=
switch (this_pos) {
| HiddenBugs(_) => Cell.wrong_impl_caption(~inject, caption)
| _ => Cell.caption(caption, ~rest=?subcaption)
},
~target_id=Exercise.show_pos(this_pos),
~test_results=ModelResult.test_results(di.result),
~footer?,
editor,
);
};

let update_title = _ => {
let new_title =
Obj.magic(
Js_of_ocaml.Js.some(JsUtil.get_elem_by_id("title-input-box")),
)##.value;
let update_events = [
inject(Set(EditingTitle)),
inject(UpdateTitle(new_title)),
];
Virtual_dom.Vdom.Effect.Many(update_events);
};

let title_view = {
Cell.simple_cell_view([
div(
~attr=Attr.many([Attr.class_("title-cell")]),
~attr=Attr.class_("title-cell"),
[
settings.instructor_mode
? settings.editing_title
? div(
~attr=Attr.many([Attr.class_("title-edit")]),
[
input(
~attr=
Attr.many([
Attr.class_("title-text"),
Attr.id("title-input-box"),
Attr.value(eds.title),
]),
[],
),
div(
~attr=Attr.class_("edit-icon"),
[Widgets.button(Icons.confirm, update_title)],
),
div(
~attr=Attr.class_("edit-icon"),
[
Widgets.button(Icons.cancel, _ =>
inject(Set(EditingTitle))
),
],
),
],
)
: div(
~attr=Attr.many([Attr.class_("title-edit")]),
[
text(eds.title),
div(
~attr=Attr.class_("edit-icon"),
[
Widgets.button(Icons.pencil, _ =>
inject(Set(EditingTitle))
),
],
),
],
)
: div(~attr=Attr.class_("title-text"), [text(eds.title)]),
? Cell.editing_title_cell(~inject, ~title=eds.title)
: Cell.instructor_title_cell(~inject, ~title=eds.title)
: Cell.student_title_cell(~title=eds.title),
],
),
]);
@@ -231,19 +185,41 @@ let view =
let wrong_impl_views =
List.mapi(
(i, (Exercise.{impl, _}, di)) => {
InstructorOnly(
() =>
editor_view(
HiddenBugs(i),
~caption="Wrong Implementation " ++ string_of_int(i + 1),
~editor=impl,
~di,
),
editor_view(
HiddenBugs(i),
~caption="Wrong Implementation " ++ string_of_int(i + 1),
~editor=impl,
~di,
)
},
List.combine(eds.hidden_bugs, hidden_bugs),
);

let add_wrong_impl_view =
Cell.simple_cell_view([
Cell.simple_cell_item([
div(
~attr=Attr.many([Attr.class_("wrong-impl-cell-caption")]),
[
div(
~attr=
Attr.many([
Attr.class_("instructor-edit-icon"),
Attr.id("add-icon"),
]),
[
Widgets.button(
Icons.add,
_ => inject(UpdateAction.Set(EditingTitle)),
~tooltip="Add Buggy Implementation",
),
],
),
],
),
]),
]);

let mutation_testing_view =
Always(
Grading.MutationTestingReport.view(
@@ -315,6 +291,18 @@ let view =
),
);

let wrong_impl_views =
InstructorOnly(
() =>
Cell.simple_cell_view([
Cell.simple_cell_item(
[Cell.caption("Wrong Implementations")]
@ wrong_impl_views
@ [add_wrong_impl_view],
),
]),
);

[score_view, title_view, prompt_view]
@ render_cells(
settings,
@@ -323,9 +311,7 @@ let view =
correct_impl_view,
correct_impl_ctx_view,
your_tests_view,
]
@ wrong_impl_views
@ [
wrong_impl_views,
mutation_testing_view,
your_impl_view,
syntax_grading_view,
20 changes: 20 additions & 0 deletions src/haz3lweb/view/Icons.re
Original file line number Diff line number Diff line change
@@ -235,3 +235,23 @@ let cancel =
"m16 0c8.836556 0 16 7.163444 16 16s-7.163444 16-16 16-16-7.163444-16-16 7.163444-16 16-16zm0 2c-7.7319865 0-14 6.2680135-14 14s6.2680135 14 14 14 14-6.2680135 14-14-6.2680135-14-14-14zm4.2426407 9.7573593c.3905243.3905243.3905243 1.0236893 0 1.4142136l-2.8284271 2.8284271 2.8284271 2.8284271c.3905243.3905243.3905243 1.0236893 0 1.4142136s-1.0236893.3905243-1.4142136 0l-2.8284271-2.8284271-2.8284271 2.8284271c-.3905243.3905243-1.0236893.3905243-1.4142136 0s-.3905243-1.0236893 0-1.4142136l2.8284271-2.8284271-2.8284271-2.8284271c-.3905243-.3905243-.3905243-1.0236893 0-1.4142136s1.0236893-.3905243 1.4142136 0l2.8284271 2.8284271 2.8284271-2.8284271c.3905243-.3905243 1.0236893-.3905243 1.4142136 0z",
],
);

let add =
simple_icon(
~view="0 0 24 24",
[
"M12.75 9C12.75 8.58579 12.4142 8.25 12 8.25C11.5858 8.25 11.25 8.58579 11.25 9L11.25 11.25H9C8.58579 11.25 8.25 11.5858 8.25 12C8.25 12.4142 8.58579 12.75 9 12.75H11.25V15C11.25 15.4142 11.5858 15.75 12 15.75C12.4142 15.75 12.75 15.4142 12.75 15L12.75 12.75H15C15.4142 12.75 15.75 12.4142 15.75 12C15.75 11.5858 15.4142 11.25 15 11.25H12.75V9Z",
"M12 1.25C6.06294 1.25 1.25 6.06294 1.25 12C1.25 17.9371 6.06294 22.75 12 22.75C17.9371 22.75 22.75 17.9371 22.75 12C22.75 6.06294 17.9371 1.25 12 1.25ZM2.75 12C2.75 6.89137 6.89137 2.75 12 2.75C17.1086 2.75 21.25 6.89137 21.25 12C21.25 17.1086 17.1086 21.25 12 21.25C6.89137 21.25 2.75 17.1086 2.75 12Z",
],
);

let delete =
simple_icon(
~view="0 0 24 24",
[
"M10.3094 2.25002H13.6908C13.9072 2.24988 14.0957 2.24976 14.2737 2.27819C14.977 2.39049 15.5856 2.82915 15.9146 3.46084C15.9978 3.62073 16.0573 3.79961 16.1256 4.00494L16.2373 4.33984C16.2562 4.39653 16.2616 4.41258 16.2661 4.42522C16.4413 4.90933 16.8953 5.23659 17.4099 5.24964C17.4235 5.24998 17.44 5.25004 17.5001 5.25004H20.5001C20.9143 5.25004 21.2501 5.58582 21.2501 6.00004C21.2501 6.41425 20.9143 6.75004 20.5001 6.75004H3.5C3.08579 6.75004 2.75 6.41425 2.75 6.00004C2.75 5.58582 3.08579 5.25004 3.5 5.25004H6.50008C6.56013 5.25004 6.5767 5.24998 6.59023 5.24964C7.10488 5.23659 7.55891 4.90936 7.73402 4.42524C7.73863 4.41251 7.74392 4.39681 7.76291 4.33984L7.87452 4.00496C7.94281 3.79964 8.00233 3.62073 8.08559 3.46084C8.41453 2.82915 9.02313 2.39049 9.72643 2.27819C9.90445 2.24976 10.093 2.24988 10.3094 2.25002ZM9.00815 5.25004C9.05966 5.14902 9.10531 5.04404 9.14458 4.93548C9.1565 4.90251 9.1682 4.86742 9.18322 4.82234L9.28302 4.52292C9.37419 4.24941 9.39519 4.19363 9.41601 4.15364C9.52566 3.94307 9.72853 3.79686 9.96296 3.75942C10.0075 3.75231 10.067 3.75004 10.3553 3.75004H13.6448C13.9331 3.75004 13.9927 3.75231 14.0372 3.75942C14.2716 3.79686 14.4745 3.94307 14.5842 4.15364C14.605 4.19363 14.626 4.2494 14.7171 4.52292L14.8169 4.82216L14.8556 4.9355C14.8949 5.04405 14.9405 5.14902 14.992 5.25004H9.00815Z",
"M5.91509 8.45015C5.88754 8.03685 5.53016 7.72415 5.11686 7.7517C4.70357 7.77925 4.39086 8.13663 4.41841 8.54993L4.88186 15.5017C4.96736 16.7844 5.03642 17.8205 5.19839 18.6336C5.36679 19.4789 5.65321 20.185 6.2448 20.7385C6.8364 21.2919 7.55995 21.5308 8.4146 21.6425C9.23662 21.7501 10.275 21.7501 11.5606 21.75H12.4395C13.7251 21.7501 14.7635 21.7501 15.5856 21.6425C16.4402 21.5308 17.1638 21.2919 17.7554 20.7385C18.347 20.185 18.6334 19.4789 18.8018 18.6336C18.9638 17.8206 19.0328 16.7844 19.1183 15.5017L19.5818 8.54993C19.6093 8.13663 19.2966 7.77925 18.8833 7.7517C18.47 7.72415 18.1126 8.03685 18.0851 8.45015L17.6251 15.3493C17.5353 16.6971 17.4713 17.6349 17.3307 18.3406C17.1943 19.025 17.004 19.3873 16.7306 19.6431C16.4572 19.8989 16.083 20.0647 15.391 20.1552C14.6776 20.2485 13.7376 20.25 12.3868 20.25H11.6134C10.2626 20.25 9.32255 20.2485 8.60915 20.1552C7.91715 20.0647 7.54299 19.8989 7.26958 19.6431C6.99617 19.3873 6.80583 19.025 6.66948 18.3406C6.52892 17.6349 6.46489 16.6971 6.37503 15.3493L5.91509 8.45015Z",
"M9.42546 10.2538C9.83762 10.2125 10.2052 10.5133 10.2464 10.9254L10.7464 15.9254C10.7876 16.3376 10.4869 16.7051 10.0747 16.7463C9.66256 16.7875 9.29503 16.4868 9.25381 16.0747L8.75381 11.0747C8.7126 10.6625 9.01331 10.295 9.42546 10.2538Z",
"M14.5747 10.2538C14.9869 10.295 15.2876 10.6625 15.2464 11.0747L14.7464 16.0747C14.7052 16.4868 14.3376 16.7875 13.9255 16.7463C13.5133 16.7051 13.2126 16.3376 13.2538 15.9254L13.7538 10.9254C13.795 10.5133 14.1626 10.2125 14.5747 10.2538Z",
],
);
31 changes: 21 additions & 10 deletions src/haz3lweb/www/style.css
Original file line number Diff line number Diff line change
@@ -712,6 +712,27 @@ select {
border-bottom-right-radius: 0.4em;
}

.wrong-impl-cell-caption {
flex-grow: 1;
display: flex;
align-items: center;
}

.instructor-edit-icon {
margin-top: 0.175em;
margin-left: 1em;
cursor: pointer;
fill: #7a6219;
}

#add-icon {
margin-left: 0em;
}

.instructor-edit-icon:hover {
animation: wobble 0.6s ease 0s 1 normal forwards;
}

.title-cell {
padding-left: 1em;
display: flex;
@@ -733,16 +754,6 @@ select {
align-items: center;
}

.title-edit .edit-icon {
margin-left: 0.5em;
cursor: pointer;
fill: #7a6219;
}

.title-edit .edit-icon:hover {
animation: wobble 0.6s ease 0s 1 normal forwards;
}

.cell-prompt {
padding: 1em;
font-size: 1rem;