digital-zen-pack 0.0.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/index.html ADDED
@@ -0,0 +1,12 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
6
+ <title>digital-zen-pack</title>
7
+ </head>
8
+ <body>
9
+ <div id="app"></div>
10
+ <script type="module" src="/src/main.ts"></script>
11
+ </body>
12
+ </html>
package/package.json ADDED
@@ -0,0 +1,15 @@
1
+ {
2
+ "name": "digital-zen-pack",
3
+ "version": "0.0.1",
4
+ "type": "module",
5
+ "devDependencies": {
6
+ "sass": "^1.97.2",
7
+ "typescript": "~5.9.3",
8
+ "vite": "^7.2.4"
9
+ },
10
+ "scripts": {
11
+ "dev": "vite",
12
+ "build": "tsc && vite build",
13
+ "preview": "vite preview"
14
+ }
15
+ }
package/src/main.ts ADDED
@@ -0,0 +1 @@
1
+ import './style.scss'
package/src/style.scss ADDED
@@ -0,0 +1,2 @@
1
+ @import url(./styles/_variables.scss);
2
+ @import url(./styles/_components.scss);
@@ -0,0 +1,500 @@
1
+ .dz-button {
2
+ display: flex;
3
+ gap: var(--button-text-icon-gap);
4
+ align-items: center;
5
+ border-radius: var(--radius);
6
+ padding: var(--spacing);
7
+ font-size: var(--font-size-md);
8
+ cursor: pointer;
9
+ background-color: var(--color-component-bg-light);
10
+ color: var(--color-component-text-light);
11
+ justify-content: center;
12
+
13
+ &--xs {
14
+ height: var(--btn-size-xs);
15
+ padding: var(--spacing-xs);
16
+ border-radius: var(--radius-xs);
17
+ }
18
+ &--sm {
19
+ height: var(--btn-size-sm);
20
+ padding: var(--spacing-sm);
21
+ }
22
+ &--md {
23
+ height: var(--btn-size-md);
24
+ padding: var(--spacing-md);
25
+ }
26
+ &--lg {
27
+ height: var(--btn-size-lg);
28
+ padding: var(--spacing-lg);
29
+ }
30
+ &--xl {
31
+ height: var(--btn-size-xl);
32
+ padding: var(--spacing-xl);
33
+ }
34
+ &--xxl {
35
+ height: var(--btn-size-xxl);
36
+ padding: var(--spacing-xxl);
37
+ }
38
+
39
+ &--round,
40
+ &--square {
41
+ aspect-ratio: 1 / 1;
42
+ }
43
+
44
+ &--round {
45
+ border-radius: 99999px;
46
+ }
47
+
48
+ &--activated {
49
+ background-color: var(--color-zen-accent);
50
+ color: var(--color-on-accent);
51
+ }
52
+
53
+ &--error {
54
+ background-color: var(--color-zen-error);
55
+ color: var(--color-on-accent);
56
+ }
57
+
58
+ &--ghost {
59
+ background-color: transparent;
60
+ color: var(--color-component-bg-dark);
61
+ border: 1px solid var(--color-component-bg-dark);
62
+ }
63
+
64
+ &.dz-button--ghost {
65
+ &.dz-button--activated {
66
+ background-color: transparent;
67
+ color: var(--color-zen-accent);
68
+ border: 1px solid var(--color-zen-accent);
69
+ }
70
+ }
71
+
72
+ &.dz-button--ghost {
73
+ &.dz-button--error {
74
+ background-color: transparent;
75
+ color: var(--color-zen-error);
76
+ border: 1px solid var(--color-zen-error);
77
+ }
78
+ }
79
+
80
+ &:disabled {
81
+ cursor: not-allowed;
82
+ pointer-events: none;
83
+ filter: grayscale(50%);
84
+ }
85
+ }
86
+
87
+ .dz-icon {
88
+ height: var(--icon-height);
89
+ aspect-ratio: 1 / 1;
90
+
91
+ use {
92
+ width: 100%;
93
+ height: 100%;
94
+ }
95
+
96
+ &--shadow {
97
+ filter: drop-shadow(0 1px 1px var(--color-component-text-light));
98
+ }
99
+ }
100
+
101
+ .dz-form {
102
+ display: flex;
103
+ flex-direction: column;
104
+ align-items: center;
105
+ width: 100%;
106
+
107
+ &--text-start {
108
+ justify-content: flex-start;
109
+ text-align: start;
110
+ }
111
+
112
+ &__error {
113
+ width: 100%;
114
+ margin: var(--list-gap) 0;
115
+ }
116
+ }
117
+
118
+ .dz-input {
119
+ display: block;
120
+ width: 100%;
121
+ height: var(--btn-size-md);
122
+ padding: var(--spacing);
123
+ border-radius: var(--radius);
124
+ border: 2px solid var(--color-zen-accent);
125
+ outline: none;
126
+ background-color: var(--color-component-bg-light);
127
+ color: var(--color-component-text-light);
128
+ box-shadow: 0 0 var(--shadow-blur) var(--shadow-color);
129
+ transition:
130
+ background-color 0.2s ease,
131
+ color 0.2s ease,
132
+ box-shadow 0.2s ease;
133
+ font-size: var(--font-size-sm);
134
+
135
+ &::placeholder {
136
+ color: var(--color-component-text-light);
137
+ opacity: 0.6;
138
+ font-size: var(--font-size-xs);
139
+ }
140
+
141
+ &:focus {
142
+ box-shadow: 0 0 0 1px var(--color-zen-accent);
143
+ }
144
+
145
+ &--invalid {
146
+ border: 2px solid var(--color-zen-error);
147
+
148
+ &:focus {
149
+ box-shadow: 0 0 0 1px var(--color-zen-error);
150
+ }
151
+ }
152
+
153
+ &--textarea {
154
+ height: auto;
155
+ min-height: calc(var(--btn-size-md) + 1px);
156
+ padding: var(--spacing);
157
+ resize: vertical;
158
+ }
159
+
160
+ &::-webkit-calendar-picker-indicator {
161
+ mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' fill='currentColor' viewBox='0 0 24 24' %3E%3Cg%3E%3Cpath d='M9 11H7v2h2v-2zm4 0h-2v2h2v-2zm4 0h-2v2h2v-2zm2-7h-1V2h-2v2H8V2H6v2H5c-1.11 0-1.99.9-1.99 2L3 20c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 16H5V9h14v11z'%3E%3C/path%3E%3C/g%3E%3C/svg%3E");
162
+ background-repeat: no-repeat;
163
+ background-image: none;
164
+ background-color: currentColor;
165
+ cursor: pointer;
166
+ }
167
+
168
+ &--fit {
169
+ width: max-content;
170
+ }
171
+
172
+ &--borderless {
173
+ border: none;
174
+ }
175
+ }
176
+
177
+ .dz-list,
178
+ .dz-form {
179
+ display: flex;
180
+ gap: var(--list-gap);
181
+ flex-wrap: wrap;
182
+ flex-direction: column;
183
+
184
+ &--horizontal {
185
+ flex-direction: row;
186
+ }
187
+
188
+ &--fit {
189
+ width: max-content;
190
+ }
191
+
192
+ &--full {
193
+ width: 100%;
194
+ }
195
+ }
196
+
197
+ .dz-form {
198
+ &__field {
199
+ width: 100%;
200
+ text-align: start;
201
+ }
202
+
203
+ &__hint {
204
+ width: 100%;
205
+ font-size: var(--font-size-xs);
206
+ color: var(--color-glass-text);
207
+ }
208
+
209
+ &__required {
210
+ color: var(--color-zen-error);
211
+ }
212
+
213
+ &--fit {
214
+ width: max-content;
215
+ }
216
+
217
+ &__actions {
218
+ display: flex;
219
+ gap: var(--spacing);
220
+ justify-content: flex-end;
221
+ width: 100%;
222
+ margin-top: var(--spacing);
223
+ }
224
+ }
225
+
226
+ .dz-box {
227
+ width: 100%;
228
+ padding: var(--spacing);
229
+ border-radius: var(--radius);
230
+
231
+ &--fit {
232
+ width: max-content;
233
+ }
234
+
235
+ &--colored {
236
+ background-color: var(--color-component-bg-dark);
237
+ color: var(--color-component-text-dark);
238
+ }
239
+ }
240
+
241
+ .dz-placeholder {
242
+ position: relative;
243
+ padding: var(--spacing);
244
+ display: flex;
245
+ flex-direction: column;
246
+ align-items: center;
247
+ justify-content: center;
248
+ gap: var(--spacing);
249
+ width: 100%;
250
+ min-height: var(--placeholder-height);
251
+ border-radius: var(--radius);
252
+ background-color: var(--color-component-bg-light);
253
+ color: var(--color-component-text-light);
254
+ text-align: center;
255
+ font-size: var(--font-size-sm);
256
+ font-style: italic;
257
+ opacity: 0.85;
258
+ transition:
259
+ opacity 0.2s ease,
260
+ background-color 0.2s ease,
261
+ box-shadow 0.3s ease;
262
+
263
+ &.shadow {
264
+ box-shadow: 0 2px 6px var(--shadow-color);
265
+ }
266
+
267
+ &--fit {
268
+ width: max-content;
269
+ }
270
+
271
+ &--accent {
272
+ background-color: var(--color-zen-accent);
273
+ color: var(--color-on-accent);
274
+ }
275
+
276
+ &--error {
277
+ background-color: var(--color-zen-error);
278
+ color: var(--color-on-accent);
279
+ }
280
+
281
+ &--warn {
282
+ background-color: var(--color-zen-warn);
283
+ color: var(--color-on-warn);
284
+ }
285
+
286
+ .dz-placeholder__icon {
287
+ width: var(--btn-size-md);
288
+ }
289
+
290
+ .dz-placeholder__text {
291
+ max-width: 80%;
292
+ }
293
+ }
294
+
295
+ .dz-accordion {
296
+ width: 100%;
297
+ border-radius: var(--radius);
298
+ background-color: var(--color-component-bg-light);
299
+ color: var(--color-component-text-light);
300
+ box-shadow: 0 2px 4px var(--shadow-color);
301
+ overflow: hidden;
302
+ transition: background-color 0.3s ease;
303
+
304
+ &[open] {
305
+ background-color: var(--color-component-bg-dark);
306
+ color: var(--color-component-text-dark);
307
+
308
+ .dz-accordion__icon {
309
+ transform: rotate(180deg);
310
+ }
311
+ }
312
+
313
+ &__header {
314
+ display: flex;
315
+ justify-content: space-between;
316
+ align-items: center;
317
+ padding: var(--spacing);
318
+ cursor: pointer;
319
+ list-style: none;
320
+ transition: background-color 0.3s ease;
321
+ font-size: var(--font-size-md);
322
+
323
+ &::-webkit-details-marker {
324
+ display: none;
325
+ }
326
+ }
327
+
328
+ &__icon {
329
+ display: flex;
330
+ align-items: center;
331
+ justify-content: center;
332
+ transition: transform 0.3s ease;
333
+ width: var(--btn-size-xs);
334
+ }
335
+
336
+ &__content {
337
+ padding: var(--spacing);
338
+ font-size: var(--font-size-sm);
339
+ border-top: 1px solid var(--color-glass-text);
340
+ }
341
+ }
342
+
343
+ .dz-accordion--sm .dz-accordion__header {
344
+ padding: var(--spacing-sm);
345
+ font-size: var(--font-size-sm);
346
+ }
347
+
348
+ .dz-accordion--lg .dz-accordion__header {
349
+ padding: var(--spacing-lg);
350
+ font-size: var(--font-size-lg);
351
+ }
352
+
353
+ .dz-accordion--accent {
354
+ border: 1px solid var(--color-zen-accent);
355
+
356
+ &[open] {
357
+ background-color: var(--color-zen-accent);
358
+ color: var(--color-on-accent);
359
+ }
360
+ }
361
+
362
+ .dz-accordion--error {
363
+ border: 1px solid var(--color-zen-error);
364
+
365
+ &[open] {
366
+ background-color: var(--color-zen-error);
367
+ color: var(--color-on-accent);
368
+ }
369
+ }
370
+
371
+ .dz-fieldset {
372
+ display: flex;
373
+ padding: var(--spacing-md);
374
+ border: none;
375
+ border-radius: var(--radius);
376
+ background-color: var(--color-component-bg-light);
377
+ color: var(--color-component-text-light);
378
+ flex-direction: column;
379
+ align-items: center;
380
+ justify-content: center;
381
+ gap: var(--spacing);
382
+
383
+ &--fit {
384
+ max-width: max-content;
385
+ }
386
+
387
+ &.dz-fieldset--dark {
388
+ background-color: var(--color-component-bg-dark);
389
+ color: var(--color-component-text-dark);
390
+ border-color: var(--color-component-bg-light);
391
+ }
392
+
393
+ &__legend {
394
+ font-size: var(--font-size-sm);
395
+ font-weight: 600;
396
+ padding: 0 var(--spacing-sm);
397
+ color: var(--color-text);
398
+
399
+ &--error {
400
+ color: var(--color-zen-error);
401
+ }
402
+
403
+ &--accent {
404
+ color: var(--color-zen-accent);
405
+ }
406
+ }
407
+ }
408
+
409
+ .dz-banner {
410
+ display: flex;
411
+ align-items: center;
412
+ gap: var(--spacing);
413
+ width: 100%;
414
+ padding: var(--spacing);
415
+ border-radius: var(--radius);
416
+ font-size: var(--font-size-sm);
417
+ border-left: 4px solid transparent;
418
+ transition:
419
+ background-color 0.2s ease,
420
+ color 0.2s ease,
421
+ border-color 0.2s ease;
422
+
423
+ &__icon {
424
+ flex-shrink: 0;
425
+ width: var(--btn-size-sm);
426
+ height: var(--btn-size-sm);
427
+ display: flex;
428
+ align-items: center;
429
+ justify-content: center;
430
+ }
431
+
432
+ &__content {
433
+ flex: 1;
434
+ display: flex;
435
+ flex-direction: column;
436
+ gap: var(--spacing-xs);
437
+ }
438
+
439
+ &__title {
440
+ font-weight: 600;
441
+ font-size: var(--font-size-md);
442
+ }
443
+
444
+ &__message {
445
+ font-size: var(--font-size-sm);
446
+ line-height: 1.4;
447
+ }
448
+
449
+ &--info {
450
+ background-color: var(--color-zen-accent);
451
+ color: var(--color-on-accent);
452
+ border-left-color: var(--color-zen-accent);
453
+ }
454
+
455
+ &--success {
456
+ background-color: var(--color-zen-success);
457
+ color: var(--color-on-success);
458
+ border-left-color: var(--color-zen-success);
459
+ }
460
+
461
+ &--warn {
462
+ background-color: var(--color-zen-warn);
463
+ color: var(--color-on-warn);
464
+ border-left-color: var(--color-zen-warn);
465
+ }
466
+
467
+ &--error {
468
+ background-color: var(--color-zen-error);
469
+ color: var(--color-on-accent);
470
+ border-left-color: var(--color-zen-error);
471
+ }
472
+
473
+ &--sm {
474
+ padding: var(--spacing-sm);
475
+ font-size: var(--font-size-xs);
476
+
477
+ .dz-banner__icon {
478
+ width: var(--btn-size-xs);
479
+ height: var(--btn-size-xs);
480
+ }
481
+
482
+ .dz-banner__title {
483
+ font-size: var(--font-size-sm);
484
+ }
485
+ }
486
+
487
+ &--lg {
488
+ padding: var(--spacing-lg);
489
+ font-size: var(--font-size-md);
490
+
491
+ .dz-banner__icon {
492
+ width: var(--btn-size-md);
493
+ height: var(--btn-size-md);
494
+ }
495
+
496
+ .dz-banner__title {
497
+ font-size: var(--font-size-lg);
498
+ }
499
+ }
500
+ }
@@ -0,0 +1,75 @@
1
+ .shadow {
2
+ box-shadow: 0 4px 6px var(--shadow-color);
3
+ transition:
4
+ transform 0.3s,
5
+ box-shadow 0.3s;
6
+
7
+ &:hover {
8
+ box-shadow: 0 6px 8px var(--shadow-color);
9
+
10
+ &:has(.shadow:hover) {
11
+ box-shadow: 0 4px 6px var(--shadow-color);
12
+ }
13
+ }
14
+
15
+ &--activated {
16
+ box-shadow: 0 4px 6px var(--color-zen-accent);
17
+
18
+ &:hover {
19
+ box-shadow: 0 6px 8px var(--color-zen-accent);
20
+
21
+ &:has(.shadow:hover) {
22
+ box-shadow: 0 4px 6px var(--color-zen-accent);
23
+ }
24
+ }
25
+ }
26
+
27
+ &--hoverless {
28
+ &:hover {
29
+ box-shadow: 0 4px 6px var(--shadow-color);
30
+ }
31
+ }
32
+ }
33
+
34
+ @keyframes pulse {
35
+ 0% {
36
+ transform: scale(1);
37
+ }
38
+ 70% {
39
+ transform: scale(1.3);
40
+ }
41
+ 100% {
42
+ transform: scale(1);
43
+ }
44
+ }
45
+
46
+ .pulse {
47
+ animation: pulse 3s infinite;
48
+ }
49
+
50
+ @keyframes rotate {
51
+ 0% {
52
+ transform: rotate(0deg);
53
+ }
54
+ 100% {
55
+ transform: rotate(360deg);
56
+ }
57
+ }
58
+
59
+ .rotate {
60
+ animation: rotate 2s linear infinite;
61
+ }
62
+
63
+ .round {
64
+ border-radius: 99999px;
65
+ }
66
+
67
+ .hidden {
68
+ display: none !important;
69
+ pointer-events: none !important;
70
+ height: 0 !important;
71
+ width: 0 !important;
72
+ margin: 0 !important;
73
+ padding: 0 !important;
74
+ overflow: hidden !important;
75
+ }
@@ -0,0 +1,65 @@
1
+ :root {
2
+ /* Цветовые токены */
3
+ --color-background: #f9fafc;
4
+ --color-text: #334155;
5
+ --color-zen-accent: #ac37ff;
6
+ --color-zen-warn: #d3b334;
7
+ --color-zen-error: #d33434;
8
+ --color-zen-success: #22a865;
9
+ --color-on-warn: #475569;
10
+ --color-on-accent: #f1f5f9;
11
+ --color-on-success: #f1f5f9;
12
+ --color-component-bg-light: #f1f5f9;
13
+ --color-component-text-light: #475569;
14
+ --color-component-bg-dark: #334155;
15
+ --color-component-text-dark: #f1f5f9;
16
+ --color-glass-text: rgba(71, 85, 105, 0.5);
17
+
18
+ /* Размеры кнопок */
19
+ --btn-size-xs: 24px;
20
+ --btn-size-sm: 32px;
21
+ --btn-size-md: 48px;
22
+ --btn-size-lg: 64px;
23
+ --btn-size-xl: 96px;
24
+ --btn-size-xxl: 130px;
25
+
26
+ /* Размеры текста */
27
+ --font-size-xxs: 10px;
28
+ --font-size-xs: 12px;
29
+ --font-size-sm: 14px;
30
+ --font-size-md: 16px;
31
+ --font-size-lg: 18px;
32
+ --font-size-xl: 20px;
33
+ --font-size-xxl: 24px;
34
+
35
+ /* Общие переменные */
36
+ --spacing: 8px;
37
+ --radius: 12px;
38
+ --radius-xs: 8px;
39
+ --spacing-xs: 4px;
40
+ --spacing-sm: 6px;
41
+ --spacing-md: 12px;
42
+ --spacing-lg: 16px;
43
+ --spacing-xl: 24px;
44
+ --spacing-xxl: 32px;
45
+ --icon-height: 100%;
46
+ --shadow-color: rgba(0, 0, 0, 0.25);
47
+ --shadow-blur: 12px;
48
+ --shadow-translate-width: 2px;
49
+ --list-gap: 0.5rem;
50
+ --loader-size: 24px;
51
+ --button-text-icon-gap: 0.5rem;
52
+ --placeholder-height: 5rem;
53
+ }
54
+
55
+ /* Для тёмной темы переопределяем только цвета */
56
+ .dark-theme {
57
+ --color-background: #1e293b;
58
+ --color-text: #e2e8f0;
59
+ --color-component-bg-light: #475569;
60
+ --color-component-text-light: #f1f5f9;
61
+ --color-component-bg-dark: #f1f5f9;
62
+ --color-component-text-dark: #475569;
63
+ --color-glass-text: rgba(241, 245, 249, 0.5);
64
+ --shadow-color: rgba(0, 0, 0, 0.8);
65
+ }
package/tsconfig.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "compilerOptions": {
3
+ "target": "ES2022",
4
+ "useDefineForClassFields": true,
5
+ "module": "ESNext",
6
+ "lib": ["ES2022", "DOM", "DOM.Iterable"],
7
+ "types": ["vite/client"],
8
+ "skipLibCheck": true,
9
+
10
+ /* Bundler mode */
11
+ "moduleResolution": "bundler",
12
+ "allowImportingTsExtensions": true,
13
+ "verbatimModuleSyntax": true,
14
+ "moduleDetection": "force",
15
+ "noEmit": true,
16
+
17
+ /* Linting */
18
+ "strict": true,
19
+ "noUnusedLocals": true,
20
+ "noUnusedParameters": true,
21
+ "erasableSyntaxOnly": true,
22
+ "noFallthroughCasesInSwitch": true,
23
+ "noUncheckedSideEffectImports": true
24
+ },
25
+ "include": ["src"]
26
+ }