@newlogic-digital/ui 3.2.0 → 3.3.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.
Files changed (82) hide show
  1. package/.eslintrc +13 -0
  2. package/.stylelintrc +18 -0
  3. package/README.md +1 -5
  4. package/package.json +16 -8
  5. package/public/sw.js +30 -0
  6. package/src/data/main.json +5 -0
  7. package/src/emails/email.prod.html +6 -0
  8. package/src/emails/email.twig.html +6 -0
  9. package/src/emails/{email.css → styles/email.css} +1 -1
  10. package/src/emails/templates/Content.twig +16 -0
  11. package/src/emails/templates/Header.twig +14 -0
  12. package/src/emails/templates/Layout.twig +23 -0
  13. package/src/emails/templates.prod/.gitkeep +0 -0
  14. package/src/scripts/Layout/Main.js +3 -3
  15. package/src/scripts/Libraries/Dialog.js +8 -1
  16. package/src/scripts/Libraries/Drawer.js +16 -14
  17. package/src/scripts/Libraries/Form.js +12 -18
  18. package/src/scripts/Libraries/NativeSlider.js +2 -1
  19. package/src/scripts/Libraries/ReCaptcha.js +9 -4
  20. package/src/scripts/Libraries/Stimulus.js +1 -31
  21. package/src/scripts/Libraries/Swup.js +5 -1
  22. package/src/scripts/Libraries/Tabs.js +5 -5
  23. package/src/scripts/Libraries/Tippy.js +3 -1
  24. package/src/scripts/Ui/+.js +0 -1
  25. package/src/scripts/Ui/Checkbox.js +4 -13
  26. package/src/scripts/Ui/Input.js +18 -64
  27. package/src/scripts/Ui/Select.js +11 -39
  28. package/src/scripts/Ui/Text.js +2 -4
  29. package/src/scripts/Utils/Functions/+.js +1 -0
  30. package/src/scripts/Utils/Functions/checkValidity.js +44 -0
  31. package/src/scripts/Utils/Functions/inView.js +7 -8
  32. package/src/scripts/Utils/cdn.js +1 -1
  33. package/src/scripts/Utils/global.js +6 -8
  34. package/src/styles/Components/+.css +1 -1
  35. package/src/styles/Components/Dropdown/+.css +1 -0
  36. package/src/styles/{Ui/Dropdown.css → Components/Dropdown/Default.css} +1 -1
  37. package/src/styles/Libraries/+.css +0 -1
  38. package/src/styles/Libraries/Drawer.css +1 -1
  39. package/src/styles/Libraries/Hint.css +4 -3
  40. package/src/styles/Libraries/NativeSlider.css +8 -0
  41. package/src/styles/Libraries/Tippy.css +1 -1
  42. package/src/styles/Ui/+.css +0 -1
  43. package/src/styles/Ui/Badge.css +1 -1
  44. package/src/styles/Ui/Btn.css +24 -6
  45. package/src/styles/Ui/Checkbox.css +28 -2
  46. package/src/styles/Ui/Heading.css +2 -1
  47. package/src/styles/Ui/Icon.css +2 -2
  48. package/src/styles/Ui/Image.css +1 -7
  49. package/src/styles/Ui/Input.css +65 -18
  50. package/src/styles/Ui/Label.css +2 -2
  51. package/src/styles/Ui/Link.css +12 -5
  52. package/src/styles/Ui/Notice.css +1 -1
  53. package/src/styles/Ui/Select.css +3 -5
  54. package/src/styles/Ui/Text.css +13 -4
  55. package/src/styles/Ui/Title.css +3 -2
  56. package/src/styles/Utils/+.css +9 -9
  57. package/src/styles/Utils/default.css +0 -7
  58. package/src/styles/Utils/tailwind/+.css +2 -2
  59. package/src/styles/Utils/tailwind/base.css +25 -0
  60. package/src/styles/Utils/theme/+.css +1 -1
  61. package/src/styles/Utils/vars.css +32 -8
  62. package/src/templates/Layout/Main.twig +0 -6
  63. package/src/templates/Sections/Ui/Docs/@intro.html +97 -0
  64. package/src/templates/Sections/Ui/Docs/@nav.html +195 -0
  65. package/src/templates/Sections/Ui/Docs/@styles.html +100 -0
  66. package/src/templates/Sections/Ui/Docs/Default.twig +1600 -0
  67. package/src/templates/Sections/Ui/Icons.html +28 -0
  68. package/src/templates/Sections/Ui/Intro.html +136 -0
  69. package/src/templates/Sections/Ui.twig +5 -2090
  70. package/src/templates/Utils/sections.twig +2 -2
  71. package/src/views/{dialog-basic.json.twig → dialog/basic.json.twig} +0 -0
  72. package/src/views/{json-tippy.json.twig → dropdown/tippy.json.twig} +3 -3
  73. package/src/views/gdpr.json +2 -1
  74. package/src/views/index.json +2 -2
  75. package/src/views/ui-icons.json +12 -0
  76. package/src/views/ui.json +2 -2
  77. package/tailwind.config.cjs +69 -0
  78. package/vite.config.js +5 -1
  79. package/src/emails/email.twig +0 -60
  80. package/src/scripts/Ui/Radio.js +0 -23
  81. package/src/styles/Components/Item/+.css +0 -1
  82. package/src/styles/Libraries/Lazysizes.css +0 -9
