tail_merge 0.4.1 → 0.4.2
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 +4 -4
- data/.rubocop.yml +6 -0
- data/Cargo.lock +3 -2
- data/Rakefile +33 -3
- data/benchmark/benchmark.rb +43 -27
- data/ext/tail_merge/Cargo.toml +2 -1
- data/ext/tail_merge/src/lib.rs +10 -10
- data/lib/tail_merge/version.rb +1 -1
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69e868a893a925f42921b119e9d263f8d3d63a0e47f52b9370df4c8d9f922af2
|
4
|
+
data.tar.gz: bfe35ab7e0cad8a31fe05d8dcc020b955ac73817cd703cba598f8f36f0364c73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 788c748e878459b9d9d24e1c7e2011af07d025f6e3b56fe83370c84b3d5269ed58976444cdfe7da95455cd3a218737ae3461f082a5d6ddc3aa55afe31e739d4c
|
7
|
+
data.tar.gz: 7890ac8f823ea2a9dbaf753285175e9d707f294f25935bbf2b921b19a861546bd512fb449935656f701937bcf348d5d762da10463e947f87eaca23ed47562da7
|
data/.rubocop.yml
CHANGED
data/Cargo.lock
CHANGED
@@ -114,9 +114,9 @@ dependencies = [
|
|
114
114
|
|
115
115
|
[[package]]
|
116
116
|
name = "magnus"
|
117
|
-
version = "0.
|
117
|
+
version = "0.7.1"
|
118
118
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
119
|
-
checksum = "
|
119
|
+
checksum = "3d87ae53030f3a22e83879e666cb94e58a7bdf31706878a0ba48752994146dab"
|
120
120
|
dependencies = [
|
121
121
|
"magnus-macros",
|
122
122
|
"rb-sys",
|
@@ -146,6 +146,7 @@ name = "merger"
|
|
146
146
|
version = "0.1.0"
|
147
147
|
dependencies = [
|
148
148
|
"magnus",
|
149
|
+
"rb-sys",
|
149
150
|
"rustui_merge",
|
150
151
|
]
|
151
152
|
|
data/Rakefile
CHANGED
@@ -5,9 +5,12 @@ require "minitest/test_task"
|
|
5
5
|
|
6
6
|
Minitest::TestTask.create
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
RuboCop::RakeTask.new
|
8
|
+
begin
|
9
|
+
require "rubocop/rake_task"
|
10
|
+
RuboCop::RakeTask.new
|
11
|
+
rescue LoadError
|
12
|
+
# RuboCop is an optional dev dependency; skip in minimal build environments
|
13
|
+
end
|
11
14
|
|
12
15
|
require "rb_sys/extensiontask"
|
13
16
|
|
@@ -15,8 +18,35 @@ task build: :compile
|
|
15
18
|
|
16
19
|
GEMSPEC = Gem::Specification.load("tail_merge.gemspec")
|
17
20
|
|
21
|
+
# Limit cross-compiled Ruby versions to those supported by this gem and dependencies
|
22
|
+
# Format matches rake-compiler's RUBY_CC_VERSION (colon-separated list)
|
23
|
+
ENV["RUBY_CC_VERSION"] ||= "3.1.6:3.2.6:3.3.7:3.4.1"
|
24
|
+
|
25
|
+
PLATFORMS = %w[
|
26
|
+
aarch64-linux-gnu
|
27
|
+
aarch64-linux-musl
|
28
|
+
arm-linux-gnu
|
29
|
+
arm-linux-musl
|
30
|
+
arm64-darwin
|
31
|
+
x64-mingw-ucrt
|
32
|
+
x64-mingw32
|
33
|
+
x86-linux-gnu
|
34
|
+
x86-linux-musl
|
35
|
+
x86-mingw32
|
36
|
+
x86_64-darwin
|
37
|
+
x86_64-linux-gnu
|
38
|
+
x86_64-linux-musl
|
39
|
+
].freeze
|
40
|
+
|
18
41
|
RbSys::ExtensionTask.new("merger", GEMSPEC) do |ext|
|
19
42
|
ext.lib_dir = "lib/tail_merge"
|
43
|
+
ext.cross_compile = true
|
44
|
+
ext.cross_platform = %w[x86-mingw32 x64-mingw-ucrt x64-mingw32 x86-linux x86_64-linux x86_64-darwin arm64-darwin]
|
45
|
+
end
|
46
|
+
|
47
|
+
desc "Build native extension for a given platform (i.e. `rake 'native[x86_64-linux]'`)"
|
48
|
+
task :native, [:platform] do |_t, platform:|
|
49
|
+
sh "bundle", "exec", "rb-sys-dock", "--platform", platform, "--build"
|
20
50
|
end
|
21
51
|
|
22
52
|
task default: %i[compile test rubocop]
|
data/benchmark/benchmark.rb
CHANGED
@@ -10,12 +10,12 @@ samples = [
|
|
10
10
|
["relative"],
|
11
11
|
["self-center"],
|
12
12
|
["self-start"],
|
13
|
-
[
|
14
|
-
[
|
13
|
+
%w[shadow-inner size-4 text-xs],
|
14
|
+
%w[shadow-inner size-7],
|
15
15
|
["size-10"],
|
16
16
|
["static"],
|
17
17
|
["upload-attachment", "flex-none", "rounded-3xl", "min-h-16", "group", "relative"],
|
18
|
-
[
|
18
|
+
%w[w-full py-2 px-2 rounded-md w-44],
|
19
19
|
"relative",
|
20
20
|
"self-center",
|
21
21
|
"self-start",
|
@@ -25,32 +25,48 @@ samples = [
|
|
25
25
|
"static",
|
26
26
|
"upload-attachment flex-none rounded-3xl min-h-16 group relative",
|
27
27
|
"w-full py-2 px-2 rounded-md w-44",
|
28
|
-
["p-4", "px-2", "py-6", "m-3", "mx-8", "my-2", "bg-blue-500", "bg-red-600", "text-sm", "text-lg", "font-bold",
|
29
|
-
|
30
|
-
[
|
31
|
-
|
32
|
-
["
|
33
|
-
|
34
|
-
["
|
35
|
-
|
36
|
-
[
|
37
|
-
|
38
|
-
[
|
39
|
-
|
40
|
-
[
|
41
|
-
|
42
|
-
[
|
43
|
-
|
44
|
-
["
|
45
|
-
|
46
|
-
["
|
47
|
-
|
28
|
+
["p-4", "px-2", "py-6", "m-3", "mx-8", "my-2", "bg-blue-500", "bg-red-600", "text-sm", "text-lg", "font-bold",
|
29
|
+
"font-normal", "rounded-lg", "rounded-xl", "shadow-md", "shadow-lg", "hover:bg-blue-700", "hover:bg-red-800", "focus:ring-2", "focus:ring-4"],
|
30
|
+
%w[grid flex inline-flex grid-cols-3 grid-cols-4 gap-2 gap-4 items-center items-start
|
31
|
+
justify-between justify-center p-8 p-4 bg-gray-100 bg-white border border-2 rounded-full rounded-md],
|
32
|
+
["transform", "scale-100", "scale-110", "rotate-45", "rotate-90", "translate-x-2", "translate-x-4", "skew-y-3",
|
33
|
+
"skew-y-6", "transition", "duration-200", "duration-500", "ease-in", "ease-out", "delay-150", "delay-300"],
|
34
|
+
["w-full", "w-1/2", "w-3/4", "h-screen", "h-full", "h-32", "min-h-0", "min-h-full", "max-w-xs", "max-w-xl",
|
35
|
+
"overflow-hidden", "overflow-scroll", "object-cover", "object-contain", "opacity-75", "opacity-100"],
|
36
|
+
%w[text-left text-center text-right text-justify tracking-wide tracking-wider leading-tight
|
37
|
+
leading-loose uppercase lowercase capitalize normal-case truncate line-clamp-2 line-clamp-3],
|
38
|
+
%w[border-t border-b border-l border-r border-solid border-dashed border-red-500
|
39
|
+
border-blue-600 divide-y divide-x divide-gray-200 divide-blue-300 ring-2 ring-4 ring-offset-2],
|
40
|
+
%w[cursor-pointer cursor-wait select-none select-text resize resize-none z-10 z-50
|
41
|
+
float-left float-right clear-both clear-none box-border box-content],
|
42
|
+
%w[bg-opacity-50 bg-opacity-75 backdrop-blur-sm backdrop-blur-lg backdrop-filter filter
|
43
|
+
brightness-90 brightness-110 contrast-75 contrast-125 saturate-50 saturate-200],
|
44
|
+
["focus:outline-none", "focus:ring-2", "focus:ring-offset-2", "focus:border-blue-500", "hover:scale-105",
|
45
|
+
"hover:rotate-3", "active:scale-95", "disabled:opacity-50", "disabled:cursor-not-allowed"],
|
46
|
+
["sm:text-lg", "md:text-xl", "lg:text-2xl", "xl:text-3xl", "2xl:text-4xl", "sm:w-1/2", "md:w-2/3", "lg:w-3/4",
|
47
|
+
"xl:w-full", "2xl:max-w-screen-xl", "sm:p-4", "md:p-6", "lg:p-8", "xl:p-10"],
|
48
|
+
["dark:bg-gray-800", "dark:text-white", "dark:border-gray-600", "dark:hover:bg-gray-700", "dark:focus:ring-blue-800",
|
49
|
+
"bg-white", "text-black", "border-gray-200", "hover:bg-gray-100"],
|
50
|
+
["group-hover:scale-110", "group-hover:rotate-6", "group-focus:outline-none", "group-active:scale-95",
|
51
|
+
"peer-checked:bg-blue-500", "peer-checked:text-white", "peer-disabled:opacity-50"],
|
52
|
+
["animate-spin", "animate-pulse", "animate-bounce", "animate-ping", "motion-safe:animate-spin",
|
53
|
+
"motion-reduce:animate-none", "transition-all", "duration-300", "ease-in-out", "delay-150"],
|
54
|
+
["space-x-4", "space-x-reverse", "space-y-6", "space-y-reverse", "gap-x-4", "gap-y-6", "place-items-center",
|
55
|
+
"place-content-center", "place-self-center", "content-center"],
|
56
|
+
%w[from-blue-500 to-purple-500 via-pink-500 bg-gradient-to-r bg-gradient-to-br text-transparent
|
57
|
+
bg-clip-text bg-origin-border bg-no-repeat bg-cover],
|
58
|
+
%w[columns-2 columns-3 break-inside-avoid break-after-column aspect-square aspect-video
|
59
|
+
object-right-top object-left-bottom isolation-auto mix-blend-multiply],
|
60
|
+
["first:pt-0", "last:pb-0", "odd:bg-gray-50", "even:bg-white", "first-letter:text-7xl", "first-line:uppercase",
|
61
|
+
"selection:bg-yellow-200", "selection:text-black"],
|
62
|
+
["[mask-type:luminance]", "[mask-type:alpha]", "[transform-style:preserve-3d]", "[clip-path:circle(50%)]",
|
63
|
+
"[-webkit-text-stroke:2px]", "[text-align-last:justify]"],
|
64
|
+
%w[will-change-scroll will-change-transform scroll-smooth scroll-mt-2 scroll-pb-4 overscroll-contain
|
65
|
+
touch-pan-right touch-manipulation],
|
66
|
+
%w[hyphens-auto hyphens-manual text-underline-offset-2 text-decoration-thickness-2 indent-8 indent-16
|
67
|
+
vertical-align-sub vertical-align-super]
|
48
68
|
]
|
49
69
|
|
50
|
-
require 'benchmark'
|
51
|
-
require 'tail_merge'
|
52
|
-
require 'tailwind_merge'
|
53
|
-
|
54
70
|
# Pre-initialize cached mergers
|
55
71
|
cached_merger = TailwindMerge::Merger.new
|
56
72
|
|
data/ext/tail_merge/Cargo.toml
CHANGED
data/ext/tail_merge/src/lib.rs
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
use magnus::{
|
2
|
-
|
2
|
+
function, prelude::*, Error, RArray, RHash, RString, Ruby, Value,
|
3
3
|
};
|
4
4
|
use rustui_merge::merge::tw_merge;
|
5
5
|
|
@@ -14,13 +14,13 @@ fn merge_tailwind_classes(args: &[Value]) -> Result<RString, Error> {
|
|
14
14
|
|
15
15
|
// ---------- 2. collect class tokens ------------------------------------
|
16
16
|
let mut tokens = Vec::<String>::new();
|
17
|
-
let is_string_input = matches!(args[0].clone()
|
18
|
-
match args[0].clone()
|
17
|
+
let is_string_input = matches!(RString::try_convert(args[0].clone()), Ok(_));
|
18
|
+
match RString::try_convert(args[0].clone()) {
|
19
19
|
Ok(rstr) => tokens.extend(rstr.to_string()?.split_whitespace().map(str::to_owned)),
|
20
20
|
Err(_) => {
|
21
|
-
let rarray: RArray = args[0]
|
22
|
-
for v in rarray.
|
23
|
-
let s: RString =
|
21
|
+
let rarray: RArray = RArray::try_convert(args[0])?;
|
22
|
+
for v in rarray.into_iter() {
|
23
|
+
let s: RString = RString::try_convert(v)?;
|
24
24
|
tokens.push(s.to_string()?);
|
25
25
|
}
|
26
26
|
}
|
@@ -28,7 +28,7 @@ fn merge_tailwind_classes(args: &[Value]) -> Result<RString, Error> {
|
|
28
28
|
|
29
29
|
// Early returns for simple cases
|
30
30
|
if is_string_input {
|
31
|
-
let rstr: RString = args[0].clone()
|
31
|
+
let rstr: RString = RString::try_convert(args[0].clone())?;
|
32
32
|
let s = rstr.to_string()?;
|
33
33
|
if !s.contains(' ') {
|
34
34
|
// Single class string, return as-is
|
@@ -49,15 +49,15 @@ fn merge_tailwind_classes(args: &[Value]) -> Result<RString, Error> {
|
|
49
49
|
let mut separator: Option<String> = None;
|
50
50
|
|
51
51
|
if args.len() == 2 {
|
52
|
-
let rhash: RHash = args[1]
|
52
|
+
let rhash: RHash = RHash::try_convert(args[1])?;
|
53
53
|
let ruby = Ruby::get().unwrap();
|
54
54
|
|
55
55
|
if let Some(v) = rhash.get(ruby.to_symbol("prefix")) {
|
56
|
-
let s: RString =
|
56
|
+
let s: RString = RString::try_convert(v)?;
|
57
57
|
prefix = Some(s.to_string()?);
|
58
58
|
}
|
59
59
|
if let Some(v) = rhash.get(ruby.to_symbol("separator")) {
|
60
|
-
let s: RString =
|
60
|
+
let s: RString = RString::try_convert(v)?;
|
61
61
|
separator = Some(s.to_string()?);
|
62
62
|
}
|
63
63
|
}
|
data/lib/tail_merge/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tail_merge
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Achilleas Buisman
|
@@ -15,14 +15,14 @@ dependencies:
|
|
15
15
|
requirements:
|
16
16
|
- - "~>"
|
17
17
|
- !ruby/object:Gem::Version
|
18
|
-
version: 0.9.
|
18
|
+
version: 0.9.115
|
19
19
|
type: :runtime
|
20
20
|
prerelease: false
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
22
22
|
requirements:
|
23
23
|
- - "~>"
|
24
24
|
- !ruby/object:Gem::Version
|
25
|
-
version: 0.9.
|
25
|
+
version: 0.9.115
|
26
26
|
description: Merge Tailwind CSS classes
|
27
27
|
email:
|
28
28
|
- accounts@abuisman.nl
|
@@ -44,7 +44,8 @@ files:
|
|
44
44
|
- lib/tail_merge/version.rb
|
45
45
|
- sig/tail_merge.rbs
|
46
46
|
homepage: https://github.com/abuisman/tail_merge
|
47
|
-
licenses:
|
47
|
+
licenses:
|
48
|
+
- MIT
|
48
49
|
metadata:
|
49
50
|
allowed_push_host: https://rubygems.org
|
50
51
|
homepage_uri: https://github.com/abuisman/tail_merge
|