ruby_native 0.2.6 → 0.2.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad18c6fcb69bcf375a6a44ef5513e47d6ff96dbf1957636d2fc964a9a124a078
4
- data.tar.gz: '048a44c3fa9f59016d8dad8f60f2e2d8330a403285ede35541465162eb64c11e'
3
+ metadata.gz: 686ee01bee54cb1288209374168b015028436b2691431cb4a1014bead6699216
4
+ data.tar.gz: dc3bb95b1c24619466e6d8b74b011b2ffed8d5a87fc16d2c0d167d10dd961dbf
5
5
  SHA512:
6
- metadata.gz: 03c531fb7b9739e8744493e41024b6472ad43d43ef287686fec672ab1ddda186c9ad4463d86a4844ce0b2d35f5c1cf6ddf89075c2998e3f8d6d4727be7fcdf77
7
- data.tar.gz: dd6f724b78af89ac07c72ea9b5acc898af580a1042d822bab3cf948eb9e577124dbaecbcb43342ff095a890b0055a8152d5a8a1a93a87960e9be86651e51ca12
6
+ metadata.gz: 552f240aefd648003142951f7996f0f73164e74ea848fb33e522925e3654cf4649517b6559dff5cc16d22cb9c9d942a32962596a87694148a5bfabeed328f1b9
7
+ data.tar.gz: cfa3518345b2e2a22065ee9f2bf7d82e1e0da04218faf3cae64568176470f03364ae9c14883300a26a065bec138c4dc952950abfe04935324e15e5ace0c41c04
data/README.md CHANGED
@@ -36,7 +36,7 @@ appearance:
36
36
  tint_color: "#4F46E5"
37
37
  background_color: "#FFFFFF"
38
38
  status_bar_color: "#FFFFFF"
39
- tabs:
39
+ tabs: # optional
40
40
  - title: Home
41
41
  path: /
42
42
  icon: house
@@ -45,6 +45,8 @@ tabs:
45
45
  icon: person
46
46
  ```
47
47
 
48
+ You may also omit `tabs` to hide the tab bar entirely. The app will load `entry_path` or fall back to `/`.
49
+
48
50
  Color fields accept a plain hex string or an object with `light` and `dark` keys for dark mode:
49
51
 
50
52
  ```yaml
@@ -2,6 +2,7 @@ module RubyNative
2
2
  class ConfigController < ::ActionController::Base
3
3
  def show
4
4
  RubyNative.load_config if Rails.env.local?
5
+ response.set_header("X-Ruby-Native-Version", RubyNative::VERSION)
5
6
  render json: RubyNative.config
6
7
  end
7
8
  end
@@ -0,0 +1,11 @@
1
+ import { BridgeComponent } from "@hotwired/hotwire-native-bridge"
2
+
3
+ export default class extends BridgeComponent {
4
+ static component = "haptic"
5
+ static values = { feedback: { type: String, default: "success" } }
6
+
7
+ vibrate() {
8
+ const feedback = this.feedbackValue || "success"
9
+ this.send("vibrate", { feedback })
10
+ }
11
+ }
@@ -5,6 +5,7 @@ import PushController from "ruby_native/bridge/push_controller"
5
5
  import MenuController from "ruby_native/bridge/menu_controller"
6
6
  import SearchController from "ruby_native/bridge/search_controller"
7
7
  import ButtonController from "ruby_native/bridge/button_controller"
8
+ import HapticController from "ruby_native/bridge/haptic_controller"
8
9
 
9
10
  application.register("bridge--tabs", TabsController)
10
11
  application.register("bridge--form", FormController)
@@ -12,3 +13,4 @@ application.register("bridge--push", PushController)
12
13
  application.register("bridge--menu", MenuController)
13
14
  application.register("bridge--search", SearchController)
14
15
  application.register("bridge--button", ButtonController)
16
+ application.register("bridge--haptic", HapticController)
data/config/importmap.rb CHANGED
@@ -1,2 +1,3 @@
1
+ pin "ruby_native/bridge", to: "ruby_native/bridge/index.js"
1
2
  pin_all_from RubyNative::Engine.root.join("app/javascript/ruby_native/bridge"), under: "ruby_native/bridge"
2
3
  pin "ruby_native/back", to: "ruby_native/back.js"
@@ -37,6 +37,11 @@ module RubyNative
37
37
  say " 4. Preview on your device:"
38
38
  say " bundle exec ruby_native preview"
39
39
  say ""
40
+ say " For Advanced Mode (native buttons, menus, search):"
41
+ say " bin/importmap pin @hotwired/hotwire-native-bridge"
42
+ say " Then add to your JavaScript entrypoint:"
43
+ say " import \"ruby_native/bridge\""
44
+ say ""
40
45
  if File.directory?(File.join(destination_root, ".claude"))
41
46
  say " Tip: .claude/ruby_native.md was added with setup instructions."
42
47
  say " Open Claude Code and ask \"what do I need to do next?\" for guided help."
@@ -11,8 +11,8 @@ module RubyNative
11
11
  tag.div(data: { native_form: true }, hidden: true)
12
12
  end
13
13
 
14
- def native_form_data
15
- { controller: "bridge--form" }
14
+ def native_form_data(**data)
15
+ merge_controller(data, "bridge--form")
16
16
  end
17
17
 
18
18
  def native_submit_data
@@ -32,7 +32,7 @@ module RubyNative
32
32
  tag.path(d: "M15.75 19.5L8.25 12l7.5-7.5", stroke_linecap: "round", stroke_linejoin: "round"),
33
33
  width: 24, height: 24, viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", stroke_width: 2.5
34
34
  )
35
- tag.button(text || default_content, onclick: "webkit.messageHandlers.rubyNative.postMessage({action: 'back'})", **options)
35
+ tag.button(text || default_content, onclick: "RubyNative.postMessage({action: 'back'})", **options)
36
36
  end
37
37
 
38
38
  def native_search_tag
@@ -59,6 +59,22 @@ module RubyNative
59
59
  }) { builder.to_html }
60
60
  end
61
61
 
62
+ def native_haptic_data(feedback = :success, **data)
63
+ feedback = feedback.to_s
64
+ feedback = "success" if feedback.empty?
65
+
66
+ data[:native_haptic] = feedback
67
+ data[:bridge__haptic_feedback_value] = feedback
68
+ merge_controller(data, "bridge--haptic")
69
+ end
70
+
71
+ private
72
+
73
+ def merge_controller(data, controller)
74
+ data[:controller] = [data[:controller], controller].compact.join(" ")
75
+ data
76
+ end
77
+
62
78
  class MenuBuilder
63
79
  def initialize(context)
64
80
  @context = context
@@ -1,3 +1,3 @@
1
1
  module RubyNative
2
- VERSION = "0.2.6"
2
+ VERSION = "0.2.8"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_native
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.6
4
+ version: 0.2.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joe Masilotti
@@ -56,6 +56,7 @@ files:
56
56
  - app/javascript/ruby_native/back.js
57
57
  - app/javascript/ruby_native/bridge/button_controller.js
58
58
  - app/javascript/ruby_native/bridge/form_controller.js
59
+ - app/javascript/ruby_native/bridge/haptic_controller.js
59
60
  - app/javascript/ruby_native/bridge/index.js
60
61
  - app/javascript/ruby_native/bridge/menu_controller.js
61
62
  - app/javascript/ruby_native/bridge/push_controller.js