@esportsplus/ui 0.5.4 → 0.5.5

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 (150) hide show
  1. package/.editorconfig +9 -9
  2. package/.gitattributes +2 -2
  3. package/.github/dependabot.yml +22 -22
  4. package/.github/workflows/bump.yml +6 -6
  5. package/.github/workflows/publish.yml +13 -13
  6. package/build/components/aurora/index.js +4 -4
  7. package/build/components/counter/index.js +16 -16
  8. package/build/components/ellipsis/index.js +6 -6
  9. package/build/components/footer/index.js +46 -46
  10. package/build/components/form/layout.js +10 -10
  11. package/build/components/magnet/index.js +7 -7
  12. package/build/components/scrollbar/index.js +9 -9
  13. package/build/components/site/index.js +5 -5
  14. package/lib.scss +1 -1
  15. package/package.json +25 -25
  16. package/src/components/accordion/index.ts +34 -34
  17. package/src/components/accordion/scss/index.scss +16 -16
  18. package/src/components/accordion/scss/variables.scss +9 -9
  19. package/src/components/anchor/scss/index.scss +41 -41
  20. package/src/components/anchor/scss/variables.scss +4 -4
  21. package/src/components/aurora/index.ts +21 -21
  22. package/src/components/aurora/scss/index.scss +59 -59
  23. package/src/components/banner/scss/index.scss +40 -40
  24. package/src/components/banner/scss/variables.scss +9 -9
  25. package/src/components/border/scss/index.scss +10 -10
  26. package/src/components/border/scss/variables.scss +6 -6
  27. package/src/components/bubble/scss/index.scss +30 -30
  28. package/src/components/bubble/scss/variables.scss +19 -19
  29. package/src/components/button/scss/index.scss +114 -114
  30. package/src/components/button/scss/variables.scss +66 -66
  31. package/src/components/card/scss/index.scss +35 -35
  32. package/src/components/card/scss/variables.scss +41 -41
  33. package/src/components/clipboard/index.ts +3 -3
  34. package/src/components/clipboard/write.ts +8 -8
  35. package/src/components/container/scss/index.scss +8 -8
  36. package/src/components/container/scss/variables.scss +5 -5
  37. package/src/components/counter/index.ts +93 -93
  38. package/src/components/counter/scss/index.scss +61 -61
  39. package/src/components/counter/scss/variables.scss +26 -26
  40. package/src/components/ellipsis/index.ts +9 -9
  41. package/src/components/ellipsis/scss/index.scss +27 -27
  42. package/src/components/ellipsis/scss/variables.scss +4 -4
  43. package/src/components/footer/index.ts +78 -78
  44. package/src/components/footer/scss/index.scss +25 -25
  45. package/src/components/form/action.ts +80 -80
  46. package/src/components/form/index.ts +5 -5
  47. package/src/components/form/input.ts +14 -14
  48. package/src/components/form/layout.ts +25 -25
  49. package/src/components/form/types.ts +15 -15
  50. package/src/components/grid/scss/index.scss +9 -9
  51. package/src/components/grid/scss/variables.scss +5 -5
  52. package/src/components/group/scss/index.scss +36 -36
  53. package/src/components/group/scss/variables.scss +17 -17
  54. package/src/components/highlight/index.ts +47 -47
  55. package/src/components/highlight/scss/index.scss +4 -4
  56. package/src/components/highlight/scss/variables.scss +3 -3
  57. package/src/components/icon/scss/index.scss +16 -16
  58. package/src/components/icon/scss/variables.scss +7 -7
  59. package/src/components/json/download.ts +14 -14
  60. package/src/components/json/index.ts +3 -3
  61. package/src/components/link/scss/index.scss +28 -28
  62. package/src/components/link/scss/variables.scss +46 -46
  63. package/src/components/loading/scss/index.scss +16 -16
  64. package/src/components/loading/scss/variables.scss +5 -5
  65. package/src/components/magnet/index.ts +54 -54
  66. package/src/components/magnet/scss/index.scss +16 -16
  67. package/src/components/magnet/scss/variables.scss +4 -4
  68. package/src/components/modal/scss/index.scss +34 -34
  69. package/src/components/modal/scss/variables.scss +6 -6
  70. package/src/components/number/index.ts +23 -23
  71. package/src/components/page/index.ts +14 -14
  72. package/src/components/page/scss/index.scss +31 -31
  73. package/src/components/page/scss/variables.scss +15 -15
  74. package/src/components/root/index.ts +4 -4
  75. package/src/components/root/onclick.ts +20 -20
  76. package/src/components/root/scss/index.scss +94 -94
  77. package/src/components/root/scss/variables.scss +99 -99
  78. package/src/components/row/scss/index.scss +7 -7
  79. package/src/components/scrollbar/index.ts +43 -43
  80. package/src/components/scrollbar/scss/index.scss +70 -70
  81. package/src/components/scrollbar/scss/variables.scss +6 -6
  82. package/src/components/sidebar/scss/index.scss +49 -49
  83. package/src/components/sidebar/scss/variables.scss +20 -20
  84. package/src/components/site/index.ts +26 -26
  85. package/src/components/site/scss/index.scss +3 -3
  86. package/src/components/text/scss/index.scss +9 -9
  87. package/src/components/text/scss/variables.scss +8 -8
  88. package/src/components/thumbnail/scss/index.scss +7 -7
  89. package/src/components/thumbnail/scss/variables.scss +7 -7
  90. package/src/components/tooltip/index.ts +84 -84
  91. package/src/components/tooltip/scss/_center.scss +13 -13
  92. package/src/components/tooltip/scss/_east.scss +34 -34
  93. package/src/components/tooltip/scss/_north.scss +34 -34
  94. package/src/components/tooltip/scss/_south.scss +35 -35
  95. package/src/components/tooltip/scss/_west.scss +34 -34
  96. package/src/components/tooltip/scss/index.scss +93 -93
  97. package/src/components/tooltip/scss/variables.scss +24 -24
  98. package/src/components/truncate/index.ts +13 -13
  99. package/src/css-utilities/[margin,padding]/scss/index.scss +41 -41
  100. package/src/css-utilities/[margin,padding]/scss/variables.scss +54 -54
  101. package/src/css-utilities/absolute/scss/index.scss +36 -36
  102. package/src/css-utilities/background/scss/variables.scss +27 -27
  103. package/src/css-utilities/border/scss/index.scss +21 -21
  104. package/src/css-utilities/border/scss/variables.scss +66 -66
  105. package/src/css-utilities/color/scss/variables.scss +31 -31
  106. package/src/css-utilities/disabled/scss/index.scss +4 -4
  107. package/src/css-utilities/flex/scss/index.scss +65 -65
  108. package/src/css-utilities/glass/scss/index.scss +2 -2
  109. package/src/css-utilities/glass/scss/variables.scss +2 -2
  110. package/src/css-utilities/hidden/scss/index.scss +28 -28
  111. package/src/css-utilities/index.scss +14 -14
  112. package/src/css-utilities/inline/scss/index.scss +7 -7
  113. package/src/css-utilities/line-height/scss/variables.scss +10 -10
  114. package/src/css-utilities/not-allowed/scss/index.scss +7 -7
  115. package/src/css-utilities/overflow/scss/index.scss +4 -4
  116. package/src/css-utilities/pointer/scss/index.scss +5 -5
  117. package/src/css-utilities/size/scss/variables.scss +12 -12
  118. package/src/css-utilities/squircle/scss/index.scss +4 -4
  119. package/src/css-utilities/text/scss/index.scss +89 -89
  120. package/src/css-utilities/text/scss/variables.scss +31 -31
  121. package/src/css-utilities/viewport/scss/index.scss +4 -4
  122. package/src/css-utilities/width/scss/index.scss +3 -3
  123. package/src/css-utilities/width/scss/variables.scss +9 -9
  124. package/src/index.ts +16 -16
  125. package/src/lib/index.scss +7 -7
  126. package/src/lib/scss/breakpoint.scss +41 -41
  127. package/src/lib/scss/color.scss +1 -1
  128. package/src/lib/scss/css-variables.scss +13 -13
  129. package/src/lib/scss/list.scss +76 -76
  130. package/src/lib/scss/map.scss +1 -1
  131. package/src/lib/scss/position.scss +53 -53
  132. package/src/lib/scss/string.scss +33 -33
  133. package/src/tokens/index.scss +11 -11
  134. package/src/tokens/scss/border-radius.scss +12 -12
  135. package/src/tokens/scss/border-width.scss +6 -6
  136. package/src/tokens/scss/box-shadow.scss +21 -21
  137. package/src/tokens/scss/color.scss +64 -64
  138. package/src/tokens/scss/font-size.scss +16 -16
  139. package/src/tokens/scss/font-weight.scss +6 -6
  140. package/src/tokens/scss/line-height.scss +6 -6
  141. package/src/tokens/scss/size.scss +13 -13
  142. package/src/tokens/scss/spacer.scss +8 -8
  143. package/src/tokens/scss/state.scss +86 -86
  144. package/src/tokens/scss/transition-duration.scss +1 -1
  145. package/storage/fonts/montserrat/index.css +79 -79
  146. package/tokens.scss +1 -1
  147. package/tsconfig.json +2 -2
  148. package/utilities/styles.css +1 -1
  149. package/utilities/variables.css +1 -1
  150. package/webpack.config.ts +25 -25
