timered-counter 1.2.0 → 1.3.0-beta.2
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/custom-elements.json +238 -63
- package/dist/custom-elements.json +238 -63
- package/dist/src/timered-counter-adapter.d.ts +2 -1
- package/dist/src/timered-counter-adapter.js +4 -1
- package/dist/src/timered-counter-adapter.js.map +1 -1
- package/dist/src/timered-counter-datetime-duration.js +5 -7
- package/dist/src/timered-counter-datetime-duration.js.map +1 -1
- package/dist/src/timered-counter-number.js +5 -7
- package/dist/src/timered-counter-number.js.map +1 -1
- package/dist/src/timered-counter-string.js +4 -8
- package/dist/src/timered-counter-string.js.map +1 -1
- package/dist/src/timered-counter.js +5 -7
- package/dist/src/timered-counter.js.map +1 -1
- package/dist/src/transitions/roller/roller-digit.js +5 -7
- package/dist/src/transitions/roller/roller-digit.js.map +1 -1
- package/dist/src/transitions/roller/roller.js +5 -7
- package/dist/src/transitions/roller/roller.js.map +1 -1
- package/dist/src/utils/grace-define-custom-element.d.ts +1 -0
- package/dist/src/utils/grace-define-custom-element.js +10 -0
- package/dist/src/utils/grace-define-custom-element.js.map +1 -0
- package/dist/src/wrappers/vue/format-props.d.ts +1 -0
- package/dist/src/wrappers/vue/format-props.js +22 -0
- package/dist/src/wrappers/vue/format-props.js.map +1 -0
- package/dist/src/wrappers/vue/index.d.ts +14 -0
- package/dist/src/wrappers/vue/index.js +13 -0
- package/dist/src/wrappers/vue/index.js.map +1 -0
- package/dist/src/wrappers/vue/timered-counter-datetime-duration.d.ts +14 -0
- package/dist/src/wrappers/vue/timered-counter-datetime-duration.js +39 -0
- package/dist/src/wrappers/vue/timered-counter-datetime-duration.js.map +1 -0
- package/dist/src/wrappers/vue/timered-counter-number.d.ts +14 -0
- package/dist/src/wrappers/vue/timered-counter-number.js +39 -0
- package/dist/src/wrappers/vue/timered-counter-number.js.map +1 -0
- package/dist/src/wrappers/vue/timered-counter-string.d.ts +14 -0
- package/dist/src/wrappers/vue/timered-counter-string.js +38 -0
- package/dist/src/wrappers/vue/timered-counter-string.js.map +1 -0
- package/dist/stories/timered-counter/decimaljs.stories.js +1 -1
- package/dist/stories/timered-counter/decimaljs.stories.js.map +1 -1
- package/dist/stories/timered-counter-number/decimaljs.stories.js +1 -1
- package/dist/stories/timered-counter-number/decimaljs.stories.js.map +1 -1
- package/dist/stories/timered-counter-string/decimaljs.stories.js +1 -1
- package/dist/stories/timered-counter-string/decimaljs.stories.js.map +1 -1
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.js +2 -2
- package/dist/stories/timered-counter-string/grapheme-splitter.stories.js.map +1 -1
- package/dist/stories/timered-counter-string/intl-segmenter.stories.js +1 -1
- package/dist/stories/timered-counter-string/intl-segmenter.stories.js.map +1 -1
- package/dist/timered-counter.esm-browser.js +22 -27
- package/dist/timered-counter.esm-browser.js.map +1 -1
- package/dist/timered-counter.global.js +41 -46
- package/dist/timered-counter.global.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +15 -8
@@ -191,7 +191,7 @@
|
|
191
191
|
},
|
192
192
|
{
|
193
193
|
"kind": "method",
|
194
|
-
"name": "
|
194
|
+
"name": "registerAdapter",
|
195
195
|
"static": true,
|
196
196
|
"parameters": [
|
197
197
|
{
|
@@ -252,6 +252,18 @@
|
|
252
252
|
}
|
253
253
|
}
|
254
254
|
]
|
255
|
+
},
|
256
|
+
{
|
257
|
+
"kind": "function",
|
258
|
+
"name": "registerAdapter",
|
259
|
+
"parameters": [
|
260
|
+
{
|
261
|
+
"name": "args",
|
262
|
+
"type": {
|
263
|
+
"text": "Parameters<(typeof TimeredCounterAdapter)['registerAdapter']>"
|
264
|
+
}
|
265
|
+
}
|
266
|
+
]
|
255
267
|
}
|
256
268
|
],
|
257
269
|
"exports": [
|
@@ -294,6 +306,14 @@
|
|
294
306
|
"name": "registerStringAdapter",
|
295
307
|
"module": "src/timered-counter-adapter.ts"
|
296
308
|
}
|
309
|
+
},
|
310
|
+
{
|
311
|
+
"kind": "js",
|
312
|
+
"name": "registerAdapter",
|
313
|
+
"declaration": {
|
314
|
+
"name": "registerAdapter",
|
315
|
+
"module": "src/timered-counter-adapter.ts"
|
316
|
+
}
|
297
317
|
}
|
298
318
|
]
|
299
319
|
},
|
@@ -1211,8 +1231,6 @@
|
|
1211
1231
|
"name": "TimeredCounter",
|
1212
1232
|
"module": "/src/timered-counter.js"
|
1213
1233
|
},
|
1214
|
-
"tagName": "timered-counter-datetime-duration",
|
1215
|
-
"customElement": true,
|
1216
1234
|
"events": [
|
1217
1235
|
{
|
1218
1236
|
"name": "timered-counter-animation-start",
|
@@ -1245,14 +1263,6 @@
|
|
1245
1263
|
"name": "TimeredCounterDatetimeDuration",
|
1246
1264
|
"module": "src/timered-counter-datetime-duration.ts"
|
1247
1265
|
}
|
1248
|
-
},
|
1249
|
-
{
|
1250
|
-
"kind": "custom-element-definition",
|
1251
|
-
"name": "timered-counter-datetime-duration",
|
1252
|
-
"declaration": {
|
1253
|
-
"name": "TimeredCounterDatetimeDuration",
|
1254
|
-
"module": "src/timered-counter-datetime-duration.ts"
|
1255
|
-
}
|
1256
1266
|
}
|
1257
1267
|
]
|
1258
1268
|
},
|
@@ -2128,8 +2138,6 @@
|
|
2128
2138
|
"name": "TimeredCounter",
|
2129
2139
|
"module": "/src/timered-counter.js"
|
2130
2140
|
},
|
2131
|
-
"tagName": "timered-counter-number",
|
2132
|
-
"customElement": true,
|
2133
2141
|
"events": [
|
2134
2142
|
{
|
2135
2143
|
"name": "timered-counter-animation-start",
|
@@ -2162,14 +2170,6 @@
|
|
2162
2170
|
"name": "TimeredCounterNumber",
|
2163
2171
|
"module": "src/timered-counter-number.ts"
|
2164
2172
|
}
|
2165
|
-
},
|
2166
|
-
{
|
2167
|
-
"kind": "custom-element-definition",
|
2168
|
-
"name": "timered-counter-number",
|
2169
|
-
"declaration": {
|
2170
|
-
"name": "TimeredCounterNumber",
|
2171
|
-
"module": "src/timered-counter-number.ts"
|
2172
|
-
}
|
2173
2173
|
}
|
2174
2174
|
]
|
2175
2175
|
},
|
@@ -2923,8 +2923,6 @@
|
|
2923
2923
|
"name": "TimeredCounter",
|
2924
2924
|
"module": "/src/timered-counter.js"
|
2925
2925
|
},
|
2926
|
-
"tagName": "timered-counter-string",
|
2927
|
-
"customElement": true,
|
2928
2926
|
"attributes": [
|
2929
2927
|
{
|
2930
2928
|
"name": "aria-label",
|
@@ -3109,14 +3107,6 @@
|
|
3109
3107
|
"name": "TimeredCounterString",
|
3110
3108
|
"module": "src/timered-counter-string.ts"
|
3111
3109
|
}
|
3112
|
-
},
|
3113
|
-
{
|
3114
|
-
"kind": "custom-element-definition",
|
3115
|
-
"name": "timered-counter-string",
|
3116
|
-
"declaration": {
|
3117
|
-
"name": "TimeredCounterString",
|
3118
|
-
"module": "src/timered-counter-string.ts"
|
3119
|
-
}
|
3120
3110
|
}
|
3121
3111
|
]
|
3122
3112
|
},
|
@@ -3805,7 +3795,6 @@
|
|
3805
3795
|
"name": "LitElement",
|
3806
3796
|
"package": "lit"
|
3807
3797
|
},
|
3808
|
-
"tagName": "timered-counter",
|
3809
3798
|
"customElement": true,
|
3810
3799
|
"attributes": [
|
3811
3800
|
{
|
@@ -3969,14 +3958,6 @@
|
|
3969
3958
|
"name": "TimeredCounter",
|
3970
3959
|
"module": "src/timered-counter.ts"
|
3971
3960
|
}
|
3972
|
-
},
|
3973
|
-
{
|
3974
|
-
"kind": "custom-element-definition",
|
3975
|
-
"name": "timered-counter",
|
3976
|
-
"declaration": {
|
3977
|
-
"name": "TimeredCounter",
|
3978
|
-
"module": "src/timered-counter.ts"
|
3979
|
-
}
|
3980
3961
|
}
|
3981
3962
|
]
|
3982
3963
|
},
|
@@ -6486,6 +6467,53 @@
|
|
6486
6467
|
}
|
6487
6468
|
]
|
6488
6469
|
},
|
6470
|
+
{
|
6471
|
+
"kind": "javascript-module",
|
6472
|
+
"path": "src/utils/grace-define-custom-element.ts",
|
6473
|
+
"declarations": [
|
6474
|
+
{
|
6475
|
+
"kind": "function",
|
6476
|
+
"name": "graceDefineCustomElement",
|
6477
|
+
"return": {
|
6478
|
+
"type": {
|
6479
|
+
"text": "void"
|
6480
|
+
}
|
6481
|
+
},
|
6482
|
+
"parameters": [
|
6483
|
+
{
|
6484
|
+
"name": "tagName",
|
6485
|
+
"type": {
|
6486
|
+
"text": "string"
|
6487
|
+
}
|
6488
|
+
},
|
6489
|
+
{
|
6490
|
+
"name": "constructor",
|
6491
|
+
"type": {
|
6492
|
+
"text": "CustomElementConstructor"
|
6493
|
+
}
|
6494
|
+
}
|
6495
|
+
]
|
6496
|
+
}
|
6497
|
+
],
|
6498
|
+
"exports": [
|
6499
|
+
{
|
6500
|
+
"kind": "js",
|
6501
|
+
"name": "graceDefineCustomElement",
|
6502
|
+
"declaration": {
|
6503
|
+
"name": "graceDefineCustomElement",
|
6504
|
+
"module": "src/utils/grace-define-custom-element.ts"
|
6505
|
+
}
|
6506
|
+
},
|
6507
|
+
{
|
6508
|
+
"kind": "custom-element-definition",
|
6509
|
+
"name": "tagName",
|
6510
|
+
"declaration": {
|
6511
|
+
"name": "constructor",
|
6512
|
+
"module": "src/utils/grace-define-custom-element.ts"
|
6513
|
+
}
|
6514
|
+
}
|
6515
|
+
]
|
6516
|
+
},
|
6489
6517
|
{
|
6490
6518
|
"kind": "javascript-module",
|
6491
6519
|
"path": "src/utils/iso8601-duration.ts",
|
@@ -7140,7 +7168,7 @@
|
|
7140
7168
|
"type": {
|
7141
7169
|
"text": "Meta"
|
7142
7170
|
},
|
7143
|
-
"default": "{ title: 'TimeredCounter/with decimal.js', component: 'timered-counter', tags: ['autodocs', 'timered-counter'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.
|
7171
|
+
"default": "{ title: 'TimeredCounter/with decimal.js', component: 'timered-counter', tags: ['autodocs', 'timered-counter'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.registerAdapter(DecimalJsNumberAdapter); TimeredCounterAdapter.setNumberAdapter('decimal.js'); }, }"
|
7144
7172
|
},
|
7145
7173
|
{
|
7146
7174
|
"kind": "variable",
|
@@ -7396,7 +7424,7 @@
|
|
7396
7424
|
"type": {
|
7397
7425
|
"text": "Meta"
|
7398
7426
|
},
|
7399
|
-
"default": "{ title: 'TimeredCounterNumber/with decimal.js', component: 'timered-counter-number', tags: ['autodocs', 'timered-counter-number'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.
|
7427
|
+
"default": "{ title: 'TimeredCounterNumber/with decimal.js', component: 'timered-counter-number', tags: ['autodocs', 'timered-counter-number'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.registerAdapter(DecimalJsNumberAdapter); TimeredCounterAdapter.setNumberAdapter('decimal.js'); }, }"
|
7400
7428
|
},
|
7401
7429
|
{
|
7402
7430
|
"kind": "variable",
|
@@ -7580,7 +7608,7 @@
|
|
7580
7608
|
"type": {
|
7581
7609
|
"text": "Meta"
|
7582
7610
|
},
|
7583
|
-
"default": "{ title: 'TimeredCounterString/with decimal.js', component: 'timered-counter-string', tags: ['autodocs', 'timered-counter-string'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.
|
7611
|
+
"default": "{ title: 'TimeredCounterString/with decimal.js', component: 'timered-counter-string', tags: ['autodocs', 'timered-counter-string'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.registerAdapter(DecimalJsNumberAdapter); TimeredCounterAdapter.setNumberAdapter('decimal.js'); }, }"
|
7584
7612
|
},
|
7585
7613
|
{
|
7586
7614
|
"kind": "variable",
|
@@ -7668,7 +7696,7 @@
|
|
7668
7696
|
"type": {
|
7669
7697
|
"text": "Meta"
|
7670
7698
|
},
|
7671
|
-
"default": "{ title: 'TimeredCounterString/with grapheme-splitter', component: 'timered-counter-string', tags: ['autodocs', 'timered-counter-string'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.
|
7699
|
+
"default": "{ title: 'TimeredCounterString/with grapheme-splitter', component: 'timered-counter-string', tags: ['autodocs', 'timered-counter-string'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.registerAdapter(DecimalJsNumberAdapter); TimeredCounterAdapter.registerAdapter(GraphemeSplitterStringAdapter); TimeredCounterAdapter.setNumberAdapter('decimal.js'); TimeredCounterAdapter.setStringAdapter('grapheme-splitter'); }, }"
|
7672
7700
|
},
|
7673
7701
|
{
|
7674
7702
|
"kind": "variable",
|
@@ -7860,7 +7888,7 @@
|
|
7860
7888
|
"type": {
|
7861
7889
|
"text": "Meta"
|
7862
7890
|
},
|
7863
|
-
"default": "{ title: 'TimeredCounterString/with Intl Segmenter', component: 'timered-counter-string', tags: ['autodocs', 'timered-counter-string'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.
|
7891
|
+
"default": "{ title: 'TimeredCounterString/with Intl Segmenter', component: 'timered-counter-string', tags: ['autodocs', 'timered-counter-string'], parameters: { controls: { expanded: true }, }, beforeEach: () => { TimeredCounterAdapter.registerAdapter(DecimalJsNumberAdapter); TimeredCounterAdapter.setNumberAdapter('decimal.js'); TimeredCounterAdapter.setStringAdapter('intl-segmenter'); }, }"
|
7864
7892
|
},
|
7865
7893
|
{
|
7866
7894
|
"kind": "variable",
|
@@ -8285,7 +8313,6 @@
|
|
8285
8313
|
"name": "LitElement",
|
8286
8314
|
"package": "lit"
|
8287
8315
|
},
|
8288
|
-
"tagName": "timered-counter-roller-digit",
|
8289
8316
|
"customElement": true
|
8290
8317
|
}
|
8291
8318
|
],
|
@@ -8297,14 +8324,6 @@
|
|
8297
8324
|
"name": "TimeredCounterRollerDigit",
|
8298
8325
|
"module": "src/transitions/roller/roller-digit.ts"
|
8299
8326
|
}
|
8300
|
-
},
|
8301
|
-
{
|
8302
|
-
"kind": "custom-element-definition",
|
8303
|
-
"name": "timered-counter-roller-digit",
|
8304
|
-
"declaration": {
|
8305
|
-
"name": "TimeredCounterRollerDigit",
|
8306
|
-
"module": "src/transitions/roller/roller-digit.ts"
|
8307
|
-
}
|
8308
8327
|
}
|
8309
8328
|
]
|
8310
8329
|
},
|
@@ -8571,7 +8590,6 @@
|
|
8571
8590
|
"name": "LitElement",
|
8572
8591
|
"package": "lit"
|
8573
8592
|
},
|
8574
|
-
"tagName": "timered-counter-roller",
|
8575
8593
|
"customElement": true
|
8576
8594
|
}
|
8577
8595
|
],
|
@@ -8583,14 +8601,6 @@
|
|
8583
8601
|
"name": "TimeredCounterRoller",
|
8584
8602
|
"module": "src/transitions/roller/roller.ts"
|
8585
8603
|
}
|
8586
|
-
},
|
8587
|
-
{
|
8588
|
-
"kind": "custom-element-definition",
|
8589
|
-
"name": "timered-counter-roller",
|
8590
|
-
"declaration": {
|
8591
|
-
"name": "TimeredCounterRoller",
|
8592
|
-
"module": "src/transitions/roller/roller.ts"
|
8593
|
-
}
|
8594
8604
|
}
|
8595
8605
|
]
|
8596
8606
|
},
|
@@ -8627,6 +8637,171 @@
|
|
8627
8637
|
}
|
8628
8638
|
}
|
8629
8639
|
]
|
8640
|
+
},
|
8641
|
+
{
|
8642
|
+
"kind": "javascript-module",
|
8643
|
+
"path": "src/wrappers/vue/format-props.ts",
|
8644
|
+
"declarations": [
|
8645
|
+
{
|
8646
|
+
"kind": "function",
|
8647
|
+
"name": "formatProps",
|
8648
|
+
"return": {
|
8649
|
+
"type": {
|
8650
|
+
"text": "P"
|
8651
|
+
}
|
8652
|
+
},
|
8653
|
+
"parameters": [
|
8654
|
+
{
|
8655
|
+
"name": "props",
|
8656
|
+
"type": {
|
8657
|
+
"text": "P"
|
8658
|
+
}
|
8659
|
+
}
|
8660
|
+
]
|
8661
|
+
}
|
8662
|
+
],
|
8663
|
+
"exports": [
|
8664
|
+
{
|
8665
|
+
"kind": "js",
|
8666
|
+
"name": "formatProps",
|
8667
|
+
"declaration": {
|
8668
|
+
"name": "formatProps",
|
8669
|
+
"module": "src/wrappers/vue/format-props.ts"
|
8670
|
+
}
|
8671
|
+
}
|
8672
|
+
]
|
8673
|
+
},
|
8674
|
+
{
|
8675
|
+
"kind": "javascript-module",
|
8676
|
+
"path": "src/wrappers/vue/index.ts",
|
8677
|
+
"declarations": [
|
8678
|
+
{
|
8679
|
+
"kind": "variable",
|
8680
|
+
"name": "TimeredCounterPlugin",
|
8681
|
+
"type": {
|
8682
|
+
"text": "Plugin"
|
8683
|
+
},
|
8684
|
+
"default": "{ install: (app: App) => { app.component('TimeredCounterNumber', TimeredCounterNumber); app.component( 'TimeredCounterDatetimeDuration', TimeredCounterDatetimeDuration, ); app.component('TimeredCounterString', TimeredCounterString); }, }"
|
8685
|
+
}
|
8686
|
+
],
|
8687
|
+
"exports": [
|
8688
|
+
{
|
8689
|
+
"kind": "js",
|
8690
|
+
"name": "TimeredCounterNumber",
|
8691
|
+
"declaration": {
|
8692
|
+
"name": "TimeredCounterNumber",
|
8693
|
+
"module": "src/wrappers/vue/index.ts"
|
8694
|
+
}
|
8695
|
+
},
|
8696
|
+
{
|
8697
|
+
"kind": "js",
|
8698
|
+
"name": "TimeredCounterString",
|
8699
|
+
"declaration": {
|
8700
|
+
"name": "TimeredCounterString",
|
8701
|
+
"module": "src/wrappers/vue/index.ts"
|
8702
|
+
}
|
8703
|
+
},
|
8704
|
+
{
|
8705
|
+
"kind": "js",
|
8706
|
+
"name": "TimeredCounterDatetimeDuration",
|
8707
|
+
"declaration": {
|
8708
|
+
"name": "TimeredCounterDatetimeDuration",
|
8709
|
+
"module": "src/wrappers/vue/index.ts"
|
8710
|
+
}
|
8711
|
+
},
|
8712
|
+
{
|
8713
|
+
"kind": "js",
|
8714
|
+
"name": "default",
|
8715
|
+
"declaration": {
|
8716
|
+
"name": "TimeredCounterPlugin",
|
8717
|
+
"module": "src/wrappers/vue/index.ts"
|
8718
|
+
}
|
8719
|
+
}
|
8720
|
+
]
|
8721
|
+
},
|
8722
|
+
{
|
8723
|
+
"kind": "javascript-module",
|
8724
|
+
"path": "src/wrappers/vue/timered-counter-datetime-duration.ts",
|
8725
|
+
"declarations": [
|
8726
|
+
{
|
8727
|
+
"kind": "function",
|
8728
|
+
"name": "TimeredCounterDatetimeDuration",
|
8729
|
+
"parameters": [
|
8730
|
+
{
|
8731
|
+
"name": "props"
|
8732
|
+
},
|
8733
|
+
{
|
8734
|
+
"name": "{ attrs, slots, emit }"
|
8735
|
+
}
|
8736
|
+
]
|
8737
|
+
}
|
8738
|
+
],
|
8739
|
+
"exports": [
|
8740
|
+
{
|
8741
|
+
"kind": "js",
|
8742
|
+
"name": "TimeredCounterDatetimeDuration",
|
8743
|
+
"declaration": {
|
8744
|
+
"name": "TimeredCounterDatetimeDuration",
|
8745
|
+
"module": "src/wrappers/vue/timered-counter-datetime-duration.ts"
|
8746
|
+
}
|
8747
|
+
}
|
8748
|
+
]
|
8749
|
+
},
|
8750
|
+
{
|
8751
|
+
"kind": "javascript-module",
|
8752
|
+
"path": "src/wrappers/vue/timered-counter-number.ts",
|
8753
|
+
"declarations": [
|
8754
|
+
{
|
8755
|
+
"kind": "function",
|
8756
|
+
"name": "TimeredCounterNumber",
|
8757
|
+
"parameters": [
|
8758
|
+
{
|
8759
|
+
"name": "props"
|
8760
|
+
},
|
8761
|
+
{
|
8762
|
+
"name": "{ attrs, slots, emit }"
|
8763
|
+
}
|
8764
|
+
]
|
8765
|
+
}
|
8766
|
+
],
|
8767
|
+
"exports": [
|
8768
|
+
{
|
8769
|
+
"kind": "js",
|
8770
|
+
"name": "TimeredCounterNumber",
|
8771
|
+
"declaration": {
|
8772
|
+
"name": "TimeredCounterNumber",
|
8773
|
+
"module": "src/wrappers/vue/timered-counter-number.ts"
|
8774
|
+
}
|
8775
|
+
}
|
8776
|
+
]
|
8777
|
+
},
|
8778
|
+
{
|
8779
|
+
"kind": "javascript-module",
|
8780
|
+
"path": "src/wrappers/vue/timered-counter-string.ts",
|
8781
|
+
"declarations": [
|
8782
|
+
{
|
8783
|
+
"kind": "function",
|
8784
|
+
"name": "TimeredCounterString",
|
8785
|
+
"parameters": [
|
8786
|
+
{
|
8787
|
+
"name": "props"
|
8788
|
+
},
|
8789
|
+
{
|
8790
|
+
"name": "{ attrs, slots, emit }"
|
8791
|
+
}
|
8792
|
+
]
|
8793
|
+
}
|
8794
|
+
],
|
8795
|
+
"exports": [
|
8796
|
+
{
|
8797
|
+
"kind": "js",
|
8798
|
+
"name": "TimeredCounterString",
|
8799
|
+
"declaration": {
|
8800
|
+
"name": "TimeredCounterString",
|
8801
|
+
"module": "src/wrappers/vue/timered-counter-string.ts"
|
8802
|
+
}
|
8803
|
+
}
|
8804
|
+
]
|
8630
8805
|
}
|
8631
8806
|
]
|
8632
8807
|
}
|
@@ -55,7 +55,7 @@ export declare class TimeredCounterAdapter {
|
|
55
55
|
*
|
56
56
|
* 具体示例请查看 {@link GraphemeSplitterAdapter} or {@link DecimalJsAdapter}.
|
57
57
|
*/
|
58
|
-
static
|
58
|
+
static registerAdapter(adapter: {
|
59
59
|
register: (counterAdapter: typeof TimeredCounterAdapter) => void;
|
60
60
|
}): void;
|
61
61
|
}
|
@@ -63,3 +63,4 @@ export declare function setNumberAdapter(...args: Parameters<(typeof TimeredCoun
|
|
63
63
|
export declare function setStringAdapter(...args: Parameters<(typeof TimeredCounterAdapter)['setStringAdapter']>): void;
|
64
64
|
export declare function registerNumberAdapter(...args: Parameters<(typeof TimeredCounterAdapter)['registerNumberAdapter']>): void;
|
65
65
|
export declare function registerStringAdapter(...args: Parameters<(typeof TimeredCounterAdapter)['registerStringAdapter']>): void;
|
66
|
+
export declare function registerAdapter(...args: Parameters<(typeof TimeredCounterAdapter)['registerAdapter']>): void;
|
@@ -55,7 +55,7 @@ export class TimeredCounterAdapter {
|
|
55
55
|
*
|
56
56
|
* 具体示例请查看 {@link GraphemeSplitterAdapter} or {@link DecimalJsAdapter}.
|
57
57
|
*/
|
58
|
-
static
|
58
|
+
static registerAdapter(adapter) {
|
59
59
|
adapter.register(this);
|
60
60
|
}
|
61
61
|
}
|
@@ -117,4 +117,7 @@ export function registerNumberAdapter(...args) {
|
|
117
117
|
export function registerStringAdapter(...args) {
|
118
118
|
TimeredCounterAdapter.registerStringAdapter(...args);
|
119
119
|
}
|
120
|
+
export function registerAdapter(...args) {
|
121
|
+
TimeredCounterAdapter.registerAdapter(...args);
|
122
|
+
}
|
120
123
|
//# sourceMappingURL=timered-counter-adapter.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"timered-counter-adapter.js","sourceRoot":"","sources":["../../src/timered-counter-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNullish, isString } from 'remeda';\nimport { BuildInNumberAdapter, NumberAdapter } from './number-adapter/index.js';\nimport {\n BuildInIntlSegmenterAdapter,\n BuildInStringAdapter,\n StringAdapter,\n} from './string-adapter/index.js';\n\nexport class TimeredCounterAdapter {\n static AVAILABLE_NUMBER_ADAPTERS: Map<string[], () => NumberAdapter> =\n new Map([\n [['number'], BuildInNumberAdapter],\n // [['decimal.js', 'decimaljs'], DecimalJsAdapter()],\n ]);\n\n static AVAILABLE_STRING_ADAPTERS: Map<string[], () => StringAdapter> =\n new Map([\n [['string'], BuildInStringAdapter],\n [['intl-segmenter'], BuildInIntlSegmenterAdapter],\n // [['grapheme-splitter'], GraphemeSplitterAdapter()],\n ]);\n\n /**\n * 数字适配器, 有以下两种:\n * 1. BuildInNumberAdapter(默认): 使用内置 number 进行计算.\n * 2. DecimalJsAdapter: 使用 Decimal.js 进行计算.\n *\n * 详细信息请查看[字符长度限制](/guide/optional-dependencies#字符长度限制)章节.\n *\n * @default BuildInNumberAdapter\n */\n static NUMBER_ADAPTER: NumberAdapter = BuildInNumberAdapter();\n\n /**\n * 字符串适配器, 有以下两种:\n * 1. BuildInStringAdapter(默认): 使用内置 string 进行字符串处理.\n * 2. BuildInIntlSegmenterAdapter: 使用 Intl.Segmenter 进行字符串处理. 能够支持 emoji, 字符集.\n * 3. GraphemeSplitterAdapter: 使用 grapheme-splitter 进行字符串处理. 能够支持 emoji, 字符集.\n *\n * 详细信息请查看[支持 emoji 分词](/guide/optional-dependencies#支持-emoji-分词)章节.\n *\n * @default BuildInStringAdapter\n */\n static STRING_ADAPTER: StringAdapter = BuildInStringAdapter();\n\n /**\n * 将 value 及其相关的属性, 在 attribute 和 property 上的互相转换.\n *\n * @see https://lit.dev/docs/components/properties/#attributes\n * @protected\n */\n static VALUE_CONVERTER = {\n fromAttribute(value: string | null) {\n return value;\n },\n toAttribute(value: unknown) {\n return isNullish(value)\n ? value\n : TimeredCounterAdapter.NUMBER_ADAPTER.toString(value);\n },\n };\n\n /**\n * 设置要使用的数字适配器. 仅对设置完之后的 TimeredCounter 实例生效.\n *\n * 接受的关键字除了内置的 `number` 以外, 还可以通过 {@link registerNumberAdapter} 注册的 `keyword`.\n *\n * @param adapterOrType\n */\n static setNumberAdapter(adapterOrType: NumberAdapter | 'number' | string) {\n let adapter: NumberAdapter = BuildInNumberAdapter();\n\n if (isString(adapterOrType)) {\n for (const [\n keywords,\n adapterFactory,\n ] of TimeredCounterAdapter.AVAILABLE_NUMBER_ADAPTERS) {\n if (keywords.includes(adapterOrType)) {\n adapter = adapterFactory();\n break;\n }\n }\n } else {\n adapter = adapterOrType;\n }\n\n TimeredCounterAdapter.NUMBER_ADAPTER = adapter;\n }\n\n /**\n * 与 {@link setNumberAdapter} 类似, 用于设置字符串适配器.\n */\n static setStringAdapter(\n adapterOrType: StringAdapter | 'string' | 'intl-segmenter' | string,\n ) {\n let adapter: StringAdapter = BuildInStringAdapter();\n\n if (isString(adapterOrType)) {\n for (const [\n keywords,\n adapterFactory,\n ] of TimeredCounterAdapter.AVAILABLE_STRING_ADAPTERS) {\n if (keywords.includes(adapterOrType)) {\n adapter = adapterFactory();\n break;\n }\n }\n } else {\n adapter = adapterOrType;\n }\n\n TimeredCounterAdapter.STRING_ADAPTER = adapter;\n }\n\n static registerNumberAdapter(\n keyword: string[],\n adapter: () => NumberAdapter,\n ) {\n TimeredCounterAdapter.AVAILABLE_NUMBER_ADAPTERS.set(keyword, adapter);\n }\n\n static registerStringAdapter(\n keyword: string[],\n adapter: () => StringAdapter,\n ) {\n TimeredCounterAdapter.AVAILABLE_STRING_ADAPTERS.set(keyword, adapter);\n }\n\n /**\n * 可以直接使用 adapter 文件的导出进行注册.\n *\n * adapter 文件需要导出一个名为 register 的函数, 该函数接受一个 TimeredCounterAdapter 类型的参数.\n *\n * 具体示例请查看 {@link GraphemeSplitterAdapter} or {@link DecimalJsAdapter}.\n */\n static
|
1
|
+
{"version":3,"file":"timered-counter-adapter.js","sourceRoot":"","sources":["../../src/timered-counter-adapter.ts"],"names":[],"mappings":"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","sourcesContent":["import { isNullish, isString } from 'remeda';\nimport { BuildInNumberAdapter, NumberAdapter } from './number-adapter/index.js';\nimport {\n BuildInIntlSegmenterAdapter,\n BuildInStringAdapter,\n StringAdapter,\n} from './string-adapter/index.js';\n\nexport class TimeredCounterAdapter {\n static AVAILABLE_NUMBER_ADAPTERS: Map<string[], () => NumberAdapter> =\n new Map([\n [['number'], BuildInNumberAdapter],\n // [['decimal.js', 'decimaljs'], DecimalJsAdapter()],\n ]);\n\n static AVAILABLE_STRING_ADAPTERS: Map<string[], () => StringAdapter> =\n new Map([\n [['string'], BuildInStringAdapter],\n [['intl-segmenter'], BuildInIntlSegmenterAdapter],\n // [['grapheme-splitter'], GraphemeSplitterAdapter()],\n ]);\n\n /**\n * 数字适配器, 有以下两种:\n * 1. BuildInNumberAdapter(默认): 使用内置 number 进行计算.\n * 2. DecimalJsAdapter: 使用 Decimal.js 进行计算.\n *\n * 详细信息请查看[字符长度限制](/guide/optional-dependencies#字符长度限制)章节.\n *\n * @default BuildInNumberAdapter\n */\n static NUMBER_ADAPTER: NumberAdapter = BuildInNumberAdapter();\n\n /**\n * 字符串适配器, 有以下两种:\n * 1. BuildInStringAdapter(默认): 使用内置 string 进行字符串处理.\n * 2. BuildInIntlSegmenterAdapter: 使用 Intl.Segmenter 进行字符串处理. 能够支持 emoji, 字符集.\n * 3. GraphemeSplitterAdapter: 使用 grapheme-splitter 进行字符串处理. 能够支持 emoji, 字符集.\n *\n * 详细信息请查看[支持 emoji 分词](/guide/optional-dependencies#支持-emoji-分词)章节.\n *\n * @default BuildInStringAdapter\n */\n static STRING_ADAPTER: StringAdapter = BuildInStringAdapter();\n\n /**\n * 将 value 及其相关的属性, 在 attribute 和 property 上的互相转换.\n *\n * @see https://lit.dev/docs/components/properties/#attributes\n * @protected\n */\n static VALUE_CONVERTER = {\n fromAttribute(value: string | null) {\n return value;\n },\n toAttribute(value: unknown) {\n return isNullish(value)\n ? value\n : TimeredCounterAdapter.NUMBER_ADAPTER.toString(value);\n },\n };\n\n /**\n * 设置要使用的数字适配器. 仅对设置完之后的 TimeredCounter 实例生效.\n *\n * 接受的关键字除了内置的 `number` 以外, 还可以通过 {@link registerNumberAdapter} 注册的 `keyword`.\n *\n * @param adapterOrType\n */\n static setNumberAdapter(adapterOrType: NumberAdapter | 'number' | string) {\n let adapter: NumberAdapter = BuildInNumberAdapter();\n\n if (isString(adapterOrType)) {\n for (const [\n keywords,\n adapterFactory,\n ] of TimeredCounterAdapter.AVAILABLE_NUMBER_ADAPTERS) {\n if (keywords.includes(adapterOrType)) {\n adapter = adapterFactory();\n break;\n }\n }\n } else {\n adapter = adapterOrType;\n }\n\n TimeredCounterAdapter.NUMBER_ADAPTER = adapter;\n }\n\n /**\n * 与 {@link setNumberAdapter} 类似, 用于设置字符串适配器.\n */\n static setStringAdapter(\n adapterOrType: StringAdapter | 'string' | 'intl-segmenter' | string,\n ) {\n let adapter: StringAdapter = BuildInStringAdapter();\n\n if (isString(adapterOrType)) {\n for (const [\n keywords,\n adapterFactory,\n ] of TimeredCounterAdapter.AVAILABLE_STRING_ADAPTERS) {\n if (keywords.includes(adapterOrType)) {\n adapter = adapterFactory();\n break;\n }\n }\n } else {\n adapter = adapterOrType;\n }\n\n TimeredCounterAdapter.STRING_ADAPTER = adapter;\n }\n\n static registerNumberAdapter(\n keyword: string[],\n adapter: () => NumberAdapter,\n ) {\n TimeredCounterAdapter.AVAILABLE_NUMBER_ADAPTERS.set(keyword, adapter);\n }\n\n static registerStringAdapter(\n keyword: string[],\n adapter: () => StringAdapter,\n ) {\n TimeredCounterAdapter.AVAILABLE_STRING_ADAPTERS.set(keyword, adapter);\n }\n\n /**\n * 可以直接使用 adapter 文件的导出进行注册.\n *\n * adapter 文件需要导出一个名为 register 的函数, 该函数接受一个 TimeredCounterAdapter 类型的参数.\n *\n * 具体示例请查看 {@link GraphemeSplitterAdapter} or {@link DecimalJsAdapter}.\n */\n static registerAdapter(adapter: {\n register: (counterAdapter: typeof TimeredCounterAdapter) => void;\n }) {\n adapter.register(this);\n }\n}\n\nexport function setNumberAdapter(\n ...args: Parameters<(typeof TimeredCounterAdapter)['setNumberAdapter']>\n) {\n TimeredCounterAdapter.setNumberAdapter(...args);\n}\n\nexport function setStringAdapter(\n ...args: Parameters<(typeof TimeredCounterAdapter)['setStringAdapter']>\n) {\n TimeredCounterAdapter.setStringAdapter(...args);\n}\n\nexport function registerNumberAdapter(\n ...args: Parameters<(typeof TimeredCounterAdapter)['registerNumberAdapter']>\n) {\n TimeredCounterAdapter.registerNumberAdapter(...args);\n}\n\nexport function registerStringAdapter(\n ...args: Parameters<(typeof TimeredCounterAdapter)['registerStringAdapter']>\n) {\n TimeredCounterAdapter.registerStringAdapter(...args);\n}\n\nexport function registerAdapter(\n ...args: Parameters<(typeof TimeredCounterAdapter)['registerAdapter']>\n) {\n TimeredCounterAdapter.registerAdapter(...args);\n}\n"]}
|
@@ -1,5 +1,5 @@
|
|
1
1
|
import { __decorate } from "tslib";
|
2
|
-
import {
|
2
|
+
import { property } from 'lit/decorators.js';
|
3
3
|
import { html } from 'lit';
|
4
4
|
import { repeat } from 'lit/directives/repeat.js';
|
5
5
|
import { isArray, isDate, isNullish, isString, map } from 'remeda';
|
@@ -11,6 +11,7 @@ import { duration, durationObject } from './utils/duration.js';
|
|
11
11
|
import { iso8601Duration } from './utils/iso8601-duration.js';
|
12
12
|
import { timeredCounterDatetimeStyles } from './styles/timered-counter-datetime-styles.js';
|
13
13
|
import { parseJsonString } from './utils/parse-json-string.js';
|
14
|
+
import { graceDefineCustomElement } from './utils/grace-define-custom-element.js';
|
14
15
|
/**
|
15
16
|
* 根据最小精度对 from 进行优化. 避免频繁更新.
|
16
17
|
*
|
@@ -43,7 +44,7 @@ function toDurationInMilliseconds(value, minPrecision) {
|
|
43
44
|
to: result[1],
|
44
45
|
};
|
45
46
|
}
|
46
|
-
|
47
|
+
export class TimeredCounterDatetimeDuration extends TimeredCounter {
|
47
48
|
constructor() {
|
48
49
|
super(...arguments);
|
49
50
|
this.__precision = [DurationPartType.Second, DurationPartType.Day];
|
@@ -201,7 +202,7 @@ let TimeredCounterDatetimeDuration = class TimeredCounterDatetimeDuration extend
|
|
201
202
|
</timered-counter-roller>
|
202
203
|
`;
|
203
204
|
}
|
204
|
-
}
|
205
|
+
}
|
205
206
|
TimeredCounterDatetimeDuration.styles = [...TimeredCounter.styles, timeredCounterDatetimeStyles];
|
206
207
|
__decorate([
|
207
208
|
property({
|
@@ -213,8 +214,5 @@ __decorate([
|
|
213
214
|
},
|
214
215
|
})
|
215
216
|
], TimeredCounterDatetimeDuration.prototype, "precision", null);
|
216
|
-
TimeredCounterDatetimeDuration
|
217
|
-
customElement('timered-counter-datetime-duration')
|
218
|
-
], TimeredCounterDatetimeDuration);
|
219
|
-
export { TimeredCounterDatetimeDuration };
|
217
|
+
graceDefineCustomElement('timered-counter-datetime-duration', TimeredCounterDatetimeDuration);
|
220
218
|
//# sourceMappingURL=timered-counter-datetime-duration.js.map
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"timered-counter-datetime-duration.js","sourceRoot":"","sources":["../../src/timered-counter-datetime-duration.ts"],"names":[],"mappings":"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","sourcesContent":["import { customElement, property } from 'lit/decorators.js';\nimport { html, PropertyValues } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { isArray, isDate, isNullish, isString, map } from 'remeda';\nimport { isValid, toDate, isBefore } from 'date-fns';\nimport { TimeredCounter } from './timered-counter.js';\nimport { AvailableNumberAdapterValueType } from './number-adapter/index.js';\nimport { DurationPartMillisecond, DurationPartType } from './types/duration.js';\nimport { getLocalizedDateTimeFields } from './utils/localized-date-time-fields.js';\nimport { duration, durationObject } from './utils/duration.js';\nimport { iso8601Duration } from './utils/iso8601-duration.js';\nimport { timeredCounterDatetimeStyles } from './styles/timered-counter-datetime-styles.js';\nimport { parseJsonString } from './utils/parse-json-string.js';\nimport { PartsOptions } from './mixins/counter-parts.js';\n\n/**\n * 根据最小精度对 from 进行优化. 避免频繁更新.\n *\n * 1. from 先会被减小到 minPrecisionMs 的整数倍.\n * 2. 加上 to 余 minPrecisionMs 的值, 保证 from 与 to 的差值是 minPrecisionMs 的整数倍.\n */\nfunction optimizeFrom(from: Date, to: Date, minPrecision: DurationPartType) {\n const minPrecisionMs = DurationPartMillisecond[minPrecision];\n const fromTS = from.getTime();\n const toTS = to.getTime();\n\n const base = fromTS - (fromTS % minPrecisionMs);\n\n return base + (toTS % minPrecisionMs);\n}\n\nfunction toDurationInMilliseconds(value: any, minPrecision: DurationPartType) {\n if (isString(value)) value = parseJsonString(value);\n\n if (!isArray(value)) value = [value, value];\n\n const result = [\n isDate(value[0]) ? value[0] : toDate(value[0]),\n isDate(value[1]) ? value[1] : toDate(value[1]),\n ] as const;\n\n if (!isValid(result[0]) || !isValid(result[1])) {\n throw new Error(`value ${value[0]} or ${value[1]} is not a valid date.`);\n }\n\n const durationInMilliseconds = Math.abs(\n result[1].getTime() - optimizeFrom(result[0], result[1], minPrecision),\n );\n\n return {\n durationInMilliseconds,\n from: result[0],\n to: result[1],\n };\n}\n\n@customElement('timered-counter-datetime-duration')\nexport class TimeredCounterDatetimeDuration extends TimeredCounter {\n static styles = [...TimeredCounter.styles, timeredCounterDatetimeStyles];\n\n private __precision: DurationPartType | [DurationPartType, DurationPartType] =\n [DurationPartType.Second, DurationPartType.Day];\n\n /**\n * 计数器显示的精度.\n * 1. 当为单个值时, 仅显示该精度的时间部分.\n * 2. 当为数组时, 第一个值表示最小精度, 第二个值表示最大精度.\n *\n * @default [DurationPartType.Second, DurationPartType.Day]\n *\n * @example DurationPartType.Second 显示从年份到秒数的所有精度.\n * @example [DurationPartType.Second, DurationPartType.Day] 显示从天数到秒数的所有精度.\n * @example [DurationPartType.Millisecond, DurationPartType.Year] 显示从年份到毫秒的所有精度.\n */\n @property({\n reflect: true,\n converter: value => {\n if (isNullish(value)) return value;\n\n return parseJsonString(value);\n },\n })\n get precision() {\n return this.__precision;\n }\n\n set precision(value: any) {\n if (isString(value)) value = parseJsonString(value);\n\n this.__precision = value;\n\n /**\n * `precision` 相关属性的更新需要立即更新, 以便于在 `value`, `initialValue` 等属性的 setter 中使用.\n */\n this.__minPrecision = isArray(this.__precision)\n ? this.__precision[0]\n : this.__precision;\n this.__maxPrecision = isArray(this.__precision)\n ? this.__precision[1]\n : this.__precision;\n\n this.__availableDurationParts = Object.values(DurationPartType)\n .reverse()\n .map(type => {\n const minPrecisionBreakpoint =\n DurationPartMillisecond[this.__minPrecision];\n const maxPrecisionBreakpoint =\n DurationPartMillisecond[this.__maxPrecision];\n const partMilliseconds = DurationPartMillisecond[type];\n return {\n type,\n available:\n partMilliseconds >= minPrecisionBreakpoint &&\n partMilliseconds <= maxPrecisionBreakpoint,\n };\n })\n .filter(part => part.available);\n }\n\n get value() {\n return super.value;\n }\n\n /**\n * 通过 property 设置 value 时, 支持 Date 类型.\n */\n set value(value: any) {\n const { from, to, durationInMilliseconds } = toDurationInMilliseconds(\n value,\n this.__minPrecision,\n );\n\n this.__from = from;\n this.__to = to;\n super.value = durationInMilliseconds;\n }\n\n private __initialValuePlain: any = null;\n\n get initialValue() {\n return super.initialValue;\n }\n\n /**\n * 同 value\n */\n set initialValue(value: any) {\n this.__initialValuePlain = value;\n\n const { durationInMilliseconds } = toDurationInMilliseconds(\n value,\n this.__minPrecision,\n );\n super.initialValue = durationInMilliseconds;\n }\n\n private __partsOptions: Partial<PartsOptions> | null = null;\n\n get partsOptions(): Partial<PartsOptions> {\n return super.partsOptions;\n }\n\n set partsOptions(value: Partial<PartsOptions>) {\n this.__partsOptions = value;\n super.partsOptions = {\n minPlaces: [2, undefined],\n ...this.__partsOptions,\n };\n }\n\n private __from: Date = new Date();\n\n private __to: Date = new Date();\n\n private __minPrecision: DurationPartType = DurationPartType.Second;\n\n private __maxPrecision: DurationPartType = DurationPartType.Day;\n\n private __availableDurationParts = [] as {\n type: DurationPartType;\n available: boolean;\n }[];\n\n private __dateTimeFieldLabels = {} as Record<DurationPartType, string>;\n\n override sampleSplit(\n samples: AvailableNumberAdapterValueType[],\n ): AvailableNumberAdapterValueType[][] {\n const availableDurationPartTypes = map(\n this.__availableDurationParts,\n part => part.type,\n );\n\n const tempParts = availableDurationPartTypes.map(() => [] as number[]);\n for (const n of samples) {\n const num = this.numberAdapter.toNumber(n);\n /**\n * 计算并保存每个在 {@link precision} 范围内的时间部分的值\n */\n const availablePartValues = duration(\n new Date(Math.min(num, 0)),\n new Date(Math.max(num, 0)),\n availableDurationPartTypes,\n );\n availablePartValues.forEach((value, i) => tempParts[i].push(value));\n }\n\n return tempParts;\n }\n\n override generateAriaLabel(): string {\n return iso8601Duration(\n durationObject(\n isBefore(this.__from, this.__to) ? this.__from : this.__to,\n isBefore(this.__from, this.__to) ? this.__to : this.__from,\n map(this.__availableDurationParts, part => part.type),\n ),\n );\n }\n\n override connectedCallback() {\n this.role = 'timer';\n\n /**\n * TimeredCounterDatetimeDuration 将 `minPlaces` 默认设置为 `[2]`. 实例化时需要手动触发 `partsOptions` 的 setter.\n */\n this.partsOptions = this.__partsOptions ?? {};\n\n this.initialValue = this.__initialValuePlain;\n\n /**\n * 类似上方的 partsOptions, precision 也需要在初始化时手动触发 setter. 以此确保 __minPrecision, __maxPrecision, __availableDurationParts 有值.\n */\n this.precision = this.__precision;\n\n super.connectedCallback();\n }\n\n override shouldRebuildParts(\n changedProperties: PropertyValues<this>,\n ): boolean {\n return (\n super.shouldRebuildParts(changedProperties) ||\n changedProperties.has('precision')\n );\n }\n\n override willUpdate(_changedProperties: PropertyValues) {\n super.willUpdate(_changedProperties);\n\n if (_changedProperties.has('locale')) {\n this.__dateTimeFieldLabels = getLocalizedDateTimeFields(\n this.localeInstance,\n );\n }\n }\n\n override render() {\n const cellStyles = this.extractCellStyles();\n const digitStyles = this.extractDigitStyles();\n const partStyles = this.extractPartStyles();\n\n const animationOptions = this.extractAnimationOptions();\n const keyframes = this.extractKeyframes();\n\n const availableDurationPartTypes = map(\n this.__availableDurationParts,\n part => part.type,\n );\n\n return html`\n <timered-counter-roller\n class=\"timered-counter timered-counter-datetime-duration\"\n exportparts=\"group, part, digit, cell, prefix, suffix, part-suffix\"\n part=\"group\"\n aria-hidden=\"true\"\n color=${this.color}\n .parentContainerRect=${this.partsContainerRect}\n .parts=${this.parts}\n .partPreprocessDataList=${this.partPreprocessDataList}\n .animationOptions=${animationOptions}\n .keyframes=${keyframes}\n .cellStyles=${cellStyles}\n .digitStyles=${digitStyles}\n .partStyles=${partStyles}\n .direction=${this.direction}\n @roller-animation-start=${this.dispatchTimeredCounterAnimationStart}\n @roller-animation-end=${this.dispatchTimeredCounterAnimationEnd}\n ><slot name=\"prefix\" slot=\"prefix\"></slot\n ><slot name=\"suffix\" slot=\"suffix\"></slot>${repeat(\n this.parts,\n (_, index) => index,\n (_, partIndex) =>\n html`<span slot=${`part-suffix-${partIndex}`} class=\"duration-unit\"\n >${this.__dateTimeFieldLabels[\n availableDurationPartTypes[partIndex]\n ]}</span\n >`,\n )}\n </timered-counter-roller>\n `;\n }\n}\n"]}
|
1
|
+
{"version":3,"file":"timered-counter-datetime-duration.js","sourceRoot":"","sources":["../../src/timered-counter-datetime-duration.ts"],"names":[],"mappings":"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","sourcesContent":["import { property } from 'lit/decorators.js';\nimport { html, PropertyValues } from 'lit';\nimport { repeat } from 'lit/directives/repeat.js';\nimport { isArray, isDate, isNullish, isString, map } from 'remeda';\nimport { isValid, toDate, isBefore } from 'date-fns';\nimport { TimeredCounter } from './timered-counter.js';\nimport { AvailableNumberAdapterValueType } from './number-adapter/index.js';\nimport { DurationPartMillisecond, DurationPartType } from './types/duration.js';\nimport { getLocalizedDateTimeFields } from './utils/localized-date-time-fields.js';\nimport { duration, durationObject } from './utils/duration.js';\nimport { iso8601Duration } from './utils/iso8601-duration.js';\nimport { timeredCounterDatetimeStyles } from './styles/timered-counter-datetime-styles.js';\nimport { parseJsonString } from './utils/parse-json-string.js';\nimport { PartsOptions } from './mixins/counter-parts.js';\nimport { graceDefineCustomElement } from './utils/grace-define-custom-element.js';\n\n/**\n * 根据最小精度对 from 进行优化. 避免频繁更新.\n *\n * 1. from 先会被减小到 minPrecisionMs 的整数倍.\n * 2. 加上 to 余 minPrecisionMs 的值, 保证 from 与 to 的差值是 minPrecisionMs 的整数倍.\n */\nfunction optimizeFrom(from: Date, to: Date, minPrecision: DurationPartType) {\n const minPrecisionMs = DurationPartMillisecond[minPrecision];\n const fromTS = from.getTime();\n const toTS = to.getTime();\n\n const base = fromTS - (fromTS % minPrecisionMs);\n\n return base + (toTS % minPrecisionMs);\n}\n\nfunction toDurationInMilliseconds(value: any, minPrecision: DurationPartType) {\n if (isString(value)) value = parseJsonString(value);\n\n if (!isArray(value)) value = [value, value];\n\n const result = [\n isDate(value[0]) ? value[0] : toDate(value[0]),\n isDate(value[1]) ? value[1] : toDate(value[1]),\n ] as const;\n\n if (!isValid(result[0]) || !isValid(result[1])) {\n throw new Error(`value ${value[0]} or ${value[1]} is not a valid date.`);\n }\n\n const durationInMilliseconds = Math.abs(\n result[1].getTime() - optimizeFrom(result[0], result[1], minPrecision),\n );\n\n return {\n durationInMilliseconds,\n from: result[0],\n to: result[1],\n };\n}\n\nexport class TimeredCounterDatetimeDuration extends TimeredCounter {\n static styles = [...TimeredCounter.styles, timeredCounterDatetimeStyles];\n\n private __precision: DurationPartType | [DurationPartType, DurationPartType] =\n [DurationPartType.Second, DurationPartType.Day];\n\n /**\n * 计数器显示的精度.\n * 1. 当为单个值时, 仅显示该精度的时间部分.\n * 2. 当为数组时, 第一个值表示最小精度, 第二个值表示最大精度.\n *\n * @default [DurationPartType.Second, DurationPartType.Day]\n *\n * @example DurationPartType.Second 显示从年份到秒数的所有精度.\n * @example [DurationPartType.Second, DurationPartType.Day] 显示从天数到秒数的所有精度.\n * @example [DurationPartType.Millisecond, DurationPartType.Year] 显示从年份到毫秒的所有精度.\n */\n @property({\n reflect: true,\n converter: value => {\n if (isNullish(value)) return value;\n\n return parseJsonString(value);\n },\n })\n get precision() {\n return this.__precision;\n }\n\n set precision(value: any) {\n if (isString(value)) value = parseJsonString(value);\n\n this.__precision = value;\n\n /**\n * `precision` 相关属性的更新需要立即更新, 以便于在 `value`, `initialValue` 等属性的 setter 中使用.\n */\n this.__minPrecision = isArray(this.__precision)\n ? this.__precision[0]\n : this.__precision;\n this.__maxPrecision = isArray(this.__precision)\n ? this.__precision[1]\n : this.__precision;\n\n this.__availableDurationParts = Object.values(DurationPartType)\n .reverse()\n .map(type => {\n const minPrecisionBreakpoint =\n DurationPartMillisecond[this.__minPrecision];\n const maxPrecisionBreakpoint =\n DurationPartMillisecond[this.__maxPrecision];\n const partMilliseconds = DurationPartMillisecond[type];\n return {\n type,\n available:\n partMilliseconds >= minPrecisionBreakpoint &&\n partMilliseconds <= maxPrecisionBreakpoint,\n };\n })\n .filter(part => part.available);\n }\n\n get value() {\n return super.value;\n }\n\n /**\n * 通过 property 设置 value 时, 支持 Date 类型.\n */\n set value(value: any) {\n const { from, to, durationInMilliseconds } = toDurationInMilliseconds(\n value,\n this.__minPrecision,\n );\n\n this.__from = from;\n this.__to = to;\n super.value = durationInMilliseconds;\n }\n\n private __initialValuePlain: any = null;\n\n get initialValue() {\n return super.initialValue;\n }\n\n /**\n * 同 value\n */\n set initialValue(value: any) {\n this.__initialValuePlain = value;\n\n const { durationInMilliseconds } = toDurationInMilliseconds(\n value,\n this.__minPrecision,\n );\n super.initialValue = durationInMilliseconds;\n }\n\n private __partsOptions: Partial<PartsOptions> | null = null;\n\n get partsOptions(): Partial<PartsOptions> {\n return super.partsOptions;\n }\n\n set partsOptions(value: Partial<PartsOptions>) {\n this.__partsOptions = value;\n super.partsOptions = {\n minPlaces: [2, undefined],\n ...this.__partsOptions,\n };\n }\n\n private __from: Date = new Date();\n\n private __to: Date = new Date();\n\n private __minPrecision: DurationPartType = DurationPartType.Second;\n\n private __maxPrecision: DurationPartType = DurationPartType.Day;\n\n private __availableDurationParts = [] as {\n type: DurationPartType;\n available: boolean;\n }[];\n\n private __dateTimeFieldLabels = {} as Record<DurationPartType, string>;\n\n override sampleSplit(\n samples: AvailableNumberAdapterValueType[],\n ): AvailableNumberAdapterValueType[][] {\n const availableDurationPartTypes = map(\n this.__availableDurationParts,\n part => part.type,\n );\n\n const tempParts = availableDurationPartTypes.map(() => [] as number[]);\n for (const n of samples) {\n const num = this.numberAdapter.toNumber(n);\n /**\n * 计算并保存每个在 {@link precision} 范围内的时间部分的值\n */\n const availablePartValues = duration(\n new Date(Math.min(num, 0)),\n new Date(Math.max(num, 0)),\n availableDurationPartTypes,\n );\n availablePartValues.forEach((value, i) => tempParts[i].push(value));\n }\n\n return tempParts;\n }\n\n override generateAriaLabel(): string {\n return iso8601Duration(\n durationObject(\n isBefore(this.__from, this.__to) ? this.__from : this.__to,\n isBefore(this.__from, this.__to) ? this.__to : this.__from,\n map(this.__availableDurationParts, part => part.type),\n ),\n );\n }\n\n override connectedCallback() {\n this.role = 'timer';\n\n /**\n * TimeredCounterDatetimeDuration 将 `minPlaces` 默认设置为 `[2]`. 实例化时需要手动触发 `partsOptions` 的 setter.\n */\n this.partsOptions = this.__partsOptions ?? {};\n\n this.initialValue = this.__initialValuePlain;\n\n /**\n * 类似上方的 partsOptions, precision 也需要在初始化时手动触发 setter. 以此确保 __minPrecision, __maxPrecision, __availableDurationParts 有值.\n */\n this.precision = this.__precision;\n\n super.connectedCallback();\n }\n\n override shouldRebuildParts(\n changedProperties: PropertyValues<this>,\n ): boolean {\n return (\n super.shouldRebuildParts(changedProperties) ||\n changedProperties.has('precision')\n );\n }\n\n override willUpdate(_changedProperties: PropertyValues) {\n super.willUpdate(_changedProperties);\n\n if (_changedProperties.has('locale')) {\n this.__dateTimeFieldLabels = getLocalizedDateTimeFields(\n this.localeInstance,\n );\n }\n }\n\n override render() {\n const cellStyles = this.extractCellStyles();\n const digitStyles = this.extractDigitStyles();\n const partStyles = this.extractPartStyles();\n\n const animationOptions = this.extractAnimationOptions();\n const keyframes = this.extractKeyframes();\n\n const availableDurationPartTypes = map(\n this.__availableDurationParts,\n part => part.type,\n );\n\n return html`\n <timered-counter-roller\n class=\"timered-counter timered-counter-datetime-duration\"\n exportparts=\"group, part, digit, cell, prefix, suffix, part-suffix\"\n part=\"group\"\n aria-hidden=\"true\"\n color=${this.color}\n .parentContainerRect=${this.partsContainerRect}\n .parts=${this.parts}\n .partPreprocessDataList=${this.partPreprocessDataList}\n .animationOptions=${animationOptions}\n .keyframes=${keyframes}\n .cellStyles=${cellStyles}\n .digitStyles=${digitStyles}\n .partStyles=${partStyles}\n .direction=${this.direction}\n @roller-animation-start=${this.dispatchTimeredCounterAnimationStart}\n @roller-animation-end=${this.dispatchTimeredCounterAnimationEnd}\n ><slot name=\"prefix\" slot=\"prefix\"></slot\n ><slot name=\"suffix\" slot=\"suffix\"></slot>${repeat(\n this.parts,\n (_, index) => index,\n (_, partIndex) =>\n html`<span slot=${`part-suffix-${partIndex}`} class=\"duration-unit\"\n >${this.__dateTimeFieldLabels[\n availableDurationPartTypes[partIndex]\n ]}</span\n >`,\n )}\n </timered-counter-roller>\n `;\n }\n}\n\ngraceDefineCustomElement(\n 'timered-counter-datetime-duration',\n TimeredCounterDatetimeDuration,\n);\n"]}
|