@regardio/tailwind 0.1.1

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.
package/LICENSE ADDED
@@ -0,0 +1,9 @@
1
+ # The MIT License (MIT)
2
+
3
+ Copyright © 2026 Regardio
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,150 @@
1
+ # @regardio/tailwind
2
+
3
+ > Regardio Tailwind CSS utilities and configuration
4
+
5
+ A unified Tailwind CSS toolchain for Regardio projects, providing:
6
+
7
+ - **tailwind-variants** - Type-safe component variants
8
+ - **fluid-tailwindcss** - Fluid typography and spacing
9
+ - **tailwind-merge** - Intelligent class merging
10
+ - **Shared CSS styles** - Reset, base styles, grid utilities, animations
11
+
12
+ ## Installation
13
+
14
+ ```bash
15
+ pnpm add @regardio/tailwind
16
+ ```
17
+
18
+ ### Peer Dependencies
19
+
20
+ - `tailwindcss` >= 4.0.0
21
+
22
+ ## JavaScript Utilities
23
+
24
+ ```ts
25
+ import { tv, cn, twMerge, type VariantProps } from '@regardio/tailwind/utils';
26
+
27
+ // Create component variants with tv()
28
+ const button = tv({
29
+ base: 'px-4 py-2 rounded font-medium',
30
+ variants: {
31
+ color: {
32
+ primary: 'bg-blue-500 text-white',
33
+ secondary: 'bg-gray-200 text-gray-800',
34
+ },
35
+ size: {
36
+ sm: 'text-sm',
37
+ md: 'text-base',
38
+ lg: 'text-lg',
39
+ },
40
+ },
41
+ defaultVariants: {
42
+ color: 'primary',
43
+ size: 'md',
44
+ },
45
+ });
46
+
47
+ // Use cn() for simple class merging
48
+ const className = cn('base-class', condition && 'conditional-class', 'override-class');
49
+
50
+ // Type-safe variant props
51
+ type ButtonProps = VariantProps<typeof button>;
52
+ ```
53
+
54
+ ## CSS Styles
55
+
56
+ Import all shared styles at once:
57
+
58
+ ```css
59
+ @import "@regardio/tailwind/styles";
60
+ ```
61
+
62
+ Or import individual files as needed:
63
+
64
+ ```css
65
+ /* Tailwind CSS + standard plugins (tailwindcss, tw-animate-css, fluid-tailwindcss) */
66
+ @import "@regardio/tailwind/styles/plugins.css";
67
+
68
+ /* Modern CSS reset with accessibility features */
69
+ @import "@regardio/tailwind/styles/reset.css";
70
+
71
+ /* Common base styles (typography, borders) */
72
+ @import "@regardio/tailwind/styles/base.css";
73
+
74
+ /* Grid utilities (.u-container, .u-grid) */
75
+ @import "@regardio/tailwind/styles/grid.css";
76
+
77
+ /* Animation keyframes and duration classes */
78
+ @import "@regardio/tailwind/styles/animations.css";
79
+ ```
80
+
81
+ ### Included Styles
82
+
83
+ #### Plugins (`plugins.css`)
84
+
85
+ Tailwind CSS v4 with Regardio's standard plugins:
86
+
87
+ - **tailwindcss** - Core Tailwind CSS
88
+ - **tw-animate-css** - Animation utilities
89
+ - **fluid-tailwindcss** - Fluid typography and spacing plugin
90
+
91
+ #### Reset (`reset.css`)
92
+
93
+ A modern CSS reset based on Josh Comeau's reset with Regardio enhancements:
94
+
95
+ - Box-sizing reset
96
+ - Theme color scheme support (`data-theme="light|dark"`)
97
+ - Typography wrapping (`text-wrap: pretty/balance`)
98
+ - Form element normalization
99
+ - Media element defaults
100
+ - Reduced motion accessibility
101
+
102
+ #### Base (`base.css`)
103
+
104
+ Common base styles that build on the reset:
105
+
106
+ - Font feature settings (ligatures)
107
+ - Border/outline defaults
108
+ - Typography base styles
109
+
110
+ #### Grid Utilities (`grid.css`)
111
+
112
+ Reusable layout classes:
113
+
114
+ - `.u-container` - Max-width container with horizontal padding
115
+ - `.u-grid` - 12-column CSS grid with container queries
116
+ - `.u-grid-full` - Full-width grid item (12 columns)
117
+ - `.u-grid-half` - Half-width grid item (6 columns)
118
+ - `.u-grid-third` - Third-width grid item (4 columns)
119
+ - `.u-grid-quarter` - Quarter-width grid item (3 columns)
120
+
121
+ Configure via CSS custom properties:
122
+
123
+ ```css
124
+ :root {
125
+ --spacing-grid-max: 1200px;
126
+ --spacing-grid-gutter: 1rem;
127
+ }
128
+ ```
129
+
130
+ #### Animations (`animations.css`)
131
+
132
+ Common animation keyframes and utilities:
133
+
134
+ - **Duration classes**: `.duration-2000` through `.duration-6000`
135
+ - **Fade**: `animate-fade-in`, `animate-fade-out`, `animate-fade-in-slow`, `animate-fade-out-slow`
136
+ - **Slide**: `animate-slide-in-up`, `animate-slide-in-down`, `animate-slide-in-left`, `animate-slide-in-right`
137
+ - **Scale**: `animate-scale-in`, `animate-scale-out`
138
+ - **Image**: `animate-image-fade-in`, `animate-image-fade-out` (6s duration for slideshows)
139
+
140
+ ## Why This Package?
141
+
142
+ - **Unified toolchain** - All Tailwind utilities in one place
143
+ - **Fluid design** - Built-in support for fluid typography and spacing
144
+ - **Type safety** - Full TypeScript support with VariantProps
145
+ - **Tree-shakeable** - Import only what you need
146
+ - **Consistent styles** - Shared reset, base, and utilities across projects
147
+
148
+ ## License
149
+
150
+ **MIT License** — Free to use in commercial and open source projects.
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Animation Utilities
3
+ * Common keyframes and animation classes
4
+ */
5
+
6
+ /* Extended duration classes beyond Tailwind defaults */
7
+ .duration-2000 {
8
+ transition-duration: 2000ms;
9
+ }
10
+
11
+ .duration-2500 {
12
+ transition-duration: 2500ms;
13
+ }
14
+
15
+ .duration-3000 {
16
+ transition-duration: 3000ms;
17
+ }
18
+
19
+ .duration-4000 {
20
+ transition-duration: 4000ms;
21
+ }
22
+
23
+ .duration-5000 {
24
+ transition-duration: 5000ms;
25
+ }
26
+
27
+ .duration-6000 {
28
+ transition-duration: 6000ms;
29
+ }
30
+
31
+ @theme {
32
+ /* Fade animations */
33
+ --animate-fade-in: fade-in 0.3s ease-out forwards;
34
+ --animate-fade-out: fade-out 0.3s ease-out forwards;
35
+ --animate-fade-in-slow: fade-in 0.6s ease-out forwards;
36
+ --animate-fade-out-slow: fade-out 0.6s ease-out forwards;
37
+
38
+ /* Slide animations */
39
+ --animate-slide-in-up: slide-in-up 0.3s ease-out forwards;
40
+ --animate-slide-in-down: slide-in-down 0.3s ease-out forwards;
41
+ --animate-slide-in-left: slide-in-left 0.3s ease-out forwards;
42
+ --animate-slide-in-right: slide-in-right 0.3s ease-out forwards;
43
+
44
+ /* Scale animations */
45
+ --animate-scale-in: scale-in 0.2s ease-out forwards;
46
+ --animate-scale-out: scale-out 0.2s ease-out forwards;
47
+
48
+ /* Image slideshow animations */
49
+ --animate-image-fade-in: image-fade-in 6s ease-out forwards;
50
+ --animate-image-fade-out: image-fade-out 6s ease-out forwards;
51
+
52
+ @keyframes fade-in {
53
+ from {
54
+ opacity: 0;
55
+ }
56
+ to {
57
+ opacity: 1;
58
+ }
59
+ }
60
+
61
+ @keyframes fade-out {
62
+ from {
63
+ opacity: 1;
64
+ }
65
+ to {
66
+ opacity: 0;
67
+ }
68
+ }
69
+
70
+ @keyframes slide-in-up {
71
+ from {
72
+ opacity: 0;
73
+ transform: translateY(1rem);
74
+ }
75
+ to {
76
+ opacity: 1;
77
+ transform: translateY(0);
78
+ }
79
+ }
80
+
81
+ @keyframes slide-in-down {
82
+ from {
83
+ opacity: 0;
84
+ transform: translateY(-1rem);
85
+ }
86
+ to {
87
+ opacity: 1;
88
+ transform: translateY(0);
89
+ }
90
+ }
91
+
92
+ @keyframes slide-in-left {
93
+ from {
94
+ opacity: 0;
95
+ transform: translateX(-1rem);
96
+ }
97
+ to {
98
+ opacity: 1;
99
+ transform: translateX(0);
100
+ }
101
+ }
102
+
103
+ @keyframes slide-in-right {
104
+ from {
105
+ opacity: 0;
106
+ transform: translateX(1rem);
107
+ }
108
+ to {
109
+ opacity: 1;
110
+ transform: translateX(0);
111
+ }
112
+ }
113
+
114
+ @keyframes scale-in {
115
+ from {
116
+ opacity: 0;
117
+ transform: scale(0.95);
118
+ }
119
+ to {
120
+ opacity: 1;
121
+ transform: scale(1);
122
+ }
123
+ }
124
+
125
+ @keyframes scale-out {
126
+ from {
127
+ opacity: 1;
128
+ transform: scale(1);
129
+ }
130
+ to {
131
+ opacity: 0;
132
+ transform: scale(0.95);
133
+ }
134
+ }
135
+
136
+ @keyframes image-fade-in {
137
+ from {
138
+ opacity: 0;
139
+ }
140
+ to {
141
+ opacity: 1;
142
+ }
143
+ }
144
+
145
+ @keyframes image-fade-out {
146
+ from {
147
+ opacity: 1;
148
+ }
149
+ to {
150
+ opacity: 0;
151
+ }
152
+ }
153
+ }
@@ -0,0 +1,75 @@
1
+ /**
2
+ * Base Styles
3
+ * Foundational design defaults that may vary per project
4
+ */
5
+ @layer base {
6
+ /* Design tokens applied to all elements */
7
+ * {
8
+ @apply border-border outline-ring/50;
9
+ }
10
+
11
+ /* Body typography defaults */
12
+ body {
13
+ font-feature-settings:
14
+ "liga" 1,
15
+ "dlig" 1,
16
+ "calt" 1,
17
+ "hlig" 1;
18
+ font-variant-ligatures: common-ligatures discretionary-ligatures contextual historical-ligatures;
19
+ line-height: 1.5;
20
+ }
21
+
22
+ /* Text wrapping improvements */
23
+ p,
24
+ h1,
25
+ h2,
26
+ h3,
27
+ h4,
28
+ h5,
29
+ h6 {
30
+ overflow-wrap: break-word;
31
+ }
32
+
33
+ p {
34
+ text-wrap: pretty;
35
+ }
36
+
37
+ h1,
38
+ h2,
39
+ h3,
40
+ h4,
41
+ h5,
42
+ h6 {
43
+ line-height: 1.2;
44
+ text-wrap: balance;
45
+ }
46
+
47
+ /* Focus ring styling */
48
+ :focus-visible {
49
+ @apply outline-2 outline-offset-2;
50
+ }
51
+
52
+ /* Selection styling */
53
+ ::selection {
54
+ @apply bg-primary text-primary-foreground;
55
+ }
56
+
57
+ /* Links without class */
58
+ a:not([class]) {
59
+ text-underline-offset: 0.2em;
60
+ }
61
+
62
+ /* Prevent tiny textareas */
63
+ textarea:not([rows]) {
64
+ min-height: 10em;
65
+ }
66
+
67
+ /* Auto-sizing textareas (progressive enhancement) */
68
+ @supports (field-sizing: content) {
69
+ textarea {
70
+ field-sizing: content;
71
+ min-height: 3lh;
72
+ max-height: 50vh;
73
+ }
74
+ }
75
+ }
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Grid Utilities
3
+ * Reusable container and grid layout classes
4
+ */
5
+ @layer components {
6
+ /**
7
+ * Container with max-width and horizontal padding
8
+ * Uses CSS custom properties for configurability:
9
+ * - --spacing-grid-max: Maximum container width
10
+ * - --spacing-grid-gutter: Horizontal padding/gap
11
+ */
12
+ .u-container {
13
+ position: relative;
14
+ max-width: var(--spacing-grid-max);
15
+ padding-inline: var(--spacing-grid-gutter);
16
+ margin-inline: auto;
17
+ }
18
+
19
+ /**
20
+ * 12-column CSS Grid with container queries
21
+ * Uses CSS custom properties for configurability:
22
+ * - --spacing-grid-gutter: Gap between grid items
23
+ */
24
+ .u-grid {
25
+ container-name: grid;
26
+ container-type: inline-size;
27
+ display: grid;
28
+ gap: var(--spacing-grid-gutter);
29
+ grid-auto-flow: dense;
30
+ grid-template-columns: repeat(12, minmax(0, 1fr));
31
+ width: 100%;
32
+ }
33
+
34
+ /**
35
+ * Full-width grid item spanning all 12 columns
36
+ */
37
+ .u-grid-full {
38
+ grid-column: 1 / -1;
39
+ }
40
+
41
+ /**
42
+ * Half-width grid item spanning 6 columns
43
+ */
44
+ .u-grid-half {
45
+ grid-column: span 6;
46
+ }
47
+
48
+ /**
49
+ * Third-width grid item spanning 4 columns
50
+ */
51
+ .u-grid-third {
52
+ grid-column: span 4;
53
+ }
54
+
55
+ /**
56
+ * Quarter-width grid item spanning 3 columns
57
+ */
58
+ .u-grid-quarter {
59
+ grid-column: span 3;
60
+ }
61
+ }
@@ -0,0 +1,19 @@
1
+ /**
2
+ * @regardio/tailwind - Shared Styles
3
+ *
4
+ * Import this file to include all shared styles:
5
+ * @import "@regardio/tailwind/styles";
6
+ *
7
+ * Or import individual files:
8
+ * @import "@regardio/tailwind/styles/plugins.css";
9
+ * @import "@regardio/tailwind/styles/reset.css";
10
+ * @import "@regardio/tailwind/styles/base.css";
11
+ * @import "@regardio/tailwind/styles/grid.css";
12
+ * @import "@regardio/tailwind/styles/animations.css";
13
+ */
14
+
15
+ @import "./plugins.css";
16
+ @import "./reset.css";
17
+ @import "./base.css";
18
+ @import "./grid.css";
19
+ @import "./animations.css";
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Tailwind CSS Core & Plugins
3
+ * Import this to get Tailwind CSS with Regardio's standard plugins
4
+ */
5
+
6
+ /* Tailwind CSS v4 */
7
+ @import "tailwindcss";
8
+
9
+ /* Animation utilities */
10
+ @import "tw-animate-css";
11
+
12
+ /* Fluid typography and spacing */
13
+ @plugin "fluid-tailwindcss";
@@ -0,0 +1,277 @@
1
+ /**
2
+ * CSS Reset
3
+ * Browser normalization and cross-browser fixes only.
4
+ * Design defaults belong in base.css
5
+ *
6
+ * @see https://www.joshwcomeau.com/css/custom-css-reset/
7
+ */
8
+ @layer base {
9
+ /* ============================================
10
+ * BOX MODEL
11
+ * ============================================ */
12
+ *,
13
+ *::before,
14
+ *::after {
15
+ box-sizing: border-box;
16
+ }
17
+
18
+ /* Reset margin on all elements except dialog (uses margin: auto for centering) */
19
+ *:not(dialog) {
20
+ margin: 0;
21
+ }
22
+
23
+ /* Tailwind-compatible border reset */
24
+ *,
25
+ *::before,
26
+ *::after {
27
+ border-style: solid;
28
+ border-width: 0;
29
+ }
30
+
31
+ /* Fix flex item overflow bug */
32
+ * {
33
+ min-width: 0;
34
+ }
35
+
36
+ /* ============================================
37
+ * HTML ROOT
38
+ * ============================================ */
39
+ html {
40
+ /* Prevent iOS text size inflation */
41
+ -webkit-text-size-adjust: 100%;
42
+ text-size-adjust: 100%;
43
+
44
+ /* System color scheme support */
45
+ color-scheme: light dark;
46
+
47
+ /* Enable height-based layouts */
48
+ height: 100%;
49
+
50
+ /* Consistent tab size */
51
+ tab-size: 2;
52
+
53
+ /* Better scroll anchoring */
54
+ overflow-anchor: auto;
55
+
56
+ /* Touch scroll momentum (iOS) */
57
+ -webkit-overflow-scrolling: touch;
58
+ }
59
+
60
+ /* Enable keyword animations + smooth scroll only for users without motion sensitivity */
61
+ @media (prefers-reduced-motion: no-preference) {
62
+ html {
63
+ interpolate-size: allow-keywords;
64
+ scroll-behavior: smooth;
65
+ }
66
+ }
67
+
68
+ html[data-theme="light"] {
69
+ color-scheme: light;
70
+ }
71
+
72
+ html[data-theme="dark"] {
73
+ color-scheme: dark;
74
+ }
75
+
76
+ /* ============================================
77
+ * BODY
78
+ * ============================================ */
79
+ body {
80
+ position: relative;
81
+ min-height: 100%;
82
+ margin: 0;
83
+
84
+ /* Antialiased rendering (macOS browsers default to subpixel) */
85
+ -webkit-font-smoothing: antialiased;
86
+ -moz-osx-font-smoothing: grayscale;
87
+ }
88
+
89
+ /* ============================================
90
+ * FORM ELEMENTS
91
+ * Inherit instead of browser defaults
92
+ * ============================================ */
93
+ input,
94
+ button,
95
+ textarea,
96
+ select,
97
+ optgroup {
98
+ font: inherit;
99
+ color: inherit;
100
+ background-color: transparent;
101
+ }
102
+
103
+ /* Explicit input types for edge cases */
104
+ [type="date"],
105
+ [type="datetime-local"],
106
+ [type="email"],
107
+ [type="month"],
108
+ [type="number"],
109
+ [type="password"],
110
+ [type="search"],
111
+ [type="tel"],
112
+ [type="text"],
113
+ [type="time"],
114
+ [type="url"],
115
+ [type="week"],
116
+ [multiple] {
117
+ font: inherit;
118
+ background-color: transparent;
119
+ }
120
+
121
+ /* Remove webkit search styling */
122
+ [type="search"]::-webkit-search-decoration,
123
+ [type="search"]::-webkit-search-cancel-button {
124
+ -webkit-appearance: none;
125
+ }
126
+
127
+ /* Cursor normalization */
128
+ button,
129
+ [role="button"] {
130
+ cursor: pointer;
131
+ }
132
+
133
+ button:disabled,
134
+ [role="button"]:disabled,
135
+ input:disabled,
136
+ select:disabled,
137
+ textarea:disabled {
138
+ cursor: not-allowed;
139
+ }
140
+
141
+ /* ============================================
142
+ * MEDIA ELEMENTS
143
+ * ============================================ */
144
+ img,
145
+ picture,
146
+ video,
147
+ canvas,
148
+ svg {
149
+ display: block;
150
+ flex-shrink: 0;
151
+ max-width: 100%;
152
+ }
153
+
154
+ img,
155
+ video {
156
+ height: auto;
157
+ }
158
+
159
+ /* Icons inherit text color unless explicitly set */
160
+ svg:not([fill]) {
161
+ fill: currentColor;
162
+ }
163
+
164
+ iframe,
165
+ embed,
166
+ object {
167
+ display: block;
168
+ max-width: 100%;
169
+ }
170
+
171
+ /* ============================================
172
+ * INTERACTIVE ELEMENTS
173
+ * ============================================ */
174
+
175
+ /* Focus only visible on keyboard navigation */
176
+ :focus:not(:focus-visible) {
177
+ outline: none;
178
+ }
179
+
180
+ /* Dialog normalization */
181
+ dialog {
182
+ padding: 0;
183
+ border: none;
184
+ }
185
+
186
+ /* Summary/details normalization */
187
+ summary {
188
+ display: list-item;
189
+ cursor: pointer;
190
+ }
191
+
192
+ summary::-webkit-details-marker {
193
+ display: none;
194
+ }
195
+
196
+ /* Enforce hidden attribute */
197
+ [hidden] {
198
+ /* biome-ignore lint/complexity/noImportantStyles: Must always work */
199
+ display: none !important;
200
+ }
201
+
202
+ /* Inert elements */
203
+ [inert],
204
+ [inert] * {
205
+ pointer-events: none;
206
+ user-select: none;
207
+ }
208
+
209
+ /* ============================================
210
+ * TABLES
211
+ * ============================================ */
212
+ table {
213
+ border-spacing: 0;
214
+ border-collapse: collapse;
215
+ }
216
+
217
+ /* ============================================
218
+ * LINKS
219
+ * ============================================ */
220
+ a {
221
+ color: inherit;
222
+ text-decoration: inherit;
223
+ }
224
+
225
+ a:not([class]) {
226
+ text-decoration-skip-ink: auto;
227
+ }
228
+
229
+ /* ============================================
230
+ * LISTS (Safari VoiceOver fix)
231
+ * ============================================ */
232
+ ul[role="list"],
233
+ ol[role="list"] {
234
+ padding: 0;
235
+ list-style: none;
236
+ }
237
+
238
+ /* ============================================
239
+ * STACKING CONTEXTS
240
+ * ============================================ */
241
+ #root,
242
+ #__next,
243
+ #app {
244
+ isolation: isolate;
245
+ }
246
+
247
+ /* ============================================
248
+ * MOBILE
249
+ * ============================================ */
250
+ * {
251
+ -webkit-tap-highlight-color: transparent;
252
+ }
253
+
254
+ @media (pointer: coarse) {
255
+ html {
256
+ touch-action: manipulation;
257
+ }
258
+ }
259
+
260
+ /* ============================================
261
+ * ACCESSIBILITY - REDUCED MOTION
262
+ * ============================================ */
263
+ @media (prefers-reduced-motion: reduce) {
264
+ *,
265
+ *::before,
266
+ *::after {
267
+ /* biome-ignore lint/complexity/noImportantStyles: Accessibility override */
268
+ animation-duration: 0.01ms !important;
269
+ /* biome-ignore lint/complexity/noImportantStyles: Accessibility override */
270
+ animation-iteration-count: 1 !important;
271
+ /* biome-ignore lint/complexity/noImportantStyles: Accessibility override */
272
+ transition-duration: 0.01ms !important;
273
+ /* biome-ignore lint/complexity/noImportantStyles: Accessibility override */
274
+ scroll-behavior: auto !important;
275
+ }
276
+ }
277
+ }
@@ -0,0 +1,9 @@
1
+ export { twMerge } from 'fluid-tailwindcss/tailwind-merge';
2
+ export { VariantProps, tv } from 'tailwind-variants';
3
+
4
+ /**
5
+ * Merge Tailwind CSS classes with conflict resolution
6
+ */
7
+ declare const cn: (...inputs: (string | undefined | null | false)[]) => string;
8
+
9
+ export { cn };
@@ -0,0 +1,10 @@
1
+ import { twMerge } from 'fluid-tailwindcss/tailwind-merge';
2
+ export { twMerge } from 'fluid-tailwindcss/tailwind-merge';
3
+ export { tv } from 'tailwind-variants';
4
+
5
+ // src/utils/index.ts
6
+ var cn = (...inputs) => {
7
+ return twMerge(inputs.filter(Boolean).join(" "));
8
+ };
9
+
10
+ export { cn };
package/package.json ADDED
@@ -0,0 +1,65 @@
1
+ {
2
+ "$schema": "https://www.schemastore.org/package.json",
3
+ "author": "Bernd Matzner <bernd.matzner@regard.io>",
4
+ "bugs": {
5
+ "url": "https://github.com/regardio/tailwind/issues"
6
+ },
7
+ "dependencies": {
8
+ "fluid-tailwindcss": "1.0.5",
9
+ "tailwind-merge": "3.4.0",
10
+ "tailwind-variants": "3.2.2",
11
+ "tw-animate-css": "1.4.0"
12
+ },
13
+ "description": "Regardio Tailwind CSS utilities and configuration",
14
+ "devDependencies": {
15
+ "@regardio/dev": "1.10.2",
16
+ "@total-typescript/ts-reset": "0.6.1",
17
+ "@types/node": "25.0.3",
18
+ "tailwindcss": "4.1.18",
19
+ "tsup": "8.5.1",
20
+ "vitest": "4.0.16"
21
+ },
22
+ "engines": {
23
+ "node": ">=18"
24
+ },
25
+ "exports": {
26
+ "./styles": "./dist/styles/index.css",
27
+ "./styles/*": "./dist/styles/*",
28
+ "./utils": {
29
+ "import": "./dist/utils/index.js",
30
+ "types": "./dist/utils/index.d.ts"
31
+ }
32
+ },
33
+ "files": ["dist"],
34
+ "homepage": "https://github.com/regardio/tailwind#readme",
35
+ "keywords": ["tailwind", "tailwindcss", "utilities", "regardio"],
36
+ "license": "MIT",
37
+ "name": "@regardio/tailwind",
38
+ "peerDependencies": {
39
+ "tailwindcss": ">=4.0.0"
40
+ },
41
+ "publishConfig": {
42
+ "access": "public"
43
+ },
44
+ "repository": {
45
+ "type": "git",
46
+ "url": "git+https://github.com/regardio/tailwind.git"
47
+ },
48
+ "scripts": {
49
+ "build": "tsup && pnpm fix",
50
+ "dev": "tsup --watch",
51
+ "fix": "exec-p fix:*",
52
+ "fix:biome": "lint-biome check --write --unsafe .",
53
+ "fix:md": "lint-md --fix",
54
+ "lint": "exec-p lint:*",
55
+ "lint:biome": "lint-biome check .",
56
+ "lint:md": "lint-md",
57
+ "release": "flow-release",
58
+ "test": "exec-s test:*",
59
+ "test:unit": "vitest run",
60
+ "typecheck": "exec-tsc --noEmit",
61
+ "version": "flow-changeset version"
62
+ },
63
+ "type": "module",
64
+ "version": "0.1.1"
65
+ }