dialkit-rails 0.1.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.
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dialkit
4
+ module Rails
5
+ class Engine < ::Rails::Engine
6
+ initializer "dialkit.rails.assets" do |app|
7
+ app.config.assets.precompile += %w[dialkit.css]
8
+ end
9
+
10
+ initializer "dialkit.rails.helpers" do
11
+ ActiveSupport.on_load(:action_view) do
12
+ include Dialkit::Rails::Helper
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dialkit
4
+ module Rails
5
+ module Helper
6
+ def dialkit_stylesheet_tag(**options)
7
+ stylesheet_link_tag("dialkit", **options)
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dialkit
4
+ module Rails
5
+ VERSION = "0.1.0"
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "dialkit/rails/version"
4
+ require "dialkit/rails/helper"
5
+ require "dialkit/rails/engine"
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Dialkit
4
+ module Generators
5
+ class InstallGenerator < ::Rails::Generators::Base
6
+ source_root File.expand_path("templates", __dir__)
7
+
8
+ def copy_demo_entrypoint
9
+ return if File.exist?("app/javascript/dialkit_demo.jsx")
10
+
11
+ template "dialkit_demo.jsx", "app/javascript/dialkit_demo.jsx"
12
+ end
13
+
14
+ def wire_application_entrypoint
15
+ path = "app/javascript/application.js"
16
+ return unless File.exist?(path)
17
+
18
+ import_line = 'import "./dialkit_demo";'
19
+ return if File.read(path).include?(import_line)
20
+
21
+ append_to_file(path, "\n#{import_line}\n")
22
+ end
23
+
24
+ def wire_layout_stylesheet
25
+ path = "app/views/layouts/application.html.erb"
26
+ return unless File.exist?(path)
27
+
28
+ stylesheet_line = '<%= dialkit_stylesheet_tag "data-turbo-track": "reload" %>'
29
+ return if File.read(path).include?(stylesheet_line)
30
+ return unless File.read(path).include?('<%= stylesheet_link_tag "application" %>')
31
+
32
+ inject_into_file(path, "\n #{stylesheet_line}", after: '<%= stylesheet_link_tag "application" %>')
33
+ end
34
+
35
+ def print_next_steps
36
+ say ""
37
+ say "DialKit Rails install complete.", :green
38
+ say "Next steps:"
39
+ say " 1. npm install dialkit-rails motion react react-dom"
40
+ say " 2. npm run build"
41
+ say " 3. Load a page with #dialkit-root to mount the demo panel"
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,57 @@
1
+ import React from "react";
2
+ import { createRoot } from "react-dom/client";
3
+ import { DialRoot, useDialKit } from "dialkit-rails";
4
+ import { motion } from "motion/react";
5
+
6
+ function DemoCard() {
7
+ const params = useDialKit("Card", {
8
+ scale: [1, 0.7, 1.4, 0.01],
9
+ blur: [0, 0, 24, 1],
10
+ rotate: [0, -25, 25, 1],
11
+ opacity: [1, 0.2, 1, 0.01],
12
+ spring: {
13
+ type: "spring",
14
+ visualDuration: 0.35,
15
+ bounce: 0.25
16
+ }
17
+ });
18
+
19
+ return (
20
+ <motion.div
21
+ className="demo-card"
22
+ style={{ filter: `blur(${params.blur}px)` }}
23
+ animate={{
24
+ scale: params.scale,
25
+ rotate: params.rotate,
26
+ opacity: params.opacity
27
+ }}
28
+ transition={params.spring}
29
+ >
30
+ <h2>DialKit Demo</h2>
31
+ <p>Tweak scale, blur, rotation, opacity, and spring settings live.</p>
32
+ </motion.div>
33
+ );
34
+ }
35
+
36
+ function DialkitApp() {
37
+ return (
38
+ <>
39
+ <DialRoot position="top-right" />
40
+ <div className="demo-stage">
41
+ <DemoCard />
42
+ </div>
43
+ </>
44
+ );
45
+ }
46
+
47
+ const mount = () => {
48
+ const mountNode = document.getElementById("dialkit-root");
49
+ if (!mountNode || mountNode.dataset.reactMounted === "true") return;
50
+
51
+ const root = createRoot(mountNode);
52
+ root.render(<DialkitApp />);
53
+ mountNode.dataset.reactMounted = "true";
54
+ };
55
+
56
+ document.addEventListener("DOMContentLoaded", mount);
57
+ document.addEventListener("turbo:load", mount);
@@ -0,0 +1 @@
1
+ export * from "dialkit";
@@ -0,0 +1 @@
1
+ export * from "dialkit";
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "dialkit-rails",
3
+ "version": "0.1.0",
4
+ "description": "Rails-friendly package wrapper that re-exports DialKit.",
5
+ "type": "module",
6
+ "main": "./index.js",
7
+ "types": "./index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./index.d.ts",
11
+ "default": "./index.js"
12
+ },
13
+ "./styles.css": "./styles.css"
14
+ },
15
+ "files": [
16
+ "index.js",
17
+ "index.d.ts",
18
+ "styles.css"
19
+ ],
20
+ "peerDependencies": {
21
+ "motion": ">=12.0.0",
22
+ "react": ">=18.0.0",
23
+ "react-dom": ">=18.0.0"
24
+ },
25
+ "dependencies": {
26
+ "dialkit": "^0.2.2"
27
+ },
28
+ "license": "MIT"
29
+ }
@@ -0,0 +1 @@
1
+ @import "dialkit/styles.css";
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: dialkit-rails
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alex Friedman
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2026-02-21 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: railties
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '7.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '7.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: sprockets-rails
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '3.0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '3.0'
41
+ description: Installable Rails engine and generator for wiring DialKit into Rails
42
+ apps.
43
+ email:
44
+ - alex.friedman@modo.energy
45
+ executables: []
46
+ extensions: []
47
+ extra_rdoc_files: []
48
+ files:
49
+ - README.md
50
+ - app/assets/stylesheets/dialkit.css
51
+ - lib/dialkit/rails.rb
52
+ - lib/dialkit/rails/engine.rb
53
+ - lib/dialkit/rails/helper.rb
54
+ - lib/dialkit/rails/version.rb
55
+ - lib/generators/dialkit/install/install_generator.rb
56
+ - lib/generators/dialkit/install/templates/dialkit_demo.jsx
57
+ - packages/dialkit-rails/index.d.ts
58
+ - packages/dialkit-rails/index.js
59
+ - packages/dialkit-rails/package.json
60
+ - packages/dialkit-rails/styles.css
61
+ homepage: https://github.com/alex-friedman-modo/dialkit-rails
62
+ licenses:
63
+ - MIT
64
+ metadata:
65
+ homepage_uri: https://github.com/alex-friedman-modo/dialkit-rails
66
+ source_code_uri: https://github.com/alex-friedman-modo/dialkit-rails
67
+ changelog_uri: https://github.com/alex-friedman-modo/dialkit-rails/blob/master/README.md
68
+ post_install_message:
69
+ rdoc_options: []
70
+ require_paths:
71
+ - lib
72
+ required_ruby_version: !ruby/object:Gem::Requirement
73
+ requirements:
74
+ - - ">="
75
+ - !ruby/object:Gem::Version
76
+ version: '3.2'
77
+ required_rubygems_version: !ruby/object:Gem::Requirement
78
+ requirements:
79
+ - - ">="
80
+ - !ruby/object:Gem::Version
81
+ version: '0'
82
+ requirements: []
83
+ rubygems_version: 3.5.22
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: Rails integration for DialKit
87
+ test_files: []