@@ -1,66 +1,66 @@
1
- @use '/lib';
2
- @use '/tokens';
3
-
4
- .button {
5
- --background: var(--background-default);
6
- --background-active: var(--background-default);
7
- --background-default: transparent;
8
- --background-hover: var(--background-default);
9
- --background-pressed: var(--background-default);
10
- --border-color: var(--border-color-default);
11
- --border-color-active: var(--border-color-default);
12
- --border-color-default: var(--background);
13
- --border-color-hover: var(--border-color-default);
14
- --border-color-pressed: var(--border-color-default);
15
- --border-radius: var(--border-radius-400);
16
- --border-width: 0px;
17
- --box-shadow: var(--box-shadow-default);
18
- --box-shadow-active: var(--box-shadow-300);
19
- --box-shadow-default: none;
20
- --box-shadow-hover: var(--box-shadow-400);
21
- --box-shadow-pressed: none;
22
- --color: var(--color-default);
23
- --color-active: var(--color-default);
24
- --color-default: var(--color-text-400);
25
- --color-hover: var(--color-default);
26
- --color-pressed: var(--color-default);
27
- --font-size: var(--font-size-400);
28
- --font-weight: var(--font-weight-400);
29
- --line-height: var(--line-height-400);
30
- --padding-horizontal: var(--size-400);
31
- --padding-vertical: var(--size-400);
32
- --width: auto;
33
-
34
- @include tokens.state(active) {
35
- --background: var(--background-active);
36
- --border-color: var(--border-color-active);
37
- --box-shadow: var(--box-shadow-active);
38
- --color: var(--color-active);
39
- }
40
-
41
- @include tokens.state(hover) {
42
- --background: var(--background-hover);
43
- --border-color: var(--border-color-hover);
44
- --box-shadow: var(--box-shadow-hover);
45
- --color: var(--color-hover);
46
- }
47
-
48
- @include tokens.state(pressed) {
49
- --background: var(--background-pressed);
50
- --border-color: var(--border-color-pressed);
51
- --box-shadow: var(--box-shadow-pressed);
52
- --color: var(--color-pressed);
53
- }
54
-
55
-
56
- &--processing {
57
- --animation-duration: 0.64s;
58
- --border-color: var(--color);
59
- --border-width: var(--border-width-400);
60
- --size: var(--size-400);
61
- }
62
-
63
- &--skeleton {
64
- --animation-duration: 6.4s;
65
- }
66
- }
1
+ @use '/lib';
2
+ @use '/tokens';
3
+
4
+ .button {
5
+ --background: var(--background-default);
6
+ --background-active: var(--background-default);
7
+ --background-default: transparent;
8
+ --background-hover: var(--background-default);
9
+ --background-pressed: var(--background-default);
10
+ --border-color: var(--border-color-default);
11
+ --border-color-active: var(--border-color-default);
12
+ --border-color-default: var(--background);
13
+ --border-color-hover: var(--border-color-default);
14
+ --border-color-pressed: var(--border-color-default);
15
+ --border-radius: var(--border-radius-400);
16
+ --border-width: 0px;
17
+ --box-shadow: var(--box-shadow-default);
18
+ --box-shadow-active: var(--box-shadow-300);
19
+ --box-shadow-default: none;
20
+ --box-shadow-hover: var(--box-shadow-400);
21
+ --box-shadow-pressed: none;
22
+ --color: var(--color-default);
23
+ --color-active: var(--color-default);
24
+ --color-default: var(--color-text-400);
25
+ --color-hover: var(--color-default);
26
+ --color-pressed: var(--color-default);
27
+ --font-size: var(--font-size-400);
28
+ --font-weight: var(--font-weight-400);
29
+ --line-height: var(--line-height-400);
30
+ --padding-horizontal: var(--size-400);
31
+ --padding-vertical: var(--size-400);
32
+ --width: auto;
33
+
34
+ @include tokens.state(active) {
35
+ --background: var(--background-active);
36
+ --border-color: var(--border-color-active);
37
+ --box-shadow: var(--box-shadow-active);
38
+ --color: var(--color-active);
39
+ }
40
+
41
+ @include tokens.state(hover) {
42
+ --background: var(--background-hover);
43
+ --border-color: var(--border-color-hover);
44
+ --box-shadow: var(--box-shadow-hover);
45
+ --color: var(--color-hover);
46
+ }
47
+
48
+ @include tokens.state(pressed) {
49
+ --background: var(--background-pressed);
50
+ --border-color: var(--border-color-pressed);
51
+ --box-shadow: var(--box-shadow-pressed);
52
+ --color: var(--color-pressed);
53
+ }
54
+
55
+
56
+ &--processing {
57
+ --animation-duration: 0.64s;
58
+ --border-color: var(--color);
59
+ --border-width: var(--border-width-400);
60
+ --size: var(--size-400);
61
+ }
62
+
63
+ &--skeleton {
64
+ --animation-duration: 6.4s;
65
+ }
66
+ }
@@ -1,35 +1,35 @@
1
- @use '/lib';
2
-
3
- .card {
4
- background: var(--background);
5
- border-radius: var(--border-radius);
6
- padding: var(--padding-vertical) var(--padding-horizontal);
7
- position: relative;
8
- transition:
9
- background var(--transition-duration) ease-in-out,
10
- border-color var(--transition-duration) ease-in-out,
11
- box-shadow var(--transition-duration) ease-in-out,
12
- max-height var(--transition-duration) ease-in-out;
13
- width: var(--width);
14
-
15
-
16
- // Pseudo Element Box Shadow
17
- &::after {
18
- @include lib.position(absolute, full);
19
- border-radius: inherit;
20
- box-shadow: var(--box-shadow);
21
- content: '';
22
- pointer-events: none;
23
- transition:
24
- box-shadow var(--transition-duration) ease-in-out,
25
- opacity var(--transition-duration) ease-in-out;
26
- z-index: 0;
27
- }
28
-
29
-
30
- &--flat {
31
- &::after {
32
- display: none;
33
- }
34
- }
35
- }
1
+ @use '/lib';
2
+
3
+ .card {
4
+ background: var(--background);
5
+ border-radius: var(--border-radius);
6
+ padding: var(--padding-vertical) var(--padding-horizontal);
7
+ position: relative;
8
+ transition:
9
+ background var(--transition-duration) ease-in-out,
10
+ border-color var(--transition-duration) ease-in-out,
11
+ box-shadow var(--transition-duration) ease-in-out,
12
+ max-height var(--transition-duration) ease-in-out;
13
+ width: var(--width);
14
+
15
+
16
+ // Pseudo Element Box Shadow
17
+ &::after {
18
+ @include lib.position(absolute, full);
19
+ border-radius: inherit;
20
+ box-shadow: var(--box-shadow);
21
+ content: '';
22
+ pointer-events: none;
23
+ transition:
24
+ box-shadow var(--transition-duration) ease-in-out,
25
+ opacity var(--transition-duration) ease-in-out;
26
+ z-index: 0;
27
+ }
28
+
29
+
30
+ &--flat {
31
+ &::after {
32
+ display: none;
33
+ }
34
+ }
35
+ }
@@ -1,41 +1,41 @@
1
- @use '/tokens';
2
-
3
- .card {
4
- --background: var(--background-default);
5
- --background-active: var(--background-default);
6
- --background-default: transparent;
7
- --background-hover: var(--background-default);
8
- --background-pressed: var(--background-default);
9
- --border-color: var(--border-color-default);
10
- --border-color-active: var(--border-color-default);
11
- --border-color-default: var(--background);
12
- --border-color-hover: var(--border-color-default);
13
- --border-color-pressed: var(--border-color-default);
14
- --border-radius: var(--border-radius-400);
15
- --box-shadow: var(--box-shadow-default);
16
- --box-shadow-active: var(--box-shadow-300);
17
- --box-shadow-default: none;
18
- --box-shadow-hover: var(--box-shadow-300);
19
- --box-shadow-pressed: none;
20
- --padding-horizontal: 0px;
21
- --padding-vertical: 0px;
22
- --width: auto;
23
-
24
- @include tokens.state(active) {
25
- --background: var(--background-active);
26
- --border-color: var(--border-color-active);
27
- --box-shadow: var(--box-shadow-active);
28
- }
29
-
30
- @include tokens.state(hover) {
31
- --background: var(--background-hover);
32
- --border-color: var(--border-color-hover);
33
- --box-shadow: var(--box-shadow-hover);
34
- }
35
-
36
- @include tokens.state(pressed) {
37
- --background: var(--background-pressed);
38
- --border-color: var(--border-color-pressed);
39
- --box-shadow: var(--box-shadow-pressed);
40
- }
41
- }
1
+ @use '/tokens';
2
+
3
+ .card {
4
+ --background: var(--background-default);
5
+ --background-active: var(--background-default);
6
+ --background-default: transparent;
7
+ --background-hover: var(--background-default);
8
+ --background-pressed: var(--background-default);
9
+ --border-color: var(--border-color-default);
10
+ --border-color-active: var(--border-color-default);
11
+ --border-color-default: var(--background);
12
+ --border-color-hover: var(--border-color-default);
13
+ --border-color-pressed: var(--border-color-default);
14
+ --border-radius: var(--border-radius-400);
15
+ --box-shadow: var(--box-shadow-default);
16
+ --box-shadow-active: var(--box-shadow-300);
17
+ --box-shadow-default: none;
18
+ --box-shadow-hover: var(--box-shadow-300);
19
+ --box-shadow-pressed: none;
20
+ --padding-horizontal: 0px;
21
+ --padding-vertical: 0px;
22
+ --width: auto;
23
+
24
+ @include tokens.state(active) {
25
+ --background: var(--background-active);
26
+ --border-color: var(--border-color-active);
27
+ --box-shadow: var(--box-shadow-active);
28
+ }
29
+
30
+ @include tokens.state(hover) {
31
+ --background: var(--background-hover);
32
+ --border-color: var(--border-color-hover);
33
+ --box-shadow: var(--box-shadow-hover);
34
+ }
35
+
36
+ @include tokens.state(pressed) {
37
+ --background: var(--background-pressed);
38
+ --border-color: var(--border-color-pressed);
39
+ --box-shadow: var(--box-shadow-pressed);
40
+ }
41
+ }
@@ -1,4 +1,4 @@
1
- import write from './write';
2
-
3
-
1
+ import write from './write';
2
+
3
+
4
4
  export default { write };
