ratatui_ruby 0.1.0 → 0.3.0

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.
Files changed (127) hide show
  1. checksums.yaml +4 -4
  2. data/.builds/ruby-3.2.yml +52 -0
  3. data/.builds/ruby-3.3.yml +52 -0
  4. data/.builds/ruby-3.4.yml +52 -0
  5. data/.builds/ruby-4.0.0.yml +53 -0
  6. data/.pre-commit-config.yaml +9 -2
  7. data/AGENTS.md +53 -5
  8. data/CHANGELOG.md +51 -1
  9. data/README.md +38 -18
  10. data/REUSE.toml +5 -0
  11. data/Rakefile +3 -100
  12. data/{docs → doc}/contributors/index.md +2 -1
  13. data/doc/custom.css +8 -0
  14. data/doc/images/examples-calendar_demo.rb.png +0 -0
  15. data/doc/images/examples-chart_demo.rb.png +0 -0
  16. data/doc/images/examples-custom_widget.rb.png +0 -0
  17. data/doc/images/examples-list_styles.rb.png +0 -0
  18. data/doc/images/examples-popup_demo.rb.gif +0 -0
  19. data/doc/images/examples-quickstart_lifecycle.rb.png +0 -0
  20. data/doc/images/examples-scroll_text.rb.png +0 -0
  21. data/doc/images/examples-stock_ticker.rb.png +0 -0
  22. data/doc/images/examples-table_select.rb.png +0 -0
  23. data/{docs → doc}/index.md +1 -1
  24. data/{docs → doc}/quickstart.md +81 -11
  25. data/examples/analytics.rb +2 -1
  26. data/examples/calendar_demo.rb +55 -0
  27. data/examples/chart_demo.rb +84 -0
  28. data/examples/custom_widget.rb +43 -0
  29. data/examples/list_styles.rb +66 -0
  30. data/examples/login_form.rb +2 -1
  31. data/examples/popup_demo.rb +105 -0
  32. data/examples/quickstart_dsl.rb +30 -0
  33. data/examples/quickstart_lifecycle.rb +40 -0
  34. data/examples/readme_usage.rb +21 -0
  35. data/examples/scroll_text.rb +74 -0
  36. data/examples/stock_ticker.rb +13 -5
  37. data/examples/system_monitor.rb +2 -1
  38. data/examples/table_select.rb +70 -0
  39. data/examples/test_calendar_demo.rb +66 -0
  40. data/examples/test_list_styles.rb +61 -0
  41. data/examples/test_popup_demo.rb +62 -0
  42. data/examples/test_scroll_text.rb +130 -0
  43. data/examples/test_table_select.rb +37 -0
  44. data/ext/ratatui_ruby/.cargo/config.toml +5 -0
  45. data/ext/ratatui_ruby/Cargo.lock +260 -50
  46. data/ext/ratatui_ruby/Cargo.toml +5 -4
  47. data/ext/ratatui_ruby/extconf.rb +1 -1
  48. data/ext/ratatui_ruby/src/buffer.rs +54 -0
  49. data/ext/ratatui_ruby/src/events.rs +115 -107
  50. data/ext/ratatui_ruby/src/lib.rs +15 -6
  51. data/ext/ratatui_ruby/src/rendering.rs +18 -1
  52. data/ext/ratatui_ruby/src/style.rs +2 -1
  53. data/ext/ratatui_ruby/src/terminal.rs +27 -24
  54. data/ext/ratatui_ruby/src/widgets/calendar.rs +82 -0
  55. data/ext/ratatui_ruby/src/widgets/canvas.rs +1 -2
  56. data/ext/ratatui_ruby/src/widgets/center.rs +0 -2
  57. data/ext/ratatui_ruby/src/widgets/chart.rs +260 -0
  58. data/ext/ratatui_ruby/src/widgets/clear.rs +37 -0
  59. data/ext/ratatui_ruby/src/widgets/cursor.rs +1 -1
  60. data/ext/ratatui_ruby/src/widgets/layout.rs +2 -1
  61. data/ext/ratatui_ruby/src/widgets/list.rs +44 -5
  62. data/ext/ratatui_ruby/src/widgets/mod.rs +3 -1
  63. data/ext/ratatui_ruby/src/widgets/overlay.rs +2 -1
  64. data/ext/ratatui_ruby/src/widgets/paragraph.rs +10 -0
  65. data/ext/ratatui_ruby/src/widgets/table.rs +25 -6
  66. data/ext/ratatui_ruby/src/widgets/tabs.rs +2 -1
  67. data/lib/ratatui_ruby/dsl.rb +64 -0
  68. data/lib/ratatui_ruby/schema/calendar.rb +26 -0
  69. data/lib/ratatui_ruby/schema/chart.rb +81 -0
  70. data/lib/ratatui_ruby/schema/clear.rb +83 -0
  71. data/lib/ratatui_ruby/schema/list.rb +8 -2
  72. data/lib/ratatui_ruby/schema/paragraph.rb +7 -4
  73. data/lib/ratatui_ruby/schema/rect.rb +24 -0
  74. data/lib/ratatui_ruby/schema/table.rb +8 -2
  75. data/lib/ratatui_ruby/version.rb +1 -1
  76. data/lib/ratatui_ruby.rb +24 -2
  77. data/mise.toml +8 -0
  78. data/sig/ratatui_ruby/buffer.rbs +11 -0
  79. data/sig/ratatui_ruby/schema/calendar.rbs +13 -0
  80. data/sig/ratatui_ruby/schema/{line_chart.rbs → chart.rbs} +20 -1
  81. data/sig/ratatui_ruby/schema/list.rbs +4 -1
  82. data/sig/ratatui_ruby/schema/rect.rbs +14 -0
  83. data/tasks/bump/cargo_lockfile.rb +19 -0
  84. data/tasks/bump/changelog.rb +37 -0
  85. data/tasks/bump/comparison_links.rb +41 -0
  86. data/tasks/bump/header.rb +30 -0
  87. data/tasks/bump/history.rb +30 -0
  88. data/tasks/bump/manifest.rb +31 -0
  89. data/tasks/bump/ruby_gem.rb +35 -0
  90. data/tasks/bump/sem_ver.rb +34 -0
  91. data/tasks/bump/unreleased_section.rb +38 -0
  92. data/tasks/bump.rake +49 -0
  93. data/tasks/doc.rake +25 -0
  94. data/tasks/extension.rake +12 -0
  95. data/tasks/lint.rake +49 -0
  96. data/tasks/rdoc_config.rb +15 -0
  97. data/tasks/resources/build.yml.erb +65 -0
  98. data/tasks/resources/index.html.erb +38 -0
  99. data/tasks/resources/rubies.yml +7 -0
  100. data/tasks/sourcehut.rake +38 -0
  101. data/tasks/test.rake +31 -0
  102. data/tasks/website/index_page.rb +28 -0
  103. data/tasks/website/version.rb +117 -0
  104. data/tasks/website/version_menu.rb +68 -0
  105. data/tasks/website/versioned_documentation.rb +49 -0
  106. data/tasks/website/website.rb +53 -0
  107. data/tasks/website.rake +26 -0
  108. metadata +119 -28
  109. data/.build.yml +0 -34
  110. data/.ruby-version +0 -1
  111. data/CODE_OF_CONDUCT.md +0 -30
  112. data/CONTRIBUTING.md +0 -40
  113. data/docs/images/examples-stock_ticker.rb.png +0 -0
  114. data/ext/ratatui_ruby/src/widgets/linechart.rs +0 -154
  115. data/lib/ratatui_ruby/schema/line_chart.rb +0 -41
  116. /data/{docs → doc}/application_testing.md +0 -0
  117. /data/{docs → doc}/contributors/design/ruby_frontend.md +0 -0
  118. /data/{docs → doc}/contributors/design/rust_backend.md +0 -0
  119. /data/{docs → doc}/contributors/design.md +0 -0
  120. /data/{docs → doc}/images/examples-analytics.rb.png +0 -0
  121. /data/{docs → doc}/images/examples-box_demo.rb.png +0 -0
  122. /data/{docs → doc}/images/examples-dashboard.rb.png +0 -0
  123. /data/{docs → doc}/images/examples-login_form.rb.png +0 -0
  124. /data/{docs → doc}/images/examples-map_demo.rb.png +0 -0
  125. /data/{docs → doc}/images/examples-mouse_events.rb.png +0 -0
  126. /data/{docs → doc}/images/examples-scrollbar_demo.rb.png +0 -0
  127. /data/{docs → doc}/images/examples-system_monitor.rb.png +0 -0