@@ -1,4 +1,4 @@
1
- .ui-input, .ui-select {
1
+ :is(.ui-input, .ui-select) {
2
2
  --ui-input-height: 3rem;
3
3
  --ui-input-height-textarea: 8rem;
4
4
  --ui-input-py: 0.75rem;
@@ -50,16 +50,16 @@
50
50
  margin-top: calc(var(--ui-input-size) / 2 * -1);
51
51
  order: -1;
52
52
 
53
- @nest [data-has~="icon-l"]& {
53
+ @nest :has(.icon-l)& {
54
54
  left: calc(var(--ui-input-px) + var(--ui-input-icon-size) + calc(var(--ui-input-px) / 1.75));
55
55
  }
56
56
 
57
- @nest [data-has~="icon-r"]& {
57
+ @nest :has(.icon-r)& {
58
58
  right: calc(var(--ui-input-px) + var(--ui-input-icon-size) + calc(var(--ui-input-px) / 1.75));
59
59
  }
60
60
  }
61
61
 
62
- & > :is(input, textarea, select, .input) {
62
+ & > :where(input, textarea, select, .input) {
63
63
  width: 100%;
64
64
  transition: var(--transition-border), var(--transition-shadow);
65
65
  box-shadow: none;
@@ -69,10 +69,15 @@
69
69
  height: var(--ui-input-height);
70
70
  font-weight: var(--ui-input-weight);
71
71
  border-radius: var(--ui-input-radius);
72
- padding: calc(var(--ui-input-py) * 1.75) var(--ui-input-px) calc(var(--ui-input-py) * 0.5);
72
+ padding: var(--ui-input-py) var(--ui-input-px);
73
73
  color: inherit;
74
74
  border: 1px solid rgb(var(--ui-input-border-color) / var(--ui-input-border-opacity));
75
75
 
76
+ @nest :has(label)& {
77
+ padding-top: calc(var(--ui-input-py) * 1.75);
78
+ padding-bottom: calc(var(--ui-input-py) * 0.5);
79
+ }
80
+
76
81
  &[disabled] {
77
82
  cursor: default;
78
83
  background-color: rgb(var(--color-background-100));
@@ -123,20 +128,13 @@
123
128
  }
124
129
  }
125
130
 
126
- @nest [data-has~="icon-l"]& {
131
+ @nest :has(.icon-l)& {
127
132
  padding-left: calc(var(--ui-input-px) + var(--ui-input-icon-size) + calc(var(--ui-input-px) / 1.75));
128
133
  }
129
134
 
130
- @nest [data-has~="icon-r"]&, :--state-invalid& {
135
+ @nest :has(.icon-r)&, :--state-invalid& {
131
136
  padding-right: calc(var(--ui-input-px) + var(--ui-input-icon-size) + calc(var(--ui-input-px) / 1.75));
132
137
  }
133
-
134
- @nest :not(:--state-placeholder)& {
135
- &:is([placeholder], [data-placeholder]) {
136
- padding-top: var(--ui-input-py);
137
- padding-bottom: var(--ui-input-py);
138
- }
139
- }
140
138
  }
141
139
 
142
140
  & > input {
@@ -203,7 +201,7 @@
203
201
  }
204
202
 
205
203
  @nest :not(:--state-active)& {
206
- &:not([placeholder]):not(:focus) {
204
+ &:not([placeholder], :focus) {
207
205
  font-size: 0;
208
206
  }
209
207
  }
@@ -221,7 +219,7 @@
221
219
  min-height: var(--ui-input-height-textarea);
222
220
  }
223
221
 
224
- & > input, & > textarea {
222
+ & > :where(input, textarea) {
225
223
  background-clip: padding-box;
226
224
  cursor: text;
227
225
 
@@ -229,7 +227,7 @@
229
227
  box-shadow: none;
230
228
  }
231
229
 
232
- @nest :is(:--state-active, :--state-placeholder)&, &:focus {
230
+ @nest &:focus, :--state-active&, :has([placeholder] ~ label)& {
233
231
  & ~ label {
234
232
  transform: translateY(calc(var(--ui-input-size) / 1.4 * -1)) scale(0.8);
235
233
  }
@@ -387,7 +385,7 @@
387
385
  text-overflow: ellipsis;
388
386
  overflow: hidden;
389
387
 
390
- @media (--media-768) {
388
+ @media (--media-touch) {
391
389
  padding-top: 0.875rem;
392
390
  padding-bottom: 0.875rem;
393
391
  }
@@ -405,6 +403,55 @@
405
403
  }
406
404
  }
407
405
 
406
+ :is(.ui-input, .ui-select, .ui-input-group) {
407
+ --ui-input-validity-size: 0.875rem;
408
+ --ui-input-validity-offset: 0.375rem;
409
+
410
+ & em {
411
+ display: block;
412
+ font-size: var(--ui-input-validity-size);
413
+ color: rgb(var(--color-error));
414
+ font-style: normal;
415
+ margin-top: var(--ui-input-validity-offset);
416
+ }
417
+ }
418
+
419
+ .ui-input-group {
420
+ display: flex;
421
+
422
+ & .ui-btn {
423
+ height: auto;
424
+
425
+ & + .ui-input {
426
+ z-index: 1;
427
+ }
428
+ }
429
+
430
+ & > * {
431
+ & + :is(.ui-input, .ui-select) {
432
+ margin-left: -1px;
433
+
434
+ & :is(input, select):not(:focus) {
435
+ border-left-color: transparent;
436
+ }
437
+ }
438
+
439
+ &:not(:first-child) {
440
+ &, & :is(input, select) {
441
+ border-top-left-radius: 0;
442
+ border-bottom-left-radius: 0;
443
+ }
444
+ }
445
+
446
+ &:not(:last-child) {
447
+ &, & :is(input, select) {
448
+ border-top-right-radius: 0;
449
+ border-bottom-right-radius: 0;
450
+ }
451
+ }
452
+ }
453
+ }
454
+
408
455
  .pcr-app {
409
456
  border-radius: var(--radius);
410
457
  overflow: hidden;
@@ -4,8 +4,8 @@
4
4
  --ui-label-spacing: 0.05rem;
5
5
 
6
6
  display: block;
7
- font-size: var(--ui-title-size);
8
- line-height: calc(var(--ui-title-size) + var(--ui-title-size-line));
7
+ font-size: var(--ui-label-size);
8
+ line-height: calc(var(--ui-label-size-line) + var(--ui-label-size-line));
9
9
  font-weight: var(--font-medium);
10
10
 
11
11
  & ~ :is([class^="ui-"]:not(&), [class^="c-"]) {
@@ -1,7 +1,8 @@
1
1
  .ui-link {
2
2
  --ui-link-size: 0.875rem;
3
- --ui-link-weight: var(--font-medium);
3
+ --ui-link-weight: var(--font-normal);
4
4
  --ui-link-hover-opacity: 0.8;
5
+ --ui-link-hover-color: rgb(var(--color-accent));
5
6
  --ui-link-underline-opacity: 0.5;
6
7
 
7
8
  display: inline-flex;
@@ -9,15 +10,21 @@
9
10
  cursor: pointer;
10
11
  font-size: var(--ui-link-size);
11
12
  font-weight: var(--ui-link-weight);
12
- transition: var(--transition-opacity);
13
+ transition: var(--transition-opacity), var(--transition-color);
13
14
  position: relative;
14
15
  white-space: nowrap;
16
+ line-height: 1.5;
15
17
 
16
- @nest .no-touch &:hover {
18
+ &:--size-sm {
19
+ --ui-link-size: 0.75rem;
20
+ }
21
+
22
+ @nest &:focus-visible, .no-touch &:is([href], button):hover {
17
23
  opacity: var(--ui-link-hover-opacity);
24
+ color: var(--ui-link-hover-color);
18
25
  }
19
26
 
20
- &::after {
27
+ &[data-type~="underline"]::after {
21
28
  content: "";
22
29
  border-bottom: 1px solid currentColor;
23
30
  opacity: 0;
@@ -26,7 +33,7 @@
26
33
  transition: var(--transition-opacity), var(--transition-transform);
27
34
  transform: translateY(-0.25rem);
28
35
 
29
- @nest .no-touch :not([href^="tel:"], [href^="mailto:"]):hover& {
36
+ @nest .no-touch :not([href^="tel:"], [href^="mailto:"]):is(:hover, :focus-visible)& {
30
37
  transform: none;
31
38
  opacity: var(--ui-link-underline-opacity);
32
39
  }
@@ -40,7 +40,7 @@
40
40
  transition: var(--transition-opacity);
41
41
  color: currentColor !important;
42
42
 
43
- @nest .no-touch &[href]:hover {
43
+ @nest .no-touch &[href]:is(:hover, :focus-visible) {
44
44
  opacity: 0.8;
45
45
  }
46
46
  }
@@ -1,7 +1,4 @@
1
1
  .ui-select {
2
- cursor: pointer;
3
- user-select: none;
4
-
5
2
  &:--state-active {
6
3
  & label {
7
4
  transform: translateY(calc(var(--ui-input-size) / 1.4 * -1)) scale(0.8);
@@ -35,9 +32,10 @@
35
32
  position: relative;
36
33
  z-index: 1;
37
34
  text-overflow: ellipsis;
38
- cursor: pointer;
39
35
  -webkit-appearance: none;
40
36
  -moz-appearance: none;
37
+ cursor: pointer;
38
+ user-select: none;
41
39
 
42
40
  @nest [tabindex]& {
43
41
  pointer-events: none;
@@ -131,7 +129,7 @@
131
129
  font-size: var(--ui-input-size);
132
130
  border-radius: var(--radius);
133
131
 
134
- @nest .no-touch &:is(:hover, :focus) {
132
+ @nest .no-touch &:is(:hover, :focus-visible) {
135
133
  background-color: rgb(var(--color-accent) / 0.1);
136
134
  }
137
135
  }
@@ -1,11 +1,20 @@
1
1
  .ui-text {
2
- --ui-text-size: 0.9375rem;
2
+ --ui-text-size: 0.875rem;
3
+ --ui-text-size-line: 0.75rem;
3
4
  --ui-text-weight: var(--font-normal);
4
5
  --ui-text-weight-bold: var(--font-semibold);
5
6
 
6
7
  font-weight: var(--ui-text-weight);
7
8
  font-size: var(--ui-text-size);
8
- line-height: calc(var(--ui-text-size) + 0.75rem);
9
+ line-height: calc(var(--ui-text-size) + var(--ui-text-size-line));
10
+
11
+ &:--size-base {
12
+ --ui-text-size: 1rem;
13
+ }
14
+
15
+ &:--size-lg {
16
+ --ui-text-size: 1.125rem;
17
+ }
9
18
 
10
19
  & a {
11
20
  text-decoration: underline;
@@ -14,7 +23,7 @@
14
23
  &:not([class*="text-"]) {
15
24
  color: rgb(var(--color-accent));
16
25
 
17
- @nest .no-touch &[href]:hover {
26
+ @nest .no-touch &[href]:is(:hover, :focus-visible) {
18
27
  opacity: 0.8;
19
28
  }
20
29
  }
@@ -65,7 +74,7 @@
65
74
 
66
75
  & p {
67
76
  line-height: inherit;
68
- margin: 0;
77
+ margin: 0 0 0.25rem;
69
78
 
70
79
  &:empty {
71
80
  line-height: 1rem;
@@ -1,12 +1,13 @@
1
1
  .ui-title {
2
2
  --ui-title-size: 0.875rem;
3
- --ui-title-size-line: 0.5rem;
3
+ --ui-title-size-line: 0.25rem;
4
4
  --ui-title-spacing: 0.05rem;
5
+ --ui-title-weight: var(--font-semibold);
5
6
 
6
7
  display: block;
7
8
  font-size: var(--ui-title-size);
8
9
  line-height: calc(var(--ui-title-size) + var(--ui-title-size-line));
9
- font-weight: var(--font-semibold);
10
+ font-weight: var(--ui-title-weight);
10
11
 
11
12
  &[class*="uppercase"] {
12
13
  letter-spacing: var(--ui-title-spacing);
@@ -1,9 +1,9 @@
1
- @import "default.css";
2
- @import "icons.css";
3
- @import "keyframes.css";
4
- @import "normalize.css";
5
- @import "print.css";
6
- @import "tailwind/+.css";
7
- @import "theme/+.css";
8
- @import "vars.css";
9
- @import "vendor.css";
1
+ @import "default.css";
2
+ @import "icons.css";
3
+ @import "keyframes.css";
4
+ @import "normalize.css";
5
+ @import "print.css";
6
+ @import "tailwind/+.css";
7
+ @import "theme/+.css";
8
+ @import "vars.css";
9
+ @import "vendor.css";
@@ -114,13 +114,6 @@ a {
114
114
  border-color: rgb(var(--color-current) / var(--tw-text-opacity, 1));
115
115
  }
116
116
 
117
- [class*="aspect-"] {
118
- &::before {
119
- content: "";
120
- display: block;
121
- }
122
- }
123
-
124
117
  [hidden] {
125
118
  display: none;
126
119
  }
@@ -1,2 +1,2 @@
1
- @import "base.css";
2
- @import "gutters.css";
1
+ @import "base.css";
2
+ @import "gutters.css";
@@ -12,4 +12,29 @@
12
12
  animation-duration: 0.5s;
13
13
  animation-fill-mode: both;
14
14
  }
15
+
16
+ .slider {
17
+ margin-left: calc(var(--container-padding-calc) * -1);
18
+ margin-right: calc(var(--container-padding-calc) * -1);
19
+ padding-left: var(--container-padding-calc);
20
+ scroll-padding-left: var(--container-padding-calc);
21
+ scroll-padding-right: var(--container-padding-calc);
22
+ overflow-x: auto;
23
+ overflow-y: hidden;
24
+ -webkit-overflow-scrolling: touch;
25
+ user-select: none;
26
+ scrollbar-width: none !important;
27
+ -ms-overflow-style: none;
28
+ display: flex;
29
+
30
+ & > * {
31
+ flex: 0 0 auto;
32
+ scroll-snap-align: start;
33
+
34
+ &:last-child {
35
+ box-sizing: content-box;
36
+ border-right: var(--container-padding-calc) solid transparent;
37
+ }
38
+ }
39
+ }
15
40
  }
@@ -1 +1 @@
1
- @import "main.css";
1
+ @import "main.css";
@@ -7,10 +7,12 @@
7
7
  --color-instagram: 193, 53, 132;
8
8
  --color-twitter: 29, 161, 242;
9
9
  --color-facebook: 24, 119, 242;
10
+ --color-apple: 0 0 0;
10
11
  --radius: 0.5rem;
11
12
  --container-width: 75rem;
12
13
  --container-width-sm: 50rem;
13
14
  --container-padding: 5vw;
15
+ --container-padding-calc: max(calc(50vw - (var(--container-width) / 2) + var(--container-padding)), var(--container-padding));
14
16
  --font-bold: 700;
15
17
  --font-semibold: 600;
16
18
  --font-medium: 500;
@@ -22,13 +24,32 @@
22
24
  --z-30: 30;
23
25
  --z-40: 40;
24
26
  --z-50: 50;
25
- --transition: 0.3s;
26
- --transition-color: color var(--transition) ease 0s;
27
- --transition-background: background var(--transition) ease 0s;
28
- --transition-opacity: opacity var(--transition) ease 0s;
29
- --transition-transform: transform var(--transition) ease 0s;
30
- --transition-border: border-color var(--transition) ease 0s;
31
- --transition-shadow: box-shadow var(--transition) ease 0s;
27
+ --rounded: 0.75rem;
28
+ --rounded-xs: 0.5rem;
29
+ --rounded-sm: 0.875rem;
30
+ --rounded-base: 1rem;
31
+ --rounded-md: 1.125rem;
32
+ --rounded-lg: 1.5rem;
33
+ --rounded-xl: 3rem;
34
+ --rounded-2xl: 6rem;
35
+ --rounded-3xl: 8rem;
36
+ --rounded-full: 9999px;
37
+ --spacing-xs: 0.5rem;
38
+ --spacing-sm: 0.875rem;
39
+ --spacing-base: 1rem;
40
+ --spacing-md: 1.125rem;
41
+ --spacing-lg: 1.5rem;
42
+ --spacing-xl: 3rem;
43
+ --spacing-2xl: 6rem;
44
+ --spacing-3xl: 8rem;
45
+ --spacing-section: 3rem;
46
+ --transition: 0.15s;
47
+ --transition-color: color var(--transition) ease;
48
+ --transition-background: background var(--transition) ease;
49
+ --transition-opacity: opacity var(--transition) ease;
50
+ --transition-transform: transform var(--transition) ease;
51
+ --transition-border: border-color var(--transition) ease;
52
+ --transition-shadow: box-shadow var(--transition) ease;
32
53
 
33
54
  @media (--media-t) {
34
55
  --container-padding: 3rem;
@@ -64,8 +85,11 @@
64
85
  @custom-media --media-t (min-width: 48em);
65
86
  @custom-media --media-d (min-width: 60em);
66
87
  @custom-media --media-w (min-width: 76em);
67
- @custom-media --media-hd (min-width: 88em);
88
+ @custom-media --media-hd (min-width: 85em);
89
+ @custom-media --media-mhd (min-width: 88em);
90
+ @custom-media --media-fhd (min-width: 100em);
68
91
  @custom-media --media-touch (max-width: 59.9375em);
92
+ @custom-media --media-touch-only (max-width: 59.9375em) and (min-width: 47.9375em);
69
93
 
70
94
  /* @custom-selector --theme */
71
95
  @custom-selector :--theme-dark [data-theme~="dark"];
@@ -23,12 +23,6 @@
23
23
  <link rel="stylesheet" href="{{ url|asset }}">
24
24
  {% endfor %}
25
25
 
26
- {% if config.serve.mode == 'dev' %}
27
- <link rel="stylesheet" href="{{ attribute(assets.css, 'tailwind.src') }}">
28
- {% endif %}
29
-
30
- <script src="{{ assets.js.lazysizes }}" async></script>
31
-
32
26
  <script>
33
27
  (localStorage.theme === 'dark' || (!('theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) && document.documentElement.classList.add('dark')
34
28
  document.documentElement.className = document.documentElement.className.replace('no-js', 'js');matchMedia('(hover: hover) and (pointer: fine)').matches && document.documentElement.classList.add('no-touch');/Android|iPhone|iPad|iPod/i.test(navigator.userAgent) && document.documentElement.classList.add('mobile');(p => document.documentElement.classList.add(p.includes('macintel') && navigator.maxTouchPoints > 2 ? 'ipad' : p))(navigator.platform.toLowerCase().replace(/ .*/, ''));(u => document.documentElement.classList.add(u && u[0]))(navigator.userAgent.toLowerCase().match(/chrome|safari|firefox/i))
@@ -0,0 +1,97 @@
1
+ <div class="row g-8 flex-wrap">
2
+ <div class="col-12" style="padding-top: 0">
3
+ <h1 class="ui-heading">Get started</h1>
4
+ <div class="ui-text">
5
+ <p>Minimal version <b>Node.js 14+</b> and <b>NPM 7+</b></p>
6
+ </div>
7
+ </div>
8
+ <div class="col-12" id="installation">
9
+ <h1 class="ui-title uppercase text-primary mb-5">Instalation</h1>
10
+ <div class="ui-text">
11
+ <p>In existing project (with <b>Vituum and Newlogic Core</b>)</p>
12
+ </div>
13
+ <pre><code class="language-bash">
14
+ npm i
15
+ </code></pre>
16
+ <div class="ui-text">
17
+ <p>Creating a new project (with <b>Vituum and Newlogic Core</b>)</p>
18
+ </div>
19
+ <pre><code class="language-bash">
20
+ $ git clone --depth 1 https://github.com/newlogic-digital/ui.git . && rm -r .git
21
+ $ npm i
22
+ </code></pre>
23
+ <div class="ui-text">
24
+ <p>Use with in any other environment</p>
25
+ </div>
26
+ <pre><code class="language-bash">
27
+ $ npm i @newlogic-digital/ui
28
+ </code></pre>
29
+ <pre><code class="language-bash">
30
+ /* main.css or separate modules */
31
+ @import "node_modules/@newlogic-digital/ui/src/styles/main.css"
32
+ </code></pre>
33
+ <pre><code class="language-bash">
34
+ /* main.js or separate modules */
35
+ import "node_modules/@newlogic-digital/ui/src/scripts/main.js"
36
+ </code></pre>
37
+ </div>
38
+ <div class="col-12" id="core">
39
+ <h1 class="ui-title uppercase text-primary mb-5">Core</h1>
40
+ <div class="ui-text">
41
+ <p><b>Vituum and Newlogic Core</b> is used as the main toolset, the complete documentation is at <a href="https://vituum.dev" target="_blank">vituum.dev</a>.</p>
42
+ <p>Newlogic Core is predefined config with plugins, filters etc. - <a href="https://vituum.dev" target="_blank">https://github.com/newlogic-digital/core</a></p>
43
+ <p>Framework can also be used with other tools, more information is in the section <a href="#build" title="">Build</a></p>
44
+ </div>
45
+ </div>
46
+ <div class="col-12" id="theme">
47
+ <h1 class="ui-title uppercase text-primary mb-5">Theme</h1>
48
+ <div class="ui-text">
49
+ <p>Main CSS variables can be configured in <code>styles/Utils/theme/main.css</code> a <code>styles/Utils/vars.css</code>,
50
+ you can also create any number of color variations.
51
+ </p>
52
+ <p></p>
53
+ <p>Keyframes can be added in <code>styles/Utils/keyframes.css</code>, print styles in <code>styles/Utils/print.css</code>,
54
+ import of external css in <code>styles/Utils/vendor.css</code> and tailwind styles can be extended
55
+ in<code>styles/Utils/tailwind</code>
56
+ </p>
57
+ </div>
58
+ </div>
59
+ <div class="col-12" id="layout">
60
+ <h1 class="ui-title uppercase text-primary mb-5">Layout</h1>
61
+ <div class="ui-text">
62
+ <p>Global styles are located at <code>styles/Layout/Main.css</code>, others layout styles are for eg. <code>Header.css</code>,
63
+ <code>Footer.css</code> and naming should be done in following format <code>#l-header</code>, <code>#l-footer</code>
64
+ </p>
65
+ <p></p>
66
+ <p>Global scripts are located at <code>scripts/Layout/Main.js</code></p>
67
+ <p></p>
68
+ <p>Example of basic layout in HTML:</p>
69
+ </div>
70
+ <pre><code class="language-html">
71
+ <html class="no-js no-sw" lang="cs">
72
+ <head>
73
+ <title></title>
74
+ <link rel="stylesheet" href="/src/styles/main.css">
75
+ <script src="https://cdn.jsdelivr.net/npm/lazysizes@5.2.2/lazysizes.min.js"
76
+ async></script>
77
+
78
+ <script>'dark' !== localStorage.theme && ('theme' in localStorage || !window.matchMedia('(prefers-color-scheme: dark)').matches) || document.documentElement.classList.add('dark'), document.documentElement.className = document.documentElement.className.replace('no-js', 'js'), matchMedia('(hover: hover) and (pointer: fine)').matches && document.documentElement.classList.add('no-touch'), /Android|iPhone|iPad|iPod/i.test(navigator.userAgent) && document.documentElement.classList.add('mobile'), document.documentElement.classList.add(navigator.platform.toLowerCase().replace(/ .*/, '')), function (e) {
79
+ var t
80
+ e.match(/(msie|trident)/i) ? document.documentElement.classList.add('ie') : e.match(/edge/) ? document.documentElement.classList.add('edge') : (t = e.match(/(chrome|safari|firefox)/i)) && document.documentElement.classList.add(t[0])
81
+ }(navigator.userAgent.toLowerCase())</script>
82
+
83
+ <script src="/src/scripts/main.js" type="module"></script>
84
+ </head>
85
+ <body data-controller="lib lib-dialog lib-drawer">
86
+ <div class="l-default">
87
+ <header id="l-header" data-controller="l-header"></header>
88
+ <main id="l-main" class="transition-fade">
89
+ <!--PAGE CONTENT-->
90
+ </main>
91
+ <footer id="l-footer"></footer>
92
+ </div>
93
+ </body>
94
+ </html>
95
+ </code></pre>
96
+ </div>
97
+ </div>