timered-counter 0.0.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.
- package/LICENSE +21 -0
- package/README.md +76 -0
- package/dist/custom-elements.json +8484 -0
- package/dist/src/counter-adapter.d.ts +38 -0
- package/dist/src/counter-adapter.js +69 -0
- package/dist/src/counter-adapter.js.map +1 -0
- package/dist/src/easing/cubic-bezier.d.ts +5 -0
- package/dist/src/easing/cubic-bezier.js +35 -0
- package/dist/src/easing/cubic-bezier.js.map +1 -0
- package/dist/src/easing/easing-functions.d.ts +1 -0
- package/dist/src/easing/easing-functions.js +10 -0
- package/dist/src/easing/easing-functions.js.map +1 -0
- package/dist/src/easing/index.d.ts +2 -0
- package/dist/src/easing/index.js +3 -0
- package/dist/src/easing/index.js.map +1 -0
- package/dist/src/easing/penner-easing-functions.d.ts +33 -0
- package/dist/src/easing/penner-easing-functions.js +82 -0
- package/dist/src/easing/penner-easing-functions.js.map +1 -0
- package/dist/src/index.d.ts +18 -0
- package/dist/src/index.js +13 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/mixins/counter-aira.d.ts +9 -0
- package/dist/src/mixins/counter-aira.js +41 -0
- package/dist/src/mixins/counter-aira.js.map +1 -0
- package/dist/src/mixins/counter-animation.d.ts +13 -0
- package/dist/src/mixins/counter-animation.js +55 -0
- package/dist/src/mixins/counter-animation.js.map +1 -0
- package/dist/src/mixins/counter-base.d.ts +21 -0
- package/dist/src/mixins/counter-base.js +152 -0
- package/dist/src/mixins/counter-base.js.map +1 -0
- package/dist/src/mixins/counter-parts.d.ts +42 -0
- package/dist/src/mixins/counter-parts.js +180 -0
- package/dist/src/mixins/counter-parts.js.map +1 -0
- package/dist/src/mixins/counter-styles.d.ts +17 -0
- package/dist/src/mixins/counter-styles.js +93 -0
- package/dist/src/mixins/counter-styles.js.map +1 -0
- package/dist/src/number-adapter/build-in-bigint.d.ts +6 -0
- package/dist/src/number-adapter/build-in-bigint.js +92 -0
- package/dist/src/number-adapter/build-in-bigint.js.map +1 -0
- package/dist/src/number-adapter/build-in-number.d.ts +3 -0
- package/dist/src/number-adapter/build-in-number.js +84 -0
- package/dist/src/number-adapter/build-in-number.js.map +1 -0
- package/dist/src/number-adapter/decimal-js.d.ts +4 -0
- package/dist/src/number-adapter/decimal-js.js +87 -0
- package/dist/src/number-adapter/decimal-js.js.map +1 -0
- package/dist/src/number-adapter/index.d.ts +4 -0
- package/dist/src/number-adapter/index.js +5 -0
- package/dist/src/number-adapter/index.js.map +1 -0
- package/dist/src/number-adapter/types.d.ts +34 -0
- package/dist/src/number-adapter/types.js +2 -0
- package/dist/src/number-adapter/types.js.map +1 -0
- package/dist/src/string-adapter/build-in-intl-segmenter.d.ts +10 -0
- package/dist/src/string-adapter/build-in-intl-segmenter.js +18 -0
- package/dist/src/string-adapter/build-in-intl-segmenter.js.map +1 -0
- package/dist/src/string-adapter/build-in-string.d.ts +12 -0
- package/dist/src/string-adapter/build-in-string.js +16 -0
- package/dist/src/string-adapter/build-in-string.js.map +1 -0
- package/dist/src/string-adapter/grapheme-splitter.d.ts +8 -0
- package/dist/src/string-adapter/grapheme-splitter.js +16 -0
- package/dist/src/string-adapter/grapheme-splitter.js.map +1 -0
- package/dist/src/string-adapter/index.d.ts +4 -0
- package/dist/src/string-adapter/index.js +5 -0
- package/dist/src/string-adapter/index.js.map +1 -0
- package/dist/src/string-adapter/types.d.ts +19 -0
- package/dist/src/string-adapter/types.js +2 -0
- package/dist/src/string-adapter/types.js.map +1 -0
- package/dist/src/styles/timered-counter-datetime-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-datetime-styles.js +8 -0
- package/dist/src/styles/timered-counter-datetime-styles.js.map +1 -0
- package/dist/src/styles/timered-counter-number-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-number-styles.js +3 -0
- package/dist/src/styles/timered-counter-number-styles.js.map +1 -0
- package/dist/src/styles/timered-counter-string-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-string-styles.js +3 -0
- package/dist/src/styles/timered-counter-string-styles.js.map +1 -0
- package/dist/src/styles/timered-counter-styles.d.ts +1 -0
- package/dist/src/styles/timered-counter-styles.js +25 -0
- package/dist/src/styles/timered-counter-styles.js.map +1 -0
- package/dist/src/timered-counter-datetime-duration.d.ts +37 -0
- package/dist/src/timered-counter-datetime-duration.js +186 -0
- package/dist/src/timered-counter-datetime-duration.js.map +1 -0
- package/dist/src/timered-counter-number.d.ts +23 -0
- package/dist/src/timered-counter-number.js +114 -0
- package/dist/src/timered-counter-number.js.map +1 -0
- package/dist/src/timered-counter-string.d.ts +30 -0
- package/dist/src/timered-counter-string.js +138 -0
- package/dist/src/timered-counter-string.js.map +1 -0
- package/dist/src/timered-counter.d.ts +15 -0
- package/dist/src/timered-counter.js +80 -0
- package/dist/src/timered-counter.js.map +1 -0
- package/dist/src/transitions/roller/index.d.ts +1 -0
- package/dist/src/transitions/roller/index.js +2 -0
- package/dist/src/transitions/roller/index.js.map +1 -0
- package/dist/src/transitions/roller/roller-digit.d.ts +28 -0
- package/dist/src/transitions/roller/roller-digit.js +259 -0
- package/dist/src/transitions/roller/roller-digit.js.map +1 -0
- package/dist/src/transitions/roller/roller.d.ts +42 -0
- package/dist/src/transitions/roller/roller.js +235 -0
- package/dist/src/transitions/roller/roller.js.map +1 -0
- package/dist/src/transitions/roller/styles.d.ts +2 -0
- package/dist/src/transitions/roller/styles.js +77 -0
- package/dist/src/transitions/roller/styles.js.map +1 -0
- package/dist/src/types/duration.d.ts +33 -0
- package/dist/src/types/duration.js +35 -0
- package/dist/src/types/duration.js.map +1 -0
- package/dist/src/types/group.d.ts +67 -0
- package/dist/src/types/group.js +2 -0
- package/dist/src/types/group.js.map +1 -0
- package/dist/src/utils/any-base.d.ts +6 -0
- package/dist/src/utils/any-base.js +56 -0
- package/dist/src/utils/any-base.js.map +1 -0
- package/dist/src/utils/duration.d.ts +15 -0
- package/dist/src/utils/duration.js +66 -0
- package/dist/src/utils/duration.js.map +1 -0
- package/dist/src/utils/extract-group-option.d.ts +9 -0
- package/dist/src/utils/extract-group-option.js +81 -0
- package/dist/src/utils/extract-group-option.js.map +1 -0
- package/dist/src/utils/iso8601-duration.d.ts +4 -0
- package/dist/src/utils/iso8601-duration.js +32 -0
- package/dist/src/utils/iso8601-duration.js.map +1 -0
- package/dist/src/utils/localized-date-time-fields.d.ts +2 -0
- package/dist/src/utils/localized-date-time-fields.js +24 -0
- package/dist/src/utils/localized-date-time-fields.js.map +1 -0
- package/dist/src/utils/parse-json-string.d.ts +1 -0
- package/dist/src/utils/parse-json-string.js +9 -0
- package/dist/src/utils/parse-json-string.js.map +1 -0
- package/dist/src/utils/polyfill-keyframes.d.ts +1 -0
- package/dist/src/utils/polyfill-keyframes.js +19 -0
- package/dist/src/utils/polyfill-keyframes.js.map +1 -0
- package/dist/src/utils/preprocess-part-data.d.ts +25 -0
- package/dist/src/utils/preprocess-part-data.js +59 -0
- package/dist/src/utils/preprocess-part-data.js.map +1 -0
- package/dist/src/utils/transition-digit.d.ts +2 -0
- package/dist/src/utils/transition-digit.js +51 -0
- package/dist/src/utils/transition-digit.js.map +1 -0
- package/dist/src/utils/uuid.d.ts +1 -0
- package/dist/src/utils/uuid.js +7 -0
- package/dist/src/utils/uuid.js.map +1 -0
- package/dist/stories/story-parts/animation-events.d.ts +9 -0
- package/dist/stories/story-parts/animation-events.js +35 -0
- package/dist/stories/story-parts/animation-events.js.map +1 -0
- package/dist/stories/story-parts/animation-options.d.ts +8 -0
- package/dist/stories/story-parts/animation-options.js +25 -0
- package/dist/stories/story-parts/animation-options.js.map +1 -0
- package/dist/stories/story-parts/big-number.d.ts +8 -0
- package/dist/stories/story-parts/big-number.js +25 -0
- package/dist/stories/story-parts/big-number.js.map +1 -0
- package/dist/stories/story-parts/datetime-locale.d.ts +8 -0
- package/dist/stories/story-parts/datetime-locale.js +30 -0
- package/dist/stories/story-parts/datetime-locale.js.map +1 -0
- package/dist/stories/story-parts/datetime-precision.d.ts +8 -0
- package/dist/stories/story-parts/datetime-precision.js +82 -0
- package/dist/stories/story-parts/datetime-precision.js.map +1 -0
- package/dist/stories/story-parts/edge-case.d.ts +8 -0
- package/dist/stories/story-parts/edge-case.js +12 -0
- package/dist/stories/story-parts/edge-case.js.map +1 -0
- package/dist/stories/story-parts/emoji.d.ts +9 -0
- package/dist/stories/story-parts/emoji.js +20 -0
- package/dist/stories/story-parts/emoji.js.map +1 -0
- package/dist/stories/story-parts/locale-number.d.ts +7 -0
- package/dist/stories/story-parts/locale-number.js +23 -0
- package/dist/stories/story-parts/locale-number.js.map +1 -0
- package/dist/stories/story-parts/slots.d.ts +10 -0
- package/dist/stories/story-parts/slots.js +29 -0
- package/dist/stories/story-parts/slots.js.map +1 -0
- package/dist/stories/story-parts/styles.d.ts +7 -0
- package/dist/stories/story-parts/styles.js +34 -0
- package/dist/stories/story-parts/styles.js.map +1 -0
- package/dist/stories/story-parts/value-change.d.ts +9 -0
- package/dist/stories/story-parts/value-change.js +20 -0
- package/dist/stories/story-parts/value-change.js.map +1 -0
- package/dist/stories/timered-counter/decimaljs.stories.d.ts +6 -0
- package/dist/stories/timered-counter/decimaljs.stories.js +34 -0
- package/dist/stories/timered-counter/decimaljs.stories.js.map +1 -0
- package/dist/stories/timered-counter/index.stories.d.ts +9 -0
- package/dist/stories/timered-counter/index.stories.js +180 -0
- package/dist/stories/timered-counter/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-datetime-duration/index.stories.d.ts +7 -0
- package/dist/stories/timered-counter-datetime-duration/index.stories.js +95 -0
- package/dist/stories/timered-counter-datetime-duration/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-number/decimaljs.stories.d.ts +6 -0
- package/dist/stories/timered-counter-number/decimaljs.stories.js +34 -0
- package/dist/stories/timered-counter-number/decimaljs.stories.js.map +1 -0
- package/dist/stories/timered-counter-number/index.stories.d.ts +9 -0
- package/dist/stories/timered-counter-number/index.stories.js +188 -0
- package/dist/stories/timered-counter-number/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/decimaljs.stories.d.ts +7 -0
- package/dist/stories/timered-counter-string/decimaljs.stories.js +55 -0
- package/dist/stories/timered-counter-string/decimaljs.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.d.ts +7 -0
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.js +56 -0
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/index.stories.d.ts +9 -0
- package/dist/stories/timered-counter-string/index.stories.js +126 -0
- package/dist/stories/timered-counter-string/index.stories.js.map +1 -0
- package/dist/stories/timered-counter-string/intl-segmenter.stories.d.ts +7 -0
- package/dist/stories/timered-counter-string/intl-segmenter.stories.js +56 -0
- package/dist/stories/timered-counter-string/intl-segmenter.stories.js.map +1 -0
- package/dist/stories/utils/index.d.ts +8 -0
- package/dist/stories/utils/index.js +20 -0
- package/dist/stories/utils/index.js.map +1 -0
- package/dist/test/td-counter.test.d.ts +1 -0
- package/dist/test/td-counter.test.js +25 -0
- package/dist/test/td-counter.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +128 -0
@@ -0,0 +1,92 @@
|
|
1
|
+
/**
|
2
|
+
* @deprecated
|
3
|
+
*/
|
4
|
+
const BuildInBigintAdapter = () => ({
|
5
|
+
create(value) {
|
6
|
+
return BigInt(value);
|
7
|
+
},
|
8
|
+
add(a, b) {
|
9
|
+
return a + b;
|
10
|
+
},
|
11
|
+
sub(a, b) {
|
12
|
+
return a - b;
|
13
|
+
},
|
14
|
+
mul(a, b) {
|
15
|
+
if (typeof b === "bigint")
|
16
|
+
return a * b;
|
17
|
+
// b 是 number 时
|
18
|
+
const decimalPlaces = b.toString().split(".")[1]?.length || 0;
|
19
|
+
const base = 10 ** decimalPlaces;
|
20
|
+
return (a * BigInt(b * base)) / BigInt(base);
|
21
|
+
},
|
22
|
+
div(a, b) {
|
23
|
+
return a / b;
|
24
|
+
},
|
25
|
+
compare(a, b) {
|
26
|
+
if (a > b)
|
27
|
+
return 1;
|
28
|
+
else if (a < b)
|
29
|
+
return -1;
|
30
|
+
else
|
31
|
+
return 0;
|
32
|
+
},
|
33
|
+
eq(a, b) {
|
34
|
+
return a === b;
|
35
|
+
},
|
36
|
+
gt(a, b) {
|
37
|
+
return a > b;
|
38
|
+
},
|
39
|
+
gte(a, b) {
|
40
|
+
return a >= b;
|
41
|
+
},
|
42
|
+
lt(a, b) {
|
43
|
+
return a < b;
|
44
|
+
},
|
45
|
+
lte(a, b) {
|
46
|
+
return a <= b;
|
47
|
+
},
|
48
|
+
isInteger() {
|
49
|
+
return true;
|
50
|
+
},
|
51
|
+
isNegative(a) {
|
52
|
+
return a < 0n;
|
53
|
+
},
|
54
|
+
isPositive(a) {
|
55
|
+
return a > 0n;
|
56
|
+
},
|
57
|
+
isZero(a) {
|
58
|
+
return a === 0n;
|
59
|
+
},
|
60
|
+
isNaN() {
|
61
|
+
return false;
|
62
|
+
},
|
63
|
+
isFinite() {
|
64
|
+
return true;
|
65
|
+
},
|
66
|
+
abs(a) {
|
67
|
+
return a < 0n ? -a : a;
|
68
|
+
},
|
69
|
+
ceil(a) {
|
70
|
+
return a;
|
71
|
+
},
|
72
|
+
floor(a) {
|
73
|
+
return a;
|
74
|
+
},
|
75
|
+
round(a) {
|
76
|
+
return a;
|
77
|
+
},
|
78
|
+
max(a, b) {
|
79
|
+
return a > b ? a : b;
|
80
|
+
},
|
81
|
+
min(a, b) {
|
82
|
+
return a < b ? a : b;
|
83
|
+
},
|
84
|
+
toNumber(a) {
|
85
|
+
return Number(a);
|
86
|
+
},
|
87
|
+
toString(a) {
|
88
|
+
return a.toString();
|
89
|
+
},
|
90
|
+
});
|
91
|
+
export { BuildInBigintAdapter };
|
92
|
+
//# sourceMappingURL=build-in-bigint.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"build-in-bigint.js","sourceRoot":"","sources":["../../../src/number-adapter/build-in-bigint.ts"],"names":[],"mappings":"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","sourcesContent":["import { NumberAdapter } from \"./types.js\";\n\n/**\n * @deprecated\n */\nconst BuildInBigintAdapter: () => NumberAdapter<bigint> = () => ({\n create(value: string | number | bigint): bigint {\n return BigInt(value);\n },\n add(a, b) {\n return a + b;\n },\n sub(a, b) {\n return a - b;\n },\n mul(a, b) {\n if (typeof b === \"bigint\") return a * b;\n\n // b 是 number 时\n const decimalPlaces = b.toString().split(\".\")[1]?.length || 0;\n const base = 10 ** decimalPlaces;\n return (a * BigInt(b * base)) / BigInt(base);\n },\n div(a, b) {\n return a / b;\n },\n compare(a, b) {\n if (a > b) return 1;\n else if (a < b) return -1;\n else return 0;\n },\n eq(a, b) {\n return a === b;\n },\n gt(a, b) {\n return a > b;\n },\n gte(a, b) {\n return a >= b;\n },\n lt(a, b) {\n return a < b;\n },\n lte(a, b) {\n return a <= b;\n },\n isInteger() {\n return true;\n },\n isNegative(a) {\n return a < 0n;\n },\n isPositive(a) {\n return a > 0n;\n },\n isZero(a) {\n return a === 0n;\n },\n isNaN() {\n return false;\n },\n isFinite() {\n return true;\n },\n abs(a) {\n return a < 0n ? -a : a;\n },\n ceil(a) {\n return a;\n },\n floor(a) {\n return a;\n },\n round(a) {\n return a;\n },\n max(a, b) {\n return a > b ? a : b;\n },\n min(a, b) {\n return a < b ? a : b;\n },\n toNumber(a) {\n return Number(a);\n },\n toString(a) {\n return a.toString();\n },\n});\n\nexport { BuildInBigintAdapter };\n"]}
|
@@ -0,0 +1,84 @@
|
|
1
|
+
const BuildInNumberAdapter = () => ({
|
2
|
+
create(value) {
|
3
|
+
const num = Number(value);
|
4
|
+
return Number.isFinite(num) ? num : 0;
|
5
|
+
},
|
6
|
+
add(a, b) {
|
7
|
+
return a + b;
|
8
|
+
},
|
9
|
+
sub(a, b) {
|
10
|
+
return a - b;
|
11
|
+
},
|
12
|
+
mul(a, b) {
|
13
|
+
return a * b;
|
14
|
+
},
|
15
|
+
div(a, b) {
|
16
|
+
return a / b;
|
17
|
+
},
|
18
|
+
compare(a, b) {
|
19
|
+
if (a > b)
|
20
|
+
return 1;
|
21
|
+
if (a < b)
|
22
|
+
return -1;
|
23
|
+
return 0;
|
24
|
+
},
|
25
|
+
eq(a, b) {
|
26
|
+
return a === b;
|
27
|
+
},
|
28
|
+
gt(a, b) {
|
29
|
+
return a > b;
|
30
|
+
},
|
31
|
+
gte(a, b) {
|
32
|
+
return a >= b;
|
33
|
+
},
|
34
|
+
lt(a, b) {
|
35
|
+
return a < b;
|
36
|
+
},
|
37
|
+
lte(a, b) {
|
38
|
+
return a <= b;
|
39
|
+
},
|
40
|
+
isInteger(a) {
|
41
|
+
return Number.isInteger(a);
|
42
|
+
},
|
43
|
+
isNegative(a) {
|
44
|
+
return a < 0;
|
45
|
+
},
|
46
|
+
isPositive(a) {
|
47
|
+
return a > 0;
|
48
|
+
},
|
49
|
+
isZero(a) {
|
50
|
+
return a === 0;
|
51
|
+
},
|
52
|
+
isNaN(a) {
|
53
|
+
return Number.isNaN(a);
|
54
|
+
},
|
55
|
+
isFinite(a) {
|
56
|
+
return Number.isFinite(a);
|
57
|
+
},
|
58
|
+
abs(a) {
|
59
|
+
return Math.abs(a);
|
60
|
+
},
|
61
|
+
ceil(a) {
|
62
|
+
return Math.ceil(a);
|
63
|
+
},
|
64
|
+
floor(a) {
|
65
|
+
return Math.floor(a);
|
66
|
+
},
|
67
|
+
round(a) {
|
68
|
+
return Math.round(a);
|
69
|
+
},
|
70
|
+
max(a, b) {
|
71
|
+
return Math.max(a, b);
|
72
|
+
},
|
73
|
+
min(a, b) {
|
74
|
+
return Math.min(a, b);
|
75
|
+
},
|
76
|
+
toNumber(a) {
|
77
|
+
return Number(a);
|
78
|
+
},
|
79
|
+
toString(a) {
|
80
|
+
return String(a);
|
81
|
+
},
|
82
|
+
});
|
83
|
+
export { BuildInNumberAdapter };
|
84
|
+
//# sourceMappingURL=build-in-number.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"build-in-number.js","sourceRoot":"","sources":["../../../src/number-adapter/build-in-number.ts"],"names":[],"mappings":"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","sourcesContent":["import { NumberAdapter } from './types.js';\n\nconst BuildInNumberAdapter: () => NumberAdapter<number> = () => ({\n create(value: string | number): number {\n const num = Number(value);\n return Number.isFinite(num) ? num : 0;\n },\n add(a, b) {\n return a + b;\n },\n sub(a, b) {\n return a - b;\n },\n mul(a, b) {\n return a * b;\n },\n div(a, b) {\n return a / b;\n },\n compare(a, b) {\n if (a > b) return 1;\n if (a < b) return -1;\n return 0;\n },\n eq(a, b) {\n return a === b;\n },\n gt(a, b) {\n return a > b;\n },\n gte(a, b) {\n return a >= b;\n },\n lt(a, b) {\n return a < b;\n },\n lte(a, b) {\n return a <= b;\n },\n isInteger(a) {\n return Number.isInteger(a);\n },\n isNegative(a) {\n return a < 0;\n },\n isPositive(a) {\n return a > 0;\n },\n isZero(a) {\n return a === 0;\n },\n isNaN(a) {\n return Number.isNaN(a);\n },\n isFinite(a) {\n return Number.isFinite(a);\n },\n abs(a) {\n return Math.abs(a);\n },\n ceil(a) {\n return Math.ceil(a);\n },\n floor(a) {\n return Math.floor(a);\n },\n round(a) {\n return Math.round(a);\n },\n max(a, b) {\n return Math.max(a, b);\n },\n min(a, b) {\n return Math.min(a, b);\n },\n toNumber(a) {\n return Number(a);\n },\n toString(a) {\n return String(a);\n },\n});\n\nexport { BuildInNumberAdapter };\n"]}
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import { Decimal } from 'decimal.js';
|
2
|
+
import { isString } from 'remeda';
|
3
|
+
const numberRegex = /^-?\d+(\.\d+)?$/;
|
4
|
+
const DecimalJsAdapter = (config = { precision: 1e3 }) => {
|
5
|
+
const InnerDecimal = Decimal.clone(config);
|
6
|
+
return {
|
7
|
+
create(value) {
|
8
|
+
if (isString(value) && !numberRegex.test(value))
|
9
|
+
value = 0;
|
10
|
+
return new InnerDecimal(value);
|
11
|
+
},
|
12
|
+
add(a, b) {
|
13
|
+
return a.plus(b);
|
14
|
+
},
|
15
|
+
sub(a, b) {
|
16
|
+
return a.minus(b);
|
17
|
+
},
|
18
|
+
mul(a, b) {
|
19
|
+
return a.times(b);
|
20
|
+
},
|
21
|
+
div(a, b) {
|
22
|
+
return a.div(b);
|
23
|
+
},
|
24
|
+
compare(a, b) {
|
25
|
+
return a.cmp(b);
|
26
|
+
},
|
27
|
+
eq(a, b) {
|
28
|
+
return a.eq(b);
|
29
|
+
},
|
30
|
+
gt(a, b) {
|
31
|
+
return a.gt(b);
|
32
|
+
},
|
33
|
+
gte(a, b) {
|
34
|
+
return a.gte(b);
|
35
|
+
},
|
36
|
+
lt(a, b) {
|
37
|
+
return a.lt(b);
|
38
|
+
},
|
39
|
+
lte(a, b) {
|
40
|
+
return a.lte(b);
|
41
|
+
},
|
42
|
+
isInteger(a) {
|
43
|
+
return a.isInteger();
|
44
|
+
},
|
45
|
+
isNegative(a) {
|
46
|
+
return a.isNegative();
|
47
|
+
},
|
48
|
+
isPositive(a) {
|
49
|
+
return a.isPositive();
|
50
|
+
},
|
51
|
+
isZero(a) {
|
52
|
+
return a.isZero();
|
53
|
+
},
|
54
|
+
isNaN(a) {
|
55
|
+
return a.isNaN();
|
56
|
+
},
|
57
|
+
isFinite(a) {
|
58
|
+
return a.isFinite();
|
59
|
+
},
|
60
|
+
abs(a) {
|
61
|
+
return a.abs();
|
62
|
+
},
|
63
|
+
ceil(a) {
|
64
|
+
return a.ceil();
|
65
|
+
},
|
66
|
+
floor(a) {
|
67
|
+
return a.floor();
|
68
|
+
},
|
69
|
+
round(a) {
|
70
|
+
return a.round();
|
71
|
+
},
|
72
|
+
max(a, b) {
|
73
|
+
return InnerDecimal.max(a, b);
|
74
|
+
},
|
75
|
+
min(a, b) {
|
76
|
+
return InnerDecimal.min(a, b);
|
77
|
+
},
|
78
|
+
toNumber(a) {
|
79
|
+
return a.toNumber();
|
80
|
+
},
|
81
|
+
toString(a) {
|
82
|
+
return a.toFixed();
|
83
|
+
},
|
84
|
+
};
|
85
|
+
};
|
86
|
+
export { DecimalJsAdapter };
|
87
|
+
//# sourceMappingURL=decimal-js.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"decimal-js.js","sourceRoot":"","sources":["../../../src/number-adapter/decimal-js.ts"],"names":[],"mappings":"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","sourcesContent":["import { Decimal } from 'decimal.js';\nimport { isString } from 'remeda';\nimport { NumberAdapter } from './types.js';\n\nconst numberRegex = /^-?\\d+(\\.\\d+)?$/;\n\nconst DecimalJsAdapter: (config?: Decimal.Config) => NumberAdapter<Decimal> = (\n config = { precision: 1e3 },\n) => {\n const InnerDecimal = Decimal.clone(config);\n return {\n create(value: string | number): Decimal {\n if (isString(value) && !numberRegex.test(value)) value = 0;\n return new InnerDecimal(value);\n },\n add(a, b) {\n return a.plus(b);\n },\n sub(a, b) {\n return a.minus(b);\n },\n mul(a, b) {\n return a.times(b);\n },\n div(a, b) {\n return a.div(b);\n },\n compare(a, b) {\n return a.cmp(b) as 1 | 0 | -1;\n },\n eq(a, b) {\n return a.eq(b);\n },\n gt(a, b) {\n return a.gt(b);\n },\n gte(a, b) {\n return a.gte(b);\n },\n lt(a, b) {\n return a.lt(b);\n },\n lte(a, b) {\n return a.lte(b);\n },\n isInteger(a) {\n return a.isInteger();\n },\n isNegative(a) {\n return a.isNegative();\n },\n isPositive(a) {\n return a.isPositive();\n },\n isZero(a) {\n return a.isZero();\n },\n isNaN(a) {\n return a.isNaN();\n },\n isFinite(a) {\n return a.isFinite();\n },\n abs(a) {\n return a.abs();\n },\n ceil(a) {\n return a.ceil();\n },\n floor(a) {\n return a.floor();\n },\n round(a) {\n return a.round();\n },\n max(a, b) {\n return InnerDecimal.max(a, b);\n },\n min(a, b) {\n return InnerDecimal.min(a, b);\n },\n toNumber(a) {\n return a.toNumber();\n },\n toString(a) {\n return a.toFixed();\n },\n };\n};\n\nexport { DecimalJsAdapter };\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/number-adapter/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC","sourcesContent":["export * from \"./types.js\";\nexport * from \"./build-in-number.js\";\nexport * from \"./build-in-bigint.js\";\nexport * from \"./decimal-js.js\";\n"]}
|
@@ -0,0 +1,34 @@
|
|
1
|
+
import { BuildInNumberAdapter } from './build-in-number.js';
|
2
|
+
import { DecimalJsAdapter } from './decimal-js.js';
|
3
|
+
/**
|
4
|
+
* 可以使用不同数字类型, 如 int, ~~bigint~~, decimal.js 等
|
5
|
+
*/
|
6
|
+
export interface NumberAdapter<T = any> {
|
7
|
+
create(value: any): T;
|
8
|
+
add(a: T, b: T): T;
|
9
|
+
sub(a: T, b: T): T;
|
10
|
+
mul(a: T, b: T | number): T;
|
11
|
+
div(a: T, b: T): T;
|
12
|
+
compare(a: T, b: T): 1 | 0 | -1;
|
13
|
+
eq(a: T, b: T): boolean;
|
14
|
+
gt(a: T, b: T): boolean;
|
15
|
+
gte(a: T, b: T): boolean;
|
16
|
+
lt(a: T, b: T): boolean;
|
17
|
+
lte(a: T, b: T): boolean;
|
18
|
+
isInteger(a: T): boolean;
|
19
|
+
isNegative(a: T): boolean;
|
20
|
+
isPositive(a: T): boolean;
|
21
|
+
isZero(a: T): boolean;
|
22
|
+
isNaN(a: T): boolean;
|
23
|
+
isFinite(a: T): boolean;
|
24
|
+
abs(a: T): T;
|
25
|
+
ceil(a: T): T;
|
26
|
+
floor(a: T): T;
|
27
|
+
round(a: T): T;
|
28
|
+
max(a: T, b: T): T;
|
29
|
+
min(a: T, b: T): T;
|
30
|
+
toNumber(a: T): number;
|
31
|
+
toString(a: T): string;
|
32
|
+
}
|
33
|
+
export type ExtractNumberAdapterType<T> = T extends NumberAdapter<infer U> ? U : never;
|
34
|
+
export type AvailableNumberAdapterValueType = ExtractNumberAdapterType<ReturnType<typeof BuildInNumberAdapter> | ReturnType<typeof DecimalJsAdapter>>;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/number-adapter/types.ts"],"names":[],"mappings":"","sourcesContent":["import { BuildInNumberAdapter } from './build-in-number.js';\nimport { DecimalJsAdapter } from './decimal-js.js';\n\n/**\n * 可以使用不同数字类型, 如 int, ~~bigint~~, decimal.js 等\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport interface NumberAdapter<T = any> {\n create(value: any): T;\n add(a: T, b: T): T;\n sub(a: T, b: T): T;\n mul(a: T, b: T | number): T;\n div(a: T, b: T): T;\n compare(a: T, b: T): 1 | 0 | -1;\n eq(a: T, b: T): boolean;\n gt(a: T, b: T): boolean;\n gte(a: T, b: T): boolean;\n lt(a: T, b: T): boolean;\n lte(a: T, b: T): boolean;\n isInteger(a: T): boolean;\n isNegative(a: T): boolean;\n isPositive(a: T): boolean;\n isZero(a: T): boolean;\n isNaN(a: T): boolean;\n isFinite(a: T): boolean;\n abs(a: T): T;\n ceil(a: T): T;\n floor(a: T): T;\n round(a: T): T;\n max(a: T, b: T): T;\n min(a: T, b: T): T;\n toNumber(a: T): number;\n toString(a: T): string;\n}\n\nexport type ExtractNumberAdapterType<T> =\n T extends NumberAdapter<infer U> ? U : never;\n\nexport type AvailableNumberAdapterValueType = ExtractNumberAdapterType<\n ReturnType<typeof BuildInNumberAdapter> | ReturnType<typeof DecimalJsAdapter>\n>;\n"]}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
import { StringAdapter } from "./types.js";
|
2
|
+
/**
|
3
|
+
* 使用内置的 `Intl.Segmenter` 将字符串转换为字符数组.
|
4
|
+
*
|
5
|
+
* 要使用 {@link BuildInIntlSegmenterAdapter} 需要浏览器支持 `Intl.Segmenter`, 查看 [caniuse](https://caniuse.com/?search=Segmenter).
|
6
|
+
*
|
7
|
+
* @param locales 本地化配置. 用于创建 {@link Intl.Segmenter} 实例.
|
8
|
+
*/
|
9
|
+
declare const BuildInIntlSegmenterAdapter: (locales?: Intl.LocalesArgument) => StringAdapter;
|
10
|
+
export { BuildInIntlSegmenterAdapter };
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/**
|
2
|
+
* 使用内置的 `Intl.Segmenter` 将字符串转换为字符数组.
|
3
|
+
*
|
4
|
+
* 要使用 {@link BuildInIntlSegmenterAdapter} 需要浏览器支持 `Intl.Segmenter`, 查看 [caniuse](https://caniuse.com/?search=Segmenter).
|
5
|
+
*
|
6
|
+
* @param locales 本地化配置. 用于创建 {@link Intl.Segmenter} 实例.
|
7
|
+
*/
|
8
|
+
const BuildInIntlSegmenterAdapter = (locales) => {
|
9
|
+
const segmenter = new Intl.Segmenter(locales, { granularity: "grapheme" });
|
10
|
+
return {
|
11
|
+
stringToChars(value) {
|
12
|
+
const segments = Array.from(segmenter.segment(value));
|
13
|
+
return segments.map((s) => s.segment);
|
14
|
+
},
|
15
|
+
};
|
16
|
+
};
|
17
|
+
export { BuildInIntlSegmenterAdapter };
|
18
|
+
//# sourceMappingURL=build-in-intl-segmenter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"build-in-intl-segmenter.js","sourceRoot":"","sources":["../../../src/string-adapter/build-in-intl-segmenter.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,2BAA2B,GAEZ,CAAC,OAAO,EAAE,EAAE;IAC/B,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,UAAU,EAAE,CAAC,CAAC;IAE3E,OAAO;QACL,aAAa,CAAC,KAAa;YACzB,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC;YACtD,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,2BAA2B,EAAE,CAAC","sourcesContent":["import { StringAdapter } from \"./types.js\";\n\n/**\n * 使用内置的 `Intl.Segmenter` 将字符串转换为字符数组.\n *\n * 要使用 {@link BuildInIntlSegmenterAdapter} 需要浏览器支持 `Intl.Segmenter`, 查看 [caniuse](https://caniuse.com/?search=Segmenter).\n *\n * @param locales 本地化配置. 用于创建 {@link Intl.Segmenter} 实例.\n */\nconst BuildInIntlSegmenterAdapter: (\n locales?: Intl.LocalesArgument\n) => StringAdapter = (locales) => {\n const segmenter = new Intl.Segmenter(locales, { granularity: \"grapheme\" });\n\n return {\n stringToChars(value: string): string[] {\n const segments = Array.from(segmenter.segment(value));\n return segments.map((s) => s.segment);\n },\n };\n};\n\nexport { BuildInIntlSegmenterAdapter };\n"]}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
import { StringAdapter } from "./types.js";
|
2
|
+
/**
|
3
|
+
* 默认的字符串适配器. 该适配器使用内置的 `Array.from` 方法将字符串转换为字符数组.
|
4
|
+
* 该方法可以正确处理包含单个的 emoji 字符的字符串[1]. 但对于由多个字符组合而成的 emoji 无能为力[2].
|
5
|
+
*
|
6
|
+
* 要支持组合的 emoji 查看 {@link BuildInIntlSegmenterAdapter}, {@link GraphemeSplitterAdapter}.
|
7
|
+
*
|
8
|
+
* [1]: https://dev.to/acanimal/how-to-slice-or-get-symbols-from-a-unicode-string-with-emojis-in-javascript-lets-learn-how-javascript-represent-strings-h3a
|
9
|
+
* [2]: https://cestoliv.com/blog/how-to-count-emojis-with-javascript/
|
10
|
+
*/
|
11
|
+
declare const BuildInStringAdapter: () => StringAdapter;
|
12
|
+
export { BuildInStringAdapter };
|
@@ -0,0 +1,16 @@
|
|
1
|
+
/**
|
2
|
+
* 默认的字符串适配器. 该适配器使用内置的 `Array.from` 方法将字符串转换为字符数组.
|
3
|
+
* 该方法可以正确处理包含单个的 emoji 字符的字符串[1]. 但对于由多个字符组合而成的 emoji 无能为力[2].
|
4
|
+
*
|
5
|
+
* 要支持组合的 emoji 查看 {@link BuildInIntlSegmenterAdapter}, {@link GraphemeSplitterAdapter}.
|
6
|
+
*
|
7
|
+
* [1]: https://dev.to/acanimal/how-to-slice-or-get-symbols-from-a-unicode-string-with-emojis-in-javascript-lets-learn-how-javascript-represent-strings-h3a
|
8
|
+
* [2]: https://cestoliv.com/blog/how-to-count-emojis-with-javascript/
|
9
|
+
*/
|
10
|
+
const BuildInStringAdapter = () => ({
|
11
|
+
stringToChars(value) {
|
12
|
+
return Array.from(value);
|
13
|
+
},
|
14
|
+
});
|
15
|
+
export { BuildInStringAdapter };
|
16
|
+
//# sourceMappingURL=build-in-string.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"build-in-string.js","sourceRoot":"","sources":["../../../src/string-adapter/build-in-string.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,MAAM,oBAAoB,GAAwB,GAAG,EAAE,CAAC,CAAC;IACvD,aAAa,CAAC,KAAa;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3B,CAAC;CACF,CAAC,CAAC;AAEH,OAAO,EAAE,oBAAoB,EAAE,CAAC","sourcesContent":["import { StringAdapter } from \"./types.js\";\n\n/**\n * 默认的字符串适配器. 该适配器使用内置的 `Array.from` 方法将字符串转换为字符数组.\n * 该方法可以正确处理包含单个的 emoji 字符的字符串[1]. 但对于由多个字符组合而成的 emoji 无能为力[2].\n *\n * 要支持组合的 emoji 查看 {@link BuildInIntlSegmenterAdapter}, {@link GraphemeSplitterAdapter}.\n *\n * [1]: https://dev.to/acanimal/how-to-slice-or-get-symbols-from-a-unicode-string-with-emojis-in-javascript-lets-learn-how-javascript-represent-strings-h3a\n * [2]: https://cestoliv.com/blog/how-to-count-emojis-with-javascript/\n */\nconst BuildInStringAdapter: () => StringAdapter = () => ({\n stringToChars(value: string): string[] {\n return Array.from(value);\n },\n});\n\nexport { BuildInStringAdapter };\n"]}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
import { StringAdapter } from './types.js';
|
2
|
+
/**
|
3
|
+
* 使用 `grapheme-splitter` 库的字符串适配器. 该适配器使用 `grapheme-splitter` 库将字符串转换为字符数组.
|
4
|
+
*
|
5
|
+
* 要使用 {@link GraphemeSplitterAdapter} 需要安装 `grapheme-splitter`.
|
6
|
+
*/
|
7
|
+
declare const GraphemeSplitterAdapter: () => StringAdapter;
|
8
|
+
export { GraphemeSplitterAdapter };
|
@@ -0,0 +1,16 @@
|
|
1
|
+
import GraphemeSplitter from 'grapheme-splitter';
|
2
|
+
/**
|
3
|
+
* 使用 `grapheme-splitter` 库的字符串适配器. 该适配器使用 `grapheme-splitter` 库将字符串转换为字符数组.
|
4
|
+
*
|
5
|
+
* 要使用 {@link GraphemeSplitterAdapter} 需要安装 `grapheme-splitter`.
|
6
|
+
*/
|
7
|
+
const GraphemeSplitterAdapter = () => {
|
8
|
+
const splitter = new GraphemeSplitter();
|
9
|
+
return {
|
10
|
+
stringToChars(value) {
|
11
|
+
return splitter.splitGraphemes(value);
|
12
|
+
},
|
13
|
+
};
|
14
|
+
};
|
15
|
+
export { GraphemeSplitterAdapter };
|
16
|
+
//# sourceMappingURL=grapheme-splitter.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"grapheme-splitter.js","sourceRoot":"","sources":["../../../src/string-adapter/grapheme-splitter.ts"],"names":[],"mappings":"AAAA,OAAO,gBAAgB,MAAM,mBAAmB,CAAC;AAGjD;;;;GAIG;AACH,MAAM,uBAAuB,GAAwB,GAAG,EAAE;IACxD,MAAM,QAAQ,GAAG,IAAI,gBAAgB,EAAE,CAAC;IAExC,OAAO;QACL,aAAa,CAAC,KAAa;YACzB,OAAO,QAAQ,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;KACF,CAAC;AACJ,CAAC,CAAC;AAEF,OAAO,EAAE,uBAAuB,EAAE,CAAC","sourcesContent":["import GraphemeSplitter from 'grapheme-splitter';\nimport { StringAdapter } from './types.js';\n\n/**\n * 使用 `grapheme-splitter` 库的字符串适配器. 该适配器使用 `grapheme-splitter` 库将字符串转换为字符数组.\n *\n * 要使用 {@link GraphemeSplitterAdapter} 需要安装 `grapheme-splitter`.\n */\nconst GraphemeSplitterAdapter: () => StringAdapter = () => {\n const splitter = new GraphemeSplitter();\n\n return {\n stringToChars(value: string): string[] {\n return splitter.splitGraphemes(value);\n },\n };\n};\n\nexport { GraphemeSplitterAdapter };\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/string-adapter/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,wBAAwB,CAAC","sourcesContent":["export * from \"./types.js\";\nexport * from \"./build-in-string.js\";\nexport * from \"./build-in-intl-segmenter.js\";\nexport * from \"./grapheme-splitter.js\";\n"]}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/**
|
2
|
+
* 对于包含 emoji 字符的字符串, 不能通过 `split("")`, 数组索引等方式截取字符.
|
3
|
+
*
|
4
|
+
* 可以使用第三方库 `grapheme-splitter` 或 {@link Intl.Segmenter} API. 但其都有自身的限制.
|
5
|
+
* 1. `grapheme-splitter` 要在项目中引入额外的文件大小.
|
6
|
+
* 2. {@link Intl.Segmenter} API 较新, 在部分浏览器不支持.
|
7
|
+
* 因此内部提供这两种方式的适配器, 根据需求选择.
|
8
|
+
*
|
9
|
+
*
|
10
|
+
* @example "Hello" => ["H", "e", "l", "l", "o"]
|
11
|
+
* @example "😀Hello" => ["😀", "H", "e", "l", "l", "o"]
|
12
|
+
*
|
13
|
+
* @see https://dev.to/acanimal/how-to-slice-or-get-symbols-from-a-unicode-string-with-emojis-in-javascript-lets-learn-how-javascript-represent-strings-h3a
|
14
|
+
* @see https://mathiasbynens.be/notes/javascript-unicode
|
15
|
+
* @see https://cestoliv.com/blog/how-to-count-emojis-with-javascript/
|
16
|
+
* */
|
17
|
+
export interface StringAdapter {
|
18
|
+
stringToChars(value: string): string[];
|
19
|
+
}
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/string-adapter/types.ts"],"names":[],"mappings":"","sourcesContent":["/**\n * 对于包含 emoji 字符的字符串, 不能通过 `split(\"\")`, 数组索引等方式截取字符.\n *\n * 可以使用第三方库 `grapheme-splitter` 或 {@link Intl.Segmenter} API. 但其都有自身的限制.\n * 1. `grapheme-splitter` 要在项目中引入额外的文件大小.\n * 2. {@link Intl.Segmenter} API 较新, 在部分浏览器不支持.\n * 因此内部提供这两种方式的适配器, 根据需求选择.\n *\n *\n * @example \"Hello\" => [\"H\", \"e\", \"l\", \"l\", \"o\"]\n * @example \"😀Hello\" => [\"😀\", \"H\", \"e\", \"l\", \"l\", \"o\"]\n *\n * @see https://dev.to/acanimal/how-to-slice-or-get-symbols-from-a-unicode-string-with-emojis-in-javascript-lets-learn-how-javascript-represent-strings-h3a\n * @see https://mathiasbynens.be/notes/javascript-unicode\n * @see https://cestoliv.com/blog/how-to-count-emojis-with-javascript/\n * */\nexport interface StringAdapter {\n stringToChars(value: string): string[];\n\n /**\n * todo emoji 受到 color 样式的影响, 丢失原来的颜色, 看起来很不好.根据 isEmoji 决定是否应用 color 样式.\n * @param value\n */\n // isEmoji(value: string): boolean;\n}\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const timeredCounterDatetimeStyles: import("lit").CSSResult;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"timered-counter-datetime-styles.js","sourceRoot":"","sources":["../../../src/styles/timered-counter-datetime-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,4BAA4B,GAAG,GAAG,CAAA;;;;;CAK9C,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const timeredCounterDatetimeStyles = css`\n ::part(part-suffix) {\n font-size: 0.4em;\n line-height: 1;\n }\n`;\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const timeredCounterNumberStyles: import("lit").CSSResult;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"timered-counter-number-styles.js","sourceRoot":"","sources":["../../../src/styles/timered-counter-number-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA,EAAE,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const timeredCounterNumberStyles = css``;\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const timeredCounterStringStyles: import("lit").CSSResult;
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"timered-counter-string-styles.js","sourceRoot":"","sources":["../../../src/styles/timered-counter-string-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,0BAA0B,GAAG,GAAG,CAAA,EAAE,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const timeredCounterStringStyles = css``;\n"]}
|
@@ -0,0 +1 @@
|
|
1
|
+
export declare const timeredCounterStyles: import("lit").CSSResult;
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import { css } from 'lit';
|
2
|
+
export const timeredCounterStyles = css `
|
3
|
+
.timered-counter {
|
4
|
+
position: relative;
|
5
|
+
display: inline-flex;
|
6
|
+
overflow: hidden;
|
7
|
+
|
8
|
+
/**
|
9
|
+
inline-block 和 overflow-hidden 同时存在会使得基线为下边缘. 手动设置 align-bottom 以修正这个问题.
|
10
|
+
@see https://stackoverflow.com/questions/22421782/css-overflow-hidden-increases-height-of-container
|
11
|
+
@see https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align
|
12
|
+
*/
|
13
|
+
vertical-align: bottom;
|
14
|
+
}
|
15
|
+
|
16
|
+
.timered-counter.debug {
|
17
|
+
overflow: visible;
|
18
|
+
}
|
19
|
+
|
20
|
+
//.timered-counter-datetime-duration .duration-unit {
|
21
|
+
// font-size: 0.4em;
|
22
|
+
// line-height: 1;
|
23
|
+
//}
|
24
|
+
`;
|
25
|
+
//# sourceMappingURL=timered-counter-styles.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"timered-counter-styles.js","sourceRoot":"","sources":["../../../src/styles/timered-counter-styles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAE1B,MAAM,CAAC,MAAM,oBAAoB,GAAG,GAAG,CAAA;;;;;;;;;;;;;;;;;;;;;;CAsBtC,CAAC","sourcesContent":["import { css } from 'lit';\n\nexport const timeredCounterStyles = css`\n .timered-counter {\n position: relative;\n display: inline-flex;\n overflow: hidden;\n\n /**\n inline-block 和 overflow-hidden 同时存在会使得基线为下边缘. 手动设置 align-bottom 以修正这个问题.\n @see https://stackoverflow.com/questions/22421782/css-overflow-hidden-increases-height-of-container\n @see https://www.w3.org/TR/CSS2/visudet.html#propdef-vertical-align\n */\n vertical-align: bottom;\n }\n\n .timered-counter.debug {\n overflow: visible;\n }\n\n //.timered-counter-datetime-duration .duration-unit {\n // font-size: 0.4em;\n // line-height: 1;\n //}\n`;\n"]}
|
@@ -0,0 +1,37 @@
|
|
1
|
+
import { PropertyValues } from 'lit';
|
2
|
+
import { TimeredCounter } from './timered-counter.js';
|
3
|
+
import { AvailableNumberAdapterValueType } from './number-adapter/index.js';
|
4
|
+
export declare class TimeredCounterDatetimeDuration extends TimeredCounter {
|
5
|
+
static styles: import("lit").CSSResult[];
|
6
|
+
private __precision;
|
7
|
+
/**
|
8
|
+
* 计数器显示的精度.
|
9
|
+
* 1. 当为单个值时, 表示最小精度.
|
10
|
+
* 2. 当为数组时, 第一个值表示最小精度, 第二个值表示最大精度.
|
11
|
+
*
|
12
|
+
* @default [DurationPartType.Second, DurationPartType.Day]
|
13
|
+
*
|
14
|
+
* @example DurationPartType.Second 显示从年份到秒数的所有精度.
|
15
|
+
* @example [DurationPartType.Second, DurationPartType.Day] 显示从天数到秒数的所有精度.
|
16
|
+
* @example [DurationPartType.Millisecond, DurationPartType.Year] 显示从年份到毫秒的所有精度.
|
17
|
+
*/
|
18
|
+
get precision(): any;
|
19
|
+
set precision(value: any);
|
20
|
+
get value(): any;
|
21
|
+
/**
|
22
|
+
* 通过 property 设置 value 时, 支持 Date 类型.
|
23
|
+
*/
|
24
|
+
set value(value: any);
|
25
|
+
private __from;
|
26
|
+
private __to;
|
27
|
+
private __durationInMilliseconds;
|
28
|
+
private __minPrecision;
|
29
|
+
private __maxPrecision;
|
30
|
+
private __availableDurationParts;
|
31
|
+
private __dateTimeFieldLabels;
|
32
|
+
sampleSplit(samples: AvailableNumberAdapterValueType[]): AvailableNumberAdapterValueType[][];
|
33
|
+
generateAriaLabel(): string;
|
34
|
+
connectedCallback(): void;
|
35
|
+
render(): import("lit-html").TemplateResult<1>;
|
36
|
+
willUpdate(_changedProperties: PropertyValues): void;
|
37
|
+
}
|