@pinfold/css 0.0.0-stage → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Pinfold — Tailwind CSS v3 preset.
3
+ *
4
+ * // tailwind.config.js
5
+ * module.exports = { presets: [require('@pinfold/css/tailwind')] };
6
+ *
7
+ * Every entry points at a `--pinfold-*` custom property rather than a literal, so
8
+ * `bg-primary-600` follows `npx pinfold theme`, dark mode and any runtime
9
+ * override automatically. One palette, two styling systems, no duplication.
10
+ *
11
+ * For Tailwind v4, import `@pinfold/css/tailwind.css` instead.
12
+ */
13
+
14
+ const ramp = (role) =>
15
+ Object.fromEntries(
16
+ [50, 100, 200, 300, 400, 500, 600, 700, 800, 900, 950].map((step) => [
17
+ step,
18
+ `var(--pinfold-${role}-${step})`,
19
+ ]),
20
+ );
21
+
22
+ /** Status ramps ship five steps, not eleven. */
23
+ const statusRamp = (role) =>
24
+ Object.fromEntries([100, 300, 500, 700, 900].map((s) => [s, `var(--pinfold-${role}-${s})`]));
25
+
26
+ module.exports = {
27
+ theme: {
28
+ extend: {
29
+ colors: {
30
+ primary: ramp('primary'),
31
+ neutral: ramp('neutral'),
32
+ accent: {
33
+ 300: 'var(--pinfold-accent-300)',
34
+ 400: 'var(--pinfold-accent-400)',
35
+ 500: 'var(--pinfold-accent-500)',
36
+ 600: 'var(--pinfold-accent-600)',
37
+ 700: 'var(--pinfold-accent-700)',
38
+ DEFAULT: 'var(--pinfold-color-accent)',
39
+ },
40
+ success: statusRamp('success'),
41
+ warning: statusRamp('warning'),
42
+ danger: statusRamp('danger'),
43
+ info: statusRamp('info'),
44
+
45
+ // Semantic aliases: `bg-surface`, `text-content-muted`, `border-line`.
46
+ bg: { DEFAULT: 'var(--pinfold-color-bg)', subtle: 'var(--pinfold-color-bg-subtle)' },
47
+ surface: {
48
+ DEFAULT: 'var(--pinfold-color-surface)',
49
+ raised: 'var(--pinfold-color-surface-raised)',
50
+ sunken: 'var(--pinfold-color-surface-sunken)',
51
+ hover: 'var(--pinfold-color-surface-hover)',
52
+ active: 'var(--pinfold-color-surface-active)',
53
+ selected: 'var(--pinfold-color-surface-selected)',
54
+ },
55
+ content: {
56
+ DEFAULT: 'var(--pinfold-color-text)',
57
+ muted: 'var(--pinfold-color-text-muted)',
58
+ subtle: 'var(--pinfold-color-text-subtle)',
59
+ disabled: 'var(--pinfold-color-text-disabled)',
60
+ },
61
+ line: {
62
+ DEFAULT: 'var(--pinfold-color-border)',
63
+ strong: 'var(--pinfold-color-border-strong)',
64
+ accent: 'var(--pinfold-color-border-accent)',
65
+ },
66
+ },
67
+
68
+ borderRadius: {
69
+ xs: 'var(--pinfold-radius-xs)',
70
+ sm: 'var(--pinfold-radius-sm)',
71
+ DEFAULT: 'var(--pinfold-radius-md)',
72
+ md: 'var(--pinfold-radius-md)',
73
+ lg: 'var(--pinfold-radius-lg)',
74
+ xl: 'var(--pinfold-radius-xl)',
75
+ '2xl': 'var(--pinfold-radius-2xl)',
76
+ },
77
+
78
+ spacing: Object.fromEntries(
79
+ [1, 2, 3, 4, 5, 6, 8, 10].map((n) => [n, `var(--pinfold-space-${n})`]),
80
+ ),
81
+
82
+ fontFamily: {
83
+ sans: 'var(--pinfold-font-sans)',
84
+ mono: 'var(--pinfold-font-mono)',
85
+ },
86
+
87
+ fontSize: {
88
+ xs: 'var(--pinfold-text-xs)',
89
+ sm: 'var(--pinfold-text-sm)',
90
+ base: 'var(--pinfold-text-md)',
91
+ lg: 'var(--pinfold-text-lg)',
92
+ xl: 'var(--pinfold-text-xl)',
93
+ },
94
+
95
+ boxShadow: {
96
+ xs: 'var(--pinfold-shadow-xs)',
97
+ sm: 'var(--pinfold-shadow-sm)',
98
+ DEFAULT: 'var(--pinfold-shadow-sm)',
99
+ md: 'var(--pinfold-shadow-md)',
100
+ lg: 'var(--pinfold-shadow-lg)',
101
+ xl: 'var(--pinfold-shadow-xl)',
102
+ highlight: 'var(--pinfold-highlight)',
103
+ focus: 'var(--pinfold-focus-ring)',
104
+ },
105
+
106
+ transitionTimingFunction: {
107
+ pinfold: 'var(--pinfold-ease)',
108
+ 'pinfold-out': 'var(--pinfold-ease-out)',
109
+ 'pinfold-in-out': 'var(--pinfold-ease-in-out)',
110
+ 'pinfold-spring': 'var(--pinfold-ease-spring)',
111
+ },
112
+
113
+ transitionDuration: {
114
+ fast: 'var(--pinfold-duration-fast)',
115
+ DEFAULT: 'var(--pinfold-duration-md)',
116
+ slow: 'var(--pinfold-duration-slow)',
117
+ },
118
+
119
+ zIndex: {
120
+ dropdown: 'var(--pinfold-z-dropdown)',
121
+ sticky: 'var(--pinfold-z-sticky)',
122
+ overlay: 'var(--pinfold-z-overlay)',
123
+ modal: 'var(--pinfold-z-modal)',
124
+ toast: 'var(--pinfold-z-toast)',
125
+ tooltip: 'var(--pinfold-z-tooltip)',
126
+ },
127
+ },
128
+ },
129
+
130
+ plugins: [
131
+ /**
132
+ * Variants for the `data-*` state Pinfold components already expose, so a
133
+ * Tailwind-styled accordion needs no class toggling of its own:
134
+ *
135
+ * <Faq classNames={{ trigger: 'open:text-primary-600 disabled-row:opacity-50' }} />
136
+ */
137
+ function pinfoldVariants({ addVariant }) {
138
+ addVariant('open', '&[data-state="open"]');
139
+ addVariant('closed', '&[data-state="closed"]');
140
+ addVariant('selected', '&[data-state="selected"]');
141
+ addVariant('disabled-row', '&[data-disabled]');
142
+ addVariant('group-open', ':merge(.group)[data-state="open"] &');
143
+ addVariant('pinfold-dark', ':is([data-pinfold-theme="dark"] &)');
144
+ },
145
+ ],
146
+ };
@@ -0,0 +1,87 @@
1
+ /* Pinfold — Tailwind CSS v4 theme.
2
+ *
3
+ * @import "tailwindcss";
4
+ * @import "@pinfold/css/core.css";
5
+ * @import "@pinfold/css/tailwind.css";
6
+ *
7
+ * Maps Pinfold tokens onto Tailwind's `--color-*` / `--radius-*` namespaces, so
8
+ * `bg-primary-600` and `rounded-lg` follow `npx pinfold theme`, dark mode and any
9
+ * runtime override. For Tailwind v3, use the preset instead.
10
+ */
11
+
12
+ @theme inline {
13
+ --color-primary-50: var(--pinfold-primary-50);
14
+ --color-primary-100: var(--pinfold-primary-100);
15
+ --color-primary-200: var(--pinfold-primary-200);
16
+ --color-primary-300: var(--pinfold-primary-300);
17
+ --color-primary-400: var(--pinfold-primary-400);
18
+ --color-primary-500: var(--pinfold-primary-500);
19
+ --color-primary-600: var(--pinfold-primary-600);
20
+ --color-primary-700: var(--pinfold-primary-700);
21
+ --color-primary-800: var(--pinfold-primary-800);
22
+ --color-primary-900: var(--pinfold-primary-900);
23
+ --color-primary-950: var(--pinfold-primary-950);
24
+
25
+ --color-neutral-50: var(--pinfold-neutral-50);
26
+ --color-neutral-100: var(--pinfold-neutral-100);
27
+ --color-neutral-200: var(--pinfold-neutral-200);
28
+ --color-neutral-300: var(--pinfold-neutral-300);
29
+ --color-neutral-400: var(--pinfold-neutral-400);
30
+ --color-neutral-500: var(--pinfold-neutral-500);
31
+ --color-neutral-600: var(--pinfold-neutral-600);
32
+ --color-neutral-700: var(--pinfold-neutral-700);
33
+ --color-neutral-800: var(--pinfold-neutral-800);
34
+ --color-neutral-900: var(--pinfold-neutral-900);
35
+ --color-neutral-950: var(--pinfold-neutral-950);
36
+
37
+ --color-accent: var(--pinfold-color-accent);
38
+ --color-accent-300: var(--pinfold-accent-300);
39
+ --color-accent-400: var(--pinfold-accent-400);
40
+ --color-accent-500: var(--pinfold-accent-500);
41
+ --color-accent-600: var(--pinfold-accent-600);
42
+ --color-accent-700: var(--pinfold-accent-700);
43
+
44
+ --color-success-500: var(--pinfold-success-500);
45
+ --color-warning-500: var(--pinfold-warning-500);
46
+ --color-danger-500: var(--pinfold-danger-500);
47
+ --color-info-500: var(--pinfold-info-500);
48
+
49
+ --color-bg: var(--pinfold-color-bg);
50
+ --color-bg-subtle: var(--pinfold-color-bg-subtle);
51
+ --color-surface: var(--pinfold-color-surface);
52
+ --color-surface-raised: var(--pinfold-color-surface-raised);
53
+ --color-surface-hover: var(--pinfold-color-surface-hover);
54
+ --color-surface-selected: var(--pinfold-color-surface-selected);
55
+ --color-content: var(--pinfold-color-text);
56
+ --color-content-muted: var(--pinfold-color-text-muted);
57
+ --color-content-subtle: var(--pinfold-color-text-subtle);
58
+ --color-line: var(--pinfold-color-border);
59
+ --color-line-strong: var(--pinfold-color-border-strong);
60
+
61
+ --radius-xs: var(--pinfold-radius-xs);
62
+ --radius-sm: var(--pinfold-radius-sm);
63
+ --radius-md: var(--pinfold-radius-md);
64
+ --radius-lg: var(--pinfold-radius-lg);
65
+ --radius-xl: var(--pinfold-radius-xl);
66
+ --radius-2xl: var(--pinfold-radius-2xl);
67
+
68
+ --font-sans: var(--pinfold-font-sans);
69
+ --font-mono: var(--pinfold-font-mono);
70
+
71
+ --shadow-xs: var(--pinfold-shadow-xs);
72
+ --shadow-sm: var(--pinfold-shadow-sm);
73
+ --shadow-md: var(--pinfold-shadow-md);
74
+ --shadow-lg: var(--pinfold-shadow-lg);
75
+ --shadow-xl: var(--pinfold-shadow-xl);
76
+
77
+ --ease-pinfold: var(--pinfold-ease);
78
+ --ease-pinfold-out: var(--pinfold-ease-out);
79
+ --ease-pinfold-spring: var(--pinfold-ease-spring);
80
+ }
81
+
82
+ /* Variants matching the `data-*` state Pinfold components expose. */
83
+ @custom-variant open (&[data-state="open"]);
84
+ @custom-variant closed (&[data-state="closed"]);
85
+ @custom-variant selected (&[data-state="selected"]);
86
+ @custom-variant disabled-row (&[data-disabled]);
87
+ @custom-variant pinfold-dark (&:is([data-pinfold-theme="dark"] *));