@@ -86,28 +86,29 @@ dependencies = [
86
86
 
87
87
  [[package]]
88
88
  name = "compact_str"
89
- version = "0.7.1"
89
+ version = "0.8.1"
90
90
  source = "registry+https://github.com/rust-lang/crates.io-index"
91
- checksum = "f86b9c4c00838774a6d902ef931eff7470720c51d90c2e32cfe15dc304737b3f"
91
+ checksum = "3b79c4069c6cad78e2e0cdfcbd26275770669fb39fd308a752dc110e83b9af32"
92
92
  dependencies = [
93
93
  "castaway",
94
94
  "cfg-if",
95
95
  "itoa",
96
+ "rustversion",
96
97
  "ryu",
97
98
  "static_assertions",
98
99
  ]
99
100
 
100
101
  [[package]]
101
102
  name = "crossterm"
102
- version = "0.27.0"
103
+ version = "0.28.1"
103
104
  source = "registry+https://github.com/rust-lang/crates.io-index"
104
- checksum = "f476fe445d41c9e991fd07515a6f463074b782242ccf4a5b7b1d1012e70824df"
105
+ checksum = "829d955a0bb380ef178a640b91779e3987da38c9aea133b20614cfed8cdea9c6"
105
106
  dependencies = [
106
107
  "bitflags",
107
108
  "crossterm_winapi",
108
- "libc",
109
109
  "mio",
110
110
  "parking_lot",
111
+ "rustix",
111
112
  "signal-hook",
112
113
  "signal-hook-mio",
113
114
  "winapi",
@@ -122,6 +123,50 @@ dependencies = [
122
123
  "winapi",
123
124
  ]
124
125
 
126
+ [[package]]
127
+ name = "darling"
128
+ version = "0.20.11"
129
+ source = "registry+https://github.com/rust-lang/crates.io-index"
130
+ checksum = "fc7f46116c46ff9ab3eb1597a45688b6715c6e628b5c133e288e709a29bcb4ee"
131
+ dependencies = [
132
+ "darling_core",
133
+ "darling_macro",
134
+ ]
135
+
136
+ [[package]]
137
+ name = "darling_core"
138
+ version = "0.20.11"
139
+ source = "registry+https://github.com/rust-lang/crates.io-index"
140
+ checksum = "0d00b9596d185e565c2207a0b01f8bd1a135483d02d9b7b0a54b11da8d53412e"
141
+ dependencies = [
142
+ "fnv",
143
+ "ident_case",
144
+ "proc-macro2",
145
+ "quote",
146
+ "strsim",
147
+ "syn",
148
+ ]
149
+
150
+ [[package]]
151
+ name = "darling_macro"
152
+ version = "0.20.11"
153
+ source = "registry+https://github.com/rust-lang/crates.io-index"
154
+ checksum = "fc34b93ccb385b40dc71c6fceac4b2ad23662c7eeb248cf10d529b7e055b6ead"
155
+ dependencies = [
156
+ "darling_core",
157
+ "quote",
158
+ "syn",
159
+ ]
160
+
161
+ [[package]]
162
+ name = "deranged"
163
+ version = "0.5.5"
164
+ source = "registry+https://github.com/rust-lang/crates.io-index"
165
+ checksum = "ececcb659e7ba858fb4f10388c250a7252eb0a27373f1a72b8748afdd248e587"
166
+ dependencies = [
167
+ "powerfmt",
168
+ ]
169
+
125
170
  [[package]]
126
171
  name = "either"
127
172
  version = "1.15.0"
@@ -134,6 +179,22 @@ version = "1.0.2"
134
179
  source = "registry+https://github.com/rust-lang/crates.io-index"
135
180
  checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
136
181
 
182
+ [[package]]
183
+ name = "errno"
184
+ version = "0.3.14"
185
+ source = "registry+https://github.com/rust-lang/crates.io-index"
186
+ checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
187
+ dependencies = [
188
+ "libc",
189
+ "windows-sys 0.61.2",
190
+ ]
191
+
192
+ [[package]]
193
+ name = "fnv"
194
+ version = "1.0.7"
195
+ source = "registry+https://github.com/rust-lang/crates.io-index"
196
+ checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
197
+
137
198
  [[package]]
138
199
  name = "foldhash"
139
200
  version = "0.1.5"
@@ -163,6 +224,34 @@ version = "0.5.0"
163
224
  source = "registry+https://github.com/rust-lang/crates.io-index"
164
225
  checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea"
165
226
 
227
+ [[package]]
228
+ name = "ident_case"
229
+ version = "1.0.1"
230
+ source = "registry+https://github.com/rust-lang/crates.io-index"
231
+ checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
232
+
233
+ [[package]]
234
+ name = "indoc"
235
+ version = "2.0.7"
236
+ source = "registry+https://github.com/rust-lang/crates.io-index"
237
+ checksum = "79cf5c93f93228cf8efb3ba362535fb11199ac548a09ce117c9b1adc3030d706"
238
+ dependencies = [
239
+ "rustversion",
240
+ ]
241
+
242
+ [[package]]
243
+ name = "instability"
244
+ version = "0.3.10"
245
+ source = "registry+https://github.com/rust-lang/crates.io-index"
246
+ checksum = "6778b0196eefee7df739db78758e5cf9b37412268bfa5650bfeed028aed20d9c"
247
+ dependencies = [
248
+ "darling",
249
+ "indoc",
250
+ "proc-macro2",
251
+ "quote",
252
+ "syn",
253
+ ]
254
+
166
255
  [[package]]
167
256
  name = "itertools"
168
257
  version = "0.12.1"
@@ -215,6 +304,12 @@ dependencies = [
215
304
  "windows-link",
216
305
  ]
217
306
 
307
+ [[package]]
308
+ name = "linux-raw-sys"
309
+ version = "0.4.15"
310
+ source = "registry+https://github.com/rust-lang/crates.io-index"
311
+ checksum = "d26c52dbd32dccf2d10cac7725f8eae5296885fb5703b261f7d0a0739ec807ab"
312
+
218
313
  [[package]]
219
314
  name = "lock_api"
220
315
  version = "0.4.14"
@@ -241,9 +336,9 @@ dependencies = [
241
336
 
242
337
  [[package]]
243
338
  name = "magnus"
244
- version = "0.6.4"
339
+ version = "0.8.2"
245
340
  source = "registry+https://github.com/rust-lang/crates.io-index"
246
- checksum = "b1597ef40aa8c36be098249e82c9a20cf7199278ac1c1a1a995eeead6a184479"
341
+ checksum = "3b36a5b126bbe97eb0d02d07acfeb327036c6319fd816139a49824a83b7f9012"
247
342
  dependencies = [
248
343
  "magnus-macros",
249
344
  "rb-sys",
@@ -253,9 +348,9 @@ dependencies = [
253
348
 
254
349
  [[package]]
255
350
  name = "magnus-macros"
256
- version = "0.6.0"
351
+ version = "0.8.0"
257
352
  source = "registry+https://github.com/rust-lang/crates.io-index"
258
- checksum = "5968c820e2960565f647819f5928a42d6e874551cab9d88d75e3e0660d7f71e3"
353
+ checksum = "47607461fd8e1513cb4f2076c197d8092d921a1ea75bd08af97398f593751892"
259
354
  dependencies = [
260
355
  "proc-macro2",
261
356
  "quote",
@@ -276,14 +371,14 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a"
276
371
 
277
372
  [[package]]
278
373
  name = "mio"
279
- version = "0.8.11"
374
+ version = "1.1.1"
280
375
  source = "registry+https://github.com/rust-lang/crates.io-index"
281
- checksum = "a4a650543ca06a924e8b371db273b2756685faae30f8487da1b56505a8f78b0c"
376
+ checksum = "a69bcab0ad47271a0234d9422b131806bf3968021e5dc9328caf2d4cd58557fc"
282
377
  dependencies = [
283
378
  "libc",
284
379
  "log",
285
380
  "wasi",
286
- "windows-sys",
381
+ "windows-sys 0.61.2",
287
382
  ]
288
383
 
289
384
  [[package]]
@@ -296,6 +391,21 @@ dependencies = [
296
391
  "minimal-lexical",
297
392
  ]
298
393
 
394
+ [[package]]
395
+ name = "num-conv"
396
+ version = "0.1.0"
397
+ source = "registry+https://github.com/rust-lang/crates.io-index"
398
+ checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9"
399
+
400
+ [[package]]
401
+ name = "num_threads"
402
+ version = "0.1.7"
403
+ source = "registry+https://github.com/rust-lang/crates.io-index"
404
+ checksum = "5c7398b9c8b70908f6371f47ed36737907c87c52af34c268fed0bf0ceb92ead9"
405
+ dependencies = [
406
+ "libc",
407
+ ]
408
+
299
409
  [[package]]
300
410
  name = "parking_lot"
301
411
  version = "0.12.5"
@@ -325,6 +435,12 @@ version = "1.0.15"
325
435
  source = "registry+https://github.com/rust-lang/crates.io-index"
326
436
  checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a"
327
437
 
438
+ [[package]]
439
+ name = "powerfmt"
440
+ version = "0.2.0"
441
+ source = "registry+https://github.com/rust-lang/crates.io-index"
442
+ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391"
443
+
328
444
  [[package]]
329
445
  name = "proc-macro2"
330
446
  version = "1.0.103"
@@ -345,32 +461,34 @@ dependencies = [
345
461
 
346
462
  [[package]]
347
463
  name = "ratatui"
348
- version = "0.26.3"
464
+ version = "0.29.0"
349
465
  source = "registry+https://github.com/rust-lang/crates.io-index"
350
- checksum = "f44c9e68fd46eda15c646fbb85e1040b657a58cdc8c98db1d97a55930d991eef"
466
+ checksum = "eabd94c2f37801c20583fc49dd5cd6b0ba68c716787c2dd6ed18571e1e63117b"
351
467
  dependencies = [
352
468
  "bitflags",
353
469
  "cassowary",
354
470
  "compact_str",
355
471
  "crossterm",
356
- "itertools 0.12.1",
472
+ "indoc",
473
+ "instability",
474
+ "itertools 0.13.0",
357
475
  "lru",
358
476
  "paste",
359
- "stability",
360
477
  "strum",
478
+ "time",
361
479
  "unicode-segmentation",
362
480
  "unicode-truncate",
363
- "unicode-width",
481
+ "unicode-width 0.2.0",
364
482
  ]
365
483
 
366
484
  [[package]]
367
485
  name = "ratatui_ruby"
368
- version = "0.1.0"
486
+ version = "0.3.0"
369
487
  dependencies = [
370
- "crossterm",
371
488
  "lazy_static",
372
489
  "magnus",
373
490
  "ratatui",
491
+ "time",
374
492
  ]
375
493
 
376
494
  [[package]]
@@ -399,9 +517,9 @@ dependencies = [
399
517
 
400
518
  [[package]]
401
519
  name = "rb-sys-env"
402
- version = "0.1.2"
520
+ version = "0.2.2"
403
521
  source = "registry+https://github.com/rust-lang/crates.io-index"
404
- checksum = "a35802679f07360454b418a5d1735c89716bde01d35b1560fc953c1415a0b3bb"
522
+ checksum = "08f8d2924cf136a1315e2b4c7460a39f62ef11ee5d522df9b2750fab55b868b6"
405
523
 
406
524
  [[package]]
407
525
  name = "redox_syscall"
@@ -447,6 +565,19 @@ version = "1.1.0"
447
565
  source = "registry+https://github.com/rust-lang/crates.io-index"
448
566
  checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
449
567
 
568
+ [[package]]
569
+ name = "rustix"
570
+ version = "0.38.44"
571
+ source = "registry+https://github.com/rust-lang/crates.io-index"
572
+ checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154"
573
+ dependencies = [
574
+ "bitflags",
575
+ "errno",
576
+ "libc",
577
+ "linux-raw-sys",
578
+ "windows-sys 0.59.0",
579
+ ]
580
+
450
581
  [[package]]
451
582
  name = "rustversion"
452
583
  version = "1.0.22"
@@ -471,6 +602,35 @@ version = "0.3.6"
471
602
  source = "registry+https://github.com/rust-lang/crates.io-index"
472
603
  checksum = "1bc711410fbe7399f390ca1c3b60ad0f53f80e95c5eb935e52268a0e2cd49acc"
473
604
 
605
+ [[package]]
606
+ name = "serde"
607
+ version = "1.0.228"
608
+ source = "registry+https://github.com/rust-lang/crates.io-index"
609
+ checksum = "9a8e94ea7f378bd32cbbd37198a4a91436180c5bb472411e48b5ec2e2124ae9e"
610
+ dependencies = [
611
+ "serde_core",
612
+ ]
613
+
614
+ [[package]]
615
+ name = "serde_core"
616
+ version = "1.0.228"
617
+ source = "registry+https://github.com/rust-lang/crates.io-index"
618
+ checksum = "41d385c7d4ca58e59fc732af25c3983b67ac852c1a25000afe1175de458b67ad"
619
+ dependencies = [
620
+ "serde_derive",
621
+ ]
622
+
623
+ [[package]]
624
+ name = "serde_derive"
625
+ version = "1.0.228"
626
+ source = "registry+https://github.com/rust-lang/crates.io-index"
627
+ checksum = "d540f220d3187173da220f885ab66608367b6574e925011a9353e4badda91d79"
628
+ dependencies = [
629
+ "proc-macro2",
630
+ "quote",
631
+ "syn",
632
+ ]
633
+
474
634
  [[package]]
475
635
  name = "shell-words"
476
636
  version = "1.1.1"
@@ -519,22 +679,18 @@ version = "1.15.1"
519
679
  source = "registry+https://github.com/rust-lang/crates.io-index"
520
680
  checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
521
681
 
522
- [[package]]
523
- name = "stability"
524
- version = "0.2.1"
525
- source = "registry+https://github.com/rust-lang/crates.io-index"
526
- checksum = "d904e7009df136af5297832a3ace3370cd14ff1546a232f4f185036c2736fcac"
527
- dependencies = [
528
- "quote",
529
- "syn",
530
- ]
531
-
532
682
  [[package]]
533
683
  name = "static_assertions"
534
684
  version = "1.1.0"
535
685
  source = "registry+https://github.com/rust-lang/crates.io-index"
536
686
  checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
537
687
 
688
+ [[package]]
689
+ name = "strsim"
690
+ version = "0.11.1"
691
+ source = "registry+https://github.com/rust-lang/crates.io-index"
692
+ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f"
693
+
538
694
  [[package]]
539
695
  name = "strum"
540
696
  version = "0.26.3"
@@ -568,6 +724,38 @@ dependencies = [
568
724
  "unicode-ident",
569
725
  ]
570
726
 
727
+ [[package]]
728
+ name = "time"
729
+ version = "0.3.44"
730
+ source = "registry+https://github.com/rust-lang/crates.io-index"
731
+ checksum = "91e7d9e3bb61134e77bde20dd4825b97c010155709965fedf0f49bb138e52a9d"
732
+ dependencies = [
733
+ "deranged",
734
+ "libc",
735
+ "num-conv",
736
+ "num_threads",
737
+ "powerfmt",
738
+ "serde",
739
+ "time-core",
740
+ "time-macros",
741
+ ]
742
+
743
+ [[package]]
744
+ name = "time-core"
745
+ version = "0.1.6"
746
+ source = "registry+https://github.com/rust-lang/crates.io-index"
747
+ checksum = "40868e7c1d2f0b8d73e4a8c7f0ff63af4f6d19be117e90bd73eb1d62cf831c6b"
748
+
749
+ [[package]]
750
+ name = "time-macros"
751
+ version = "0.2.24"
752
+ source = "registry+https://github.com/rust-lang/crates.io-index"
753
+ checksum = "30cfb0125f12d9c277f35663a0a33f8c30190f4e4574868a330595412d34ebf3"
754
+ dependencies = [
755
+ "num-conv",
756
+ "time-core",
757
+ ]
758
+
571
759
  [[package]]
572
760
  name = "unicode-ident"
573
761
  version = "1.0.22"
@@ -588,7 +776,7 @@ checksum = "b3644627a5af5fa321c95b9b235a72fd24cd29c648c2c379431e6628655627bf"
588
776
  dependencies = [
589
777
  "itertools 0.13.0",
590
778
  "unicode-segmentation",
591
- "unicode-width",
779
+ "unicode-width 0.1.14",
592
780
  ]
593
781
 
594
782
  [[package]]
@@ -597,6 +785,12 @@ version = "0.1.14"
597
785
  source = "registry+https://github.com/rust-lang/crates.io-index"
598
786
  checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af"
599
787
 
788
+ [[package]]
789
+ name = "unicode-width"
790
+ version = "0.2.0"
791
+ source = "registry+https://github.com/rust-lang/crates.io-index"
792
+ checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd"
793
+
600
794
  [[package]]
601
795
  name = "wasi"
602
796
  version = "0.11.1+wasi-snapshot-preview1"
@@ -633,22 +827,32 @@ checksum = "f0805222e57f7521d6a62e36fa9163bc891acd422f971defe97d64e70d0a4fe5"
633
827
 
634
828
  [[package]]
635
829
  name = "windows-sys"
636
- version = "0.48.0"
830
+ version = "0.59.0"
637
831
  source = "registry+https://github.com/rust-lang/crates.io-index"
638
- checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
832
+ checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
639
833
  dependencies = [
640
834
  "windows-targets",
641
835
  ]
642
836
 
837
+ [[package]]
838
+ name = "windows-sys"
839
+ version = "0.61.2"
840
+ source = "registry+https://github.com/rust-lang/crates.io-index"
841
+ checksum = "ae137229bcbd6cdf0f7b80a31df61766145077ddf49416a728b02cb3921ff3fc"
842
+ dependencies = [
843
+ "windows-link",
844
+ ]
845
+
643
846
  [[package]]
644
847
  name = "windows-targets"
645
- version = "0.48.5"
848
+ version = "0.52.6"
646
849
  source = "registry+https://github.com/rust-lang/crates.io-index"
647
- checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
850
+ checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
648
851
  dependencies = [
649
852
  "windows_aarch64_gnullvm",
650
853
  "windows_aarch64_msvc",
651
854
  "windows_i686_gnu",
855
+ "windows_i686_gnullvm",
652
856
  "windows_i686_msvc",
653
857
  "windows_x86_64_gnu",
654
858
  "windows_x86_64_gnullvm",
@@ -657,42 +861,48 @@ dependencies = [
657
861
 
658
862
  [[package]]
659
863
  name = "windows_aarch64_gnullvm"
660
- version = "0.48.5"
864
+ version = "0.52.6"
661
865
  source = "registry+https://github.com/rust-lang/crates.io-index"
662
- checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
866
+ checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
663
867
 
664
868
  [[package]]
665
869
  name = "windows_aarch64_msvc"
666
- version = "0.48.5"
870
+ version = "0.52.6"
667
871
  source = "registry+https://github.com/rust-lang/crates.io-index"
668
- checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
872
+ checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
669
873
 
670
874
  [[package]]
671
875
  name = "windows_i686_gnu"
672
- version = "0.48.5"
876
+ version = "0.52.6"
877
+ source = "registry+https://github.com/rust-lang/crates.io-index"
878
+ checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
879
+
880
+ [[package]]
881
+ name = "windows_i686_gnullvm"
882
+ version = "0.52.6"
673
883
  source = "registry+https://github.com/rust-lang/crates.io-index"
674
- checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
884
+ checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
675
885
 
676
886
  [[package]]
677
887
  name = "windows_i686_msvc"
678
- version = "0.48.5"
888
+ version = "0.52.6"
679
889
  source = "registry+https://github.com/rust-lang/crates.io-index"
680
- checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
890
+ checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
681
891
 
682
892
  [[package]]
683
893
  name = "windows_x86_64_gnu"
684
- version = "0.48.5"
894
+ version = "0.52.6"
685
895
  source = "registry+https://github.com/rust-lang/crates.io-index"
686
- checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
896
+ checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
687
897
 
688
898
  [[package]]
689
899
  name = "windows_x86_64_gnullvm"
690
- version = "0.48.5"
900
+ version = "0.52.6"
691
901
  source = "registry+https://github.com/rust-lang/crates.io-index"
692
- checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
902
+ checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
693
903
 
694
904
  [[package]]
695
905
  name = "windows_x86_64_msvc"
696
- version = "0.48.5"
906
+ version = "0.52.6"
697
907
  source = "registry+https://github.com/rust-lang/crates.io-index"
698
- checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
908
+ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
@@ -3,14 +3,15 @@
3
3
 
4
4
  [package]
5
5
  name = "ratatui_ruby"
6
- version = "0.1.0"
6
+ version = "0.3.0"
7
7
  edition = "2021"
8
8
 
9
9
  [lib]
10
10
  crate-type = ["cdylib"]
11
11
 
12
12
  [dependencies]
13
- magnus = "0.6"
14
- ratatui = "0.26"
15
- crossterm = "0.27"
13
+ magnus = "0.8.2"
14
+ ratatui = { version = "0.29", features = ["widget-calendar"] }
15
+
16
16
  lazy_static = "1.4"
17
+ time = { version = "0.3", features = ["macros"] }
@@ -7,6 +7,6 @@ require "mkmf"
7
7
  require "rb_sys/mkmf"
8
8
 
9
9
  create_rust_makefile("ratatui_ruby/ratatui_ruby") do |r|
10
- # Optional: Force release profile if needed, but defaults are usually good
10
+ # Optional: Force release profile if needed
11
11
  # r.profile = ENV.fetch("RB_SYS_CARGO_PROFILE", :release).to_sym
12
12
  end
@@ -0,0 +1,54 @@
1
+ // SPDX-FileCopyrightText: 2025 Kerrick Long <me@kerricklong.com>
2
+ // SPDX-License-Identifier: AGPL-3.0-or-later
3
+
4
+ use crate::style::parse_style;
5
+ use magnus::prelude::*;
6
+ use magnus::{Error, Ruby, Value};
7
+ use ratatui::buffer::Buffer;
8
+ use std::ffi::CStr;
9
+
10
+ pub struct BufferWrapper {
11
+ ptr: *mut Buffer,
12
+ }
13
+
14
+ unsafe impl Send for BufferWrapper {}
15
+
16
+ impl BufferWrapper {
17
+ pub fn new(buffer: &mut Buffer) -> Self {
18
+ Self { ptr: buffer }
19
+ }
20
+
21
+ pub fn set_string(&self, x: u16, y: u16, string: String, style_val: Value) -> Result<(), Error> {
22
+ let style = parse_style(style_val)?;
23
+ let buffer = unsafe { &mut *self.ptr };
24
+ buffer.set_string(x, y, string, style);
25
+ Ok(())
26
+ }
27
+
28
+ pub fn area(&self) -> Value {
29
+ let ruby = Ruby::get().unwrap();
30
+ let module = ruby.define_module("RatatuiRuby").unwrap();
31
+ let class = module.const_get::<_, magnus::RClass>("Rect").unwrap();
32
+ let buffer = unsafe { &*self.ptr };
33
+ let area = buffer.area;
34
+ class.funcall("new", (area.x, area.y, area.width, area.height)).unwrap()
35
+ }
36
+ }
37
+
38
+ unsafe impl magnus::TypedData for BufferWrapper {
39
+ fn class(ruby: &Ruby) -> magnus::RClass {
40
+ ruby.define_module("RatatuiRuby")
41
+ .and_then(|m| m.const_get("Buffer"))
42
+ .unwrap()
43
+ }
44
+
45
+ fn data_type() -> &'static magnus::DataType {
46
+ static DATA_TYPE: magnus::DataType = magnus::DataType::builder::<BufferWrapper>(unsafe {
47
+ CStr::from_bytes_with_nul_unchecked(b"RatatuiRuby::Buffer\0")
48
+ })
49
+ .build();
50
+ &DATA_TYPE
51
+ }
52
+ }
53
+
54
+ impl magnus::DataTypeFunctions for BufferWrapper {}