krts.ui 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.
- package/README.md +151 -2
- package/dist/index.cjs +2334 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +715 -0
- package/dist/index.d.ts +715 -0
- package/dist/index.js +2293 -0
- package/dist/index.js.map +1 -0
- package/dist/krts.css +2 -0
- package/package.json +82 -4
- package/src/styles/build.css +4 -0
- package/src/styles/tailwind.css +3 -0
- package/src/styles/theme.css +152 -0
package/package.json
CHANGED
|
@@ -1,6 +1,84 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "krts.ui",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "A React UI library built on React Aria and Tailwind CSS, with gesture events (singleTap, doubleTap, hold) and hold-to-confirm controls.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"sideEffects": [
|
|
8
|
+
"*.css"
|
|
9
|
+
],
|
|
10
|
+
"main": "./dist/index.cjs",
|
|
11
|
+
"module": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"exports": {
|
|
14
|
+
".": {
|
|
15
|
+
"types": "./dist/index.d.ts",
|
|
16
|
+
"import": "./dist/index.js",
|
|
17
|
+
"require": "./dist/index.cjs"
|
|
18
|
+
},
|
|
19
|
+
"./styles.css": "./dist/krts.css",
|
|
20
|
+
"./theme.css": "./src/styles/theme.css",
|
|
21
|
+
"./tailwind.css": "./src/styles/tailwind.css",
|
|
22
|
+
"./package.json": "./package.json"
|
|
23
|
+
},
|
|
24
|
+
"files": [
|
|
25
|
+
"dist",
|
|
26
|
+
"src/styles"
|
|
27
|
+
],
|
|
28
|
+
"scripts": {
|
|
29
|
+
"dev": "vite --config docs/vite.config.ts",
|
|
30
|
+
"build": "npm run build:js && npm run build:css",
|
|
31
|
+
"build:js": "tsup",
|
|
32
|
+
"build:css": "tailwindcss -i src/styles/build.css -o dist/krts.css --minify",
|
|
33
|
+
"build:docs": "vite build --config docs/vite.config.ts",
|
|
34
|
+
"typecheck": "tsc --noEmit",
|
|
35
|
+
"test": "vitest run",
|
|
36
|
+
"test:watch": "vitest",
|
|
37
|
+
"prepublishOnly": "npm run typecheck && npm test && npm run build"
|
|
38
|
+
},
|
|
39
|
+
"peerDependencies": {
|
|
40
|
+
"react": ">=18.2.0",
|
|
41
|
+
"react-dom": ">=18.2.0",
|
|
42
|
+
"tailwindcss": ">=4.0.0"
|
|
43
|
+
},
|
|
44
|
+
"dependencies": {
|
|
45
|
+
"clsx": "^2.1.1",
|
|
46
|
+
"react-aria": "^3.53.1",
|
|
47
|
+
"react-aria-components": "^1.22.1",
|
|
48
|
+
"tailwind-merge": "^3.7.0",
|
|
49
|
+
"tailwindcss-react-aria-components": "^2.2.0"
|
|
50
|
+
},
|
|
51
|
+
"keywords": [
|
|
52
|
+
"react",
|
|
53
|
+
"react-aria",
|
|
54
|
+
"tailwindcss",
|
|
55
|
+
"components",
|
|
56
|
+
"ui",
|
|
57
|
+
"gestures",
|
|
58
|
+
"hold-to-confirm"
|
|
59
|
+
],
|
|
60
|
+
"devDependencies": {
|
|
61
|
+
"@tailwindcss/cli": "^4.3.4",
|
|
62
|
+
"@tailwindcss/vite": "^4.3.4",
|
|
63
|
+
"@testing-library/jest-dom": "^7.0.1",
|
|
64
|
+
"@testing-library/react": "^16.3.3",
|
|
65
|
+
"@testing-library/user-event": "^14.6.8",
|
|
66
|
+
"@types/node": "^26.6.6",
|
|
67
|
+
"@types/react": "^19.3.0",
|
|
68
|
+
"@types/react-dom": "^19.3.0",
|
|
69
|
+
"@vitejs/plugin-react": "^6.2.1",
|
|
70
|
+
"jsdom": "^31.0.0",
|
|
71
|
+
"react": "^19.3.1",
|
|
72
|
+
"react-dom": "^19.3.1",
|
|
73
|
+
"tailwindcss": "^4.3.4",
|
|
74
|
+
"tsup": "^9.0.0",
|
|
75
|
+
"typescript": "5.9",
|
|
76
|
+
"vite": "^8.3.6",
|
|
77
|
+
"vitest": "^5.1.0"
|
|
78
|
+
},
|
|
79
|
+
"peerDependenciesMeta": {
|
|
80
|
+
"tailwindcss": {
|
|
81
|
+
"optional": true
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* krts.ui theme
|
|
3
|
+
* -------------
|
|
4
|
+
* Import this from your own Tailwind v4 entry CSS:
|
|
5
|
+
*
|
|
6
|
+
* @import "tailwindcss";
|
|
7
|
+
* @import "krts.ui/theme.css";
|
|
8
|
+
* @source "../node_modules/krts.ui/dist";
|
|
9
|
+
*
|
|
10
|
+
* Every colour is a CSS variable, so you can re-theme by overriding
|
|
11
|
+
* `--krts-*` on :root (or any subtree).
|
|
12
|
+
*/
|
|
13
|
+
@plugin "tailwindcss-react-aria-components";
|
|
14
|
+
|
|
15
|
+
@custom-variant dark (&:where(.dark, .dark *, [data-theme="dark"], [data-theme="dark"] *));
|
|
16
|
+
|
|
17
|
+
:root {
|
|
18
|
+
/* Values from the krts.ui Figma file, tuned for contrast. */
|
|
19
|
+
--krts-bg: #ffffff;
|
|
20
|
+
--krts-fg: #1e1e1e;
|
|
21
|
+
--krts-fg-muted: #5f5f5f; /* Figma #7e7e7e fails 4.5:1 on white for body text */
|
|
22
|
+
--krts-fg-subtle: #737373;
|
|
23
|
+
--krts-surface: #f2f2f2;
|
|
24
|
+
--krts-surface-hover: #e6e6e6;
|
|
25
|
+
--krts-surface-pressed: #d9d9d9;
|
|
26
|
+
--krts-overlay: #fafafa;
|
|
27
|
+
--krts-line: #cdcdcd;
|
|
28
|
+
--krts-line-strong: #a4a4a4;
|
|
29
|
+
--krts-line-subtle: #e6e6e6;
|
|
30
|
+
|
|
31
|
+
--krts-primary: #2a2a2a;
|
|
32
|
+
--krts-primary-hover: #3b3b3b;
|
|
33
|
+
--krts-primary-pressed: #4e4e4e;
|
|
34
|
+
--krts-primary-line: #4e4e4e;
|
|
35
|
+
--krts-primary-fg: #ffffff;
|
|
36
|
+
|
|
37
|
+
--krts-danger: #a83333;
|
|
38
|
+
--krts-danger-hover: #b94343;
|
|
39
|
+
--krts-danger-pressed: #c85151;
|
|
40
|
+
--krts-danger-line: #d04b4b;
|
|
41
|
+
--krts-danger-fg: #ffffff;
|
|
42
|
+
--krts-danger-soft: #fbeaea;
|
|
43
|
+
|
|
44
|
+
--krts-success: #2f7d4f;
|
|
45
|
+
--krts-warning: #a36a12;
|
|
46
|
+
--krts-focus: #2a2a2a;
|
|
47
|
+
|
|
48
|
+
color-scheme: light;
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
:root:where(.dark, [data-theme="dark"]),
|
|
52
|
+
:where(.dark, [data-theme="dark"]) {
|
|
53
|
+
--krts-bg: #111111;
|
|
54
|
+
--krts-fg: #f2f2f2;
|
|
55
|
+
--krts-fg-muted: #a8a8a8;
|
|
56
|
+
--krts-fg-subtle: #8c8c8c;
|
|
57
|
+
--krts-surface: #1e1e1e;
|
|
58
|
+
--krts-surface-hover: #2a2a2a;
|
|
59
|
+
--krts-surface-pressed: #333333;
|
|
60
|
+
--krts-overlay: #1a1a1a;
|
|
61
|
+
--krts-line: #3a3a3a;
|
|
62
|
+
--krts-line-strong: #555555;
|
|
63
|
+
--krts-line-subtle: #262626;
|
|
64
|
+
|
|
65
|
+
--krts-primary: #f2f2f2;
|
|
66
|
+
--krts-primary-hover: #e2e2e2;
|
|
67
|
+
--krts-primary-pressed: #d0d0d0;
|
|
68
|
+
--krts-primary-line: #ffffff;
|
|
69
|
+
--krts-primary-fg: #111111;
|
|
70
|
+
|
|
71
|
+
--krts-danger: #c24545;
|
|
72
|
+
--krts-danger-hover: #d05454;
|
|
73
|
+
--krts-danger-pressed: #e36a6a;
|
|
74
|
+
--krts-danger-line: #e36a6a;
|
|
75
|
+
--krts-danger-soft: #3a1a1a;
|
|
76
|
+
|
|
77
|
+
--krts-success: #5cc58a;
|
|
78
|
+
--krts-warning: #e0a84a;
|
|
79
|
+
--krts-focus: #f2f2f2;
|
|
80
|
+
|
|
81
|
+
color-scheme: dark;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@theme inline {
|
|
85
|
+
--font-sans: "Inter", "Inter Variable", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
|
|
86
|
+
|
|
87
|
+
--color-bg: var(--krts-bg);
|
|
88
|
+
--color-fg: var(--krts-fg);
|
|
89
|
+
--color-fg-muted: var(--krts-fg-muted);
|
|
90
|
+
--color-fg-subtle: var(--krts-fg-subtle);
|
|
91
|
+
--color-surface: var(--krts-surface);
|
|
92
|
+
--color-surface-hover: var(--krts-surface-hover);
|
|
93
|
+
--color-surface-pressed: var(--krts-surface-pressed);
|
|
94
|
+
--color-overlay: var(--krts-overlay);
|
|
95
|
+
--color-line: var(--krts-line);
|
|
96
|
+
--color-line-strong: var(--krts-line-strong);
|
|
97
|
+
--color-line-subtle: var(--krts-line-subtle);
|
|
98
|
+
--color-primary: var(--krts-primary);
|
|
99
|
+
--color-primary-hover: var(--krts-primary-hover);
|
|
100
|
+
--color-primary-pressed: var(--krts-primary-pressed);
|
|
101
|
+
--color-primary-line: var(--krts-primary-line);
|
|
102
|
+
--color-primary-fg: var(--krts-primary-fg);
|
|
103
|
+
--color-danger: var(--krts-danger);
|
|
104
|
+
--color-danger-hover: var(--krts-danger-hover);
|
|
105
|
+
--color-danger-pressed: var(--krts-danger-pressed);
|
|
106
|
+
--color-danger-line: var(--krts-danger-line);
|
|
107
|
+
--color-danger-fg: var(--krts-danger-fg);
|
|
108
|
+
--color-danger-soft: var(--krts-danger-soft);
|
|
109
|
+
--color-success: var(--krts-success);
|
|
110
|
+
--color-warning: var(--krts-warning);
|
|
111
|
+
--color-focus: var(--krts-focus);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
@theme {
|
|
115
|
+
/* Strong custom curves: the built-in CSS easings are too weak. */
|
|
116
|
+
--ease-out: cubic-bezier(0.23, 1, 0.32, 1);
|
|
117
|
+
--ease-in-out: cubic-bezier(0.77, 0, 0.175, 1);
|
|
118
|
+
--ease-drawer: cubic-bezier(0.32, 0.72, 0, 1);
|
|
119
|
+
|
|
120
|
+
--radius-control: 8px;
|
|
121
|
+
--radius-menu: 12px;
|
|
122
|
+
|
|
123
|
+
/* The Figma file's 1px hairline, plus a soft lift for floating layers. */
|
|
124
|
+
--shadow-hairline: 0 0 1px 0 rgb(0 0 0 / 0.25);
|
|
125
|
+
--shadow-control: 0 0 1px 0 rgb(0 0 0 / 0.25), 0 1px 2px 0 rgb(0 0 0 / 0.04);
|
|
126
|
+
--shadow-float: 0 0 1px 0 rgb(0 0 0 / 0.25), 0 4px 12px -2px rgb(0 0 0 / 0.08), 0 12px 32px -8px rgb(0 0 0 / 0.12);
|
|
127
|
+
|
|
128
|
+
--animate-krts-spin: krts-spin 600ms linear infinite;
|
|
129
|
+
--animate-krts-shimmer: krts-shimmer 1.6s linear infinite;
|
|
130
|
+
--animate-krts-indeterminate: krts-indeterminate 1.2s var(--ease-in-out) infinite;
|
|
131
|
+
|
|
132
|
+
@keyframes krts-spin {
|
|
133
|
+
to { transform: rotate(360deg); }
|
|
134
|
+
}
|
|
135
|
+
@keyframes krts-shimmer {
|
|
136
|
+
from { transform: translateX(-100%); }
|
|
137
|
+
to { transform: translateX(100%); }
|
|
138
|
+
}
|
|
139
|
+
@keyframes krts-indeterminate {
|
|
140
|
+
from { transform: translateX(-100%) scaleX(0.4); }
|
|
141
|
+
to { transform: translateX(250%) scaleX(0.4); }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/* Reduced motion means fewer, gentler animations — not zero.
|
|
146
|
+
* Keep opacity/colour fades; drop movement. */
|
|
147
|
+
@media (prefers-reduced-motion: reduce) {
|
|
148
|
+
[data-krts-motion] {
|
|
149
|
+
--krts-motion-distance: 0px;
|
|
150
|
+
--krts-motion-scale: 1;
|
|
151
|
+
}
|
|
152
|
+
}
|