ignition_kit 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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: fd56cce5ff7f4bced7c6504a6bfe6a43130e1608d406680a282b6bd031bf6eae
4
+ data.tar.gz: e40250e2b350894a16fe8fc10436ec21c08b951540338d202cefd3cf3cd4d6d0
5
+ SHA512:
6
+ metadata.gz: 6421203e897c0a774dc13eef0b6dccb8da2fb3ed0759ca3e0a0d9bda28f48732444c61247400cae255aa52f969502997a1fc94ef3fa9db4644a08b4c05ac4c7a
7
+ data.tar.gz: df19c4b986c89f6f30b663374e654ce25a28a5fae4fe0fc64820ce5f2f4824f9efd4b829b5c6b537c6452e72ebb136104372fb3662e7f6d6a96a66855489714d
data/MIT-LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright 2024 Mikkel Malmberg
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,28 @@
1
+ # IgnitionKit
2
+ Short description and motivation.
3
+
4
+ ## Usage
5
+ How to use my plugin.
6
+
7
+ ## Installation
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem "ignition_kit"
12
+ ```
13
+
14
+ And then execute:
15
+ ```bash
16
+ $ bundle
17
+ ```
18
+
19
+ Or install it yourself as:
20
+ ```bash
21
+ $ gem install ignition_kit
22
+ ```
23
+
24
+ ## Contributing
25
+ Contribution directions go here.
26
+
27
+ ## License
28
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
data/Rakefile ADDED
@@ -0,0 +1,8 @@
1
+ require "bundler/setup"
2
+
3
+ APP_RAKEFILE = File.expand_path("test/dummy/Rakefile", __dir__)
4
+ load "rails/tasks/engine.rake"
5
+
6
+ load "rails/tasks/statistics.rake"
7
+
8
+ require "bundler/gem_tasks"
@@ -0,0 +1,768 @@
1
+ /*! tailwindcss v4.0.0-alpha.26 | MIT License | https://tailwindcss.com */
2
+ @layer theme, base, components, utilities;
3
+ @layer theme {
4
+ :root {
5
+ --default-transition-duration: 150ms;
6
+ --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
7
+ --default-font-family: var(--font-family-sans);
8
+ --default-font-feature-settings: var(
9
+ --font-family-sans--font-feature-settings
10
+ );
11
+ --default-font-variation-settings: var(
12
+ --font-family-sans--font-variation-settings
13
+ );
14
+ --default-mono-font-family: var(--font-family-mono);
15
+ --default-mono-font-feature-settings: var(
16
+ --font-family-mono--font-feature-settings
17
+ );
18
+ --default-mono-font-variation-settings: var(
19
+ --font-family-mono--font-variation-settings
20
+ );
21
+ --breakpoint-sm: 40rem;
22
+ --breakpoint-md: 48rem;
23
+ --breakpoint-lg: 64rem;
24
+ --breakpoint-xl: 80rem;
25
+ --breakpoint-2xl: 96rem;
26
+ --color-black: #000;
27
+ --color-white: #fff;
28
+ --color-slate-50: #f8fafc;
29
+ --color-slate-100: #f1f5f9;
30
+ --color-slate-200: #e2e8f0;
31
+ --color-slate-300: #cbd5e1;
32
+ --color-slate-400: #94a3b8;
33
+ --color-slate-500: #64748b;
34
+ --color-slate-600: #475569;
35
+ --color-slate-700: #334155;
36
+ --color-slate-800: #1e293b;
37
+ --color-slate-900: #0f172a;
38
+ --color-slate-950: #020617;
39
+ --color-gray-50: #f9fafb;
40
+ --color-gray-100: #f3f4f6;
41
+ --color-gray-200: #e5e7eb;
42
+ --color-gray-300: #d1d5db;
43
+ --color-gray-400: #9ca3af;
44
+ --color-gray-500: #6b7280;
45
+ --color-gray-600: #4b5563;
46
+ --color-gray-700: #374151;
47
+ --color-gray-800: #1f2937;
48
+ --color-gray-900: #111827;
49
+ --color-gray-950: #030712;
50
+ --color-zinc-50: #fafafa;
51
+ --color-zinc-100: #f4f4f5;
52
+ --color-zinc-200: #e4e4e7;
53
+ --color-zinc-300: #d4d4d8;
54
+ --color-zinc-400: #a1a1aa;
55
+ --color-zinc-500: #71717a;
56
+ --color-zinc-600: #52525b;
57
+ --color-zinc-700: #3f3f46;
58
+ --color-zinc-800: #27272a;
59
+ --color-zinc-900: #18181b;
60
+ --color-zinc-950: #09090b;
61
+ --color-neutral-50: #fafafa;
62
+ --color-neutral-100: #f5f5f5;
63
+ --color-neutral-200: #e5e5e5;
64
+ --color-neutral-300: #d4d4d4;
65
+ --color-neutral-400: #a3a3a3;
66
+ --color-neutral-500: #737373;
67
+ --color-neutral-600: #525252;
68
+ --color-neutral-700: #404040;
69
+ --color-neutral-800: #262626;
70
+ --color-neutral-900: #171717;
71
+ --color-neutral-950: #0a0a0a;
72
+ --color-stone-50: #fafaf9;
73
+ --color-stone-100: #f5f5f4;
74
+ --color-stone-200: #e7e5e4;
75
+ --color-stone-300: #d6d3d1;
76
+ --color-stone-400: #a8a29e;
77
+ --color-stone-500: #78716c;
78
+ --color-stone-600: #57534e;
79
+ --color-stone-700: #44403c;
80
+ --color-stone-800: #292524;
81
+ --color-stone-900: #1c1917;
82
+ --color-stone-950: #0c0a09;
83
+ --color-red-50: #fef2f2;
84
+ --color-red-100: #fee2e2;
85
+ --color-red-200: #fecaca;
86
+ --color-red-300: #fca5a5;
87
+ --color-red-400: #f87171;
88
+ --color-red-500: #ef4444;
89
+ --color-red-600: #dc2626;
90
+ --color-red-700: #b91c1c;
91
+ --color-red-800: #991b1b;
92
+ --color-red-900: #7f1d1d;
93
+ --color-red-950: #450a0a;
94
+ --color-orange-50: #fff7ed;
95
+ --color-orange-100: #ffedd5;
96
+ --color-orange-200: #fed7aa;
97
+ --color-orange-300: #fdba74;
98
+ --color-orange-400: #fb923c;
99
+ --color-orange-500: #f97316;
100
+ --color-orange-600: #ea580c;
101
+ --color-orange-700: #c2410c;
102
+ --color-orange-800: #9a3412;
103
+ --color-orange-900: #7c2d12;
104
+ --color-orange-950: #431407;
105
+ --color-amber-50: #fffbeb;
106
+ --color-amber-100: #fef3c7;
107
+ --color-amber-200: #fde68a;
108
+ --color-amber-300: #fcd34d;
109
+ --color-amber-400: #fbbf24;
110
+ --color-amber-500: #f59e0b;
111
+ --color-amber-600: #d97706;
112
+ --color-amber-700: #b45309;
113
+ --color-amber-800: #92400e;
114
+ --color-amber-900: #78350f;
115
+ --color-amber-950: #451a03;
116
+ --color-yellow-50: #fefce8;
117
+ --color-yellow-100: #fef9c3;
118
+ --color-yellow-200: #fef08a;
119
+ --color-yellow-300: #fde047;
120
+ --color-yellow-400: #facc15;
121
+ --color-yellow-500: #eab308;
122
+ --color-yellow-600: #ca8a04;
123
+ --color-yellow-700: #a16207;
124
+ --color-yellow-800: #854d0e;
125
+ --color-yellow-900: #713f12;
126
+ --color-yellow-950: #422006;
127
+ --color-lime-50: #f7fee7;
128
+ --color-lime-100: #ecfccb;
129
+ --color-lime-200: #d9f99d;
130
+ --color-lime-300: #bef264;
131
+ --color-lime-400: #a3e635;
132
+ --color-lime-500: #84cc16;
133
+ --color-lime-600: #65a30d;
134
+ --color-lime-700: #4d7c0f;
135
+ --color-lime-800: #3f6212;
136
+ --color-lime-900: #365314;
137
+ --color-lime-950: #1a2e05;
138
+ --color-green-50: #f0fdf4;
139
+ --color-green-100: #dcfce7;
140
+ --color-green-200: #bbf7d0;
141
+ --color-green-300: #86efac;
142
+ --color-green-400: #4ade80;
143
+ --color-green-500: #22c55e;
144
+ --color-green-600: #16a34a;
145
+ --color-green-700: #15803d;
146
+ --color-green-800: #166534;
147
+ --color-green-900: #14532d;
148
+ --color-green-950: #052e16;
149
+ --color-emerald-50: #ecfdf5;
150
+ --color-emerald-100: #d1fae5;
151
+ --color-emerald-200: #a7f3d0;
152
+ --color-emerald-300: #6ee7b7;
153
+ --color-emerald-400: #34d399;
154
+ --color-emerald-500: #10b981;
155
+ --color-emerald-600: #059669;
156
+ --color-emerald-700: #047857;
157
+ --color-emerald-800: #065f46;
158
+ --color-emerald-900: #064e3b;
159
+ --color-emerald-950: #022c22;
160
+ --color-teal-50: #f0fdfa;
161
+ --color-teal-100: #ccfbf1;
162
+ --color-teal-200: #99f6e4;
163
+ --color-teal-300: #5eead4;
164
+ --color-teal-400: #2dd4bf;
165
+ --color-teal-500: #14b8a6;
166
+ --color-teal-600: #0d9488;
167
+ --color-teal-700: #0f766e;
168
+ --color-teal-800: #115e59;
169
+ --color-teal-900: #134e4a;
170
+ --color-teal-950: #042f2e;
171
+ --color-cyan-50: #ecfeff;
172
+ --color-cyan-100: #cffafe;
173
+ --color-cyan-200: #a5f3fc;
174
+ --color-cyan-300: #67e8f9;
175
+ --color-cyan-400: #22d3ee;
176
+ --color-cyan-500: #06b6d4;
177
+ --color-cyan-600: #0891b2;
178
+ --color-cyan-700: #0e7490;
179
+ --color-cyan-800: #155e75;
180
+ --color-cyan-900: #164e63;
181
+ --color-cyan-950: #083344;
182
+ --color-sky-50: #f0f9ff;
183
+ --color-sky-100: #e0f2fe;
184
+ --color-sky-200: #bae6fd;
185
+ --color-sky-300: #7dd3fc;
186
+ --color-sky-400: #38bdf8;
187
+ --color-sky-500: #0ea5e9;
188
+ --color-sky-600: #0284c7;
189
+ --color-sky-700: #0369a1;
190
+ --color-sky-800: #075985;
191
+ --color-sky-900: #0c4a6e;
192
+ --color-sky-950: #082f49;
193
+ --color-blue-50: #eff6ff;
194
+ --color-blue-100: #dbeafe;
195
+ --color-blue-200: #bfdbfe;
196
+ --color-blue-300: #93c5fd;
197
+ --color-blue-400: #60a5fa;
198
+ --color-blue-500: #3b82f6;
199
+ --color-blue-600: #2563eb;
200
+ --color-blue-700: #1d4ed8;
201
+ --color-blue-800: #1e40af;
202
+ --color-blue-900: #1e3a8a;
203
+ --color-blue-950: #172554;
204
+ --color-indigo-50: #eef2ff;
205
+ --color-indigo-100: #e0e7ff;
206
+ --color-indigo-200: #c7d2fe;
207
+ --color-indigo-300: #a5b4fc;
208
+ --color-indigo-400: #818cf8;
209
+ --color-indigo-500: #6366f1;
210
+ --color-indigo-600: #4f46e5;
211
+ --color-indigo-700: #4338ca;
212
+ --color-indigo-800: #3730a3;
213
+ --color-indigo-900: #312e81;
214
+ --color-indigo-950: #1e1b4b;
215
+ --color-violet-50: #f5f3ff;
216
+ --color-violet-100: #ede9fe;
217
+ --color-violet-200: #ddd6fe;
218
+ --color-violet-300: #c4b5fd;
219
+ --color-violet-400: #a78bfa;
220
+ --color-violet-500: #8b5cf6;
221
+ --color-violet-600: #7c3aed;
222
+ --color-violet-700: #6d28d9;
223
+ --color-violet-800: #5b21b6;
224
+ --color-violet-900: #4c1d95;
225
+ --color-violet-950: #2e1065;
226
+ --color-purple-50: #faf5ff;
227
+ --color-purple-100: #f3e8ff;
228
+ --color-purple-200: #e9d5ff;
229
+ --color-purple-300: #d8b4fe;
230
+ --color-purple-400: #c084fc;
231
+ --color-purple-500: #a855f7;
232
+ --color-purple-600: #9333ea;
233
+ --color-purple-700: #7e22ce;
234
+ --color-purple-800: #6b21a8;
235
+ --color-purple-900: #581c87;
236
+ --color-purple-950: #3b0764;
237
+ --color-fuchsia-50: #fdf4ff;
238
+ --color-fuchsia-100: #fae8ff;
239
+ --color-fuchsia-200: #f5d0fe;
240
+ --color-fuchsia-300: #f0abfc;
241
+ --color-fuchsia-400: #e879f9;
242
+ --color-fuchsia-500: #d946ef;
243
+ --color-fuchsia-600: #c026d3;
244
+ --color-fuchsia-700: #a21caf;
245
+ --color-fuchsia-800: #86198f;
246
+ --color-fuchsia-900: #701a75;
247
+ --color-fuchsia-950: #4a044e;
248
+ --color-pink-50: #fdf2f8;
249
+ --color-pink-100: #fce7f3;
250
+ --color-pink-200: #fbcfe8;
251
+ --color-pink-300: #f9a8d4;
252
+ --color-pink-400: #f472b6;
253
+ --color-pink-500: #ec4899;
254
+ --color-pink-600: #db2777;
255
+ --color-pink-700: #be185d;
256
+ --color-pink-800: #9d174d;
257
+ --color-pink-900: #831843;
258
+ --color-pink-950: #500724;
259
+ --color-rose-50: #fff1f2;
260
+ --color-rose-100: #ffe4e6;
261
+ --color-rose-200: #fecdd3;
262
+ --color-rose-300: #fda4af;
263
+ --color-rose-400: #fb7185;
264
+ --color-rose-500: #f43f5e;
265
+ --color-rose-600: #e11d48;
266
+ --color-rose-700: #be123c;
267
+ --color-rose-800: #9f1239;
268
+ --color-rose-900: #881337;
269
+ --color-rose-950: #4c0519;
270
+ --animate-spin: spin 1s linear infinite;
271
+ --animate-ping: ping 1s cubic-bezier(0, 0, 0.2, 1) infinite;
272
+ --animate-pulse: pulse 2s cubic-bezier(0.4, 0, 0.6, 1) infinite;
273
+ --animate-bounce: bounce 1s infinite;
274
+ --blur: 8px;
275
+ --blur-sm: 4px;
276
+ --blur-md: 12px;
277
+ --blur-lg: 16px;
278
+ --blur-xl: 24px;
279
+ --blur-2xl: 40px;
280
+ --blur-3xl: 64px;
281
+ --radius: 0.25rem;
282
+ --radius-sm: 0.125rem;
283
+ --radius-md: 0.375rem;
284
+ --radius-lg: 0.5rem;
285
+ --radius-xl: 0.75rem;
286
+ --radius-2xl: 1rem;
287
+ --radius-3xl: 1.5rem;
288
+ --radius-4xl: 2rem;
289
+ --shadow: 0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1);
290
+ --shadow-xs: 0 1px rgb(0 0 0 / 0.05);
291
+ --shadow-sm: 0 1px 2px 0 rgb(0 0 0 / 0.05);
292
+ --shadow-md: 0 4px 6px -1px rgb(0 0 0 / 0.1),
293
+ 0 2px 4px -2px rgb(0 0 0 / 0.1);
294
+ --shadow-lg: 0 10px 15px -3px rgb(0 0 0 / 0.1),
295
+ 0 4px 6px -4px rgb(0 0 0 / 0.1);
296
+ --shadow-xl: 0 20px 25px -5px rgb(0 0 0 / 0.1),
297
+ 0 8px 10px -6px rgb(0 0 0 / 0.1);
298
+ --shadow-2xl: 0 25px 50px -12px rgb(0 0 0 / 0.25);
299
+ --shadow-inner: inset 0 2px 4px 0 rgb(0 0 0 / 0.05);
300
+ --inset-shadow-xs: inset 0 1px rgb(0 0 0 / 0.05);
301
+ --inset-shadow-sm: inset 0 1px 1px rgb(0 0 0 / 0.05);
302
+ --inset-shadow: inset 0 2px 4px rgb(0 0 0 / 0.05);
303
+ --drop-shadow: 0 1px 2px rgb(0 0 0 / 0.1), 0 1px 1px rgb(0 0 0 / 0.06);
304
+ --drop-shadow-sm: 0 1px 1px rgb(0 0 0 / 0.05);
305
+ --drop-shadow-md: 0 4px 3px rgb(0 0 0 / 0.07), 0 2px 2px rgb(0 0 0 / 0.06);
306
+ --drop-shadow-lg: 0 10px 8px rgb(0 0 0 / 0.04), 0 4px 3px rgb(0 0 0 / 0.1);
307
+ --drop-shadow-xl: 0 20px 13px rgb(0 0 0 / 0.03), 0 8px 5px rgb(0 0 0 / 0.08);
308
+ --drop-shadow-2xl: 0 25px 25px rgb(0 0 0 / 0.15);
309
+ --drop-shadow-none: 0 0 #0000;
310
+ --spacing-px: 1px;
311
+ --spacing-0: 0px;
312
+ --spacing-0_5: 0.125rem;
313
+ --spacing-1: 0.25rem;
314
+ --spacing-1_5: 0.375rem;
315
+ --spacing-2: 0.5rem;
316
+ --spacing-2_5: 0.625rem;
317
+ --spacing-3: 0.75rem;
318
+ --spacing-3_5: 0.875rem;
319
+ --spacing-4: 1rem;
320
+ --spacing-5: 1.25rem;
321
+ --spacing-6: 1.5rem;
322
+ --spacing-7: 1.75rem;
323
+ --spacing-8: 2rem;
324
+ --spacing-9: 2.25rem;
325
+ --spacing-10: 2.5rem;
326
+ --spacing-11: 2.75rem;
327
+ --spacing-12: 3rem;
328
+ --spacing-14: 3.5rem;
329
+ --spacing-16: 4rem;
330
+ --spacing-20: 5rem;
331
+ --spacing-24: 6rem;
332
+ --spacing-28: 7rem;
333
+ --spacing-32: 8rem;
334
+ --spacing-36: 9rem;
335
+ --spacing-40: 10rem;
336
+ --spacing-44: 11rem;
337
+ --spacing-48: 12rem;
338
+ --spacing-52: 13rem;
339
+ --spacing-56: 14rem;
340
+ --spacing-60: 15rem;
341
+ --spacing-64: 16rem;
342
+ --spacing-72: 18rem;
343
+ --spacing-80: 20rem;
344
+ --spacing-96: 24rem;
345
+ --width-3xs: 16rem;
346
+ --width-2xs: 18rem;
347
+ --width-xs: 20rem;
348
+ --width-sm: 24rem;
349
+ --width-md: 28rem;
350
+ --width-lg: 32rem;
351
+ --width-xl: 36rem;
352
+ --width-2xl: 42rem;
353
+ --width-3xl: 48rem;
354
+ --width-4xl: 56rem;
355
+ --width-5xl: 64rem;
356
+ --width-6xl: 72rem;
357
+ --width-7xl: 80rem;
358
+ --width-prose: 65ch;
359
+ --font-family-sans: ui-sans-serif, system-ui, sans-serif,
360
+ "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol",
361
+ "Noto Color Emoji";
362
+ --font-family-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times,
363
+ serif;
364
+ --font-family-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas,
365
+ "Liberation Mono", "Courier New", monospace;
366
+ --font-size-xs: 0.75rem;
367
+ --font-size-xs--line-height: 1rem;
368
+ --font-size-sm: 0.875rem;
369
+ --font-size-sm--line-height: 1.25rem;
370
+ --font-size-base: 1rem;
371
+ --font-size-base--line-height: 1.5rem;
372
+ --font-size-lg: 1.125rem;
373
+ --font-size-lg--line-height: 1.75rem;
374
+ --font-size-xl: 1.25rem;
375
+ --font-size-xl--line-height: 1.75rem;
376
+ --font-size-2xl: 1.5rem;
377
+ --font-size-2xl--line-height: 2rem;
378
+ --font-size-3xl: 1.875rem;
379
+ --font-size-3xl--line-height: 2.25rem;
380
+ --font-size-4xl: 2.25rem;
381
+ --font-size-4xl--line-height: 2.5rem;
382
+ --font-size-5xl: 3rem;
383
+ --font-size-5xl--line-height: 1;
384
+ --font-size-6xl: 3.75rem;
385
+ --font-size-6xl--line-height: 1;
386
+ --font-size-7xl: 4.5rem;
387
+ --font-size-7xl--line-height: 1;
388
+ --font-size-8xl: 6rem;
389
+ --font-size-8xl--line-height: 1;
390
+ --font-size-9xl: 8rem;
391
+ --font-size-9xl--line-height: 1;
392
+ --letter-spacing-tighter: -0.05em;
393
+ --letter-spacing-tight: -0.025em;
394
+ --letter-spacing-normal: 0em;
395
+ --letter-spacing-wide: 0.025em;
396
+ --letter-spacing-wider: 0.05em;
397
+ --letter-spacing-widest: 0.1em;
398
+ --line-height-none: 1;
399
+ --line-height-tight: 1.25;
400
+ --line-height-snug: 1.375;
401
+ --line-height-normal: 1.5;
402
+ --line-height-relaxed: 1.625;
403
+ --line-height-loose: 2;
404
+ --line-height-3: 0.75rem;
405
+ --line-height-4: 1rem;
406
+ --line-height-5: 1.25rem;
407
+ --line-height-6: 1.5rem;
408
+ --line-height-7: 1.75rem;
409
+ --line-height-8: 2rem;
410
+ --line-height-9: 2.25rem;
411
+ --line-height-10: 2.5rem;
412
+ --perspective-dramatic: 100px;
413
+ --perspective-near: 300px;
414
+ --perspective-normal: 500px;
415
+ --perspective-midrange: 800px;
416
+ --perspective-distant: 1200px;
417
+ --transition-timing-function-linear: linear;
418
+ --transition-timing-function-in: cubic-bezier(0.4, 0, 1, 1);
419
+ --transition-timing-function-out: cubic-bezier(0, 0, 0.2, 1);
420
+ --transition-timing-function-in-out: cubic-bezier(0.4, 0, 0.2, 1);
421
+ --color-background: var(--color-white);
422
+ --color-foreground: var(--color-zinc-950);
423
+ --color-border: var(--color-zinc-200);
424
+ --color-ring: var(--color-blue-400);
425
+ --color-primary: var(--color-zinc-900);
426
+ --color-primary-foreground: var(--color-blue-700);
427
+ --color-destructive: var(--color-red-500);
428
+ --color-destructive-foreground: var(--color-red-700);
429
+ }
430
+ }
431
+ @layer base {
432
+ *, ::after, ::before, ::backdrop, ::file-selector-button {
433
+ box-sizing: border-box;
434
+ margin: 0;
435
+ padding: 0;
436
+ border: 0 solid;
437
+ }
438
+ html, :host {
439
+ line-height: 1.5;
440
+ -webkit-text-size-adjust: 100%;
441
+ tab-size: 4;
442
+ font-family: var( --default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji" );
443
+ font-feature-settings: var(--default-font-feature-settings, normal);
444
+ font-variation-settings: var( --default-font-variation-settings, normal );
445
+ -webkit-tap-highlight-color: transparent;
446
+ }
447
+ body {
448
+ line-height: inherit;
449
+ }
450
+ hr {
451
+ height: 0;
452
+ color: inherit;
453
+ border-top-width: 1px;
454
+ }
455
+ abbr:where([title]) {
456
+ -webkit-text-decoration: underline dotted;
457
+ text-decoration: underline dotted;
458
+ }
459
+ h1, h2, h3, h4, h5, h6 {
460
+ font-size: inherit;
461
+ font-weight: inherit;
462
+ }
463
+ a {
464
+ color: inherit;
465
+ -webkit-text-decoration: inherit;
466
+ text-decoration: inherit;
467
+ }
468
+ b, strong {
469
+ font-weight: bolder;
470
+ }
471
+ code, kbd, samp, pre {
472
+ font-family: var( --default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace );
473
+ font-feature-settings: var( --default-mono-font-feature-settings, normal );
474
+ font-variation-settings: var( --default-mono-font-variation-settings, normal );
475
+ font-size: 1em;
476
+ }
477
+ small {
478
+ font-size: 80%;
479
+ }
480
+ sub, sup {
481
+ font-size: 75%;
482
+ line-height: 0;
483
+ position: relative;
484
+ vertical-align: baseline;
485
+ }
486
+ sub {
487
+ bottom: -0.25em;
488
+ }
489
+ sup {
490
+ top: -0.5em;
491
+ }
492
+ table {
493
+ text-indent: 0;
494
+ border-color: inherit;
495
+ border-collapse: collapse;
496
+ }
497
+ button, input, optgroup, select, textarea, ::file-selector-button {
498
+ font: inherit;
499
+ font-feature-settings: inherit;
500
+ font-variation-settings: inherit;
501
+ letter-spacing: inherit;
502
+ color: inherit;
503
+ background: transparent;
504
+ }
505
+ input:where(:not([type="button"], [type="reset"], [type="submit"])), select, textarea {
506
+ border: 1px solid;
507
+ }
508
+ button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button {
509
+ appearance: button;
510
+ }
511
+ :-moz-focusring {
512
+ outline: auto;
513
+ }
514
+ :-moz-ui-invalid {
515
+ box-shadow: none;
516
+ }
517
+ progress {
518
+ vertical-align: baseline;
519
+ }
520
+ ::-webkit-inner-spin-button, ::-webkit-outer-spin-button {
521
+ height: auto;
522
+ }
523
+ ::-webkit-search-decoration {
524
+ -webkit-appearance: none;
525
+ }
526
+ summary {
527
+ display: list-item;
528
+ }
529
+ ol, ul, menu {
530
+ list-style: none;
531
+ }
532
+ textarea {
533
+ resize: vertical;
534
+ }
535
+ ::placeholder {
536
+ opacity: 1;
537
+ color: color-mix(in srgb, currentColor 50%, transparent);
538
+ }
539
+ img, svg, video, canvas, audio, iframe, embed, object {
540
+ display: block;
541
+ vertical-align: middle;
542
+ }
543
+ img, video {
544
+ max-width: 100%;
545
+ height: auto;
546
+ }
547
+ [hidden] {
548
+ display: none!important;
549
+ }
550
+ }
551
+ @layer utilities {
552
+ .block {
553
+ display: block;
554
+ }
555
+ .flex {
556
+ display: flex;
557
+ }
558
+ .grid {
559
+ display: grid;
560
+ }
561
+ .inline {
562
+ display: inline;
563
+ }
564
+ .inline-flex {
565
+ display: inline-flex;
566
+ }
567
+ .items-center {
568
+ align-items: center;
569
+ }
570
+ .justify-center {
571
+ justify-content: center;
572
+ }
573
+ .gap-2 {
574
+ gap: var(--spacing-2, 0.5rem);
575
+ }
576
+ .rounded-md {
577
+ border-radius: var(--radius-md, 0.375rem);
578
+ }
579
+ .border {
580
+ border-style: var(--tw-border-style);
581
+ border-width: 1px;
582
+ }
583
+ .border-border {
584
+ border-color: var(--color-border, var(--color-zinc-200));
585
+ }
586
+ .border-destructive {
587
+ border-color: var(--color-destructive, var(--color-red-500));
588
+ }
589
+ .border-primary {
590
+ border-color: var(--color-primary, var(--color-zinc-900));
591
+ }
592
+ .border-transparent {
593
+ border-color: transparent;
594
+ }
595
+ .border-b-zinc-300 {
596
+ border-bottom-color: var(--color-zinc-300, #d4d4d8);
597
+ }
598
+ .bg-background {
599
+ background-color: var(--color-background, var(--color-white));
600
+ }
601
+ .bg-destructive {
602
+ background-color: var(--color-destructive, var(--color-red-500));
603
+ }
604
+ .bg-primary {
605
+ background-color: var(--color-primary, var(--color-zinc-900));
606
+ }
607
+ .bg-transparent {
608
+ background-color: transparent;
609
+ }
610
+ .p-8 {
611
+ padding: var(--spacing-8, 2rem);
612
+ }
613
+ .py-1\.5 {
614
+ padding-top: var(--spacing-1_5, 0.375rem);
615
+ padding-bottom: var(--spacing-1_5, 0.375rem);
616
+ }
617
+ .px-4 {
618
+ padding-left: var(--spacing-4, 1rem);
619
+ padding-right: var(--spacing-4, 1rem);
620
+ }
621
+ .font-medium {
622
+ --tw-font-weight: 500;
623
+ font-weight: 500;
624
+ }
625
+ .italic {
626
+ font-style: italic;
627
+ }
628
+ .text-foreground {
629
+ color: var(--color-foreground, var(--color-zinc-950));
630
+ }
631
+ .text-white {
632
+ color: var(--color-white, #fff);
633
+ }
634
+ .underline {
635
+ text-decoration-line: underline;
636
+ }
637
+ .antialiased {
638
+ -webkit-font-smoothing: antialiased;
639
+ -moz-osx-font-smoothing: grayscale;
640
+ }
641
+ .focus\:ring-\[3px\] {
642
+ &:focus {
643
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(3px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentColor);
644
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
645
+ }
646
+ }
647
+ .focus\:ring-ring {
648
+ &:focus {
649
+ --tw-ring-color: var(--color-ring, var(--color-blue-400));
650
+ }
651
+ }
652
+ .focus\:outline-none {
653
+ &:focus {
654
+ outline: 2px solid transparent;
655
+ outline-offset: 2px;
656
+ }
657
+ }
658
+ }
659
+ @supports (-moz-orient: inline) {
660
+ @layer base {
661
+ *, ::before, ::after, ::backdrop {
662
+ --tw-border-style: solid;
663
+ --tw-font-weight: initial;
664
+ --tw-shadow: 0 0 #0000;
665
+ --tw-shadow-color: initial;
666
+ --tw-inset-shadow: 0 0 #0000;
667
+ --tw-inset-shadow-color: initial;
668
+ --tw-ring-color: initial;
669
+ --tw-ring-shadow: 0 0 #0000;
670
+ --tw-inset-ring-color: initial;
671
+ --tw-inset-ring-shadow: 0 0 #0000;
672
+ --tw-ring-inset: initial;
673
+ --tw-ring-offset-width: 0px;
674
+ --tw-ring-offset-color: #fff;
675
+ --tw-ring-offset-shadow: 0 0 #0000;
676
+ }
677
+ }
678
+ }
679
+ @keyframes spin {
680
+ to {
681
+ transform: rotate(360deg);
682
+ }
683
+ }
684
+ @keyframes ping {
685
+ 75%, 100% {
686
+ transform: scale(2);
687
+ opacity: 0;
688
+ }
689
+ }
690
+ @keyframes pulse {
691
+ 50% {
692
+ opacity: 0.5;
693
+ }
694
+ }
695
+ @keyframes bounce {
696
+ 0%, 100% {
697
+ transform: translateY(-25%);
698
+ animation-timing-function: cubic-bezier(0.8, 0, 1, 1);
699
+ }
700
+ 50% {
701
+ transform: none;
702
+ animation-timing-function: cubic-bezier(0, 0, 0.2, 1);
703
+ }
704
+ }
705
+ @property --tw-border-style {
706
+ syntax: "<custom-ident>";
707
+ inherits: false;
708
+ initial-value: solid;
709
+ }
710
+ @property --tw-font-weight {
711
+ syntax: "*";
712
+ inherits: false;
713
+ }
714
+ @property --tw-shadow {
715
+ syntax: "*";
716
+ inherits: false;
717
+ initial-value: 0 0 #0000;
718
+ }
719
+ @property --tw-shadow-color {
720
+ syntax: "*";
721
+ inherits: false;
722
+ }
723
+ @property --tw-inset-shadow {
724
+ syntax: "*";
725
+ inherits: false;
726
+ initial-value: 0 0 #0000;
727
+ }
728
+ @property --tw-inset-shadow-color {
729
+ syntax: "*";
730
+ inherits: false;
731
+ }
732
+ @property --tw-ring-color {
733
+ syntax: "*";
734
+ inherits: false;
735
+ }
736
+ @property --tw-ring-shadow {
737
+ syntax: "*";
738
+ inherits: false;
739
+ initial-value: 0 0 #0000;
740
+ }
741
+ @property --tw-inset-ring-color {
742
+ syntax: "*";
743
+ inherits: false;
744
+ }
745
+ @property --tw-inset-ring-shadow {
746
+ syntax: "*";
747
+ inherits: false;
748
+ initial-value: 0 0 #0000;
749
+ }
750
+ @property --tw-ring-inset {
751
+ syntax: "*";
752
+ inherits: false;
753
+ }
754
+ @property --tw-ring-offset-width {
755
+ syntax: "<length>";
756
+ inherits: false;
757
+ initial-value: 0px;
758
+ }
759
+ @property --tw-ring-offset-color {
760
+ syntax: "*";
761
+ inherits: false;
762
+ initial-value: #fff;
763
+ }
764
+ @property --tw-ring-offset-shadow {
765
+ syntax: "*";
766
+ inherits: false;
767
+ initial-value: 0 0 #0000;
768
+ }
@@ -0,0 +1,15 @@
1
+ @import "tailwindcss";
2
+
3
+ @source "./app/**/*.rb";
4
+
5
+ @theme {
6
+ --color-background: var(--color-white);
7
+ --color-foreground: var(--color-zinc-950);
8
+ --color-border: var(--color-zinc-200);
9
+ --color-ring: var(--color-blue-400);
10
+
11
+ --color-primary: var(--color-zinc-900);
12
+ --color-primary-foreground: var(--color-blue-700);
13
+ --color-destructive: var(--color-red-500);
14
+ --color-destructive-foreground: var(--color-red-700);
15
+ }
@@ -0,0 +1,40 @@
1
+ module IgnitionKit
2
+ class Button < Component
3
+ BASE = [
4
+ [
5
+ "inline-flex items-center justify-center rounded-md border",
6
+ "focus:outline-none focus:ring-[3px] focus:ring-ring"
7
+ ]
8
+ ].flatten.freeze
9
+
10
+ VARIANTS = {
11
+ default: ["bg-background text-foreground border-border border-b-zinc-300"],
12
+ primary: ["bg-primary text-white border-primary"],
13
+ destructive: ["bg-destructive text-white border-destructive"],
14
+ ghost: ["bg-transparent text-foreground border-transparent"]
15
+ }.freeze
16
+
17
+ SIZES = {
18
+ base: "px-4 py-1.5 font-medium"
19
+ }
20
+
21
+ def initialize(text = nil, variant: :default, size: :base, href: nil, **options)
22
+ super(**options)
23
+ @text = text || yield
24
+ @href = href
25
+ @classes = tw.merge([BASE, VARIANTS[variant], SIZES[size], options[:class]])
26
+ end
27
+
28
+ def render
29
+ if @href
30
+ tag.a(href: @href, class: @classes) do
31
+ tag.span(@text)
32
+ end
33
+ else
34
+ tag.button(type: "button", class: @classes) do
35
+ tag.span(@text)
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,9 @@
1
+ module IgnitionKit
2
+ class Component
3
+ include ActionView::Helpers::TagHelper
4
+
5
+ def tw
6
+ @@tw ||= TailwindMerge::Merger.new
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,19 @@
1
+ module IgnitionKit
2
+ module Helpers
3
+ def button(*args, **kw_args, &block)
4
+ Button.new(*args, **kw_args, &block).render
5
+ end
6
+
7
+ def primary_button(*args, **kw_args, &block)
8
+ Button.new(*args, **kw_args, variant: :primary, &block).render
9
+ end
10
+
11
+ def destructive_button(*args, **kw_args, &block)
12
+ Button.new(*args, **kw_args, variant: :destructive, &block).render
13
+ end
14
+
15
+ def ghost_button(*args, **kw_args, &block)
16
+ Button.new(*args, **kw_args, variant: :ghost, &block).render
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,2 @@
1
+ module IgnitionKit
2
+ end
data/config/routes.rb ADDED
@@ -0,0 +1,2 @@
1
+ Rails.application.routes.draw do
2
+ end
@@ -0,0 +1,4 @@
1
+ module IgnitionKit
2
+ class Engine < ::Rails::Engine
3
+ end
4
+ end
@@ -0,0 +1,3 @@
1
+ module IgnitionKit
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,14 @@
1
+ require "ignition_kit/version"
2
+ require "ignition_kit/engine"
3
+
4
+ require "tailwind_merge"
5
+
6
+ module IgnitionKit
7
+ class Railtie < Rails::Railtie
8
+ initializer("ignition_kit.helpers") do
9
+ ActiveSupport.on_load(:action_view) do
10
+ include IgnitionKit::Helpers
11
+ end
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :ignition_kit do
3
+ # # Task goes here
4
+ # end
metadata ADDED
@@ -0,0 +1,90 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: ignition_kit
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jose Farias
8
+ - Mikkel Malmberg
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2024-10-07 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rails
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - ">="
19
+ - !ruby/object:Gem::Version
20
+ version: 7.0.0
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - ">="
26
+ - !ruby/object:Gem::Version
27
+ version: 7.0.0
28
+ - !ruby/object:Gem::Dependency
29
+ name: tailwind_merge
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - ">="
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ description: UI Components for Rails
43
+ email:
44
+ - jose@farias.mx
45
+ - mikkel@brnbw.com
46
+ executables: []
47
+ extensions: []
48
+ extra_rdoc_files: []
49
+ files:
50
+ - MIT-LICENSE
51
+ - README.md
52
+ - Rakefile
53
+ - app/assets/builds/ignition_kit.css
54
+ - app/assets/stylesheets/ignition_kit.css
55
+ - app/lib/ignition_kit.rb
56
+ - app/lib/ignition_kit/button.rb
57
+ - app/lib/ignition_kit/component.rb
58
+ - app/lib/ignition_kit/helpers.rb
59
+ - config/routes.rb
60
+ - lib/ignition_kit.rb
61
+ - lib/ignition_kit/engine.rb
62
+ - lib/ignition_kit/version.rb
63
+ - lib/tasks/ignition_kit_tasks.rake
64
+ homepage: https://github.com/IgnitionKit/ignition_kit
65
+ licenses:
66
+ - MIT
67
+ metadata:
68
+ homepage_uri: https://github.com/IgnitionKit/ignition_kit
69
+ source_code_uri: https://github.com/IgnitionKit/ignition_kit
70
+ changelog_uri: https://github.com/IgnitionKit/ignition_kit/releases
71
+ post_install_message:
72
+ rdoc_options: []
73
+ require_paths:
74
+ - lib
75
+ required_ruby_version: !ruby/object:Gem::Requirement
76
+ requirements:
77
+ - - ">="
78
+ - !ruby/object:Gem::Version
79
+ version: '0'
80
+ required_rubygems_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ requirements: []
86
+ rubygems_version: 3.3.22
87
+ signing_key:
88
+ specification_version: 4
89
+ summary: UI Components for Rails
90
+ test_files: []