pelatform-ui 1.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,118 @@
1
+ @layer components {
2
+ /* Base scrollable styles */
3
+ .pf-scrollable,
4
+ .pf-scrollable-y,
5
+ .pf-scrollable-x,
6
+ .pf-scrollable-hover,
7
+ .pf-scrollable-y-hover,
8
+ .pf-scrollable-x-hover,
9
+ .pf-scrollable-auto,
10
+ .pf-scrollable-y-auto,
11
+ .pf-scrollable-x-auto {
12
+ scrollbar-width: thin;
13
+ scrollbar-color: transparent transparent;
14
+ position: relative;
15
+
16
+ &::-webkit-scrollbar {
17
+ width: 0.35rem;
18
+ height: 0.35rem;
19
+ }
20
+
21
+ &::-webkit-scrollbar-track {
22
+ background-color: transparent;
23
+ }
24
+
25
+ &::-webkit-scrollbar-thumb {
26
+ border-radius: 1.25rem;
27
+ }
28
+
29
+ &::-webkit-scrollbar-corner {
30
+ background-color: transparent;
31
+ }
32
+ }
33
+
34
+ /* Overflow styles for scrollable variants */
35
+ .pf-scrollable,
36
+ .pf-scrollable-hover {
37
+ overflow: scroll;
38
+ }
39
+
40
+ .pf-scrollable-y,
41
+ .pf-scrollable-y-hover {
42
+ overflow-y: scroll;
43
+ }
44
+
45
+ .pf-scrollable-x,
46
+ .pf-scrollable-x-hover {
47
+ overflow-x: scroll;
48
+ }
49
+
50
+ .pf-scrollable-auto {
51
+ overflow: auto;
52
+ }
53
+
54
+ .pf-scrollable-y-auto {
55
+ overflow-y: auto;
56
+ }
57
+
58
+ .pf-scrollable-x-auto {
59
+ overflow-x: auto;
60
+ }
61
+
62
+ /* Scrollbar visibility and color */
63
+ .pf-scrollable,
64
+ .pf-scrollable-y,
65
+ .pf-scrollable-x,
66
+ .pf-scrollable-auto,
67
+ .pf-scrollable-y-auto,
68
+ .pf-scrollable-x-auto,
69
+ .pf-scrollable-hover:hover,
70
+ .pf-scrollable-y-hover:hover,
71
+ .pf-scrollable-x-hover:hover {
72
+ scrollbar-color: var(--scrollbar-thumb-color, var(--color-input)) transparent;
73
+
74
+ &::-webkit-scrollbar-thumb {
75
+ background-color: var(--scrollbar-thumb-color, var(--color-input));
76
+ }
77
+
78
+ &::-webkit-scrollbar-corner {
79
+ background-color: transparent;
80
+ }
81
+ }
82
+
83
+ /* Target safari browser only */
84
+ @supports (-webkit-hyphens: none) {
85
+ .pf-scrollable,
86
+ .pf-scrollable-hover {
87
+ overflow: auto;
88
+ }
89
+
90
+ .pf-scrollable-y,
91
+ .pf-scrollable-y-hover {
92
+ overflow-y: auto;
93
+ }
94
+
95
+ .pf-scrollable-x,
96
+ .pf-scrollable-x-hover {
97
+ overflow-x: auto;
98
+ }
99
+ }
100
+
101
+ /* Responsive adjustments for smaller screens (lg) */
102
+ @media (max-width: 64rem) {
103
+ .pf-scrollable,
104
+ .pf-scrollable-hover {
105
+ overflow: auto;
106
+ }
107
+
108
+ .pf-scrollable-y,
109
+ .pf-scrollable-y-hover {
110
+ overflow-y: auto;
111
+ }
112
+
113
+ .pf-scrollable-x,
114
+ .pf-scrollable-x-hover {
115
+ overflow-x: auto;
116
+ }
117
+ }
118
+ }
@@ -0,0 +1,51 @@
1
+ @theme inline {
2
+ @keyframes theme-mask-scale {
3
+ 0% {
4
+ mask-size: 0px;
5
+ mask-position: var(--theme-toggle-x, 50%) var(--theme-toggle-y, 0);
6
+ }
7
+ 100% {
8
+ mask-size: 10240px;
9
+ mask-position: calc(var(--theme-toggle-x, 50%) - 5120px)
10
+ calc(var(--theme-toggle-y, 0) - 5120px);
11
+ }
12
+ }
13
+ }
14
+
15
+ @layer components {
16
+ .theme-toggle-transition::view-transition-group(root) {
17
+ animation-duration: 750ms;
18
+ animation-timing-function: linear(
19
+ 0 0%,
20
+ 0.2342 12.49%,
21
+ 0.4374 24.99%,
22
+ 0.6093 37.49%,
23
+ 0.6835 43.74%,
24
+ 0.7499 49.99%,
25
+ 0.8086 56.25%,
26
+ 0.8593 62.5%,
27
+ 0.9023 68.75%,
28
+ 0.9375 75%,
29
+ 0.9648 81.25%,
30
+ 0.9844 87.5%,
31
+ 0.9961 93.75%,
32
+ 1 100%
33
+ );
34
+ }
35
+
36
+ .theme-toggle-transition::view-transition-new(root) {
37
+ /* mask:
38
+ url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" viewBox="-50 -50 100 100"><defs><filter id="blur"><feGaussianBlur stdDeviation="5"/></filter></defs><circle cx="0" cy="0" r="25" fill="white" filter="url(%23blur)"/></svg>')
39
+ 0 0 / 100% 100% no-repeat; */
40
+ mask-position: var(--theme-toggle-x, 50%) var(--theme-toggle-y, 0);
41
+ animation: theme-mask-scale 750ms ease-in-out;
42
+ transform-origin: var(--theme-toggle-x, 50%) var(--theme-toggle-y, 0);
43
+ }
44
+
45
+ .theme-toggle-transition::view-transition-old(root),
46
+ .theme-toggle-transition.dark::view-transition-old(root) {
47
+ animation: theme-mask-scale 750ms ease-in-out;
48
+ transform-origin: var(--theme-toggle-x, 50%) var(--theme-toggle-y, 0);
49
+ z-index: -1;
50
+ }
51
+ }
package/css/theme.css ADDED
@@ -0,0 +1,243 @@
1
+ @import "tw-animate-css";
2
+
3
+ @import "@pelatform/ui.animation/css";
4
+ @import "@pelatform/ui.aria/css";
5
+ @import "@pelatform/ui.base/css";
6
+ @import "@pelatform/ui.default/css";
7
+
8
+ @import "./components/apexcharts.css";
9
+ @import "./components/book.css";
10
+ @import "./components/image-input.css";
11
+ @import "./components/leaflet.css";
12
+ @import "./components/patterns.css";
13
+ @import "./components/rating.css";
14
+ @import "./components/scrollable.css";
15
+ @import "./components/theme-transition.css";
16
+ @import "./components/extra.css";
17
+
18
+ @source "../src/.";
19
+ @source "../dist/.";
20
+
21
+ @custom-variant dark (&:is(.dark *));
22
+
23
+ /** Colors **/
24
+ :root {
25
+ /** Base Colors **/
26
+ --background: var(--color-white);
27
+ --foreground: var(--color-zinc-950);
28
+
29
+ --card: var(--color-white);
30
+ --card-foreground: var(--color-zinc-950);
31
+
32
+ --popover: var(--color-white);
33
+ --popover-foreground: var(--color-zinc-950);
34
+
35
+ --primary: var(--color-blue-500);
36
+ --primary-foreground: var(--color-white);
37
+
38
+ --secondary: var(--color-zinc-100);
39
+ --secondary-foreground: var(--color-zinc-900);
40
+
41
+ --muted: var(--color-zinc-100);
42
+ --muted-foreground: var(--color-zinc-500);
43
+
44
+ --accent: var(--color-zinc-100);
45
+ --accent-foreground: var(--color-zinc-900);
46
+
47
+ --destructive: var(--color-red-600);
48
+ --destructive-foreground: var(--color-white);
49
+
50
+ --chart-1: var(--color-blue-500);
51
+ --chart-2: var(--color-green-500);
52
+ --chart-3: var(--color-yellow-500);
53
+ --chart-4: var(--color-red-500);
54
+ --chart-5: var(--color-purple-500);
55
+
56
+ --sidebar: oklch(0.985 0 0);
57
+ --sidebar-foreground: oklch(0.145 0 0);
58
+ --sidebar-primary: oklch(0.205 0 0);
59
+ --sidebar-primary-foreground: oklch(0.985 0 0);
60
+ --sidebar-accent: oklch(0.97 0 0);
61
+ --sidebar-accent-foreground: oklch(0.205 0 0);
62
+ --sidebar-border: oklch(0.922 0 0);
63
+ --sidebar-ring: oklch(0.708 0 0);
64
+
65
+ /** Base Styles **/
66
+ --border: oklch(94% 0.004 286.32); /* between zinc-100 and zinc-200 */
67
+ --input: var(--color-zinc-200);
68
+ --ring: var(--color-zinc-400);
69
+ --radius: 0.5rem;
70
+
71
+ /** Dashboard **/
72
+ --sidebar-width: 280px;
73
+ --header-height: 60px;
74
+
75
+ /** Grid color **/
76
+ --grid-base-color: rgba(66, 71, 112, 0.09);
77
+ --grid-dots-color: rgba(66, 71, 112, 0.09);
78
+ }
79
+
80
+ .dark {
81
+ /** Base Colors **/
82
+ --background: var(--color-zinc-950);
83
+ --foreground: var(--color-zinc-50);
84
+
85
+ --card: var(--color-zinc-950);
86
+ --card-foreground: var(--color-zinc-50);
87
+
88
+ --popover: var(--color-zinc-950);
89
+ --popover-foreground: var(--color-zinc-50);
90
+
91
+ --primary: var(--color-blue-600);
92
+ --primary-foreground: var(--color-white);
93
+
94
+ --secondary: var(--color-zinc-800);
95
+ --secondary-foreground: var(--color-zinc-50);
96
+
97
+ --muted: var(--color-zinc-900);
98
+ --muted-foreground: var(--color-zinc-500);
99
+
100
+ --accent: var(--color-zinc-900);
101
+ --accent-foreground: var(--color-zinc-50);
102
+
103
+ --destructive: var(--color-red-600);
104
+ --destructive-foreground: var(--color-white);
105
+
106
+ --chart-1: var(--color-blue-500);
107
+ --chart-2: var(--color-green-500);
108
+ --chart-3: var(--color-yellow-500);
109
+ --chart-4: var(--color-red-500);
110
+ --chart-5: var(--color-purple-500);
111
+
112
+ --sidebar: oklch(0.205 0 0);
113
+ --sidebar-foreground: oklch(0.985 0 0);
114
+ --sidebar-primary: oklch(0.488 0.243 264.376);
115
+ --sidebar-primary-foreground: oklch(0.985 0 0);
116
+ --sidebar-accent: oklch(0.269 0 0);
117
+ --sidebar-accent-foreground: oklch(0.985 0 0);
118
+ --sidebar-border: oklch(0.269 0 0);
119
+ --sidebar-ring: oklch(0.439 0 0);
120
+
121
+ /** Base Styles **/
122
+ --border: var(--color-zinc-800);
123
+ --input: var(--color-zinc-800);
124
+ --ring: var(--color-zinc-600);
125
+
126
+ /** Grid color **/
127
+ --grid-base-color: rgba(255, 255, 255, 0.09);
128
+ --grid-dots-color: rgba(255, 255, 255, 0.09);
129
+ }
130
+
131
+ /** Theme Setup **/
132
+ @theme inline {
133
+ /** Base Colors **/
134
+ --color-background: var(--background);
135
+ --color-foreground: var(--foreground);
136
+
137
+ --color-card: var(--card);
138
+ --color-card-foreground: var(--card-foreground);
139
+
140
+ --color-popover: var(--popover);
141
+ --color-popover-foreground: var(--popover-foreground);
142
+
143
+ --color-primary: var(--primary);
144
+ --color-primary-foreground: var(--primary-foreground);
145
+
146
+ --color-secondary: var(--secondary);
147
+ --color-secondary-foreground: var(--secondary-foreground);
148
+
149
+ --color-muted: var(--muted);
150
+ --color-muted-foreground: var(--muted-foreground);
151
+
152
+ --color-accent: var(--accent);
153
+ --color-accent-foreground: var(--accent-foreground);
154
+
155
+ --color-destructive: var(--destructive);
156
+ --color-destructive-foreground: var(--destructive-foreground);
157
+
158
+ --color-chart-1: var(--chart-1);
159
+ --color-chart-2: var(--chart-2);
160
+ --color-chart-3: var(--chart-3);
161
+ --color-chart-4: var(--chart-4);
162
+ --color-chart-5: var(--chart-5);
163
+
164
+ --color-sidebar-ring: var(--sidebar-ring);
165
+ --color-sidebar-border: var(--sidebar-border);
166
+ --color-sidebar-accent-foreground: var(--sidebar-accent-foreground);
167
+ --color-sidebar-accent: var(--sidebar-accent);
168
+ --color-sidebar-primary-foreground: var(--sidebar-primary-foreground);
169
+ --color-sidebar-primary: var(--sidebar-primary);
170
+ --color-sidebar-foreground: var(--sidebar-foreground);
171
+ --color-sidebar: var(--sidebar);
172
+
173
+ /** Base Styles **/
174
+ --color-border: var(--border);
175
+ --color-input: var(--input);
176
+ --color-ring: var(--ring);
177
+
178
+ --radius-xl: calc(var(--radius) + 4px);
179
+ --radius-lg: var(--radius);
180
+ --radius-md: calc(var(--radius) - 2px);
181
+ --radius-sm: calc(var(--radius) - 4px);
182
+
183
+ --animate-marquee: marquee var(--duration) infinite linear;
184
+ --animate-marquee-vertical: marquee-vertical var(--duration) linear infinite;
185
+
186
+ @keyframes marquee {
187
+ from {
188
+ transform: translateX(0);
189
+ }
190
+ to {
191
+ transform: translateX(calc(-100% - var(--gap)));
192
+ }
193
+ }
194
+
195
+ @keyframes marquee-vertical {
196
+ from {
197
+ transform: translateY(0);
198
+ }
199
+ to {
200
+ transform: translateY(calc(-100% - var(--gap)));
201
+ }
202
+ }
203
+
204
+ @keyframes move {
205
+ to {
206
+ transform: translateX(0);
207
+ }
208
+ }
209
+ }
210
+
211
+ /** Custom Scrollbar **/
212
+ @layer base {
213
+ ::-webkit-scrollbar {
214
+ width: 5px;
215
+ }
216
+
217
+ ::-webkit-scrollbar-track {
218
+ background: transparent;
219
+ }
220
+
221
+ ::-webkit-scrollbar-thumb {
222
+ background: var(--input);
223
+ border-radius: 5px;
224
+ }
225
+
226
+ * {
227
+ scrollbar-width: thin;
228
+ scrollbar-color: var(--input) transparent;
229
+ }
230
+
231
+ ::selection {
232
+ color: var(--primary-foreground);
233
+ background: var(--primary);
234
+ }
235
+
236
+ * {
237
+ @apply border-border outline-ring/50;
238
+ }
239
+
240
+ body {
241
+ @apply bg-background text-foreground;
242
+ }
243
+ }
@@ -0,0 +1,5 @@
1
+ export * from '@pelatform/ui.animation';
2
+ import '@pelatform/ui.aria';
3
+ import '@pelatform/ui.base';
4
+ import '@pelatform/ui.default';
5
+ import '@pelatform/ui.general';
@@ -0,0 +1,2 @@
1
+ // src/animation.ts
2
+ export * from "@pelatform/ui.animation";
package/dist/aria.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from '@pelatform/ui.aria';
package/dist/aria.js ADDED
@@ -0,0 +1,2 @@
1
+ // src/aria.ts
2
+ export * from "@pelatform/ui.aria";
package/dist/base.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from '@pelatform/ui.base';
package/dist/base.js ADDED
@@ -0,0 +1,2 @@
1
+ // src/base.ts
2
+ export * from "@pelatform/ui.base";
@@ -0,0 +1,51 @@
1
+ // src/hooks/use-meta-color.ts
2
+ import * as React from "react";
3
+ import { useTheme } from "next-themes";
4
+ import { META_THEME_COLORS, THEME_MODES } from "@pelatform/ui.general";
5
+ function useMetaColor(defaultColors) {
6
+ const { resolvedTheme } = useTheme();
7
+ const isSystemDarkMode = React.useCallback(() => {
8
+ if (typeof window === "undefined") return false;
9
+ return window.matchMedia("(prefers-color-scheme: dark)").matches;
10
+ }, []);
11
+ const getEffectiveTheme = React.useCallback(
12
+ (theme) => {
13
+ if (theme === THEME_MODES.SYSTEM) {
14
+ return isSystemDarkMode() ? THEME_MODES.DARK : THEME_MODES.LIGHT;
15
+ }
16
+ return theme;
17
+ },
18
+ [isSystemDarkMode]
19
+ );
20
+ const metaColor = React.useMemo(() => {
21
+ const colorsToUse = defaultColors ?? META_THEME_COLORS;
22
+ const effectiveTheme = getEffectiveTheme(resolvedTheme);
23
+ if (effectiveTheme === THEME_MODES.DARK) {
24
+ return colorsToUse[THEME_MODES.DARK];
25
+ } else if (effectiveTheme === THEME_MODES.LIGHT) {
26
+ return colorsToUse[THEME_MODES.LIGHT];
27
+ }
28
+ return colorsToUse[THEME_MODES.LIGHT];
29
+ }, [resolvedTheme, defaultColors, getEffectiveTheme]);
30
+ const setMetaColor = React.useCallback((color) => {
31
+ const metaTag = document.querySelector('meta[name="theme-color"]');
32
+ if (metaTag) {
33
+ metaTag.setAttribute("content", color);
34
+ } else {
35
+ const newMetaTag = document.createElement("meta");
36
+ newMetaTag.name = "theme-color";
37
+ newMetaTag.content = color;
38
+ document.head.appendChild(newMetaTag);
39
+ }
40
+ }, []);
41
+ return {
42
+ /** Current meta theme color based on resolved theme */
43
+ metaColor,
44
+ /** Function to manually set meta theme color */
45
+ setMetaColor
46
+ };
47
+ }
48
+
49
+ export {
50
+ useMetaColor
51
+ };