poetrymagnets.online

git clone https://git.bradleygannon.com/poetrymagnets.online.git
Log | Files | Refs

commit d65e91b1250a2db0a54ae2bdaa07dd7e25023ea7
parent 8a9a0717f72f1b16c3086a99725c049560ddaf9d
Author: Bradley Gannon <bradley@bradleygannon.com>
Date:   Fri, 13 Mar 2026 23:54:58 -0400

Add words from original kit, add dragging and panning

Diffstat:
MCargo.lock | 26++++++++++++++++++++++++++
Mbackend/src/main.rs | 3+--
Mcommon/src/lib.rs | 1+
Mfrontend/Cargo.toml | 1+
Mfrontend/src/app.rs | 112++++++++++++++++++++++++++++++++++++++-----------------------------------------
Mfrontend/src/lib.rs | 2+-
Mfrontend/src/main.rs | 6+++---
Afrontend/words.json | 2634+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
8 files changed, 2721 insertions(+), 64 deletions(-)

diff --git a/Cargo.lock b/Cargo.lock @@ -688,6 +688,7 @@ dependencies = [ "egui", "log", "serde", + "serde_json", "wasm-bindgen-futures", "web-sys", ] @@ -973,6 +974,12 @@ dependencies = [ ] [[package]] +name = "itoa" +version = "1.0.17" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2" + +[[package]] name = "jni" version = "0.21.1" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -1851,6 +1858,19 @@ dependencies = [ ] [[package]] +name = "serde_json" +version = "1.0.149" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86" +dependencies = [ + "itoa", + "memchr", + "serde", + "serde_core", + "zmij", +] + +[[package]] name = "shlex" version = "1.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" @@ -2828,6 +2848,12 @@ dependencies = [ ] [[package]] +name = "zmij" +version = "1.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" + +[[package]] name = "zune-core" version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" diff --git a/backend/src/main.rs b/backend/src/main.rs @@ -1,2 +1 @@ -fn main() { -} +fn main() {} diff --git a/common/src/lib.rs b/common/src/lib.rs @@ -0,0 +1 @@ + diff --git a/frontend/Cargo.toml b/frontend/Cargo.toml @@ -17,3 +17,4 @@ log = "0.4.27" serde = { version = "1.0.219", features = ["derive"] } wasm-bindgen-futures = "0.4.50" web-sys = "0.3.70" +serde_json = "1.0.149" diff --git a/frontend/src/app.rs b/frontend/src/app.rs @@ -1,80 +1,76 @@ +use egui::{Area, Color32, CornerRadius, Frame, Id, Label, Margin, Pos2, Rect, Vec2}; +use web_sys::js_sys::Math::random; + #[derive(serde::Deserialize, serde::Serialize)] -#[serde(default)] -pub struct TemplateApp { - label: String, +struct Magnet { + id: Id, + text: String, + position: Pos2, +} - #[serde(skip)] - value: f32, +#[derive(serde::Deserialize, serde::Serialize)] +#[serde(default)] +pub struct PoetryMagnetsOnlineApp { + pan_offset: Pos2, + magnets: Vec<Magnet>, } -impl Default for TemplateApp { +impl Default for PoetryMagnetsOnlineApp { fn default() -> Self { + let mut magnets = + serde_json::from_str::<Vec<Magnet>>(include_str!("../words.json")).unwrap_or_default(); + for magnet in magnets.iter_mut() { + magnet.position = Pos2::new((random() * 1000.) as f32, (random() * 1000.) as f32); + } Self { - label: "Hello World!".to_owned(), - value: 2.7, + pan_offset: Pos2::new(0., 0.), + magnets, } } } -impl TemplateApp { - pub fn new(cc: &eframe::CreationContext<'_>) -> Self { - if let Some(storage) = cc.storage { - eframe::get_value(storage, eframe::APP_KEY).unwrap_or_default() - } else { - Default::default() - } +impl PoetryMagnetsOnlineApp { + pub fn new(_cc: &eframe::CreationContext<'_>) -> Self { + PoetryMagnetsOnlineApp::default() } } -impl eframe::App for TemplateApp { +impl eframe::App for PoetryMagnetsOnlineApp { fn save(&mut self, storage: &mut dyn eframe::Storage) { eframe::set_value(storage, eframe::APP_KEY, self); } fn update(&mut self, ctx: &egui::Context, _frame: &mut eframe::Frame) { - egui::TopBottomPanel::top("top_panel").show(ctx, |ui| { - egui::MenuBar::new().ui(ui, |ui| { - egui::widgets::global_theme_preference_buttons(ui); - }); - }); - egui::CentralPanel::default().show(ctx, |ui| { - ui.heading("eframe template"); - - ui.horizontal(|ui| { - ui.label("Write something: "); - ui.text_edit_singleline(&mut self.label); - }); - - ui.add(egui::Slider::new(&mut self.value, 0.0..=10.0).text("value")); - if ui.button("Increment").clicked() { - self.value += 1.0; + let response = ui.allocate_rect( + ui.available_rect_before_wrap(), + egui::Sense::click_and_drag(), + ); + if response.dragged() { + self.pan_offset += response.drag_delta(); } - - ui.separator(); - - ui.add(egui::github_link_file!( - "https://github.com/emilk/eframe_template/blob/main/", - "Source code." - )); - - ui.with_layout(egui::Layout::bottom_up(egui::Align::LEFT), |ui| { - powered_by_egui_and_eframe(ui); - egui::warn_if_debug_build(ui); - }); }); + for magnet in self.magnets.iter_mut() { + let magnet_position_with_offset = self.pan_offset + magnet.position.to_vec2(); + let magnet_rect_with_buffer = + Rect::from_min_size(magnet_position_with_offset, Vec2::new(50., 50.)); + if !ctx.content_rect().intersects(magnet_rect_with_buffer) { + continue; + } + let response = Area::new(magnet.id) + .current_pos(magnet_position_with_offset) + .movable(true) + .constrain(false) + .show(ctx, |ui| { + Frame::NONE + .inner_margin(Margin::same(3)) + .fill(Color32::WHITE) + .corner_radius(CornerRadius::same(1)) + .show(ui, |ui| { + ui.add(Label::new(magnet.text.clone()).selectable(false)) + }); + }) + .response; + magnet.position += response.drag_delta(); + } } } - -fn powered_by_egui_and_eframe(ui: &mut egui::Ui) { - ui.horizontal(|ui| { - ui.spacing_mut().item_spacing.x = 0.0; - ui.label("Powered by "); - ui.hyperlink_to("egui", "https://github.com/emilk/egui"); - ui.label(" and "); - ui.hyperlink_to( - "eframe", - "https://github.com/emilk/egui/tree/master/crates/eframe", - ); - ui.label("."); - }); -} diff --git a/frontend/src/lib.rs b/frontend/src/lib.rs @@ -1,3 +1,3 @@ mod app; -pub use app::TemplateApp; +pub use app::PoetryMagnetsOnlineApp; diff --git a/frontend/src/main.rs b/frontend/src/main.rs @@ -15,15 +15,15 @@ fn main() { let canvas = document .get_element_by_id(CANVAS_ID) - .expect(&format!("Failed to find {CANVAS_ID}")) + .unwrap_or_else(|| panic!("Failed to find {CANVAS_ID}")) .dyn_into::<web_sys::HtmlCanvasElement>() - .expect(&format!("{CANVAS_ID} was not a HtmlCanvasElement")); + .unwrap_or_else(|_| panic!("{CANVAS_ID} was not a HtmlCanvasElement")); let start_result = eframe::WebRunner::new() .start( canvas, web_options, - Box::new(|cc| Ok(Box::new(frontend::TemplateApp::new(cc)))), + Box::new(|cc| Ok(Box::new(frontend::PoetryMagnetsOnlineApp::new(cc)))), ) .await; diff --git a/frontend/words.json b/frontend/words.json @@ -0,0 +1,2634 @@ +[ + { + "id": 1, + "text": "&", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 2, + "text": "&", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 3, + "text": "a", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 4, + "text": "a", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 5, + "text": "a", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 6, + "text": "a", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 7, + "text": "a", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 8, + "text": "a", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 9, + "text": "about", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 10, + "text": "above", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 11, + "text": "ache", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 12, + "text": "ad", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 13, + "text": "after", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 14, + "text": "all", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 15, + "text": "am", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 16, + "text": "am", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 17, + "text": "an", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 18, + "text": "an", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 19, + "text": "and", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 20, + "text": "and", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 21, + "text": "and", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 22, + "text": "and", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 23, + "text": "apparatus", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 24, + "text": "are", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 25, + "text": "are", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 26, + "text": "arm", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 27, + "text": "as", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 28, + "text": "as", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 29, + "text": "as", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 30, + "text": "as", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 31, + "text": "ask", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 32, + "text": "at", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 33, + "text": "at", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 34, + "text": "at", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 35, + "text": "away", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 36, + "text": "bare", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 37, + "text": "be", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 38, + "text": "beat", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 39, + "text": "beauty", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 40, + "text": "bed", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 41, + "text": "beneath", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 42, + "text": "bitter", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 43, + "text": "black", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 44, + "text": "blood", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 45, + "text": "blow", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 46, + "text": "blue", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 47, + "text": "boil", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 48, + "text": "boy", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 49, + "text": "breast", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 50, + "text": "but", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 51, + "text": "but", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 52, + "text": "but", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 53, + "text": "but", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 54, + "text": "butt", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 55, + "text": "by", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 56, + "text": "by", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 57, + "text": "can", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 58, + "text": "chant", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 59, + "text": "chocolate", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 60, + "text": "cool", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 61, + "text": "could", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 62, + "text": "crush", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 63, + "text": "cry", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 64, + "text": "d", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 65, + "text": "day", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 66, + "text": "death", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 67, + "text": "delirious", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 68, + "text": "diamond", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 69, + "text": "did", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 70, + "text": "do", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 71, + "text": "do", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 72, + "text": "dream", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 73, + "text": "dress", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 74, + "text": "drive", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 75, + "text": "drool", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 76, + "text": "drunk", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 77, + "text": "eat", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 78, + "text": "ed", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 79, + "text": "ed", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 80, + "text": "ed", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 81, + "text": "ed", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 82, + "text": "egg", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 83, + "text": "elaborate", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 84, + "text": "enormous", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 85, + "text": "er", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 86, + "text": "es", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 87, + "text": "est", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 88, + "text": "fast", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 89, + "text": "feet", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 90, + "text": "fiddle", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 91, + "text": "finger", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 92, + "text": "fluff", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 93, + "text": "for", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 94, + "text": "forest", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 95, + "text": "frantic", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 96, + "text": "friend", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 97, + "text": "from", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 98, + "text": "from", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 99, + "text": "garden", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 100, + "text": "girl", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 101, + "text": "go", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 102, + "text": "goddess", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 103, + "text": "gorgeous", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 104, + "text": "gown", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 105, + "text": "hair", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 106, + "text": "has", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 107, + "text": "have", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 108, + "text": "have", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 109, + "text": "he", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 110, + "text": "he", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 111, + "text": "head", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 112, + "text": "heave", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 113, + "text": "her", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 114, + "text": "her", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 115, + "text": "here", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 116, + "text": "him", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 117, + "text": "his", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 118, + "text": "his", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 119, + "text": "honey", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 120, + "text": "hot", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 121, + "text": "how", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 122, + "text": "I", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 123, + "text": "I", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 124, + "text": "I", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 125, + "text": "I", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 126, + "text": "if", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 127, + "text": "in", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 128, + "text": "in", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 129, + "text": "in", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 130, + "text": "ing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 131, + "text": "ing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 132, + "text": "ing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 133, + "text": "ing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 134, + "text": "ing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 135, + "text": "ing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 136, + "text": "is", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 137, + "text": "is", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 138, + "text": "is", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 139, + "text": "is", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 140, + "text": "is", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 141, + "text": "it", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 142, + "text": "it", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 143, + "text": "it", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 144, + "text": "juice", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 145, + "text": "lake", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 146, + "text": "language", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 147, + "text": "languid", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 148, + "text": "lather", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 149, + "text": "lazy", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 150, + "text": "less", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 151, + "text": "let", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 152, + "text": "lick", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 153, + "text": "lie", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 154, + "text": "life", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 155, + "text": "light", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 156, + "text": "like", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 157, + "text": "like", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 158, + "text": "like", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 159, + "text": "live", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 160, + "text": "love", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 161, + "text": "luscious", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 162, + "text": "lust", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 163, + "text": "ly", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 164, + "text": "ly", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 165, + "text": "ly", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 166, + "text": "ly", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 167, + "text": "mad", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 168, + "text": "man", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 169, + "text": "me", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 170, + "text": "me", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 171, + "text": "me", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 172, + "text": "mean", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 173, + "text": "meat", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 174, + "text": "men", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 175, + "text": "milk", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 176, + "text": "mist", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 177, + "text": "moan", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 178, + "text": "moon", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 179, + "text": "mother", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 180, + "text": "music", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 181, + "text": "must", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 182, + "text": "my", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 183, + "text": "my", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 184, + "text": "my", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 185, + "text": "need", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 186, + "text": "never", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 187, + "text": "no", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 188, + "text": "no", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 189, + "text": "not", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 190, + "text": "not", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 191, + "text": "of", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 192, + "text": "of", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 193, + "text": "of", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 194, + "text": "of", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 195, + "text": "on", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 196, + "text": "on", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 197, + "text": "one", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 198, + "text": "or", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 199, + "text": "our", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 200, + "text": "over", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 201, + "text": "pant", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 202, + "text": "peach", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 203, + "text": "petal", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 204, + "text": "picture", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 205, + "text": "pink", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 206, + "text": "play", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 207, + "text": "please", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 208, + "text": "pole", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 209, + "text": "pound", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 210, + "text": "puppy", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 211, + "text": "purple", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 212, + "text": "put", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 213, + "text": "r", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 214, + "text": "r", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 215, + "text": "rain", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 216, + "text": "raw", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 217, + "text": "recall", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 218, + "text": "red", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 219, + "text": "repulsive", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 220, + "text": "rip", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 221, + "text": "rock", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 222, + "text": "rose", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 223, + "text": "run", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 224, + "text": "rust", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 225, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 226, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 227, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 228, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 229, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 230, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 231, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 232, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 233, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 234, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 235, + "text": "s", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 236, + "text": "sad", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 237, + "text": "said", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 238, + "text": "sausage", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 239, + "text": "say", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 240, + "text": "scream", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 241, + "text": "sea", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 242, + "text": "see", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 243, + "text": "shadow", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 244, + "text": "she", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 245, + "text": "she", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 246, + "text": "shine", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 247, + "text": "ship", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 248, + "text": "shot", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 249, + "text": "show", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 250, + "text": "sing", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 251, + "text": "sit", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 252, + "text": "skin", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 253, + "text": "sky", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 254, + "text": "sleep", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 255, + "text": "smear", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 256, + "text": "smell", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 257, + "text": "smooth", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 258, + "text": "so", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 259, + "text": "soar", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 260, + "text": "some", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 261, + "text": "sordid", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 262, + "text": "spray", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 263, + "text": "spring", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 264, + "text": "still", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 265, + "text": "stop", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 266, + "text": "storm", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 267, + "text": "suit", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 268, + "text": "summer", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 269, + "text": "sun", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 270, + "text": "sweat", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 271, + "text": "sweet", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 272, + "text": "swim", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 273, + "text": "symphony", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 274, + "text": "the", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 275, + "text": "the", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 276, + "text": "the", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 277, + "text": "the", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 278, + "text": "the", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 279, + "text": "their", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 280, + "text": "there", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 281, + "text": "these", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 282, + "text": "they", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 283, + "text": "those", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 284, + "text": "though", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 285, + "text": "thousand", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 286, + "text": "through", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 287, + "text": "time", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 288, + "text": "tiny", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 289, + "text": "to", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 290, + "text": "to", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 291, + "text": "to", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 292, + "text": "together", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 293, + "text": "tongue", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 294, + "text": "trudge", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 295, + "text": "TV", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 296, + "text": "ugly", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 297, + "text": "up", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 298, + "text": "urge", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 299, + "text": "us", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 300, + "text": "use", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 301, + "text": "want", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 302, + "text": "want", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 303, + "text": "was", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 304, + "text": "watch", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 305, + "text": "water", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 306, + "text": "wax", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 307, + "text": "we", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 308, + "text": "we", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 309, + "text": "were", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 310, + "text": "what", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 311, + "text": "when", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 312, + "text": "whisper", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 313, + "text": "who", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 314, + "text": "why", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 315, + "text": "will", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 316, + "text": "wind", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 317, + "text": "with", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 318, + "text": "with", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 319, + "text": "woman", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 320, + "text": "worship", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 321, + "text": "y", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 322, + "text": "y", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 323, + "text": "y", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 324, + "text": "y", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 325, + "text": "yet", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 326, + "text": "you", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 327, + "text": "you", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 328, + "text": "you", + "position": { + "x": 0.0, + "y": 0.0 + } + }, + { + "id": 329, + "text": "you", + "position": { + "x": 0.0, + "y": 0.0 + } + } +]