@@ -1,9 +1,9 @@
1
- export default async (value: string) => {
2
- try {
3
- await navigator.clipboard.writeText(value);
4
- return true;
5
- }
6
- catch {
7
- return false;
8
- }
1
+ export default async (value: string) => {
2
+ try {
3
+ await navigator.clipboard.writeText(value);
4
+ return true;
5
+ }
6
+ catch {
7
+ return false;
8
+ }
9
9
  };
@@ -1,8 +1,8 @@
1
- .container {
2
- display: flex;
3
- flex-wrap: wrap;
4
- justify-content: flex-start;
5
- margin: var(--margin-vertical) auto;
6
- position: relative;
7
- width: min(var(--max-width), calc(100% - var(--margin-horizontal) * 2));
8
- }
1
+ .container {
2
+ display: flex;
3
+ flex-wrap: wrap;
4
+ justify-content: flex-start;
5
+ margin: var(--margin-vertical) auto;
6
+ position: relative;
7
+ width: min(var(--max-width), calc(100% - var(--margin-horizontal) * 2));
8
+ }
@@ -1,5 +1,5 @@
1
- .container {
2
- --margin-horizontal: var(--size-600);
3
- --margin-vertical: 0px;
4
- --max-width: 1400px;
5
- }
1
+ .container {
2
+ --margin-horizontal: var(--size-600);
3
+ --margin-vertical: 0px;
4
+ --max-width: 1400px;
5
+ }
@@ -1,94 +1,94 @@
1
- import { effect, reactive } from '@esportsplus/reactivity'
2
- import { html } from '@esportsplus/template';
3
-
4
-
5
- let formatters: Record<string, Intl.NumberFormat> = {};
6
-
7
-
8
- export default ({ currency, delay, max, suffix, value }: { currency?: 'IGNORE' | 'EUR' | 'GBP' | 'USD', delay?: number, max?: number, suffix?: string, value: number }) => {
9
- let api = reactive({ value: -1 }),
10
- formatter = currency === 'IGNORE' ? undefined : formatters[currency || 'USD'] ??= new Intl.NumberFormat('en-US', {
11
- style: 'currency',
12
- currency: currency || 'USD'
13
- }),
14
- rendering = true,
15
- state = reactive({
16
- length: 0,
17
- render: [] as string[]
18
- });
19
-
20
- effect(() => {
21
- if (api.value !== -1) {
22
- value = api.value;
23
- }
24
-
25
- let padding = (max || value).toFixed(2).length - value.toFixed(2).length,
26
- values = value.toString().padStart( value.toString().length + padding, '1') as any;
27
-
28
- if (formatter) {
29
- values = formatter.format(values);
30
- }
31
- else {
32
- values = Number(values).toLocaleString();
33
- }
34
-
35
- values = values.split('');
36
-
37
- if (suffix) {
38
- values.push(' ', ...suffix.split(''));
39
- }
40
-
41
- state.length = values.length;
42
-
43
- for (let i = 0, n = values.length; i < n; i++) {
44
- let value = values[i];
45
-
46
- if (!isNaN(parseInt(value, 10)) && (rendering === true || padding > 0)) {
47
- padding--;
48
- value = '0';
49
- }
50
-
51
- state.render[i] = value;
52
- }
53
-
54
- if (rendering === true) {
55
- rendering = false;
56
- setTimeout(() => api.value = value, delay || 1000);
57
- }
58
- });
59
-
60
- return {
61
- html: html`
62
- <div class='counter'>
63
- ${() => {
64
- let n = state.length;
65
-
66
- if (n === 0) {
67
- return '';
68
- }
69
-
70
- return html.reactive(state.render, function (value, i) {
71
- if (isNaN(parseInt(value, 10))) {
72
- return html`
73
- <span class='counter-character counter-character--symbol'>
74
- ${value}
75
- </span>
76
- `;
77
- }
78
-
79
- return html`
80
- <div class='counter-character ${i > n - 3 ? 'counter-character--fraction' : ''}'>
81
- <div class='counter-character-track' style='${() => `--value: ${this[i]}`}'>
82
- <span>9</span>
83
- ${[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((value) => html`<span>${value}</span>`)}
84
- <span>0</span>
85
- </div>
86
- </div>
87
- `;
88
- })
89
- }}
90
- </div>
91
- `,
92
- state: api
93
- };
1
+ import { effect, reactive } from '@esportsplus/reactivity'
2
+ import { html } from '@esportsplus/template';
3
+
4
+
5
+ let formatters: Record<string, Intl.NumberFormat> = {};
6
+
7
+
8
+ export default ({ currency, delay, max, suffix, value }: { currency?: 'IGNORE' | 'EUR' | 'GBP' | 'USD', delay?: number, max?: number, suffix?: string, value: number }) => {
9
+ let api = reactive({ value: -1 }),
10
+ formatter = currency === 'IGNORE' ? undefined : formatters[currency || 'USD'] ??= new Intl.NumberFormat('en-US', {
11
+ style: 'currency',
12
+ currency: currency || 'USD'
13
+ }),
14
+ rendering = true,
15
+ state = reactive({
16
+ length: 0,
17
+ render: [] as string[]
18
+ });
19
+
20
+ effect(() => {
21
+ if (api.value !== -1) {
22
+ value = api.value;
23
+ }
24
+
25
+ let padding = (max || value).toFixed(2).length - value.toFixed(2).length,
26
+ values = value.toString().padStart( value.toString().length + padding, '1') as any;
27
+
28
+ if (formatter) {
29
+ values = formatter.format(values);
30
+ }
31
+ else {
32
+ values = Number(values).toLocaleString();
33
+ }
34
+
35
+ values = values.split('');
36
+
37
+ if (suffix) {
38
+ values.push(' ', ...suffix.split(''));
39
+ }
40
+
41
+ state.length = values.length;
42
+
43
+ for (let i = 0, n = values.length; i < n; i++) {
44
+ let value = values[i];
45
+
46
+ if (!isNaN(parseInt(value, 10)) && (rendering === true || padding > 0)) {
47
+ padding--;
48
+ value = '0';
49
+ }
50
+
51
+ state.render[i] = value;
52
+ }
53
+
54
+ if (rendering === true) {
55
+ rendering = false;
56
+ setTimeout(() => api.value = value, delay || 1000);
57
+ }
58
+ });
59
+
60
+ return {
61
+ html: html`
62
+ <div class='counter'>
63
+ ${() => {
64
+ let n = state.length;
65
+
66
+ if (n === 0) {
67
+ return '';
68
+ }
69
+
70
+ return html.reactive(state.render, function (value, i) {
71
+ if (isNaN(parseInt(value, 10))) {
72
+ return html`
73
+ <span class='counter-character counter-character--symbol'>
74
+ ${value}
75
+ </span>
76
+ `;
77
+ }
78
+
79
+ return html`
80
+ <div class='counter-character ${i > n - 3 ? 'counter-character--fraction' : ''}'>
81
+ <div class='counter-character-track' style='${() => `--value: ${this[i]}`}'>
82
+ <span>9</span>
83
+ ${[0, 1, 2, 3, 4, 5, 6, 7, 8, 9].map((value) => html`<span>${value}</span>`)}
84
+ <span>0</span>
85
+ </div>
86
+ </div>
87
+ `;
88
+ })
89
+ }}
90
+ </div>
91
+ `,
92
+ state: api
93
+ };
94
94
  };
@@ -1,62 +1,62 @@
1
- .counter {
2
- display: flex;
3
- gap: 2px;
4
- place-items: center;
5
- transition: transform 0.5s 2s;
6
- transform-style: flat;
7
-
8
- &-character,
9
- &-character-track span {
10
- background: linear-gradient(hsl(0 0% 98%) 50%, hsl(0 0% 45%));
11
- background-attachment: fixed;
12
- background-clip: text;
13
- color: transparent;
14
- transform-style: flat;
15
- }
16
-
17
- &-character {
18
- display: grid;
19
- font-size: var(--font-size);
20
- font-variant: tabular-nums;
21
- font-weight: var(--font-weight);
22
- height: 1lh;
23
- line-height: var(--line-height);
24
- mask: linear-gradient(transparent, white calc(1lh * var(--mask-size)) calc(100% - (1lh * var(--mask-size))), transparent);
25
- overflow: hidden;
26
- transform-style: flat;
27
-
28
- &--fraction {
29
- font-size: calc(var(--font-size) * var(--scale));
30
- font-weight: var(--font-weight-300);
31
- opacity: var(--opacity);
32
- overflow: visible;
33
- height: var(--line-height);
34
-
35
- .counter-character-track {
36
- span {
37
- display: flex;
38
- flex-direction: column;
39
- align-items: end;
40
- padding: calc((var(--line-height) - var(--font-size)) * 0.2) 0;
41
- }
42
- }
43
- }
44
-
45
- &--symbol {
46
- font-size: calc(var(--font-size) * var(--scale));
47
- margin-right: 0.1ch;
48
- opacity: var(--opacity);
49
- }
50
-
51
- &-track {
52
- display: grid;
53
- translate: 0 calc((var(--value) + 1) * (var(--line-height) * -1));
54
- transition: translate var(--transition-duration) var(--timing-function);
55
-
56
- span {
57
- height: 1lh;
58
- transform-style: flat;
59
- }
60
- }
61
- }
1
+ .counter {
2
+ display: flex;
3
+ gap: 2px;
4
+ place-items: center;
5
+ transition: transform 0.5s 2s;
6
+ transform-style: flat;
7
+
8
+ &-character,
9
+ &-character-track span {
10
+ background: linear-gradient(hsl(0 0% 98%) 50%, hsl(0 0% 45%));
11
+ background-attachment: fixed;
12
+ background-clip: text;
13
+ color: transparent;
14
+ transform-style: flat;
15
+ }
16
+
17
+ &-character {
18
+ display: grid;
19
+ font-size: var(--font-size);
20
+ font-variant: tabular-nums;
21
+ font-weight: var(--font-weight);
22
+ height: 1lh;
23
+ line-height: var(--line-height);
24
+ mask: linear-gradient(transparent, white calc(1lh * var(--mask-size)) calc(100% - (1lh * var(--mask-size))), transparent);
25
+ overflow: hidden;
26
+ transform-style: flat;
27
+
28
+ &--fraction {
29
+ font-size: calc(var(--font-size) * var(--scale));
30
+ font-weight: var(--font-weight-300);
31
+ opacity: var(--opacity);
32
+ overflow: visible;
33
+ height: var(--line-height);
34
+
35
+ .counter-character-track {
36
+ span {
37
+ display: flex;
38
+ flex-direction: column;
39
+ align-items: end;
40
+ padding: calc((var(--line-height) - var(--font-size)) * 0.2) 0;
41
+ }
42
+ }
43
+ }
44
+
45
+ &--symbol {
46
+ font-size: calc(var(--font-size) * var(--scale));
47
+ margin-right: 0.1ch;
48
+ opacity: var(--opacity);
49
+ }
50
+
51
+ &-track {
52
+ display: grid;
53
+ translate: 0 calc((var(--value) + 1) * (var(--line-height) * -1));
54
+ transition: translate var(--transition-duration) var(--timing-function);
55
+
56
+ span {
57
+ height: 1lh;
58
+ transform-style: flat;
59
+ }
60
+ }
61
+ }
62
62
  }