ignition_kit 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: []