@alviere/ui 0.8.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/package.json ADDED
@@ -0,0 +1,90 @@
1
+ {
2
+ "name": "@alviere/ui",
3
+ "version": "0.8.1",
4
+ "description": "Alviere JS Svelte UI Components - Lightweight payment components",
5
+ "type": "module",
6
+ "main": "dist/index.js",
7
+ "module": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "types": "./dist/index.d.ts"
13
+ },
14
+ "./web-components": {
15
+ "import": "./dist/web-components.js"
16
+ },
17
+ "./components": {
18
+ "import": "./dist/components.js",
19
+ "types": "./dist/components.d.ts"
20
+ },
21
+ "./themes": {
22
+ "import": "./dist/themes/index.js",
23
+ "types": "./dist/themes/index.d.ts"
24
+ },
25
+ "./themes/tokens.css": "./src/styles/themes/tokens.css",
26
+ "./themes/dark.css": "./src/styles/themes/dark.css",
27
+ "./themes/brand.css": "./src/styles/themes/brand.css",
28
+ "./themes/index.css": "./src/styles/themes/index.css"
29
+ },
30
+ "files": [
31
+ "dist",
32
+ "src/styles/themes"
33
+ ],
34
+ "dependencies": {
35
+ "lucide": "^0.544.0",
36
+ "svelte-preprocess": "^6.0.3",
37
+ "@alviere/core": "0.8.1"
38
+ },
39
+ "devDependencies": {
40
+ "@sveltejs/vite-plugin-svelte": "^6.1.0",
41
+ "@testing-library/jest-dom": "^6.9.1",
42
+ "@testing-library/svelte": "^5.2.4",
43
+ "@tsconfig/svelte": "^5.0.4",
44
+ "@types/node": "^20.0.0",
45
+ "@vitest/coverage-v8": "^3.2.4",
46
+ "@vitest/ui": "^3.2.4",
47
+ "dotenv": "^17.2.3",
48
+ "express": "^4.18.2",
49
+ "jsdom": "^26.1.0",
50
+ "node-fetch": "^2.7.0",
51
+ "querystring": "^0.2.1",
52
+ "sass": "^1.89.2",
53
+ "svelte": "^5.37.1",
54
+ "svelte-check": "^4.3.0",
55
+ "typescript": "^5.8.3",
56
+ "vite": "^6.3.5",
57
+ "vite-plugin-dts": "^3.9.1",
58
+ "vitest": "^3.2.4"
59
+ },
60
+ "peerDependencies": {
61
+ "svelte": "^4.0.0 || ^5.0.0"
62
+ },
63
+ "license": "Apache-2.0",
64
+ "publishConfig": {
65
+ "access": "public"
66
+ },
67
+ "repository": {
68
+ "type": "git",
69
+ "url": "git+https://github.com/Alviere/web-sdk.git",
70
+ "directory": "packages/ui-svelte"
71
+ },
72
+ "scripts": {
73
+ "build": "pnpm build:tokens && vite build --emptyOutDir=true",
74
+ "build:tokens": "node scripts/build-tokens.js",
75
+ "build:components": "pnpm build:tokens && vite build --config vite.components.config.ts --emptyOutDir=false",
76
+ "build:web-components": "pnpm build:tokens && vite build --config vite.web-components.config.ts --emptyOutDir=false",
77
+ "build:all": "pnpm build && pnpm build:components && pnpm build:web-components",
78
+ "dev": "pnpm build:tokens && vite serve --config vite.dev.config.ts",
79
+ "dev:build": "pnpm build:tokens && vite build --watch",
80
+ "dev:server": "pnpm build:web-components && node dev/server.js",
81
+ "dev:with-auth": "pnpm generate-jwt && pnpm dev",
82
+ "generate-jwt": "node scripts/fetch-session.js",
83
+ "type-check": "svelte-check --tsconfig ./tsconfig.json",
84
+ "clean": "rm -rf dist",
85
+ "test": "vitest",
86
+ "test:ui": "vitest --ui",
87
+ "test:run": "vitest run",
88
+ "test:coverage": "vitest run --coverage"
89
+ }
90
+ }
@@ -0,0 +1,274 @@
1
+ /* =============================================================================
2
+ ALVIERE UI - BRAND THEMES (CSS VERSION)
3
+ =============================================================================
4
+
5
+ Brand-specific theme variants for Alviere UI components.
6
+ These themes demonstrate how to customize the design tokens for different
7
+ brand identities while maintaining accessibility and usability.
8
+
9
+ Usage:
10
+ ```html
11
+ <html data-theme="brand-ocean">
12
+ <link rel="stylesheet" href="tokens.css">
13
+ <link rel="stylesheet" href="brand.css">
14
+ </html>
15
+ ```
16
+ */
17
+
18
+ /* =============================================================================
19
+ OCEAN BRAND THEME
20
+ ============================================================================= */
21
+
22
+ [data-theme="brand-ocean"],
23
+ :root[data-theme="brand-ocean"] {
24
+ /* Ocean-inspired color palette */
25
+ --alv-color-primary: #0ea5e9;
26
+ --alv-color-primary-hover: #0284c7;
27
+ --alv-color-primary-active: #0369a1;
28
+ --alv-color-primary-light: #e0f2fe;
29
+ --alv-color-primary-light-hover: #bae6fd;
30
+ --alv-color-on-primary: #ffffff;
31
+
32
+ /* Ocean-themed semantic colors */
33
+ --alv-color-success: #10b981;
34
+ --alv-color-success-light: #d1fae5;
35
+ --alv-color-success-border: #a7f3d0;
36
+ --alv-color-success-text: #065f46;
37
+ --alv-color-on-success: #ffffff;
38
+
39
+ --alv-color-error: #ef4444;
40
+ --alv-color-error-light: #fee2e2;
41
+ --alv-color-error-border: #fecaca;
42
+ --alv-color-error-text: #991b1b;
43
+ --alv-color-on-error: #ffffff;
44
+
45
+ --alv-color-warning: #f59e0b;
46
+ --alv-color-warning-light: #fef3c7;
47
+ --alv-color-warning-border: #fde68a;
48
+ --alv-color-warning-text: #92400e;
49
+ --alv-color-on-warning: #ffffff;
50
+
51
+ --alv-color-info: #06b6d4;
52
+ --alv-color-info-light: #cffafe;
53
+ --alv-color-info-border: #a5f3fc;
54
+ --alv-color-info-text: #155e75;
55
+ --alv-color-on-info: #ffffff;
56
+
57
+ /* Ocean-inspired neutral palette */
58
+ --alv-color-gray-50: #f8fafc;
59
+ --alv-color-gray-100: #f1f5f9;
60
+ --alv-color-gray-200: #e2e8f0;
61
+ --alv-color-gray-300: #cbd5e1;
62
+ --alv-color-gray-400: #94a3b8;
63
+ --alv-color-gray-500: #64748b;
64
+ --alv-color-gray-600: #475569;
65
+ --alv-color-gray-700: #334155;
66
+ --alv-color-gray-800: #1e293b;
67
+ --alv-color-gray-900: #0f172a;
68
+
69
+ /* Ocean-themed surface colors */
70
+ --alv-color-surface: #ffffff;
71
+ --alv-color-surface-secondary: #f8fafc;
72
+ --alv-color-surface-tertiary: #f1f5f9;
73
+ --alv-color-surface-elevated: #ffffff;
74
+
75
+ /* Ocean-themed text colors */
76
+ --alv-color-text-primary: #0f172a;
77
+ --alv-color-text-secondary: #475569;
78
+ --alv-color-text-tertiary: #64748b;
79
+ --alv-color-text-disabled: #94a3b8;
80
+ --alv-color-text-on-primary: #ffffff;
81
+ --alv-color-text-on-surface: #0f172a;
82
+
83
+ /* Ocean-themed borders */
84
+ --alv-color-border: #e2e8f0;
85
+ --alv-color-border-hover: #cbd5e1;
86
+ --alv-color-border-focus: #0ea5e9;
87
+ --alv-color-border-error: #ef4444;
88
+ --alv-color-border-success: #10b981;
89
+
90
+ /* Ocean-themed backgrounds */
91
+ --alv-color-background: #ffffff;
92
+ --alv-color-background-disabled: #f1f5f9;
93
+ --alv-color-background-hover: #f8fafc;
94
+ --alv-color-background-active: #f1f5f9;
95
+
96
+ /* Component-specific ocean theme */
97
+ --alv-button-secondary-bg-hover: #e0f2fe;
98
+ --alv-button-secondary-bg-active: #bae6fd;
99
+ --alv-spinner-color: var(--alv-color-primary);
100
+ --alv-timeline-color: var(--alv-color-gray-500);
101
+ --alv-timeline-completed-color: var(--alv-color-success);
102
+ }
103
+
104
+ /* =============================================================================
105
+ FOREST BRAND THEME
106
+ ============================================================================= */
107
+
108
+ [data-theme="brand-forest"],
109
+ :root[data-theme="brand-forest"] {
110
+ /* Forest-inspired color palette */
111
+ --alv-color-primary: #059669;
112
+ --alv-color-primary-hover: #047857;
113
+ --alv-color-primary-active: #065f46;
114
+ --alv-color-primary-light: #d1fae5;
115
+ --alv-color-primary-light-hover: #a7f3d0;
116
+ --alv-color-on-primary: #ffffff;
117
+
118
+ /* Forest-themed semantic colors */
119
+ --alv-color-success: #10b981;
120
+ --alv-color-success-light: #d1fae5;
121
+ --alv-color-success-border: #a7f3d0;
122
+ --alv-color-success-text: #065f46;
123
+ --alv-color-on-success: #ffffff;
124
+
125
+ --alv-color-error: #dc2626;
126
+ --alv-color-error-light: #fee2e2;
127
+ --alv-color-error-border: #fecaca;
128
+ --alv-color-error-text: #991b1b;
129
+ --alv-color-on-error: #ffffff;
130
+
131
+ --alv-color-warning: #d97706;
132
+ --alv-color-warning-light: #fef3c7;
133
+ --alv-color-warning-border: #fde68a;
134
+ --alv-color-warning-text: #92400e;
135
+ --alv-color-on-warning: #ffffff;
136
+
137
+ --alv-color-info: #0891b2;
138
+ --alv-color-info-light: #cffafe;
139
+ --alv-color-info-border: #a5f3fc;
140
+ --alv-color-info-text: #155e75;
141
+ --alv-color-on-info: #ffffff;
142
+
143
+ /* Forest-inspired neutral palette */
144
+ --alv-color-gray-50: #f9fafb;
145
+ --alv-color-gray-100: #f3f4f6;
146
+ --alv-color-gray-200: #e5e7eb;
147
+ --alv-color-gray-300: #d1d5db;
148
+ --alv-color-gray-400: #9ca3af;
149
+ --alv-color-gray-500: #6b7280;
150
+ --alv-color-gray-600: #4b5563;
151
+ --alv-color-gray-700: #374151;
152
+ --alv-color-gray-800: #1f2937;
153
+ --alv-color-gray-900: #111827;
154
+
155
+ /* Forest-themed surface colors */
156
+ --alv-color-surface: #ffffff;
157
+ --alv-color-surface-secondary: #f9fafb;
158
+ --alv-color-surface-tertiary: #f3f4f6;
159
+ --alv-color-surface-elevated: #ffffff;
160
+
161
+ /* Forest-themed text colors */
162
+ --alv-color-text-primary: #111827;
163
+ --alv-color-text-secondary: #4b5563;
164
+ --alv-color-text-tertiary: #6b7280;
165
+ --alv-color-text-disabled: #9ca3af;
166
+ --alv-color-text-on-primary: #ffffff;
167
+ --alv-color-text-on-surface: #111827;
168
+
169
+ /* Forest-themed borders */
170
+ --alv-color-border: #e5e7eb;
171
+ --alv-color-border-hover: #d1d5db;
172
+ --alv-color-border-focus: #059669;
173
+ --alv-color-border-error: #dc2626;
174
+ --alv-color-border-success: #10b981;
175
+
176
+ /* Forest-themed backgrounds */
177
+ --alv-color-background: #ffffff;
178
+ --alv-color-background-disabled: #f3f4f6;
179
+ --alv-color-background-hover: #f9fafb;
180
+ --alv-color-background-active: #f3f4f6;
181
+
182
+ /* Component-specific forest theme */
183
+ --alv-button-secondary-bg-hover: #d1fae5;
184
+ --alv-button-secondary-bg-active: #a7f3d0;
185
+ --alv-spinner-color: var(--alv-color-primary);
186
+ --alv-timeline-color: var(--alv-color-gray-500);
187
+ --alv-timeline-completed-color: var(--alv-color-success);
188
+ }
189
+
190
+ /* =============================================================================
191
+ SUNSET BRAND THEME
192
+ ============================================================================= */
193
+
194
+ [data-theme="brand-sunset"],
195
+ :root[data-theme="brand-sunset"] {
196
+ /* Sunset-inspired color palette */
197
+ --alv-color-primary: #ea580c;
198
+ --alv-color-primary-hover: #c2410c;
199
+ --alv-color-primary-active: #9a3412;
200
+ --alv-color-primary-light: #fed7aa;
201
+ --alv-color-primary-light-hover: #fdba74;
202
+ --alv-color-on-primary: #ffffff;
203
+
204
+ /* Sunset-themed semantic colors */
205
+ --alv-color-success: #16a34a;
206
+ --alv-color-success-light: #dcfce7;
207
+ --alv-color-success-border: #bbf7d0;
208
+ --alv-color-success-text: #166534;
209
+ --alv-color-on-success: #ffffff;
210
+
211
+ --alv-color-error: #dc2626;
212
+ --alv-color-error-light: #fee2e2;
213
+ --alv-color-error-border: #fecaca;
214
+ --alv-color-error-text: #991b1b;
215
+ --alv-color-on-error: #ffffff;
216
+
217
+ --alv-color-warning: #eab308;
218
+ --alv-color-warning-light: #fef3c7;
219
+ --alv-color-warning-border: #fde68a;
220
+ --alv-color-warning-text: #92400e;
221
+ --alv-color-on-warning: #ffffff;
222
+
223
+ --alv-color-info: #0891b2;
224
+ --alv-color-info-light: #cffafe;
225
+ --alv-color-info-border: #a5f3fc;
226
+ --alv-color-info-text: #155e75;
227
+ --alv-color-on-info: #ffffff;
228
+
229
+ /* Sunset-inspired neutral palette */
230
+ --alv-color-gray-50: #fefefe;
231
+ --alv-color-gray-100: #fef2f2;
232
+ --alv-color-gray-200: #fecaca;
233
+ --alv-color-gray-300: #fca5a5;
234
+ --alv-color-gray-400: #f87171;
235
+ --alv-color-gray-500: #ef4444;
236
+ --alv-color-gray-600: #dc2626;
237
+ --alv-color-gray-700: #b91c1c;
238
+ --alv-color-gray-800: #991b1b;
239
+ --alv-color-gray-900: #7f1d1d;
240
+
241
+ /* Sunset-themed surface colors */
242
+ --alv-color-surface: #ffffff;
243
+ --alv-color-surface-secondary: #fefefe;
244
+ --alv-color-surface-tertiary: #fef2f2;
245
+ --alv-color-surface-elevated: #ffffff;
246
+
247
+ /* Sunset-themed text colors */
248
+ --alv-color-text-primary: #7f1d1d;
249
+ --alv-color-text-secondary: #b91c1c;
250
+ --alv-color-text-tertiary: #dc2626;
251
+ --alv-color-text-disabled: #f87171;
252
+ --alv-color-text-on-primary: #ffffff;
253
+ --alv-color-text-on-surface: #7f1d1d;
254
+
255
+ /* Sunset-themed borders */
256
+ --alv-color-border: #fecaca;
257
+ --alv-color-border-hover: #fca5a5;
258
+ --alv-color-border-focus: #ea580c;
259
+ --alv-color-border-error: #dc2626;
260
+ --alv-color-border-success: #16a34a;
261
+
262
+ /* Sunset-themed backgrounds */
263
+ --alv-color-background: #ffffff;
264
+ --alv-color-background-disabled: #fef2f2;
265
+ --alv-color-background-hover: #fefefe;
266
+ --alv-color-background-active: #fef2f2;
267
+
268
+ /* Component-specific sunset theme */
269
+ --alv-button-secondary-bg-hover: #fed7aa;
270
+ --alv-button-secondary-bg-active: #fdba74;
271
+ --alv-spinner-color: var(--alv-color-primary);
272
+ --alv-timeline-color: var(--alv-color-gray-500);
273
+ --alv-timeline-completed-color: var(--alv-color-success);
274
+ }
@@ -0,0 +1,112 @@
1
+ /* =============================================================================
2
+ ALVIERE UI - DARK THEME (CSS VERSION)
3
+ =============================================================================
4
+
5
+ Dark theme variant for Alviere UI components.
6
+ Apply by adding data-theme="dark" to your root element.
7
+
8
+ Usage:
9
+ ```html
10
+ <html data-theme="dark">
11
+ <link rel="stylesheet" href="tokens.css">
12
+ <link rel="stylesheet" href="dark.css">
13
+ </html>
14
+ ```
15
+ */
16
+
17
+ [data-theme="dark"],
18
+ :root[data-theme="dark"] {
19
+ /* Primary brand colors (adjusted for dark mode) */
20
+ --alv-color-primary: #60a5fa;
21
+ --alv-color-primary-hover: #3b82f6;
22
+ --alv-color-primary-active: #2563eb;
23
+ --alv-color-primary-light: #1e3a8a;
24
+ --alv-color-primary-light-hover: #1e40af;
25
+ --alv-color-on-primary: #0b1220;
26
+
27
+ /* Semantic status colors (adjusted for dark mode) */
28
+ --alv-color-success: #22c55e;
29
+ --alv-color-success-light: #14532d;
30
+ --alv-color-success-border: #166534;
31
+ --alv-color-success-text: #dcfce7;
32
+ --alv-color-on-success: #0b1220;
33
+
34
+ --alv-color-error: #ef4444;
35
+ --alv-color-error-light: #7f1d1d;
36
+ --alv-color-error-border: #991b1b;
37
+ --alv-color-error-text: #fecaca;
38
+ --alv-color-on-error: #ffffff;
39
+
40
+ --alv-color-warning: #f59e0b;
41
+ --alv-color-warning-light: #78350f;
42
+ --alv-color-warning-border: #92400e;
43
+ --alv-color-warning-text: #fef3c7;
44
+ --alv-color-on-warning: #0b1220;
45
+
46
+ --alv-color-info: #06b6d4;
47
+ --alv-color-info-light: #164e63;
48
+ --alv-color-info-border: #0e7490;
49
+ --alv-color-info-text: #cffafe;
50
+ --alv-color-on-info: #0b1220;
51
+
52
+ /* Neutral grayscale (inverted for dark mode) */
53
+ --alv-color-gray-50: #18181b;
54
+ --alv-color-gray-100: #27272a;
55
+ --alv-color-gray-200: #3f3f46;
56
+ --alv-color-gray-300: #52525b;
57
+ --alv-color-gray-400: #71717a;
58
+ --alv-color-gray-500: #a1a1aa;
59
+ --alv-color-gray-600: #d4d4d8;
60
+ --alv-color-gray-700: #e4e4e7;
61
+ --alv-color-gray-800: #f4f4f5;
62
+ --alv-color-gray-900: #fafafa;
63
+
64
+ /* Surface colors */
65
+ --alv-color-surface: #0b1220;
66
+ --alv-color-surface-secondary: #1e293b;
67
+ --alv-color-surface-tertiary: #334155;
68
+ --alv-color-surface-elevated: #1e293b;
69
+
70
+ /* Text colors */
71
+ --alv-color-text-primary: #f8fafc;
72
+ --alv-color-text-secondary: #cbd5e1;
73
+ --alv-color-text-tertiary: #94a3b8;
74
+ --alv-color-text-disabled: #64748b;
75
+ --alv-color-text-on-primary: #0b1220;
76
+ --alv-color-text-on-surface: #f8fafc;
77
+
78
+ /* Border colors */
79
+ --alv-color-border: #334155;
80
+ --alv-color-border-hover: #475569;
81
+ --alv-color-border-focus: #60a5fa;
82
+ --alv-color-border-error: #ef4444;
83
+ --alv-color-border-success: #22c55e;
84
+
85
+ /* Background colors */
86
+ --alv-color-background: #0b1220;
87
+ --alv-color-background-disabled: #1e293b;
88
+ --alv-color-background-hover: #1e293b;
89
+ --alv-color-background-active: #334155;
90
+
91
+ /* Component-specific adjustments */
92
+ --alv-button-secondary-bg-hover: #1e3a8a;
93
+ --alv-button-secondary-bg-active: #1e40af;
94
+ --alv-button-tertiary-bg-hover: #334155;
95
+ --alv-button-tertiary-bg-active: #475569;
96
+
97
+ --alv-spinner-color: var(--alv-color-text-primary);
98
+ --alv-timeline-color: var(--alv-color-gray-400);
99
+ --alv-timeline-pending-color: var(--alv-color-gray-500);
100
+
101
+ --alv-badge-secondary-bg: var(--alv-color-gray-700);
102
+ --alv-badge-secondary-text: var(--alv-color-gray-100);
103
+
104
+ --alv-list-bg: var(--alv-color-surface);
105
+ --alv-list-border: var(--alv-color-border);
106
+ --alv-list-item-bg-hover: var(--alv-color-background-hover);
107
+ --alv-list-item-bg-active: var(--alv-color-background-active);
108
+
109
+ --alv-radio-border: var(--alv-color-border);
110
+ --alv-radio-border-hover: var(--alv-color-border-hover);
111
+ --alv-radio-bg: var(--alv-color-background);
112
+ }
@@ -0,0 +1,23 @@
1
+ // =============================================================================
2
+ // ALVIERE UI THEME PACKAGES
3
+ // =============================================================================
4
+ //
5
+ // Pre-built theme CSS packages for easy integration.
6
+ // Import these files in your application to apply themes.
7
+ //
8
+ // Usage:
9
+ // ```html
10
+ // <!-- Base tokens (required) -->
11
+ // <link rel="stylesheet" href="node_modules/@alviere/ui/themes/tokens.css">
12
+ //
13
+ // <!-- Theme variants (optional) -->
14
+ // <link rel="stylesheet" href="node_modules/@alviere/ui/themes/dark.css">
15
+ // <link rel="stylesheet" href="node_modules/@alviere/ui/themes/brand-ocean.css">
16
+ // ```
17
+
18
+ /* Import base design tokens */
19
+ @import './tokens.css';
20
+
21
+ /* Import theme variants */
22
+ @import './dark.css';
23
+ @import './brand.css';